{"version":3,"file":"Serenity.CoreLib.js","sourceRoot":"","sources":["../CoreLib/Imports/Helpers.ts","../CoreLib/Imports/RSVP.ts","../CoreLib/Imports/Promise.ts","../CoreLib/Imports/Select2.ts","../CoreLib/Imports/SS.ts","../CoreLib/Imports/jQueryStatic.ts","../CoreLib/Imports/JQBlockUI.ts","../CoreLib/Services/ServiceError.ts","../CoreLib/Services/ServiceResponse.ts","../CoreLib/Q/Q.BasicUtils.ts","../CoreLib/Q/Q.Formatting.ts","../CoreLib/Q/Q.LocalText.ts","../CoreLib/Q/Q.Lookup.ts","../CoreLib/Q/Q.BlockUI.ts","../CoreLib/Q/Q.Html.ts","../CoreLib/Q/Q.Dialogs.ts","../CoreLib/Q/Q.Notify.ts","../CoreLib/Q/Q.ErrorHandling.ts","../CoreLib/Q/Q.Config.ts","../CoreLib/Q/Q.Services.ts","../CoreLib/Q/Q.LayoutTimer.ts","../CoreLib/Q/Q.Layout.ts","../CoreLib/Q/Q.ScriptData.ts","../CoreLib/Q/Q.TypeSystem.ts","../CoreLib/Q/Q.Authorization.ts","../CoreLib/Q/Q.Router.ts","../CoreLib/Decorators/Decorators.ts","../CoreLib/Services/Criteria.ts","../CoreLib/UI/Helpers/SlickHelpers.ts","../CoreLib/UI/Helpers/LazyLoadHelper.ts","../CoreLib/UI/Helpers/SubDialogHelper.ts","../CoreLib/UI/Helpers/TabsExtensions.ts","../CoreLib/UI/Helpers/UploadHelper.ts","../CoreLib/UI/Widgets/Widget.ts","../CoreLib/UI/Helpers/ValidationHelper.ts","../CoreLib/UI/Widgets/TemplatedWidget.ts","../CoreLib/UI/PropertyGrid/IBooleanValue.ts","../CoreLib/UI/PropertyGrid/IDoubleValue.ts","../CoreLib/UI/PropertyGrid/IGetEditValue.ts","../CoreLib/UI/PropertyGrid/ISetEditValue.ts","../CoreLib/UI/PropertyGrid/IStringValue.ts","../CoreLib/UI/PropertyGrid/IReadOnly.ts","../CoreLib/UI/PropertyGrid/PropertyItem.ts","../CoreLib/UI/Editors/DateEditor.ts","../CoreLib/UI/Editors/DateTimeEditor.ts","../CoreLib/UI/Widgets/Select2Editor.ts","../CoreLib/UI/Editors/DateYearEditor.ts","../CoreLib/UI/Editors/LookupEditor.ts","../CoreLib/UI/Editors/Editors.ts","../CoreLib/UI/Filtering/FilterOperator.ts","../CoreLib/UI/Filtering/FilterLine.ts","../CoreLib/UI/Filtering/FilterStore.ts","../CoreLib/UI/Filtering/Filtering.ts","../CoreLib/UI/Filtering/FilterWidgetBase.ts","../CoreLib/UI/Filtering/FilterDisplayBar.ts","../CoreLib/UI/Filtering/FilterPanel.ts","../CoreLib/UI/Filtering/QuickFilter.ts","../CoreLib/UI/Filtering/QuickSearchInput.ts","../CoreLib/UI/Formatters/Formatters.ts","../CoreLib/UI/Widgets/Flexify.ts","../CoreLib/UI/Widgets/EnumTypeRegistry.ts","../CoreLib/UI/Widgets/Widgets.ts","../CoreLib/UI/Widgets/WX.ts","../CoreLib/UI/PropertyGrid/PropertyGrid.ts","../CoreLib/UI/Widgets/Toolbar.ts","../CoreLib/UI/Widgets/CreateWidgetParams.ts","../CoreLib/UI/Widgets/CustomValidation.ts","../CoreLib/UI/Widgets/IValidateRequired.ts","../CoreLib/UI/Widgets/DataChangeInfo.ts","../CoreLib/UI/Dialogs/TemplatedDialog.ts","../CoreLib/UI/Dialogs/PropertyDialog.ts","../CoreLib/UI/Filtering/FilterDialog.ts","../CoreLib/UI/Filtering/QuickFilterBar.ts","../CoreLib/UI/DataGrid/DataGrid.ts","../CoreLib/UI/Widgets/EntityGrid.ts","../CoreLib/UI/Editors/CheckTreeEditor.ts","../CoreLib/UI/Widgets/TemplatedPanel.ts","../CoreLib/UI/Widgets/PropertyPanel.ts","../CoreLib/UI/Dialogs/EntityDialog.ts","../CoreLib/UI/Widgets/Reporting.ts","../CoreLib/UI/DataGrid/ColumnPickerDialog.ts","../CoreLib/UI/DataGrid/TreeGridMixin.ts","../CoreLib/UI/jQuery/jQuery.FlexifyPlugin.ts","../CoreLib/UI/jQuery/jQuery.WidgetPlugin.ts","../CoreLib/UI/jQuery/jQueryUI.ButtonNoConflict.ts","../CoreLib/Externals/Serenity.Externals.Slick.ts","../CoreLib/Externals/Serenity.Externals.ts","../CoreLib/UI/Serenity.Script.UI.ts"],"names":[],"mappings":"AACA,IAAI,UAAU,GAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,UAAe,EAAE,MAAW,EAAE,GAAQ,EAAE,IAAS;IAC1G,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7H,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;QAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;;QAC1H,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;gBAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAClJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,IAAM,aAAa,GAAG;IAClB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,oBAAoB,EAAE,IAAI;CAC7B,CAAA;AAED,IAAI,SAAS,GAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAM,EAAE,CAAM;IACrE,KAAK,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,SAAS,EAAE,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAK,EAAU,EAAE,CAAC,CAAC;AAClG,CAAC,CAAC;AACF,IAAI,QAAQ,GAAI,MAAc,CAAC,MAAM,IAAI,UAAU,CAAM;IACrD,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACjD,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACjB,KAAK,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAChF;IACD,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AACF,IAAI,MAAM,GAAG,UAAU,CAAM,EAAE,CAAM;IACjC,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/E,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,IAAI,IAAI,IAAI,OAAQ,MAAc,CAAC,qBAAqB,KAAK,UAAU;QACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAY,MAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC5G,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AACF,IAAI,cAAc,GAAG;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpF,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAC5C,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7D,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,CAAC,CAAC;AACb,CAAC,CAAC;AEzCF;;GAEG;AAyCH,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;IAChC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;QAC/B,OAAO,GAAG,IAAW,CAAC;KACzB;SACI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,EAAE;QACtC,OAAO,GAAG,CAAC,CAAC,QAAe,CAAC;QAC3B,OAAe,CAAC,OAAO,GAAG,UAAU,KAAW;YAC5C,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAA;KACJ;CACJ;AE3BD,oCAAoC;AACnC,EAAU,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AK1BxC,IAAU,CAAC,CAqYV;AArYD,WAAU,CAAC;IAIP,SAAgB,QAAQ,CAAC,CAAM,EAAE,CAAM;QACnC,OAAQ,EAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IAFe,UAAQ,WAEvB,CAAA;IAED,SAAgB,OAAO,CAAC,CAAM;QAC1B,OAAQ,EAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAFe,SAAO,UAEtB,CAAA;IAED;;WAEO;IACP,SAAgB,GAAG,CAAQ,KAAc,EAAE,SAAgC;QACvE,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;YAAd,IAAI,CAAC,cAAA;YACN,IAAI,SAAS,CAAC,CAAC,CAAC;gBACZ,OAAO,IAAI,CAAC;SAAA;QAEpB,OAAO,KAAK,CAAC;IACjB,CAAC;IANe,KAAG,MAMlB,CAAA;IAED;;OAEG;IACH,SAAgB,KAAK,CAAQ,KAAc,EAAE,SAAgC;QACzE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;YAAd,IAAI,CAAC,cAAA;YACN,IAAI,SAAS,CAAC,CAAC,CAAC;gBACZ,KAAK,EAAE,CAAC;SAAA;QAEhB,OAAO,KAAK,CAAC;IACjB,CAAC;IAPe,OAAK,QAOpB,CAAA;IAED;;;OAGG;IACH,SAAgB,KAAK,CAAQ,KAAc,EAAE,SAAgC;QACzE,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;YAAd,IAAI,CAAC,cAAA;YACN,IAAI,SAAS,CAAC,CAAC,CAAC;gBACZ,OAAO,CAAC,CAAC;SAAA;QAEjB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAClE,CAAC;IANe,OAAK,QAMpB,CAAA;IAED;;OAEG;IACH,SAAgB,OAAO,CAAQ,KAAc,EAAE,SAAgC;QAC3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YACjC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,OAAO,CAAC,CAAC;QAEjB,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IANe,SAAO,UAMtB,CAAA;IAED;;OAEG;IACH,SAAgB,MAAM,CAAQ,KAAc,EAAE,KAAa,EAAE,IAAW;QACnE,EAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAFe,QAAM,SAErB,CAAA;IAED;;OAEG;IACH,SAAgB,OAAO,CAAC,GAAQ;QAC5B,OAAQ,EAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAFe,SAAO,UAEtB,CAAA;IAED;;;MAGE;IACF,SAAgB,MAAM,CAAQ,KAAc,EAAE,SAAgC;QAC1E,IAAI,KAAU,CAAC;QACf,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;YAAd,IAAI,CAAC,cAAA;YACN,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;gBACd,IAAI,KAAK;oBACL,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBAEvE,KAAK,GAAG,IAAI,CAAC;gBACb,KAAK,GAAG,CAAC,CAAC;aACb;SAAA;QAEL,IAAI,CAAC,KAAK;YACN,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAElE,OAAO,KAAK,CAAC;IACjB,CAAC;IAhBe,QAAM,SAgBrB,CAAA;IAED;;;OAGG;IACH,SAAgB,UAAU,CAAQ,KAAc,EAAE,MAAyB;QACvE,IAAI,MAAM,GAAoB,EAAE,CAAC;QACjC,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;YAAhB,IAAI,CAAC,cAAA;YACN,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,EAAE;gBACJ,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;aACxB;YAED,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAZe,YAAU,aAYzB,CAAA;IAeD;;;OAGG;IACH,SAAgB,OAAO,CAAQ,KAAc,EAAE,MAAyB;QACpE,IAAI,MAAM,GAAkB;YACxB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,EAAE;SACd,CAAC;QAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC/C,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,KAAK,GAAG;oBACJ,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;oBAC5B,GAAG,EAAE,GAAG;oBACR,KAAK,EAAE,CAAC,IAAI,CAAC;oBACb,KAAK,EAAE,KAAK;iBACf,CAAA;gBACD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9B;iBACI;gBACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1B;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IA1Be,SAAO,UA0BtB,CAAA;IAED;;;OAGG;IACH,SAAgB,QAAQ,CAAQ,KAAc,EAAE,SAAgC;QAC5E,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;YAAd,IAAI,CAAC,cAAA;YACN,IAAI,SAAS,CAAC,CAAC,CAAC;gBACZ,OAAO,CAAC,CAAC;SAAA;IACrB,CAAC;IAJe,UAAQ,WAIvB,CAAA;IAED,SAAgB,QAAQ,CAAC,CAAS,EAAE,MAAc;QAC9C,OAAQ,EAAU,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAFe,UAAQ,WAEvB,CAAA;IAED,SAAgB,aAAa,CAAC,CAAS;QACnC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACvC,CAAC;IAFe,eAAa,gBAE5B,CAAA;IAED,SAAgB,cAAc,CAAC,CAAS;QACpC,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAFe,gBAAc,iBAE7B,CAAA;IAED,SAAgB,MAAM,CAAC,GAAW;;QAAE,aAAa;aAAb,UAAa,EAAb,qBAAa,EAAb,IAAa;YAAb,4BAAa;;QAC7C,OAAO,CAAA,KAAC,EAAU,CAAA,CAAC,YAAY,2BAAC,GAAG,GAAK,GAAG,GAAE;IACjD,CAAC;IAFe,QAAM,SAErB,CAAA;IAED,SAAgB,OAAO,CAAC,CAAS,EAAE,GAAW,EAAE,EAAgB;QAAhB,mBAAA,EAAA,QAAgB;QAC5D,OAAO,CAAC,CAAC,MAAM,GAAG,GAAG;YACjB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,CAAC;IACb,CAAC;IAJe,SAAO,UAItB,CAAA;IAED,SAAgB,UAAU,CAAC,CAAS,EAAE,MAAc;QAChD,OAAQ,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAFe,YAAU,aAEzB,CAAA;IAED,SAAgB,YAAY,CAAC,GAAW;QACpC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACvF,CAAC;IAFe,cAAY,eAE3B,CAAA;IAED,SAAgB,IAAI,CAAC,CAAS;QAC1B,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IAFe,MAAI,OAEnB,CAAA;IAED,SAAgB,WAAW,CAAC,CAAS;QACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,EAAE,CAAC;SACb;QAED,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IANe,aAAW,cAM1B,CAAA;IAED,SAAgB,UAAU,CAAC,CAAS;QAChC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC;SACf;QAED,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAChB,OAAO,IAAI,CAAC;SACf;aACI;YACD,OAAO,CAAC,CAAC;SACZ;IACL,CAAC;IAZe,YAAU,aAYzB,CAAA;IAED,IAAI,YAAgB,CAAC;IAErB,SAAgB,oBAAoB,CAAC,CAAS,EAAE,CAAS;QACrD,IAAI,QAAQ,GAAG,wDAAwD,CAAC;QACxE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC;YACN,OAAO,CAAC,CAAC;QACb,IAAI,CAAC,YAAY,EAAE;YACf,YAAY,GAAG,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC5C;SACJ;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAChE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC;gBACP,SAAS;YACb,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI;gBACxB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC;gBACN,SAAS;YACb,OAAO,CAAC,CAAC;SACZ;QACD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAzBe,sBAAoB,uBAyBnC,CAAA;IAED,SAAgB,oBAAoB,CAAC,CAAS;QAC1C,IAAI,CAAC,CAAC;YACF,OAAO,CAAC,CAAC;QACb,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,CAAC;IAJe,sBAAoB,uBAInC,CAAA;IAED,SAAgB,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACtD,OAAQ,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAFe,YAAU,aAEzB,CAAA;IAED,SAAgB,OAAO,CAAC,CAAS,EAAE,MAAc;QAC7C,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM;YACpB,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,CAAC;IACb,CAAC;IALe,SAAO,UAKtB,CAAA;IAED;;;;;;;;OAQG;IACH,SAAgB,QAAQ,CAAC,IAAc,EAAE,IAAa,EAAE,SAAmB;QACvE,IAAI,OAAe,EAAE,IAAgB,EAAE,OAAY,EAAE,SAAiB,EAAE,MAAW,CAAC;QACpF,IAAI,IAAI,IAAI,IAAI;YAAE,IAAI,GAAG,GAAG,CAAC;QAE7B,SAAS,KAAK;YACV,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAElC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE;gBAC1B,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;aAC5C;iBAAM;gBACH,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,CAAC,SAAS,EAAE;oBACZ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBACnC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;iBACzB;aACJ;QACL,CAAC;QAAA,CAAC;QAEF,IAAI,SAAS,GAAG;YACZ,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,GAAG,SAAS,CAAC;YACjB,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,OAAO,GAAG,SAAS,IAAI,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,OAAO;gBAAE,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,OAAO,EAAE;gBACT,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;aACzB;YAED,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC;QAED,SAAiB,CAAC,KAAK,GAAG;YACvB,IAAI,OAAO,EAAE;gBACT,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,GAAG,IAAI,CAAC;aAClB;QACL,CAAC,CAAC;QAED,SAAiB,CAAC,KAAK,GAAG;YACvB,IAAI,OAAO,EAAE;gBACT,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACnC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;gBAEtB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,GAAG,IAAI,CAAC;aAClB;QACL,CAAC,CAAC;QAEF,OAAO,SAAS,CAAC;IACrB,CAAC;IAlDe,UAAQ,WAkDvB,CAAA;IAAA,CAAC;IAEF,6FAA6F;IAC7F,SAAgB,SAAS,CAAQ,IAAW;QAAE,cAAgB;aAAhB,UAAgB,EAAhB,qBAAgB,EAAhB,IAAgB;YAAhB,6BAAgB;;QAC1D,IAAI,OAAY,EACZ,IAAY,EACZ,GAAQ,EACR,IAAS,EACT,WAAoB,EACpB,KAAU,EACV,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAC3B,CAAC,GAAG,CAAC,EACL,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAE9B,2EAA2E;QAC3E,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACrD,MAAM,GAAG,EAAE,CAAC;SACf;QACD,IAAI,CAAC,KAAK,MAAM,EAAE;YACd,MAAM,GAAG,EAAE,CAAC;YACZ,CAAC,GAAG,CAAC,CAAC;SACT;QACD,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;YACpB,2CAA2C;YAC3C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACnC,gCAAgC;gBAChC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACpB,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;iBACxC;qBACI;oBACD,yBAAyB;oBACzB,KAAK,IAAI,IAAI,OAAO,EAAE;wBAClB,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;wBACnB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;wBACrB,4BAA4B;wBAC5B,IAAI,MAAM,KAAK,IAAI,EAAE;4BACjB,SAAS;yBACZ;wBACD,mDAAmD;wBACnD,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;4BAC9B,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;4BAClC,IAAI,WAAW,EAAE;gCACb,WAAW,GAAG,KAAK,CAAC;gCACpB,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC5C;iCACI;gCACD,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;6BAClD;4BACD,0CAA0C;4BAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;yBACzC;6BACI,IAAI,IAAI,KAAK,SAAS,EAAE;4BACzB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;yBACvB;qBACJ;iBACJ;aACJ;SACJ;QACD,6BAA6B;QAC7B,OAAO,MAAM,CAAC;IAClB,CAAC;IAzDe,WAAS,YAyDxB,CAAA;AACL,CAAC,EArYS,CAAC,KAAD,CAAC,QAqYV;ACrYD,IAAU,CAAC,CAgeV;AAheD,WAAU,CAAC;IACP,IAAiB,OAAO,CAyBvB;IAzBD,WAAiB,OAAO;QACT,wBAAgB,GAAG,GAAG,CAAC;QACvB,qBAAa,GAAG,GAAG,CAAC;QACpB,iBAAS,GAAG,KAAK,CAAC;QAClB,kBAAU,GAAG,YAAY,CAAC;QAC1B,sBAAc,GAAG,qBAAqB,CAAC;QAElD,SAAgB,kBAAkB;YAC9B,OAAO,CAAC,CAAC,QAAA,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;QAFe,0BAAkB,qBAEjC,CAAA;QAAA,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,IAAI,EAAE;YACX,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,gBAAgB,IAAI,IAAI;gBAC3B,QAAA,gBAAgB,GAAG,EAAE,CAAC,gBAAgB,CAAC;YAC3C,IAAI,EAAE,CAAC,aAAa,IAAI,IAAI;gBACxB,QAAA,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC;YACrC,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI;gBACpB,QAAA,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;YAC7B,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI;gBACrB,QAAA,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;YAC/B,IAAI,EAAE,CAAC,cAAc,IAAI,IAAI;gBACzB,QAAA,cAAc,GAAG,EAAE,CAAC,cAAc,CAAC;SAC1C;IACL,CAAC,EAzBgB,OAAO,GAAP,SAAO,KAAP,SAAO,QAyBvB;IAED,SAAgB,YAAY,CAAC,CAAS,EAAE,GAAW,EAAE,GAAY,EAAE,GAAY;QAC3E,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YACV,OAAO,IAAI,CAAC;SACf;QAED,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;QACtC,GAAG,GAAG,GAAG,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAE1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;YACvB,IAAI,EAAE,GAAG,GAAG,CAAC;YACb,IAAI,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;oBAC5C,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACnB,SAAS;iBACZ;qBACI,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;oBACjD,IAAI,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;wBAC1B,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBACnB,SAAS;qBACZ;;wBAEG,MAAM;iBACb;qBACI,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;oBACxB,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;oBAEnB,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aAC1B;YACD,CAAC,IAAI,EAAE,CAAC;SACX;;YAEG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC;YACL,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,EAAE,GAAG,GAAG,CAAC;;YAET,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5C,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;YACjD,wCAAwC;YACxC,IAAI,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,IAAI,EAAE,GAAG,IAAI,CAAC;YACd,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,EAAE,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1C,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC5B,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;oBACpB,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;oBACd,EAAE,GAAG,CAAC,CAAC;iBACV;aACJ;YAED,mCAAmC;YACnC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE;gBACvB,IAAI,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,QAAQ,IAAI,CAAC,CAAC,EAAE;oBAChB,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,QAAQ,CAAC;oBAClC,qCAAqC;oBACrC,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;oBACpC,OAAO,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE;wBACvB,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACxB,yCAAyC;wBACzC,IAAI,EAAE,IAAI,GAAG;4BACT,EAAE,GAAG,GAAG,CAAC;wBACb,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;wBACb,GAAG,EAAE,CAAC;qBACT;iBACJ;aACJ;SACJ;QAED,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC5C,EAAE,GAAG,GAAG,CAAC;QAEb,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,GAAG,CAAC;YACL,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YACpC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SACpC;QAED,OAAO,CAAC,CAAC;IACb,CAAC;IAlGe,cAAY,eAkG3B,CAAA;IAED,SAAgB,YAAY,CAAC,CAAS;QAClC,CAAC,GAAG,EAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;YACpC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,iBAAiB,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;SACtF;QACD,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,GAAG,CAAC;QACf,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IATe,cAAY,eAS3B,CAAA;IAED,SAAgB,YAAY,CAAC,CAAS;QAClC,IAAI,CAAC,IAAI,IAAI;YACT,OAAO,IAAI,CAAC;QAEhB,CAAC,GAAG,EAAA,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC;YACb,OAAO,IAAI,CAAC;QAEhB,IAAI,EAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;YACpC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,iBAAiB,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;SACtF;QAED,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3F,OAAO,GAAG,CAAC;QAEf,OAAO,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAlBe,cAAY,eAkB3B,CAAA;IAED,SAAS,WAAW,CAAC,CAAS,EAAE,GAAY;QACxC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvD,sCAAsC;QACtC,IAAI,GAAG,GAAG,CAAC,EAAE;YACT,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE;gBACV,KAAK,IAAI,GAAG,CAAC;gBACb,EAAE,GAAG,CAAC,CAAC;aACV;iBACI;gBACD,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;aAChC;YACD,OAAO,EAAE,GAAG,GAAG,EAAE;gBACb,KAAK,IAAI,GAAG,CAAC;gBACb,EAAE,EAAE,CAAC;aACR;SACJ;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,SAAgB,IAAI,CAAC,EAAO;QACxB,IAAI,EAAE,IAAI,IAAI;YACV,OAAO,IAAI,CAAC;QAChB,IAAI,OAAO,EAAE,IAAI,QAAQ;YACrB,OAAO,EAAE,CAAC;QACd,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM;YACxB,OAAO,IAAI,CAAC;QAChB,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,KAAK,CAAC,CAAC,CAAC;YACR,OAAO,EAAE,CAAC;QACd,OAAO,CAAC,CAAC;IACb,CAAC;IAde,MAAI,OAcnB,CAAA;IAED,SAAgB,UAAU,CAAC,CAAgB,EAAE,MAAe;QACxD,IAAI,CAAC,CAAC,EAAE;YACJ,OAAO,EAAE,CAAC;SACb;QAED,IAAI,IAAU,CAAC;QACf,IAAI,OAAO,CAAC,IAAI,QAAQ,EAAE;YACtB,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG;gBACJ,OAAO,CAAC,CAAC;YACb,IAAI,GAAG,GAAW,CAAC;SACtB;;YAEG,IAAI,GAAG,CAAC,CAAC;QAEb,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,GAAG,EAAE;YACjC,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;SAC/B;aACI;YACD,QAAQ,MAAM,EAAE;gBACZ,KAAK,GAAG;oBAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAAC,MAAM;gBACpE,KAAK,GAAG;oBAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;oBAAC,MAAM;gBACjD,KAAK,GAAG;oBAAE,MAAM,GAAG,qBAAqB,CAAC;oBAAC,MAAM;gBAChD,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;aACjD;SACJ;QAED,IAAI,GAAG,GAAG,UAAU,CAAS;YACzB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,mDAAmD,EAAE,GAAG,CAAC,EACtF,UAAU,GAAG;YACT,QAAQ,GAAG,EAAE;gBACT,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,aAAa,CAAC;gBACvC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3F,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrF,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvC,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACzC,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACzC,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC7D,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtC,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAC3C,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC3C,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gBACrC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACtD,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzD,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxD,KAAK,KAAK,CAAC;gBACX,KAAK,IAAI,CAAC;gBACV,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;aACvB;QACL,CAAC,CACJ,CAAC;IACN,CAAC;IA3De,YAAU,aA2DzB,CAAA;IAED,SAAgB,mBAAmB,CAAC,CAAS;QACzC,IAAI,CAAC,KAAK,CAAC;YACP,OAAO,GAAG,CAAC;aACV,IAAI,CAAC,CAAC;YACP,OAAO,EAAE,CAAC;QACd,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,IAAI,GAAG,CAAC,EAAE;YACV,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;SAC1B;QACD,IAAI,IAAI,GAAG,EAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,EAAA,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACrF,IAAI,IAAI,IAAI,OAAO,EAAE;YACjB,IAAI,IAAI,GAAG,CAAC;gBACR,GAAG,IAAI,GAAG,CAAC;YACf,GAAG,IAAI,IAAI,CAAC;SACf;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAjBe,qBAAmB,sBAiBlC,CAAA;IAED,SAAgB,oBAAoB,CAAC,CAAO;QACxC,IAAI,CAAC,IAAI,IAAI;YACT,OAAO,EAAE,CAAC;QACd,IAAI,OAAO,GAAG,UAAU,GAAW,IAAI,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,IAAI,GAAG,GAAG,CAAC,CAAC,cAAc,EAAE,GAAG,GAAG;YAC9B,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG;YAClC,OAAO,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,GAAG;YAC7B,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG;YAC9B,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,GAAG;YACrC,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACrC,GAAG,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;QACjC,OAAO,GAAG,CAAC;IACf,CAAC;IAde,sBAAoB,uBAcnC,CAAA;IAED,IAAI,SAAS,GAAG,sIAAsI,CAAC;IAEvJ,SAAgB,gBAAgB,CAAC,CAAS;QACtC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YACf,OAAO,IAAI,CAAC;QAEhB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC;SACf;QAED,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE;YAC7C,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW,EAAE,IAAY,CAAC;QACnG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE5B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;YACjD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;SACzB;QAED,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACjC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;YACjD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;SACrC;QAED,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5B,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3B,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnF,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;YACjD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACzD;aACI;YACD,IAAI,GAAG,CAAC,CAAC;SACZ;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;YACxG,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC3D;QAED,IAAI,GAAW,CAAC;QAChB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE;YACjD,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC;YACtC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnD,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;aACxC;YACD,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;gBACf,GAAG,GAAG,CAAC,GAAG,CAAC;aACd;SACJ;aACI;YACD,GAAG,GAAG,CAAC,CAAC;SACX;QACD,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5E,CAAC;IAxDe,kBAAgB,mBAwD/B,CAAA;IAED,SAAgB,eAAe,CAAC,KAAa;QACzC,IAAI,CAAC,GAAG,EAAA,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAC5B,OAAO,GAAG,CAAC;QACf,IAAI,CAAS,EAAE,CAAS,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;YACpB,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACpC;aACI;YACD,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;gBAClB,OAAO,GAAG,CAAC;YACf,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SACpC;QACD,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1D,OAAO,GAAG,CAAC;QACf,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;IAlBe,iBAAe,kBAkB9B,CAAA;IAED,SAAgB,kBAAkB,CAAC,CAAS;QACxC,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC,GAAG,EAAA,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,CAAC;YACF,OAAO,GAAG,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAC7B,OAAO,GAAG,CAAC;QACf,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;YACf,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACZ,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;YAC1B,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAChC;aACI;YACD,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,GAAG,CAAC;YACf,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;SAC9B;IACL,CAAC;IArBe,oBAAkB,qBAqBjC,CAAA;IAED,SAAgB,SAAS,CAAC,CAAS,EAAE,SAAkB;QACnD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YACf,OAAO,IAAI,CAAC;QAEhB,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;YAC5D,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;YAC9D,IAAI,GAAG,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,GAAG,IAAI,IAAI;gBACX,OAAO,KAAK,CAAC;YACjB,OAAO,GAAG,CAAC;SACd;QAED,IAAI,OAAY,CAAC;QACjB,IAAI,MAAW,CAAC;QAChB,IAAI,CAAS,EAAE,CAAS,EAAE,CAAS,CAAC;QACpC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM;YACP,OAAO,KAAK,CAAC;QAEjB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YACpB,SAAS,GAAG,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;YAC3C,QAAQ,SAAS,EAAE;gBACf,KAAK,KAAK;oBACN,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAChC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,MAAM;gBACV,KAAK,KAAK;oBACN,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAChC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,MAAM;gBACV,KAAK,KAAK,CAAC;gBACX;oBACI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAChC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,MAAM;aACb;YAED,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;gBAC3F,OAAO,KAAK,CAAC;YAEjB,IAAI,CAAC,GAAG,GAAG,EAAE;gBACT,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACxC,IAAI,eAAe,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBAC5C,CAAC,IAAI,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACtE;YACD,IAAI;gBACA,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC5B,OAAO,KAAK,CAAC;aACpB;YACD,OAAO,CAAC,EAAE;gBACN,OAAO,KAAK,CAAC;aAChB;SACJ;aACI,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YACzB,IAAI;gBACA,OAAO,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC5B,OAAO,KAAK,CAAC;aACpB;YACD,OAAO,CAAC,EAAE;gBACN,OAAO,KAAK,CAAC;aAChB;SACJ;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IApEe,WAAS,YAoExB,CAAA;IAED,SAAgB,eAAe,CAAC,CAAS;QACrC,CAAC,GAAG,EAAA,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,CAAC,CAAC,MAAM;YACT,OAAO;QACX,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YACxB,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aACnB,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;YAErB,OAAO,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAde,iBAAe,kBAc9B,CAAA;AACL,CAAC,EAheS,CAAC,KAAD,CAAC,QAgeV;ACheD,IAAU,CAAC,CAuJV;AAvJD,WAAU,CAAC;IAEP,SAAgB,IAAI,CAAC,GAAW;QAC5B,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,IAAI,EAAE;YACX,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;SACjB;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IANe,MAAI,OAMnB,CAAA;IAED,SAAgB,MAAM,CAAC,MAAc;QACjC,OAAO,UAAU,GAAW;YACxB,OAAO,IAAI,CAAC,KAAK,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAA;IACL,CAAC;IAJe,QAAM,SAIrB,CAAA;IAED,SAAgB,YAAY,CAAC,MAAc;QAEvC,OAAO,UAAU,IAAY,EAAE,GAAsC;YAEjE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBAC1C,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,OAAO,KAAK,CAAC;iBAChB;aACJ;YAED,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBACzC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACzB;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;gBAC1B,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBACxE,IAAI,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,SAAS,IAAI,IAAI,EAAE;oBACnB,OAAO,SAAS,CAAC;iBACpB;aACJ;YAED,OAAO,IAAI,CAAC;QAChB,CAAC,CAAA;IACL,CAAC;IAzBe,cAAY,eAyB3B,CAAA;IAED,SAAgB,UAAU,CAAC,GAAW;QAClC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAFe,YAAU,aAEzB,CAAA;IAED,SAAgB,SAAS,CAAC,MAAc;QACpC,OAAO,UAAU,GAAW;YACxB,OAAO,IAAI,CAAC,KAAK,GAAG,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAA;IACL,CAAC;IAJe,WAAS,YAIxB,CAAA;IAED,SAAgB,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACtD,IAAI,OAAO,MAAM,IAAI,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE;YACjD,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC1B,GAAG,EAAE,UAAC,CAAS,EAAE,CAAS;oBACtB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACd,IAAI,EAAE,IAAI,IAAI;wBACV,OAAO;oBACX,IAAI,OAAO,EAAE,IAAI,QAAQ;wBACrB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;yBACpB;wBACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBACb,IAAI,CAAC,IAAI,IAAI;4BACT,OAAO,CAAC,CAAC;wBACb,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;wBAC3C,OAAO,CAAC,CAAC;qBACZ;gBACL,CAAC;gBACD,OAAO,EAAE,UAAC,CAAS,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAd,CAAc;aACzC,CAAC,CAAC;SACN;aACI;YACD,KAAc,UAAc,EAAd,KAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAd,cAAc,EAAd,IAAc,EAAE;gBAAzB,IAAI,CAAC,SAAA;gBACN,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ;oBACvB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE;wBACxB,GAAG,EAAE,cAAM,OAAA,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAb,CAAa;qBAC3B,CAAC,CAAC;;oBAEH,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD;YACD,OAAO,CAAC,CAAC;SACZ;IACL,CAAC;IA/Be,YAAU,aA+BzB,CAAA;IAED;QAII,YAAoB,GAAW;YAAX,QAAG,GAAH,GAAG,CAAQ;QAC/B,CAAC;QAEM,MAAG,GAAV,UAAW,GAAQ,EAAE,GAAY;YAC7B,IAAI,CAAC,GAAG,EAAE;gBACN,OAAO;aACV;YACD,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;YAChB,KAAc,UAAgB,EAAhB,KAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAhB,cAAgB,EAAhB,IAAgB,EAAE;gBAA3B,IAAI,CAAC,SAAA;gBACN,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;gBACrB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBACzB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;iBAC3B;qBACI;oBACD,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBACzB;aACJ;QACL,CAAC;QAED,gBAAG,GAAH;YACI,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,IAAI,EAAE;gBACX,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;aACtB;YACD,OAAO,CAAC,CAAC;QACb,CAAC;QAED,qBAAQ,GAAR;YACI,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,IAAI,EAAE;gBACX,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;aACtB;YACD,OAAO,CAAC,CAAC;QACb,CAAC;QArCM,SAAM,GAA8B,EAAE,CAAC;QACvC,QAAK,GAAO,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAsCvB,sBAAmB,GAAG,UAAU,IAAS,EAAE,MAAc;YAC5D,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YACpC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBACvC,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBACzB,IAAI,KAAK,YAAY,EAAE,EAAE;oBACrB,IAAI,EAAE,GAAG,KAAK,CAAC;oBACf,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;oBAC1B,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;oBACxB,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;iBAC9B;aACJ;QACL,CAAC,CAAA;QAEM,aAAU,GAAG,UAAU,GAAW,EAAE,WAAmB;YAC1D,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,IAAI,IAAI,EAAE;gBACX,CAAC,GAAG,WAAW,CAAC;gBAChB,IAAI,CAAC,IAAI,IAAI,EAAE;oBACX,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;iBACjB;aACJ;YACD,OAAO,CAAC,CAAC;QACb,CAAC,CAAA;QACL,SAAC;KAAA,AAhED,IAgEC;IAhEY,IAAE,KAgEd,CAAA;AACL,CAAC,EAvJS,CAAC,KAAD,CAAC,QAuJV;ACxJD,IAAU,CAAC,CAuEV;AAvED,WAAU,CAAC;IASP;QAQI,gBAAY,OAA6B,EAAE,KAAe;YAPnD,UAAK,GAAY,EAAE,CAAC;YACpB,aAAQ,GAA6B,EAAE,CAAC;YAO3C,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAE3C,IAAI,KAAK,IAAI,IAAI;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,uBAAM,GAAN,UAAO,KAAc;YACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,KAAK,EAAE;gBACP,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK;oBAAd,IAAI,CAAC,cAAA;oBACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAAA;aAC1B;YACD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;gBAC3B,KAAc,UAAU,EAAV,KAAA,IAAI,CAAC,KAAK,EAAV,cAAU,EAAV,IAAU,EAAE;oBAArB,IAAI,CAAC,SAAA;oBACN,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;oBACnB,IAAI,CAAC,IAAI,IAAI,EAAE;wBACX,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;qBACxB;iBACJ;aACJ;QACL,CAAC;QAES,4BAAW,GAArB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAES,kCAAiB,GAA3B;YACI,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QAES,8BAAa,GAAvB;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAES,kCAAiB,GAA3B;YACI,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QAES,6BAAY,GAAtB;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAES,0BAAS,GAAnB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QACL,aAAC;IAAD,CAAC,AA7DD,IA6DC;IA7DY,QAAM,SA6DlB,CAAA;AACL,CAAC,EAvES,CAAC,KAAD,CAAC,QAuEV;ACtED,IAAU,CAAC,CAmDV;AAnDD,WAAU,CAAC;IACP,IAAI,YAAY,GAAW,CAAC,CAAC;IAE7B,SAAS,gBAAgB,CAAC,GAAqB;QAC3C,IAAI,YAAY,GAAG,CAAC,EAAE;YAClB,YAAY,EAAE,CAAC;YACf,OAAO;SACV;QAED,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,YAAY,EAAE,CAAC;IACnB,CAAC;IAED;;;;;;;OAOG;IACH,SAAgB,OAAO,CAAC,OAAyB;QAC7C,OAAO,GAAG,CAAC,CAAC,MAAM,CAAmB;YACjC,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,EAAE;YACX,UAAU,EAAE;gBACR,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,MAAM;aACjB,EAAE,OAAO,EAAE,CAAC;SAChB,EAAE,OAAO,CAAC,CAAC;QAEZ,IAAI,OAAO,CAAC,UAAU,EAAE;YACpB,MAAM,CAAC,UAAU,CAAC;gBACd,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC,EAAE,CAAC,CAAC,CAAC;SACT;aACI;YACD,gBAAgB,CAAC,OAAO,CAAC,CAAC;SAC7B;IACL,CAAC;IAnBe,SAAO,UAmBtB,CAAA;IAED,SAAgB,SAAS;QACrB,IAAI,YAAY,GAAG,CAAC,EAAE;YAClB,YAAY,EAAE,CAAC;YACf,OAAO;SACV;QAED,YAAY,EAAE,CAAC;QACf,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IARe,WAAS,YAQxB,CAAA;AACL,CAAC,EAnDS,CAAC,KAAD,CAAC,QAmDV;ACpDD,IAAU,CAAC,CAyHV;AAzHD,WAAU,CAAC;IAEP,SAAgB,SAAS,CAAC,MAAc,EAAE,GAAW,EAAE,IAAY;QAC/D,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAFe,WAAS,YAExB,CAAA;IAED,SAAgB,cAAc,CAAC,MAAc;QACzC,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAA,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACvE,CAAC;IAFe,gBAAc,iBAE7B,CAAA;IAED,SAAgB,YAAY,CAAC,MAAc;QACvC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAFe,cAAY,eAE3B,CAAA;IAED,SAAgB,yBAAyB,CAAC,OAAe,EAAE,UAAkB;QACzE,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,EAAA,aAAa,CAAC,SAAS,CAAC,EAAE;YAC1B,OAAO,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;SAC9B;QAED,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,OAAO,MAAM,CAAC;SACjB;QAED,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC;QAE/C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,OAAO,MAAM,CAAC;SACjB;QAED,OAAO,IAAI,EAAE;YACT,IAAI,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,OAAO,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;aAC9B;YAED,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACrC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,OAAO,MAAM,CAAC;aACjB;SACJ;IACL,CAAC;IA9Be,2BAAyB,4BA8BxC,CAAA;IAED,SAAS,WAAW,CAAC,CAAS;QAC1B,QAAQ,CAAC,EAAE;YACP,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAA;YAC1B,KAAK,IAAI,CAAC,CAAC,OAAO,QAAQ,CAAA;SAC7B;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAM,SAAS,GAAG,UAAU,CAAC;IAE7B;;;OAGG;IACH,SAAgB,UAAU,CAAC,CAAM;QAC7B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;SAC/C;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IANe,YAAU,aAMzB,CAAA;IAED,SAAS,WAAW,CAAC,CAAS;QAC1B,QAAQ,CAAC,EAAE;YACP,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC;SAC3B;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,SAAgB,UAAU,CAAC,CAAM;QAC7B,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;SAC9D;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IANe,YAAU,aAMzB,CAAA;IAED,SAAgB,QAAQ,CAAC,MAAc,EAAE,IAAU;QAC/C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YACrC,OAAO,MAAM,CAAC;SACjB;QAED,IAAI,CAAE,CAAS,CAAC,SAAS,IAAI,CAAE,CAAS,CAAC,KAAK,EAAE;YAC5C,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAC;SACxF;QAED,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,QAAQ,GAAI,CAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAS,CAAC,KAAK,CAAC,UAAU,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI;SACf,EAAE,QAAQ,CAAC,CAAC;QAEb,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAhBe,UAAQ,WAgBvB,CAAA;IAED,SAAgB,GAAG,CAAC,CAAM;QAChB,MAAO,CAAC,OAAO,IAAU,MAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAFe,KAAG,MAElB,CAAA;IAED,SAAgB,UAAU;QACtB,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAFe,YAAU,aAEzB,CAAA;IAED,SAAgB,SAAS,CAAC,OAAe;QACrC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IAFe,WAAS,YAExB,CAAA;AACL,CAAC,EAzHS,CAAC,KAAD,CAAC,QAyHV;ACxHD,IAAU,CAAC,CAwLV;AAxLD,WAAU,CAAC;IAaP,SAAgB,KAAK,CAAC,OAAe,EAAE,OAAsB;QACzD,IAAI,MAAc,CAAC;QACnB,OAAO,GAAmB,CAAC,CAAC,MAAM,CAAC;YAC/B,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC;YAClC,KAAK,EAAE,EAAA,IAAI,CAAC,oBAAoB,CAAC;YACjC,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,+BAA+B;YAC5C,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE;gBACF,IAAI,OAAO,CAAC,MAAM;oBACd,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,KAAK,EAAE;gBACH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACzB,IAAI,OAAO,CAAC,OAAO;oBACf,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,CAAC;SACJ,EAAE,OAAO,CAAC,CAAC;QAEZ,IAAI,OAAO,CAAC,UAAU;YAClB,OAAO,GAAG,EAAA,UAAU,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAClB,IAAI,OAAO,GAAU,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,QAAQ;gBACtB,KAAK,EAAE;oBACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;aACJ,CAAC,CAAC;YACH,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;SAC7B;QACD,MAAM,GAAG,CAAC,CAAC,0CAA0C,CAAC;aACjD,MAAM,CAAC,OAAO,CAAC;aACf,QAAQ,CAAC,UAAU,CAAC;aACpB,IAAI,CAAC,OAAO,CAAC;aACb,MAAM,EAAE;aACR,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IA5Ce,OAAK,QA4CpB,CAAA;IAUD,SAAgB,OAAO,CAAC,OAAe,EAAE,KAAiB,EAAE,OAAwB;QAChF,IAAI,MAAc,CAAC;QACnB,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;YACf,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,EAAA,IAAI,CAAC,mBAAmB,CAAC;YACpC,QAAQ,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC;YAClC,KAAK,EAAE,EAAA,IAAI,CAAC,2BAA2B,CAAC;YACxC,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK;YACf,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,iCAAiC;YAC9C,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE;gBACF,IAAI,OAAO,CAAC,MAAM;oBACd,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,KAAK,EAAE;gBACH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACzB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ;oBAC5B,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,OAAO,EAAE;gBACL,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,OAAO;aACtB;SACJ,EAAE,OAAO,CAAC,CAAC;QACZ,IAAI,OAAO,CAAC,UAAU;YAClB,OAAO,GAAG,EAAA,UAAU,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAClB,IAAI,OAAO,GAAU,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,OAAO,CAAC,SAAS;gBACvB,KAAK,EAAE;oBACH,OAAO,GAAG,IAAI,CAAC;oBACf,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACvB,IAAI,KAAK;wBACL,KAAK,EAAE,CAAC;gBAChB,CAAC;aACJ,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ;gBAChB,OAAO,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,OAAO,CAAC,QAAQ;oBACtB,KAAK,EAAE;wBACH,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;wBACvB,IAAI,OAAO,CAAC,IAAI;4BACZ,OAAO,CAAC,IAAI,EAAE,CAAC;6BACd,IAAI,OAAO,CAAC,QAAQ;4BACrB,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC3B,CAAC;iBACJ,CAAC,CAAC;YACP,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;SAC7B;QACD,MAAM,GAAG,CAAC,CAAC,0CAA0C,CAAC;aACjD,MAAM,CAAC,OAAO,CAAC;aACf,QAAQ,CAAC,UAAU,CAAC;aACpB,IAAI,CAAC,OAAO,CAAC;aACb,MAAM,EAAE;aACR,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAjEe,SAAO,UAiEtB,CAAA;IAMD,SAAgB,YAAY,CAAC,OAA4B;QACrD,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC,uDAAuD,CAAC,CAAC;QACnE,IAAI,QAAQ,GAAwB,CAAC,CAAC,MAAM,CAAyB;YACjE,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,EAAA,IAAI,CAAC,oBAAoB,CAAC;YACjC,IAAI,EAAE;gBACF,GAAG,GAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;oBAC5C,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM;iBACjB,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,eAAe,CAAC;gBACxB,GAAG,CAAC,IAAI,EAAE,CAAC;gBACX,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACzB,GAAG,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;YACD,KAAK,EAAE;gBACH,GAAG,CAAC,IAAI,EAAE,CAAC;gBACX,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACd,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,CAAC;SACJ,EAAE,OAAO,CAAC,CAAC;QACZ,CAAC,CAAC,MAAM,CAAC,QAAe,CAAC,CAAC;IAC9B,CAAC;IA3Be,cAAY,eA2B3B,CAAA;IAED,SAAgB,WAAW,CAAC,OAAe,EAAE,IAAgB,EAAE,OAA0B;QACrF,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAC3B;YACI,KAAK,EAAE,EAAA,IAAI,CAAC,0BAA0B,CAAC;YACvC,WAAW,EAAE,qCAAqC;YAClD,SAAS,EAAE,EAAA,IAAI,CAAC,kBAAkB,CAAC;YACnC,QAAQ,EAAE,IAAI;SACjB,EAAE,OAAO,CAAC,CAAC,CAAC;IACrB,CAAC;IARe,aAAW,cAQ1B,CAAA;IAED,SAAgB,OAAO,CAAC,OAAe,EAAE,OAAwB;QAC7D,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CACnB;YACI,KAAK,EAAE,EAAA,IAAI,CAAC,sBAAsB,CAAC;YACnC,WAAW,EAAE,iCAAiC;SACjD,EAAE,OAAO,CAAC,CAAC,CAAC;IACrB,CAAC;IANe,SAAO,UAMtB,CAAA;AACL,CAAC,EAxLS,CAAC,KAAD,CAAC,QAwLV;ACxLD,IAAU,CAAC,CAsDV;AAtDD,WAAU,CAAC;IACI,sBAAoB,GAAkB;QAC7C,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,GAAG;QACjB,YAAY,EAAE,GAAG;QACjB,eAAe,EAAE,GAAG;QACpB,aAAa,EAAE,sBAAsB;KACxC,CAAA;IAED,SAAS,gBAAgB,CAAC,OAAsB;QAC5C,OAAO,GAAG,CAAC,CAAC,MAAM,CAAgB,EAAE,EAAE,EAAA,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACrE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,SAAgB,aAAa,CAAC,OAAe,EAAE,KAAc,EAAE,OAAuB;QAClF,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAFe,eAAa,gBAE5B,CAAA;IAED,SAAgB,aAAa,CAAC,OAAe,EAAE,KAAc,EAAE,OAAuB;QAClF,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAFe,eAAa,gBAE5B,CAAA;IAED,SAAgB,UAAU,CAAC,OAAe,EAAE,KAAc,EAAE,OAAuB;QAC/E,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAFe,YAAU,aAEzB,CAAA;IAED,SAAgB,WAAW,CAAC,OAAe,EAAE,KAAc,EAAE,OAAuB;QAChF,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAFe,aAAW,cAE1B,CAAA;IAED,SAAgB,sBAAsB,CAAC,MAAe;QAClD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YAC/B,OAAO;SACV;QAED,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3E,IAAI,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAO;SACV;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YACjC,SAAS,CAAC,QAAQ,CAAC,uCAAuC,CAAC,CAAC;YAC5D,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;SAC7I;aACI;YACD,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAC3C,IAAI,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;gBACxC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;gBAC1C,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;aACjE;SACJ;IACL,CAAC;IAtBe,wBAAsB,yBAsBrC,CAAA;AACL,CAAC,EAtDS,CAAC,KAAD,CAAC,QAsDV;ACtDD,IAAU,CAAC,CAqDV;AArDD,WAAU,CAAC;IAEP,IAAiB,aAAa,CAkD7B;IAlDD,WAAiB,aAAa;QAE1B,SAAgB,gBAAgB,CAAC,KAA4B;YACzD,IAAI,GAAQ,CAAC;YACb,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,GAAG,GAAG,WAAW,CAAC;aACrB;iBACI;gBACD,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;gBACpB,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;iBACpB;aACJ;YAED,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAbe,8BAAgB,mBAa/B,CAAA;QAED,SAAgB,mBAAmB,CAAC,OAAe,EAAE,QAAiB,EAClE,MAAe,EAAE,KAAc,EAAE,KAAa;YAC9C,IAAI;gBACA,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACtD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;oBAC7B,OAAO;gBAEX,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACjB,OAAO;gBAEX,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAE5C,OAAO;oBACH,qBAAqB,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;wBAC7C,eAAe,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;wBACxC,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,KAAK;wBAC1C,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;gBAEzD,MAAM,CAAC,UAAU,CAAC;oBACd,IAAI;wBACA,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,sDAAsD,EAAE;4BAC3E,UAAU,EAAE,KAAK;4BACjB,OAAO,EAAE,KAAK;yBACjB,CAAC,CAAC;qBACN;oBACD,WAAM;qBACL;gBACL,CAAC,CAAC,CAAC;aACN;YACD,WAAM;aACL;QACL,CAAC;QAhCe,iCAAmB,sBAgClC,CAAA;IACL,CAAC,EAlDgB,aAAa,GAAb,eAAa,KAAb,eAAa,QAkD7B;AACL,CAAC,EArDS,CAAC,KAAD,CAAC,QAqDV;ACtDD,IAAU,CAAC,CAyCV;AAzCD,WAAU,CAAC;IACP,IAAiB,MAAM,CAuCtB;IAvCD,WAAiB,MAAM;QACnB;;;;WAIG;QACQ,sBAAe,GAAG,GAAG,CAAC;QAEjC,IAAI,QAAQ,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;QACzC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,OAAA,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3C;QAED;;WAEG;QACQ,0BAAmB,GAAG,IAAI,CAAC;QAEtC;;;WAGG;QACQ,wBAAiB,GAAG,KAAK,CAAC;QAErC;;;;;;WAMG;QACQ,qBAAc,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzC;;;;WAIG;QACQ,yBAAkB,GAAa,IAAI,CAAC;IACnD,CAAC,EAvCgB,MAAM,GAAN,QAAM,KAAN,QAAM,QAuCtB;AACL,CAAC,EAzCS,CAAC,KAAD,CAAC,QAyCV;ACxCD,IAAU,CAAC,CA+NV;AA/ND,WAAU,CAAC;IAEP,SAAgB,SAAS,CAAC,IAAY;QAClC,IAAI,CAAC,CAAC,MAAM;YACR,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,IAAI,GAAG,CAAC;QACZ,KAAK,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YACvE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBACpB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IARe,WAAS,YAQxB,CAAA;IAED,CAAC,CAAC,SAAS,CAAC;QACR,UAAU,EAAE,UAAU,GAAG;YACrB,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACtC,IAAI,KAAK;gBACL,GAAG,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;KACJ,CAAC,CAAC;IAWH,SAAgB,WAAW,CAAY,OAAoC;QACvE,IAAI,WAAW,GAAG,UAAU,QAAa;YACrC,IAAI,EAAA,MAAM,CAAC,kBAAkB,IAAI,IAAI;gBACjC,QAAQ;gBACR,QAAQ,CAAC,KAAK;gBACd,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,aAAa;gBACpC,EAAA,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;gBAC9C,OAAO;aACV;YAED,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;gBACzB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC1B,OAAO;aACV;YAED,EAAA,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3F,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;QAE1C,OAAO,GAAG,CAAC,CAAC,MAAM,CAA8B;YAC5C,QAAQ,EAAE,MAAM;YAChB,WAAW,EAAE,kBAAkB;YAC/B,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/B,OAAO,EAAE,UAAU,IAAI,EAAE,UAAU,EAAE,OAAO;gBACxC,IAAI;oBACA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE;wBAClC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBAC3B;iBACJ;wBACO;oBACJ,IAAI,OAAO,CAAC,OAAO,EAAE;wBACjB,EAAA,SAAS,EAAE,CAAC;qBACf;oBACD,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;iBAC5C;YACL,CAAC;YACD,KAAK,EAAE,UAAU,GAAG,EAAE,MAAM,EAAE,EAAE;gBAC5B,IAAI;oBACA,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;wBACpB,IAAI,CAAC,GAAQ,IAAI,CAAC;wBAClB,IAAI;4BACA,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;yBACzC;wBACD,OAAO,GAAG,EAAE;4BACR,CAAC,GAAG,IAAI,CAAC;yBACZ;wBACD,IAAI,CAAC,EAAE;4BACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;4BAC7B,OAAO;yBACV;qBACJ;oBACD,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;yBAC5C,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;wBACjD,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBACzC,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;4BACpB,WAAW,CAAC,IAAI,CAAC,CAAC;4BAClB,OAAO;yBACV;qBACJ;oBACD,IAAI,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;oBAC5B,IAAI,CAAC,IAAI,EAAE;wBACP,IAAI,CAAC,GAAG,CAAC,MAAM;4BACX,CAAC,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;6BACxF,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;4BACtB,CAAC,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;;4BAE5E,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,4CAA4C,CAAC,CAAC;qBACpF;;wBAEG,EAAA,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBACpC;wBACO;oBACJ,IAAI,OAAO,CAAC,OAAO,EAAE;wBACjB,EAAA,SAAS,EAAE,CAAC;qBACf;oBACD,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;iBAC5C;YACL,CAAC;SACJ,EAAE,OAAO,CAAC,CAAC;QAEZ,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,EAAA,OAAO,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IA5Fe,aAAW,cA4F1B,CAAA;IAED,SAAgB,cAAc,CAAY,OAAe,EAAE,OAAa,EACpE,SAAyC,EAAE,OAAqC;QAChF,OAAO,WAAW,CAAC,CAAC,CAAC,MAAM,CAA8B;YACrD,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,SAAS;SACvB,EAAE,OAAO,CAAC,CAAC,CAAC;IACjB,CAAC;IAPe,gBAAc,iBAO7B,CAAA;IAED,SAAgB,WAAW,CAAC,OAA6B,EAAE,KAAa,EAAE,KAAU;QAChF,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE;YAChC,OAAO,CAAC,cAAc,GAAG,EAAE,CAAC;SAC/B;QACD,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC1C,CAAC;IALe,aAAW,cAK1B,CAAA;IAeD,SAAgB,gBAAgB,CAAC,CAAU;QACvC,IAAI,EAAU,CAAC;QACf,IAAI,CAAC,KAAK,SAAS;YACf,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;YAE1D,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,MAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,MAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAI,CAAC,CAAC;SAC1E;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAde,kBAAgB,mBAc/B,CAAA;IAED,SAAgB,aAAa,CAAC,OAA+B;QACzD,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;aAClB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;aACtB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;aACrG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM;YACd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;aACvD,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aACjC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE;YACX,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC;iBAC1E,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SACrC;QACD,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;aAC/B,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IApBe,eAAa,gBAoB5B,CAAA;IAED,SAAgB,SAAS,CAAC,OAA2B;QACjD,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC;aAClB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;aACtB,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aACvC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM;YACd,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE;YACxB,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE;gBAC1B,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;qBAC/C,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;qBACtB,QAAQ,CAAC,GAAG,CAAC,CAAC;aACtB;SACJ;QACD,IAAI,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,SAAS,EAAE;YACX,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC;iBAC1E,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SACrC;QACD,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC;aAC/B,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAxBe,WAAS,YAwBxB,CAAA;IAED,SAAgB,UAAU,CAAC,GAAW;QAClC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;YAClC,OAAO,EAAA,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACjD;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IANe,YAAU,aAMzB,CAAA;AACL,CAAC,EA/NS,CAAC,KAAD,CAAC,QA+NV;AC/ND,IAAU,CAAC,CA0HV;AA1HD,WAAU,CAAC;IAEP,IAAiB,WAAW,CAuH3B;IAvHD,WAAiB,WAAW;QAExB,IAAI,OAAe,CAAC;QACpB,IAAI,IAAI,GAAmB,EAAE,CAAC;QAC9B,IAAI,QAAQ,GAAyB,EAAE,CAAC;QAExC,SAAS,UAAU;YACf,IAAI,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;gBAChC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;aAC/C;QACL,CAAC;QAED,SAAS,UAAU;YACf,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC7B,OAAO,GAAG,IAAI,CAAC;aAClB;QACL,CAAC;QAED,SAAS,SAAS;YACd,KAAgB,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI,EAAE;gBAAjB,IAAI,GAAG,aAAA;gBACR,IAAI;oBACA,GAAG,EAAE,CAAC;iBACT;gBACD,OAAO,CAAC,EAAE;oBACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAClB;aACJ;YAED,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;QACjB,CAAC;QAED,SAAgB,EAAE,CAAC,GAAW,EAAE,OAAmB;YAC/C,IAAI,OAAO,IAAI,IAAI;gBACf,MAAM,+BAA+B,CAAC;YAE1C,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS;gBAC3B,MAAM,yDAAyD,GAAG,GAAG,CAAC;YAE1E,IAAI,GAAG,IAAI,IAAI;gBACX,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAEhC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEnB,UAAU,EAAE,CAAC;YAEb,OAAO,OAAO,CAAC;QACnB,CAAC;QAfe,cAAE,KAejB,CAAA;QAED,SAAgB,YAAY,CAAC,GAAW,EAAE,OAAoB,EAAE,OAAmB;YAC/E,IAAI,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;YACnC,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;YAErC,EAAE,CAAC,GAAG,EAAE;gBACJ,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;gBACtC,IAAI,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;gBACxC,IAAI,WAAW,KAAK,QAAQ;oBACxB,YAAY,KAAK,SAAS,EAAE;oBAC5B,QAAQ,GAAG,WAAW,CAAC;oBACvB,SAAS,GAAG,YAAY,CAAC;oBACzB,OAAO,EAAE,CAAC;iBACb;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACnB,CAAC;QAhBe,wBAAY,eAgB3B,CAAA;QAED,SAAgB,aAAa,CAAC,GAAW,EAAE,OAAoB,EAAE,OAAmB;YAChF,IAAI,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;YAEnC,EAAE,CAAC,GAAG,EAAE;gBACJ,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;gBACtC,IAAI,WAAW,KAAK,QAAQ,EAAE;oBAC1B,QAAQ,GAAG,WAAW,CAAC;oBACvB,OAAO,EAAE,CAAC;iBACb;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACnB,CAAC;QAZe,yBAAa,gBAY5B,CAAA;QAED,SAAgB,cAAc,CAAC,GAAW,EAAE,OAAoB,EAAE,OAAmB;YACjF,IAAI,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;YAErC,EAAE,CAAC,GAAG,EAAE;gBACJ,IAAI,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;gBACxC,IAAI,YAAY,KAAK,SAAS,EAAE;oBAC5B,SAAS,GAAG,YAAY,CAAC;oBACzB,OAAO,EAAE,CAAC;iBACb;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC;QACnB,CAAC;QAZe,0BAAc,iBAY7B,CAAA;QAED,SAAgB,GAAG,CAAC,GAAW,EAAE,OAAoB;YACjD,IAAI,GAAG,IAAI,IAAI,EAAE;gBACb,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACrB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;wBAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBACtB,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClC,OAAO;qBACV;iBACJ;aACJ;YAED,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;wBACrB,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAClB,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBAClC,MAAM;qBACT;iBACJ;aACJ;QACL,CAAC;QAtBe,eAAG,MAsBlB,CAAA;IACL,CAAC,EAvHgB,WAAW,GAAX,aAAW,KAAX,aAAW,QAuH3B;AACL,CAAC,EA1HS,CAAC,KAAD,CAAC,QA0HV;AC3HD,IAAU,CAAC,CAwGV;AAxGD,WAAU,CAAC;IAEP,SAAgB,cAAc,CAAC,OAAe;QAC1C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAHe,gBAAc,iBAG7B,CAAA;IAED,SAAgB,sBAAsB,CAAC,OAAe;QAClD,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAEtC,IAAI,MAAM,GAAG;YACT,IAAI,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;gBACzD,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;YAE3C,IAAI,aAAa,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;aAC1D;YAED,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAE1B,IAAI,aAAa,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;aAC/B;YAED,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC;QAEF,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;YACxC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;SACpC;aACI,IAAK,MAAc,CAAC,QAAQ,EAAE;YAC9B,MAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;SACrD;aACI;YACD,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC5B;QAED,MAAM,EAAE,CAAC;QAET,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YAClB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,uEAAuE;QACvE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAxCe,wBAAsB,yBAwCrC,CAAA;IAED,SAAgB,qBAAqB,CAAC,OAAe;QACjD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;gBAClB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAC5B;QACL,CAAC,CAAC,CAAC;QACH,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,YAAY,EAAE;YAC5C,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;SAC1D;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAbe,uBAAqB,wBAapC,CAAA;IAED,SAAgB,gBAAgB,CAAC,OAAe;QAC5C,IAAI,CAAC,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SAC5B;IACL,CAAC;IANe,kBAAgB,mBAM/B,CAAA;IAED,SAAgB,mBAAmB;QAC/B,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACnD,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;QAEpD,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;YAChC,IAAI,CAAC,QAAQ,EAAE;gBACX,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;aACrC;SACJ;aACI,IAAI,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;SAClC;IACL,CAAC;IAbe,qBAAmB,sBAalC,CAAA;IAED,SAAgB,mBAAmB,CAAC,OAAe;QAC/C,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,OAAO,EAAE;YACvD,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;IAJe,qBAAmB,sBAIlC,CAAA;IAED,SAAgB,YAAY,CAAC,EAAU;QACnC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YACzB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAElC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;YACZ,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;YACX,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAVe,cAAY,eAU3B,CAAA;AACL,CAAC,EAxGS,CAAC,KAAD,CAAC,QAwGV;ACvGD,IAAU,CAAC,CAyOV;AAzOD,WAAU,CAAC;IAEP,IAAiB,UAAU,CA0K1B;IA1KD,WAAiB,UAAU;QACvB,IAAI,UAAU,GAA2B,EAAE,CAAC;QAC5C,IAAI,UAAU,GAA2B,EAAE,CAAC;QAE5C,SAAgB,YAAY,CAAC,IAAY,EAAE,QAAgB,EAAE,QAAoB;YAC5E,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAS,CAAC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,EAAE,UAAU,CAAM,EAAE,CAAS;gBACtF,IAAI,CAAC,IAAI,IAAI,EAAE;oBACX,QAAQ,EAAE,CAAC;iBACd;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QANe,uBAAY,eAM3B,CAAA;QAED,SAAgB,aAAa,CAAC,IAAY;YACtC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,CAAC;QAFe,wBAAa,gBAE5B,CAAA;QAED,SAAgB,gBAAgB,CAAC,QAAgB;YAC7C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,mBAAmB,GAAG,QAAQ,CAAC,CAAC;QAC5D,CAAC;QAFe,2BAAgB,mBAE/B,CAAA;QAED,SAAS,WAAW,CAAC,IAAY,EAAE,KAAc;YAC7C,OAAO;gBACH,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,KAAK;gBACX,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC;gBACpE,IAAI,EAAE,IAAI;gBACV,QAAQ,EAAE,MAAM;gBAChB,UAAU,EAAE;oBACR,aAAa,EAAE,UAAU,IAAY;wBACjC,OAAO,IAAI,CAAC;oBAChB,CAAC;iBACJ;gBACD,OAAO,EAAE,UAAU,IAAI,EAAE,UAAU,EAAE,KAAK;oBACtC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBACD,KAAK,EAAE,UAAU,GAAG,EAAE,UAAU,EAAE,WAAW;oBACzC,IAAI,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBAC7C,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE;wBAC/B,CAAC,CAAC,WAAW,CAAC,wDAAwD;4BAClE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,oFAAoF;4BACrG,sGAAsG;4BACtG,oEAAoE;4BACpE,kEAAkE;4BAClE,wFAAwF;4BACxF,mGAAmG,EAAE,IAAI,EAAE;4BACvG,OAAO,EAAE,KAAK;4BACd,UAAU,EAAE,KAAK;yBACpB,CAAC,CAAC;wBACP,OAAO;qBACV;oBAED,CAAC,CAAC,WAAW,CAAC,yCAAyC;wBACnD,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC3C,oBAAoB,GAAG,IAAI,CAAC;wBAChC,iFAAiF,CAAC,CAAC;oBAEvF,IAAI,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC;oBAC5B,IAAI,CAAC,IAAI,EAAE;wBACP,IAAI,CAAC,GAAG,CAAC,MAAM;4BACX,CAAC,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;6BACnF,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;4BACtB,CAAC,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;;4BAE5E,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,4CAA4C,CAAC,CAAC;qBACpF;;wBAEG,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,CAAC;aACJ,CAAA;QACL,CAAC;QAED,SAAS,eAAe,CAAC,IAAY;YACjC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,OAAO,OAAO,CAAC,OAAO,CAClB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;qBAC3B,MAAM,CAAC;oBACJ,CAAC,CAAC,SAAS,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAED,SAAS,cAAc,CAAC,IAAY;YAChC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC,CAAC;aAC9F;YAED,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,SAAS,mBAAmB,CAAC,IAAY;YACrC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;oBAC1B,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC9F;gBAED,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAED,SAAgB,MAAM,CAAC,IAAY;YAC/B,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,cAAc,CAAC,IAAI,CAAC,CAAC;aACxB;YAED,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAExB,IAAI,IAAI,IAAI,IAAI;gBACZ,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC,CAAC;YAEpE,OAAO,IAAI,CAAC;QAChB,CAAC;QAZe,iBAAM,SAYrB,CAAA;QAED,SAAgB,WAAW,CAAC,IAAY;YACpC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAChC;gBAED,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;oBAClC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;oBACxB,IAAI,IAAI,IAAI,IAAI,EAAE;wBACd,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC,CAAC;qBACnE;oBACD,OAAO,IAAI,CAAC;gBAChB,CAAC,EAAE,IAAI,CAAC,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAfe,sBAAW,cAe1B,CAAA;QAED,SAAgB,MAAM,CAAC,IAAY;YAC/B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC,CAAC;aAC9F;YACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YACrD,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QARe,iBAAM,SAQrB,CAAA;QAED,SAAgB,WAAW,CAAC,IAAY;YACpC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;oBAC1B,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC9F;gBACD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACrD,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;oBAClC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC,EAAE,IAAI,CAAC,CAAC;YACb,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAVe,sBAAW,cAU1B,CAAA;QAED,SAAgB,OAAO,CAAC,IAAY;YAChC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAClE,CAAC;QAFe,kBAAO,UAEtB,CAAA;QAED,SAAgB,oBAAoB,CAAC,OAAc;YAC/C,UAAU,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE;gBACnB,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACnC;QACL,CAAC;QANe,+BAAoB,uBAMnC,CAAA;QAED,SAAgB,GAAG,CAAC,IAAY,EAAE,KAAU;YACxC,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAHe,cAAG,MAGlB,CAAA;IACL,CAAC,EA1KgB,UAAU,GAAV,YAAU,KAAV,YAAU,QA0K1B;IAED,SAAgB,aAAa,CAAC,GAAW;QACrC,OAAO,UAAU,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;IAClD,CAAC;IAFe,eAAa,gBAE5B,CAAA;IAED,SAAgB,kBAAkB,CAAC,GAAW;QAC1C,OAAO,UAAU,CAAC,WAAW,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC;IACvD,CAAC;IAFe,oBAAkB,qBAEjC,CAAA;IAED,SAAgB,SAAS,CAAQ,GAAW;QACxC,IAAI,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3B,IAAI,OAAO,GAAG,sBAAsB,GAAG,GAAG,GAAG,8CAA8C;gBACvF,kBAAkB,GAAG,GAAG,GAAG,wEAAwE;gBACnG,+BAA+B,CAAC;YACpC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5B;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC9C,CAAC;IAVe,WAAS,YAUxB,CAAA;IAED,SAAgB,cAAc,CAAQ,GAAW;QAC7C,OAAO,UAAU,CAAC,WAAW,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IACnD,CAAC;IAFe,gBAAc,iBAE7B,CAAA;IAED,SAAgB,YAAY,CAAC,GAAW;QACpC,UAAU,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IACvC,CAAC;IAFe,cAAY,eAE3B,CAAA;IAED,SAAgB,iBAAiB,CAAC,GAAW;QACzC,OAAO,UAAU,CAAC,WAAW,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IACnD,CAAC;IAFe,mBAAiB,oBAEhC,CAAA;IAED,SAAgB,UAAU,CAAC,GAAW;QAClC,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;IAC/C,CAAC;IAFe,YAAU,aAEzB,CAAA;IAED,SAAgB,eAAe,CAAC,GAAW;QACvC,OAAO,UAAU,CAAC,WAAW,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;IACpD,CAAC;IAFe,iBAAe,kBAE9B,CAAA;IAED,SAAgB,OAAO,CAAC,GAAW;QAC/B,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;IAC5C,CAAC;IAFe,SAAO,UAEtB,CAAA;IAED,SAAgB,YAAY,CAAC,GAAW;QACpC,OAAO,UAAU,CAAC,WAAW,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;IACjD,CAAC;IAFe,cAAY,eAE3B,CAAA;IAED,SAAgB,WAAW,CAAC,GAAW;QACnC,OAAO,UAAU,CAAC,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;IAChD,CAAC;IAFe,aAAW,cAE1B,CAAA;IAED,SAAgB,gBAAgB,CAAC,GAAW;QACxC,OAAO,UAAU,CAAC,WAAW,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;IACrD,CAAC;IAFe,kBAAgB,mBAE/B,CAAA;IAED,SAAgB,iBAAiB,CAAC,IAAY;QAC1C,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAFe,mBAAiB,oBAEhC,CAAA;AACL,CAAC,EAzOS,CAAC,KAAD,CAAC,QAyOV;ACzOD,IAAU,CAAC,CA4KV;AA5KD,WAAU,CAAC;IAEP,SAAgB,YAAY,CAAC,GAAa,EAAE,eAAsB;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YACpD,CAAC,UAAU,IAAY,EAAE,MAAW;gBAChC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE;oBACvC,GAAG,EAAE;wBACD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAChC,CAAC;oBACD,UAAU,EAAE,IAAI;oBAChB,YAAY,EAAE,IAAI;iBACrB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAClD;IACL,CAAC;IAZe,cAAY,eAY3B,CAAA;IAED,SAAgB,IAAI,CAAC,IAAS,EAAE,IAAY,EAAE,MAAe,EAAE,MAAe;QAC1E,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;QACjC,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;QAEjC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE;YACxC,GAAG,EAAE;gBACD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,CAAC;YACD,GAAG,EAAE,UAAU,KAAK;gBAChB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IAde,MAAI,OAcnB,CAAA;IAED,SAAgB,cAAc,CAAC,QAAgB,EAAE,MAAY;QACzD,IAAI,CAAC,QAAQ;YACT,OAAO,IAAI,CAAC;QAEhB,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,IAAI,IAAI;gBACZ,OAAO,IAAI,CAAC;SACnB;QAED,IAAI,OAAO,IAAI,IAAI,UAAU;YACzB,OAAO,IAAI,CAAC;QAEhB,OAAO,IAAI,CAAC;IAChB,CAAC;IAhBe,gBAAc,iBAgB7B,CAAA;IAED,SAAS,cAAc,CAAC,MAAW,EAAE,UAAoB,EAAE,QAA+C;QACtG,SAAS,IAAI,CAAC,IAAS,EAAE,QAAgB,EAAE,KAAa;YACpD,IAAI,CAAC,IAAI;gBACL,OAAO;YAEX,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBACf,IAAI,YAAY,IAAI;gBACpB,OAAO;YAEX,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,QAAQ;gBACb,CAAC,IAAI,QAAQ;gBACb,OAAO;YAEX,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC;gBACtD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAE7B,IAAI,KAAK,GAAG,CAAC;gBACT,OAAO;YAEX,KAAc,UAAiB,EAAjB,KAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAjB,cAAiB,EAAjB,IAAiB,EAAE;gBAA5B,IAAI,CAAC,SAAA;gBACN,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG;oBACtC,SAAS;gBAEb,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;oBACnB,SAAS;gBAEb,IAAI,CAAC,IAAI,WAAW;oBAChB,SAAS;gBAEb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;aAChD;QACL,CAAC;QAED,KAAmB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;YAA1B,IAAI,MAAM,mBAAA;YACX,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAClC,SAAS;aACZ;YAED,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1B,IAAI,CAAC,GAAG,MAAM,CAAC;gBACf,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC9B,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;oBAAhB,IAAI,CAAC,cAAA;oBACN,IAAI,CAAC,CAAC,CAAC,MAAM;wBACT,SAAS;oBAEb,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACT,IAAI,CAAC,CAAC;wBACF,SAAS;iBAChB;gBACD,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;aACtB;YAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;SACnC;IACL,CAAC;IAED,yFAAyF;IACzF,mEAAmE;IACnE,gCAAgC;IAChC,aAAa;IACb,iEAAiE;IACjE,KAAK;IAEL,sDAAsD;IACtD,uCAAuC;IACvC,aAAa;IACb,iEAAiE;IACjE,KAAK;IAEL,CAAC,UAAU,MAAW;QAElB,mCAAmC;QACnC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC;QAC7B,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,UAAU,CAAC;QACnC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;QAEnB,SAAS,eAAe;YACpB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,GAAG,EAAE,QAAQ;gBACnE,4BAA4B;gBAC5B,IAAI,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC;oBAChC,CAAC,GAAG,CAAC,UAAU;oBACf,OAAO;gBAEX,IAAI,CAAC,GAAG,CAAC,YAAY;oBACjB,GAAG,CAAC,SAAS,CAAC,MAAM;oBACpB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE;oBACpC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;oBACnB,GAAG,CAAC,YAAY,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;iBAChD;gBAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;oBACd,IAAI,QAAQ,GAAI,EAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC5C,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO;wBAC5B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;iBAC1B;gBAED,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE;oBAC9C,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC;oBAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;wBACjB,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;qBAC3C;oBACD,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;iBAC1C;gBAED,OAAO,GAAG,CAAC,UAAU,CAAC;YAC1B,CAAC,CAAC,CAAC;QACP,CAAC;QAED,CAAC,CAAC;YACE,eAAe,EAAE,CAAC;YAElB,EAAA,mBAAmB,EAAE,CAAC;YACtB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACrB,EAAA,mBAAmB,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AACrB,CAAC,EA5KS,CAAC,KAAD,CAAC,QA4KV;AC7KD,IAAU,CAAC,CAkFV;AAlFD,WAAU,CAAC;IACP,IAAiB,aAAa,CAmD7B;IAnDD,WAAiB,aAAa;QAC1B,SAAgB,aAAa,CAAC,UAAkB;YAC5C,IAAI,UAAU,IAAI,IAAI;gBAClB,OAAO,KAAK,CAAC;YAEjB,IAAI,UAAU,IAAI,GAAG;gBACjB,OAAO,IAAI,CAAC;YAEhB,IAAI,UAAU,IAAI,EAAE,IAAI,UAAU,IAAI,GAAG;gBACrC,OAAO,cAAA,UAAU,CAAC;YAEtB,IAAI,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;YACtC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO;gBAChB,OAAO,IAAI,CAAC;YAEhB,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE;gBACtB,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC;gBACvB,IAAI,CAAC,CAAC,UAAU,CAAC;oBACb,OAAO,IAAI,CAAC;gBAEhB,IAAI,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpC,KAAc,UAAO,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO,EAAE;oBAAlB,IAAI,CAAC,gBAAA;oBACN,IAAI,CAAC,CAAC;wBACF,SAAS;oBAEb,IAAI,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC5B,IAAI,CAAC,QAAQ,CAAC,MAAM;wBAChB,SAAS;oBAEb,IAAI,IAAI,GAAG,KAAK,CAAC;oBACjB,KAAc,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;wBAAnB,IAAI,CAAC,iBAAA;wBACN,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;4BACP,IAAI,GAAG,IAAI,CAAC;4BACZ,MAAM;yBACT;qBACJ;oBAED,IAAI,CAAC,IAAI;wBACL,OAAO,IAAI,CAAC;iBACnB;aACJ;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QA1Ce,2BAAa,gBA0C5B,CAAA;QAED,SAAgB,kBAAkB,CAAC,UAAkB;YACjD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;gBAC5B,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;aACzD;QACL,CAAC;QALe,gCAAkB,qBAKjC,CAAA;IACL,CAAC,EAnDgB,aAAa,GAAb,eAAa,KAAb,eAAa,QAmD7B;IAQD,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,gBAAgB,EAAE;QACrD,GAAG,EAAE;YACD,OAAO,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,YAAY,EAAE;QACjD,GAAG,EAAE;YACD,IAAI,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;YACtC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC;QAC/B,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE;QAC/C,GAAG,EAAE;YACD,IAAI,EAAE,GAAG,aAAa,CAAC,cAAc,CAAC;YACtC,IAAI,EAAE;gBACF,OAAO,EAAE,CAAC,QAAQ,CAAC;YAEvB,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,EAlFS,CAAC,KAAD,CAAC,QAkFV;ACjFD,IAAU,CAAC,CA0PV;AA1PD,WAAU,CAAC;IAAC,IAAA,MAAM,CA0PjB;IA1PW,WAAA,MAAM;QACd,IAAI,MAAc,CAAC;QACnB,IAAI,SAAS,GAAW,CAAC,CAAC;QAC1B,IAAI,OAAO,GAAW,CAAC,CAAC;QACxB,IAAI,eAAuB,CAAC;QAC5B,IAAI,UAAU,GAAW,CAAC,CAAC;QAC3B,IAAI,UAAU,GAAW,CAAC,CAAC;QAEhB,cAAO,GAAY,IAAI,CAAC;QAEnC,SAAS,OAAO,CAAC,IAAY,EAAE,IAAY;YACvC,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,CAAC;QACpE,CAAC;QAED,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAiB,EAAE,MAAgB;YACtE,IAAI,CAAC,OAAA,OAAO,IAAI,SAAS,GAAG,CAAC;gBACzB,OAAO;YAEX,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;iBAC9C,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;YAChC,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAChC,IAAI,OAAO,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;oBACtD,IAAI,MAAM;wBACN,YAAY,EAAE,CAAC;oBAEnB,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjC,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACtB,OAAO;iBACV;gBAED,IAAI,MAAM;oBACN,YAAY,EAAE,CAAC;gBAEnB,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;aAC/B;QACL,CAAC;QA1Be,eAAQ,WA0BvB,CAAA;QAED,SAAgB,OAAO,CAAC,IAAY,EAAE,OAAiB;YACnD,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAFe,cAAO,UAEtB,CAAA;QAED,SAAgB,WAAW,CAAC,IAAY,EAAE,OAAiB;YACvD,IAAI,CAAC,OAAA,OAAO;gBACR,OAAO;YAEX,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;YACzC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;gBACxB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEpD,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;oBACrB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;oBAC/B,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC5B;qBACI;oBACD,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC5B;aACJ;YACD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3B,CAAC;QArBe,kBAAW,cAqB1B,CAAA;QAED,SAAS,cAAc;YACnB,OAAO,CAAC,CAAC,kFAAkF,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;gBAC7G,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;QACP,CAAC;QAED,SAAS,UAAU,CAAC,KAAa,EAAE,OAAe,EAAE,IAAkB;YAClE,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClF,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3B,KAAK,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;YAClD,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;YAEnB,IAAI,QAAgB,CAAC;YACrB,IAAI,MAAM,CAAC,MAAM,EAAE;gBACf,IAAI,OAAO,GAAG,cAAc,EAAE,CAAC;gBAC/B,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAW,CAAC;oBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;wBACb,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACrB;gBAED,IAAI,CAAC,QAAQ,EAAE;oBACX,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,QAAQ,EAAE;wBACV,QAAQ,IAAI,GAAG,CAAC;wBAChB,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC1B,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC;4BAChC,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;qBACxD;iBACJ;aACJ;iBACI;gBACD,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;oBACvC,CAAC,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC7C,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;aAChC;YAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC9B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAE3B,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,UAAA,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC3B,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa;oBACrF,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,SAAS,IAAK,CAAC,CAAC,aAAqB,CAAC,OAAO,IAAI,EAAE,CAAC;wBAC9E,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;wBAC9D,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;gBACjE,IAAI,MAAM,IAAI,IAAI;oBACd,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;oBAEzB,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,SAAgB,MAAM,CAAC,KAAa,EAAE,OAAe,EAAE,IAAkB;YACrE,IAAI,CAAC,OAAA,OAAO;gBACR,OAAO;YAEX,OAAO,CAAC,EAAE,CAAC,sCAAsC,EAAE,UAAA,CAAC;gBAChD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC;QAPe,aAAM,SAOrB,CAAA;QAED,SAAgB,OAAO,CAAC,IAAa;YACjC,IAAI,CAAC,OAAA,OAAO;gBACR,OAAO;YAEX,SAAS,EAAE,CAAC;YACZ,IAAI;gBACA,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9D,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG;oBACrB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAE3C,IAAI,OAAO,GAAG,cAAc,EAAE,CAAC;gBAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAW,EAA9B,CAA8B,CAAC,CAAC;gBAEjE,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,OAAO,IAAI,GAAG,OAAO,CAAC,MAAM;oBACxB,IAAI,GAAG,QAAQ,CAAC,MAAM;oBACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAClC,IAAI,EAAE,CAAC;iBACV;gBAED,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;wBAC/B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;yBACjB,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAC1B,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAC9C;gBAED,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,OAAe,CAAC;oBACpB,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;wBACxB,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC/C,IAAI,MAAM,CAAC,MAAM,EAAE;4BACf,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACjC,IAAI,QAAQ,EAAE;gCACV,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gCAClD,IAAI,OAAO,CAAC,MAAM,EAAE;oCAChB,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;iCACzB;6BACJ;yBACJ;wBAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;4BAC7B,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;4BACjC,IAAI,OAAO,CAAC,MAAM,EAAE;gCAChB,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;6BACzB;yBACJ;qBACJ;oBAED,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;wBAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BACjC,CAAC,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;qBACnC;oBAED,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE;wBAClC,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,QAAQ;wBACf,KAAK,EAAE,CAAC;qBACX,CAAC,CAAC;iBACN;aACJ;oBACO;gBACJ,SAAS,EAAE,CAAC;aACf;QACL,CAAC;QArEe,cAAO,UAqEtB,CAAA;QAED,SAAS,UAAU,CAAC,CAAM,EAAE,CAAS;YACjC,IAAI,UAAU,GAAG,CAAC,EAAE;gBAChB,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,UAAU,GAAG,IAAI,EAAE;oBAC1C,UAAU,GAAG,CAAC,CAAC;iBAClB;qBACI;oBACD,UAAU,EAAE,CAAC;oBACb,OAAO;iBACV;aACJ;YACD,OAAO,EAAE,CAAC;QACd,CAAC;QAED,SAAS,YAAY;YACjB,UAAU,EAAE,CAAC;YACb,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAiB,EAAE,KAAK,CAAC,CAAC;QAEhE,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,UAAU,KAAK,EAAE,EAAE;YACtF,IAAI,CAAC,OAAA,OAAO;gBACR,OAAO;YAEX,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YAExC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAClB,OAAO;YAEX,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,KAAK,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,MAAM;gBACb,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;YAEtB,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE;gBACnB,OAAO,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC,EA1PW,MAAM,GAAN,QAAM,KAAN,QAAM,QA0PjB;AAAD,CAAC,EA1PS,CAAC,KAAD,CAAC,QA0PV;AC1PD,IAAU,QAAQ,CAyDjB;AAzDD,WAAU,QAAQ;IAEd,IAAiB,UAAU,CAsD1B;IAtDD,WAAiB,UAAU;QACvB,SAAS,QAAQ,CAAC,GAAU;YACxB,OAAO,GAAG,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG,IAAK,OAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,EAAzB,CAAyB,CAAC,CAAC;QAChE,CAAC;QAED,SAAS,KAAK,CAAC,IAAW,EAAE,IAAW;YACnC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBACd,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;YAExC,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,SAAS,YAAY,CAAC,MAAW,EAAE,IAAY,EAAE,IAAW;YACxD,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC3C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;aAC5C;iBACI,IAAI,CAAC,MAAM,CAAC,UAAU;gBACvB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;YAE7B,IAAI,IAAI;gBACJ,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;QAED,SAAgB,aAAa,CAAC,UAA2B,EAAE,KAAa;YACpE,OAAO,UAAU,MAAgB;gBAC7B,IAAI,OAAO,UAAU,IAAI,QAAQ;oBAC7B,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;;oBAExC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBAE1C,MAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YACnC,CAAC,CAAA;QACL,CAAC;QATe,wBAAa,gBAS5B,CAAA;QAED,SAAgB,iBAAiB,CAAC,UAA2B,EAAE,KAAa;YACxE,OAAO,UAAU,MAAgB;gBAE7B,IAAI,OAAO,UAAU,IAAI,QAAQ;oBAC7B,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;;oBAExC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gBAE1C,MAAc,CAAC,WAAW,GAAG,IAAI,CAAC;gBAClC,MAAc,CAAC,gBAAgB,GAAG,UAAU,IAAS;oBAClD,OAAQ,EAAU,CAAC,QAAQ,CAAE,EAAU,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;gBACvE,CAAC,CAAC;YACN,CAAC,CAAA;QACL,CAAC;QAbe,4BAAiB,oBAahC,CAAA;QAED,SAAgB,cAAc,CAAC,UAA2B,EAAE,KAAa;YACrE,OAAO,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAFe,yBAAc,iBAE7B,CAAA;IACL,CAAC,EAtDgB,UAAU,GAAV,mBAAU,KAAV,mBAAU,QAsD1B;AACL,CAAC,EAzDS,QAAQ,KAAR,QAAQ,QAyDjB;AAED,IAAU,MAAM,CAOf;AAPD,WAAU,MAAM;IAAC,IAAA,cAAc,CAO9B;IAPgB,WAAA,cAAc;QAG3B;YACI,8BAAmB,WAAmB;gBAAnB,gBAAW,GAAX,WAAW,CAAQ;YACtC,CAAC;YAFQ,oBAAoB;gBADhC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,6BAA6B,CAAC;eACpD,oBAAoB,CAGhC;YAAD,2BAAC;SAAA,AAHD,IAGC;QAHY,mCAAoB,uBAGhC,CAAA;IACL,CAAC,EAPgB,cAAc,GAAd,qBAAc,KAAd,qBAAc,QAO9B;AAAD,CAAC,EAPS,MAAM,KAAN,MAAM,QAOf;AAED,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,eAAe;YAD3B,SAAA,UAAU,CAAC,iBAAiB,CAAC,0BAA0B,CAAC;WAC5C,eAAe,CAC3B;QAAD,sBAAC;KAAA,AADD,IACC;IADY,wBAAe,kBAC3B,CAAA;IAED,SAAS,IAAI,CAAC,IAAY;QACtB,OAAO,SAAA,UAAU,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,GAAG,WAAW,CAAC,CAAA;IACrE,CAAC;IAGD;QACI,2BAAmB,QAAgB;YAAhB,aAAQ,GAAR,QAAQ,CAAQ;QACnC,CAAC;QAFQ,iBAAiB;YAD7B,IAAI,CAAC,UAAU,CAAC;WACJ,iBAAiB,CAG7B;QAAD,wBAAC;KAAA,AAHD,IAGC;IAHY,0BAAiB,oBAG7B,CAAA;IAGD;QACI,6BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAG/B;QAAD,0BAAC;KAAA,AAHD,IAGC;IAHY,4BAAmB,sBAG/B,CAAA;IAID;QACI,2BAAmB,QAAgB;YAAhB,aAAQ,GAAR,QAAQ,CAAQ;QACnC,CAAC;QAFQ,iBAAiB;YAD7B,IAAI,CAAC,UAAU,CAAC;WACJ,iBAAiB,CAG7B;QAAD,wBAAC;KAAA,AAHD,IAGC;IAHY,0BAAiB,oBAG7B,CAAA;IAGD;QACI,+BAAmB,KAAU;YAAV,UAAK,GAAL,KAAK,CAAK;QAC7B,CAAC;QAFQ,qBAAqB;YADjC,IAAI,CAAC,cAAc,CAAC;WACR,qBAAqB,CAGjC;QAAD,4BAAC;KAAA,AAHD,IAGC;IAHY,8BAAqB,wBAGjC,CAAA;IAGD;QACI,6BAAmB,KAAwB;YAAxB,UAAK,GAAL,KAAK,CAAmB;QAC3C,CAAC;QAFQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAG/B;QAAD,0BAAC;KAAA,AAHD,IAGC;IAHY,4BAAmB,sBAG/B,CAAA;IAGD;QACI;QAAgB,CAAC;QADR,eAAe;YAD3B,IAAI,CAAC,QAAQ,CAAC;WACF,eAAe,CAG3B;QAAD,sBAAC;KAAA,AAHD,IAGC;IAHY,wBAAe,kBAG3B,CAAA;IAGD;QACI,+BAAmB,GAAW,EAAS,KAAU;YAA9B,QAAG,GAAH,GAAG,CAAQ;YAAS,UAAK,GAAL,KAAK,CAAK;QACjD,CAAC;QAFQ,qBAAqB;YADjC,IAAI,CAAC,cAAc,CAAC;WACR,qBAAqB,CAGjC;QAAD,4BAAC;KAAA,AAHD,IAGC;IAHY,8BAAqB,wBAGjC,CAAA;IAGD;QACI,iCAAmB,UAAkB;YAAlB,eAAU,GAAV,UAAU,CAAQ;QACrC,CAAC;QAEM,2CAAS,GAAhB,UAAiB,YAAiB;QAClC,CAAC;QALQ,uBAAuB;YADnC,SAAA,UAAU,CAAC,aAAa,CAAC,kCAAkC,CAAC;WAChD,uBAAuB,CAMnC;QAAD,8BAAC;KAAA,AAND,IAMC;IANY,gCAAuB,0BAMnC,CAAA;IAGD;QAAyC,uCAAuB;QAC5D,6BAAY,UAAkB;mBAC1B,kBAAM,UAAU,CAAC;QACrB,CAAC;QAHQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAI/B;QAAD,0BAAC;KAAA,AAJD,CAAyC,uBAAuB,GAI/D;IAJY,4BAAmB,sBAI/B,CAAA;IAGD;QACI,0BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,gBAAgB;YAD5B,IAAI,CAAC,SAAS,CAAC;WACH,gBAAgB,CAG5B;QAAD,uBAAC;KAAA,AAHD,IAGC;IAHY,yBAAgB,mBAG5B,CAAA;IAGD;QACI,6BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAG/B;QAAD,0BAAC;KAAA,AAHD,IAGC;IAHY,4BAAmB,sBAG/B,CAAA;IAGD;QACI,0BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,gBAAgB;YAD5B,IAAI,CAAC,SAAS,CAAC;WACH,gBAAgB,CAG5B;QAAD,uBAAC;KAAA,AAHD,IAGC;IAHY,yBAAgB,mBAG5B,CAAA;IAGD;QACI,0BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,gBAAgB;YAD5B,IAAI,CAAC,SAAS,CAAC;WACH,gBAAgB,CAG5B;QAAD,uBAAC;KAAA,AAHD,IAGC;IAHY,yBAAgB,mBAG5B,CAAA;IAGD;QACI,6BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAG/B;QAAD,0BAAC;KAAA,AAHD,IAGC;IAHY,4BAAmB,sBAG/B,CAAA;IAGD;QACI,0BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,gBAAgB;YAD5B,IAAI,CAAC,SAAS,CAAC;WACH,gBAAgB,CAG5B;QAAD,uBAAC;KAAA,AAHD,IAGC;IAHY,yBAAgB,mBAG5B,CAAA;IAGD;QACI,gCAAmB,MAAe;YAAf,WAAM,GAAN,MAAM,CAAS;QAClC,CAAC;QAFQ,sBAAsB;YADlC,IAAI,CAAC,eAAe,CAAC;WACT,sBAAsB,CAGlC;QAAD,6BAAC;KAAA,AAHD,IAGC;IAHY,+BAAsB,yBAGlC,CAAA;IAGD;QACI;QACA,CAAC;QAFQ,eAAe;YAD3B,IAAI,CAAC,QAAQ,CAAC;WACF,eAAe,CAG3B;QAAD,sBAAC;KAAA,AAHD,IAGC;IAHY,wBAAe,kBAG3B,CAAA;IAGD;QACI,uBAAmB,IAAY;YAAZ,SAAI,GAAJ,IAAI,CAAQ;QAC/B,CAAC;QAFQ,aAAa;YADzB,IAAI,CAAC,MAAM,CAAC;WACA,aAAa,CAGzB;QAAD,oBAAC;KAAA,AAHD,IAGC;IAHY,sBAAa,gBAGzB,CAAA;IAGD;QACI,6BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAG/B;QAAD,0BAAC;KAAA,AAHD,IAGC;IAHY,4BAAmB,sBAG/B,CAAA;IAGD;QACI,6BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAG/B;QAAD,0BAAC;KAAA,AAHD,IAGC;IAHY,4BAAmB,sBAG/B,CAAA;IAGD;QACI,mCAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,yBAAyB;YADrC,IAAI,CAAC,kBAAkB,CAAC;WACZ,yBAAyB,CAGrC;QAAD,gCAAC;KAAA,AAHD,IAGC;IAHY,kCAAyB,4BAGrC,CAAA;IAGD;QACI,2BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,iBAAiB;YAD7B,IAAI,CAAC,UAAU,CAAC;WACJ,iBAAiB,CAG7B;QAAD,wBAAC;KAAA,AAHD,IAGC;IAHY,0BAAiB,oBAG7B,CAAA;IAGD;QACI,kCAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,wBAAwB;YADpC,IAAI,CAAC,iBAAiB,CAAC;WACX,wBAAwB,CAGpC;QAAD,+BAAC;KAAA,AAHD,IAGC;IAHY,iCAAwB,2BAGpC,CAAA;IAGD;QACI,8BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,oBAAoB;YADhC,IAAI,CAAC,aAAa,CAAC;WACP,oBAAoB,CAGhC;QAAD,2BAAC;KAAA,AAHD,IAGC;IAHY,6BAAoB,uBAGhC,CAAA;IAGD;QACI,4BAAmB,SAAiB;YAAjB,cAAS,GAAT,SAAS,CAAQ;QACpC,CAAC;QAFQ,kBAAkB;YAD9B,IAAI,CAAC,WAAW,CAAC;WACL,kBAAkB,CAG9B;QAAD,yBAAC;KAAA,AAHD,IAGC;IAHY,2BAAkB,qBAG9B,CAAA;IAGD;QACI,+BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,qBAAqB;YADjC,IAAI,CAAC,cAAc,CAAC;WACR,qBAAqB,CAGjC;QAAD,4BAAC;KAAA,AAHD,IAGC;IAHY,8BAAqB,wBAGjC,CAAA;IAGD;QAAA;QACA,CAAC;QADY,eAAe;YAD3B,IAAI,CAAC,QAAQ,CAAC;WACF,eAAe,CAC3B;QAAD,sBAAC;KAAA,AADD,IACC;IADY,wBAAe,kBAC3B,CAAA;IAGD;QACI;QACA,CAAC;QAFQ,eAAe;YAD3B,IAAI,CAAC,QAAQ,CAAC;WACF,eAAe,CAG3B;QAAD,sBAAC;KAAA,AAHD,IAGC;IAHY,wBAAe,kBAG3B,CAAA;IAGD;QACI,8BAAmB,KAAe;YAAf,UAAK,GAAL,KAAK,CAAU;QAClC,CAAC;QAFQ,oBAAoB;YADhC,IAAI,CAAC,aAAa,CAAC;WACP,oBAAoB,CAGhC;QAAD,2BAAC;KAAA,AAHD,IAGC;IAHY,6BAAoB,uBAGhC,CAAA;IAGD;QACI,wBAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,cAAc;YAD1B,IAAI,CAAC,OAAO,CAAC;WACD,cAAc,CAG1B;QAAD,qBAAC;KAAA,AAHD,IAGC;IAHY,uBAAc,iBAG1B,CAAA;IAGD;QACI,8BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,oBAAoB;YADhC,IAAI,CAAC,aAAa,CAAC;WACP,oBAAoB,CAGhC;QAAD,2BAAC;KAAA,AAHD,IAGC;IAHY,6BAAoB,uBAGhC,CAAA;IAGD;QACI,2BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,iBAAiB;YAD7B,IAAI,CAAC,UAAU,CAAC;WACJ,iBAAiB,CAG7B;QAAD,wBAAC;KAAA,AAHD,IAGC;IAHY,0BAAiB,oBAG7B,CAAA;IAGD;QACI,2BAAmB,UAAiB;YAAjB,2BAAA,EAAA,iBAAiB;YAAjB,eAAU,GAAV,UAAU,CAAO;QACpC,CAAC;QAFQ,iBAAiB;YAD7B,IAAI,CAAC,UAAU,CAAC;WACJ,iBAAiB,CAG7B;QAAD,wBAAC;KAAA,AAHD,IAGC;IAHY,0BAAiB,oBAG7B,CAAA;IAGD;QACI,4BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,kBAAkB;YAD9B,IAAI,CAAC,WAAW,CAAC;WACL,kBAAkB,CAG9B;QAAD,yBAAC;KAAA,AAHD,IAGC;IAHY,2BAAkB,qBAG9B,CAAA;IAGD;QACI,6BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,mBAAmB;YAD/B,IAAI,CAAC,YAAY,CAAC;WACN,mBAAmB,CAG/B;QAAD,0BAAC;KAAA,AAHD,IAGC;IAHY,4BAAmB,sBAG/B,CAAA;IAGD;QACI,0BAAmB,KAAa;YAAb,UAAK,GAAL,KAAK,CAAQ;QAChC,CAAC;QAFQ,gBAAgB;YAD5B,IAAI,CAAC,SAAS,CAAC;WACH,gBAAgB,CAG5B;QAAD,uBAAC;KAAA,AAHD,IAGC;IAHY,yBAAgB,mBAG5B,CAAA;IAGD;QACI,4BAAmB,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAAZ,UAAK,GAAL,KAAK,CAAO;QAC/B,CAAC;QAFQ,kBAAkB;YAD9B,IAAI,CAAC,WAAW,CAAC;WACL,kBAAkB,CAG9B;QAAD,yBAAC;KAAA,AAHD,IAGC;IAHY,2BAAkB,qBAG9B,CAAA;AACL,CAAC,EA1OS,QAAQ,KAAR,QAAQ,QA0OjB;AAED,WAAU,QAAQ;IAAC,IAAA,UAAU,CAmL5B;IAnLkB,WAAA,UAAU;QAEzB,SAAgB,iBAAiB,CAAC,UAA8C,EAAE,KAAgC;YAAhF,2BAAA,EAAA,cAA8B,SAAA,eAAe,CAAC;YAAE,sBAAA,EAAA,SAAgB,SAAA,eAAe,CAAC;YAC9G,OAAO,WAAA,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAFe,4BAAiB,oBAEhC,CAAA;QAED,SAAgB,YAAY,CAAC,IAAS,EAAE,IAAS;YAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QAJe,uBAAY,eAI3B,CAAA;QAED,SAAgB,UAAU,CAAC,KAAwB;YAC/C,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,CAAC,CAAA;QACL,CAAC;QAJe,qBAAU,aAIzB,CAAA;QAED,SAAgB,MAAM,CAAC,GAAY;YAC/B,OAAO,UAAU,MAAgB;gBAC7B,IAAI,IAAI,GAAG,IAAI,SAAA,eAAe,EAAE,CAAC;gBACjC,IAAI,GAAG,KAAK,SAAS;oBACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;gBACnB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAA;QACL,CAAC;QAPe,iBAAM,SAOrB,CAAA;QAED,SAAgB,OAAO,CAAC,KAAa;YACjC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,CAAC,CAAA;QACL,CAAC;QAJe,kBAAO,UAItB,CAAA;QAED,SAAgB,OAAO,CAAC,KAAa;YACjC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,CAAC,CAAA;QACL,CAAC;QAJe,kBAAO,UAItB,CAAA;QAED,SAAgB,OAAO,CAAC,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAChC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,CAAC,CAAA;QACL,CAAC;QAJe,kBAAO,UAItB,CAAA;QAED,SAAgB,YAAY,CAAC,MAAW,EAAE,OAAgB,EAAE,IAAa;YACrE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;gBAChB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;oBACpC,GAAG,EAAE;wBACD,OAAO,IAAI,CAAC;oBAChB,CAAC;iBACJ,CAAC,CAAC;gBAEH,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC1C,KAAc,UAAmB,EAAnB,KAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAnB,cAAmB,EAAnB,IAAmB;oBAA5B,IAAI,CAAC,SAAA;oBACN,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;iBAAA;gBAExC,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;oBACzB,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;iBAC5C;qBACI,IAAI,CAAC,MAAM,CAAC,UAAU;oBACvB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;gBAE7B,IAAI,OAAO;oBACP,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;aAC3D;QACL,CAAC;QAxBe,uBAAY,eAwB3B,CAAA;QAED,SAAgB,gBAAgB,CAAC,MAAW,EAAE,IAAa,EAAE,OAAgB;YACzE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;QAFe,2BAAgB,mBAE/B,CAAA;QAED,SAAgB,UAAU,CAAC,KAAY;YAAZ,sBAAA,EAAA,YAAY;YACnC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,CAAC,CAAA;QACL,CAAC;QAJe,qBAAU,aAIzB,CAAA;QAED,SAAgB,QAAQ,CAAC,KAAa;YAClC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YACvD,CAAC,CAAA;QACL,CAAC;QAJe,mBAAQ,WAIvB,CAAA;QAED,SAAgB,WAAW,CAAC,KAAY;YAAZ,sBAAA,EAAA,YAAY;YACpC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAA;QACL,CAAC;QAJe,sBAAW,cAI1B,CAAA;QAED,SAAgB,MAAM;YAClB,OAAO,UAAU,MAAc,EAAE,WAAmB;gBAEhD,IAAI,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBACtF,IAAI,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBAEhE,IAAI,IAAI,GAAQ,MAAM,CAAC,WAAW,CAAC;gBACnC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;gBACxD,IAAI,MAAM,GAAQ,SAAS,CAAC;gBAC5B,KAAc,UAAuB,EAAvB,KAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;oBAAlC,IAAI,CAAC,SAAA;oBACN,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,EAAE;wBACtB,MAAM,GAAG,CAAC,CAAC;wBACX,MAAM;qBACT;iBACJ;gBAED,IAAI,CAAC,MAAM,EAAE;oBACT,MAAM,GAAG;wBACL,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;wBACtC,IAAI,EAAE,UAAU;wBAChB,UAAU,EAAE,MAAM;qBACrB,CAAC;oBAEF,IAAI,QAAQ,EAAE;wBACV,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;wBAEjB,MAAM,CAAC,MAAM,GAAG;4BACZ,IAAI,EAAE,MAAM,GAAG,UAAU;4BACzB,IAAI,EAAE,CAAC;4BACP,KAAK,EAAE,MAAM,GAAG,UAAU;4BAC1B,UAAU,EAAE,MAAM;4BAClB,MAAM,EAAE,EAAE;yBACb,CAAC;wBAEF,MAAM,CAAC,MAAM,GAAG;4BACZ,IAAI,EAAE,MAAM,GAAG,UAAU;4BACzB,IAAI,EAAE,CAAC;4BACP,KAAK,EAAE,MAAM,GAAG,UAAU;4BAC1B,UAAU,EAAE,MAAM;4BAClB,MAAM,EAAE,CAAC,MAAM,CAAC;yBACnB,CAAC;qBACL;yBACI;wBACD,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;wBAChB,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;qBAC7B;oBAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACxC;qBACI;oBACD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAA,eAAe,EAAE,CAAC,CAAC;iBAC3C;YACL,CAAC,CAAA;QACL,CAAC;QAvDe,iBAAM,SAuDrB,CAAA;QAED,SAAgB,WAAW,CAAC,KAAe;YACvC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAA;QACL,CAAC;QAJe,sBAAW,cAI1B,CAAA;QAED,SAAgB,KAAK,CAAC,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAC9B,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YACpD,CAAC,CAAA;QACL,CAAC;QAJe,gBAAK,QAIpB,CAAA;QAED,SAAgB,SAAS,CAAC,KAAY;YAAZ,sBAAA,EAAA,YAAY;YAClC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,CAAC,CAAA;QACL,CAAC;QAJe,oBAAS,YAIxB,CAAA;QAED,SAAgB,UAAU,CAAC,KAAY;YAAZ,sBAAA,EAAA,YAAY;YACnC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,CAAC,CAAA;QACL,CAAC;QAJe,qBAAU,aAIzB,CAAA;QAED,SAAgB,OAAO,CAAC,KAAa;YACjC,OAAO,UAAU,MAAgB;gBAC7B,YAAY,CAAC,MAAM,EAAE,IAAI,SAAA,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,CAAC,CAAA;QACL,CAAC;QAJe,kBAAO,UAItB,CAAA;IACL,CAAC,EAnLkB,UAAU,GAAV,mBAAU,KAAV,mBAAU,QAmL5B;AAAD,CAAC,EAnLS,QAAQ,KAAR,QAAQ,QAmLjB;ACpeD,IAAU,QAAQ,CAyEjB;AAzED,WAAU,QAAQ;IAEd,SAAgB,QAAQ,CAAC,KAAa;QAClC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,WAAiB,QAAQ;QACrB,IAAO,CAAC,GAAG,QAAQ,CAAC;QAEpB,SAAgB,OAAO,CAAC,CAAQ;YAC5B,OAAO,CAAC,IAAI,IAAI;gBACZ,CAAC,CAAC,MAAM,KAAK,CAAC;gBACd,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;oBACX,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ;oBACvB,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;QAC/B,CAAC;QANe,gBAAO,UAMtB,CAAA;QAED,SAAgB,IAAI,CAAC,EAAS,EAAE,EAAU,EAAE,EAAS;YACjD,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC;YAEd,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBACb,OAAO,EAAE,CAAC;YAEd,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACxB,CAAC;QARe,aAAI,OAQnB,CAAA;QAED,SAAgB,KAAK,CAAC,CAAQ;YAC1B,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QAFe,cAAK,QAEpB,CAAA;QAED,SAAgB,GAAG,CAAC,EAAS,EAAE,EAAS;YAAE,cAAgB;iBAAhB,UAAgB,EAAhB,qBAAgB,EAAhB,IAAgB;gBAAhB,6BAAgB;;YACtD,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,IAAI,EAAE;gBACN,KAAc,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI;oBAAb,IAAI,CAAC,aAAA;oBACN,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;iBAAA;aACvC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QARe,YAAG,MAQlB,CAAA;QAED,SAAgB,EAAE,CAAC,EAAS,EAAE,EAAS;YAAE,cAAgB;iBAAhB,UAAgB,EAAhB,qBAAgB,EAAhB,IAAgB;gBAAhB,6BAAgB;;YACrD,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAEhC,IAAI,IAAI,EAAE;gBACN,KAAc,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI;oBAAb,IAAI,CAAC,aAAA;oBACN,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;iBAAA;aACtC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QATe,WAAE,KASjB,CAAA;IAsBL,CAAC,EAlEgB,QAAQ,GAAR,iBAAQ,KAAR,iBAAQ,QAkExB;AACL,CAAC,EAzES,QAAQ,KAAR,QAAQ,QAyEjB;ACzED,IAAU,QAAQ,CAozBjB;AApzBD,WAAU,QAAQ;IAYd;QAOI,+BAAY,IAAe,EAAE,OAAsC;YAAnE,iBAqDC;YAnDG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,OAAO,EAAU,CAAC,OAAO,CAAC;YAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;YAE7B,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;oBACrC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzC,IAAI,EAAE,GAAG,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAEvC,IAAI,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;wBAClB,OAAO,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;qBAC3B;yBACI;wBACD,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;qBAC3B;oBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,IAAI,CAAC,OAAO,EAAU,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;wBAC1D,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;qBAC/B;oBAED,KAAI,CAAC,eAAe,EAAE,CAAC;iBAC1B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,UAAC,EAAE,EAAE,CAAC;gBACzC,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE;oBACzB,OAAO;iBACV;gBACD,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;oBAC3C,EAAE,CAAC,cAAc,EAAE,CAAC;oBACpB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBACrC,EAAU,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;qBACvC;yBACI;wBACD,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;wBACtC,KAAc,UAA0C,EAA1C,KAAA,KAAK,CAAC,MAAM,CAAC,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAI,CAAC,CAAC,EAA1C,cAA0C,EAA1C,IAA0C,EAAE;4BAArD,IAAI,CAAC,SAAA;4BACN,IAAI,GAAG,GAAG,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;4BAC1B,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;yBAC5B;qBACJ;oBACD,KAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;iBAC5D;YACL,CAAC,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,EAAU,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC5C,OAAO,KAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,+CAAe,GAAf;YACI,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;iBACvC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAErE,IAAI,eAAe,EAAE;gBACjB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,eAAe,CAAC,WAAW,CAAC,SAAS,EACjC,IAAI,CAAC,MAAM,GAAG,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,CACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;aAChE;QACL,CAAC;QAED,qCAAK,GAAL;YACK,EAAU,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAED,sDAAsB,GAAtB;YACI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QAED,0CAAU,GAAV,UAAW,IAAc;YACrB,KAAc,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI,EAAE;gBAAf,IAAI,CAAC,aAAA;gBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;aAC1B;YAED,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAED,+CAAe,GAAf;YACI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,kDAAkB,GAAlB;YACI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;gBAC5C,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC;QAED,kDAAkB,GAAlB;YACI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;gBAC5C,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC;QAED,+CAAe,GAAf,UAAgB,IAAc;YAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,KAAc,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI,EAAE;gBAAf,IAAI,CAAC,aAAA;gBACN,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;aAC1B;YAED,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAEO,4CAAY,GAApB,UAAqB,IAAS;YAC1B,OAAO,IAAI,IAAI,CACX,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI;gBAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QAEM,wCAAkB,GAAzB,UAA0B,QAAqC;YAC3D,OAAO;gBACH,IAAI,EAAE,4DAA4D;gBAClE,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,cAAc,EAAE,mBAAmB;gBACnC,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,UAAU,GAAG;oBACjB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACpB,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;oBACvB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;wBACrC,OAAO,EAAE,CAAC;qBACb;oBACD,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBACvD,OAAO,8CAA8C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;gBACxG,CAAC;aACJ,CAAC;QACN,CAAC;QAhJQ,qBAAqB;YADjC,SAAA,UAAU,CAAC,aAAa,CAAC,gCAAgC,CAAC;WAC9C,qBAAqB,CAiJjC;QAAD,4BAAC;KAAA,AAjJD,IAiJC;IAjJY,8BAAqB,wBAiJjC,CAAA;IAOD;QAOI,iCAAY,IAAwB,EAAE,OAAwC;YAA9E,iBA+BC;YA7BG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,OAAO,GAAI,IAAI,CAAC,OAAO,EAAU,CAAC,OAAO,CAAC;YAC/C,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;YAE7B,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE;oBACzC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAEzC,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;wBAC1B,OAAO;qBACV;oBAED,IAAI,EAAE,GAAG,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAEvC,IAAI,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;wBACzB,EAAU,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;qBACvC;yBACI;wBACA,EAAU,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;wBACpC,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;qBAC3B;oBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,IAAI,CAAC,OAAO,EAAU,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;wBAC1D,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;qBAC/B;iBACJ;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAEO,8CAAY,GAApB,UAAqB,IAAS;YAC1B,OAAO,IAAI,IAAI,CACX,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI;gBAC/B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,uCAAK,GAAL;YACK,EAAU,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,wDAAsB,GAAtB;YACI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACnC,CAAC;QAED,gDAAc,GAAd;YACI,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;aACnB;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,oDAAkB,GAAlB;YACI,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;gBACjD,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;aACnB;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,oDAAkB,GAAlB;YACI,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;gBACjD,OAAO,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;aACnB;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,gDAAc,GAAd,UAAe,GAAW;YACtB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAC7B,CAAC;QAEM,0CAAkB,GAAzB,UAA0B,QAAgD;YACtE,OAAO;gBACH,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,GAAG;gBACZ,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,EAAE;gBACZ,cAAc,EAAE,EAAE;gBAClB,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,UAAU,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;oBAC/C,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;oBACvB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;wBACrC,OAAO,EAAE,CAAC;qBACb;oBAED,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnD,OAAO,sIAAsI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;gBAC3L,CAAC;aACJ,CAAC;QACN,CAAC;QAhHQ,uBAAuB;YADnC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,kCAAkC,CAAC;WACzD,uBAAuB,CAiHnC;QAAD,8BAAC;KAAA,AAjHD,IAiHC;IAjHY,gCAAuB,0BAiHnC,CAAA;IAED,IAAiB,yBAAyB,CA+CzC;IA/CD,WAAiB,yBAAyB;QACtC,SAAgB,MAAM,CAAC,IAAe,EAAE,WAAiC;YACrE,IAAI,OAAO,GAAI,IAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW,CAAC;YACrE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,OAAO;aACV;YACD,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,SAAA,OAAO,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACrE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;YACtC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;gBAClE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC,CAAC;QACR,CAAC;QAVe,gCAAM,SAUrB,CAAA;QAED,SAAgB,MAAM,CAAC,OAAwB,EAAE,KAAuB,EACpE,WAAiC,EACjC,WAA2C,EAC3C,IAAa,EAAE,OAAoB;YAEnC,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,oCAAoC,CAAC,EAChE,YAAY,CAAC,CAAC;aACrB;YACD,OAAO;gBACH,KAAK,EAAE,IAAI;gBACX,QAAQ,EAAE,mBAAmB;gBAC7B,OAAO,EAAE;oBACL,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;oBACrB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC1B,IAAI,GAAG,GAAI,IAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;yBACjD,SAAS,CAAC,SAAA,OAAO,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;oBACxD,IAAI,YAAY,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,IAAI;wBACA,KAAiB,UAAe,EAAf,KAAA,IAAI,CAAC,QAAQ,EAAE,EAAf,cAAe,EAAf,IAAe,EAAE;4BAA7B,IAAI,IAAI,SAAA;4BACT,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;4BAChC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;yBACtC;wBACD,OAAO,IAAI,OAAO,EAAE,CAAC;qBACxB;4BACO;wBACJ,IAAI,CAAC,SAAS,EAAE,CAAC;qBACpB;oBAED,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAC7C,CAAC;aACJ,CAAC;QACN,CAAC;QAjCe,gCAAM,SAiCrB,CAAA;IACL,CAAC,EA/CgB,yBAAyB,GAAzB,kCAAyB,KAAzB,kCAAyB,QA+CzC;IAED,IAAiB,SAAS,CA0LzB;IA1LD,WAAiB,SAAS;QACtB,SAAgB,eAAe,CAAC,OAAe,EAAE,QAAgB,EAC7D,QAA+B,EAAE,IAAY,EAAE,OAAiB;YAEhE,IAAI,GAAG,GAAG,CAAC,CAAC,6BAA6B,CAAC;iBACrC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBAC7C,SAAS,CAAC,OAAO,CAAC,CAAC;YACxB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC/B,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC3B,IAAI,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACtC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,OAAO,EAAE;gBACT,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC3B;QACL,CAAC;QAfe,yBAAe,kBAe9B,CAAA;QAED,SAAgB,uBAAuB,CAAC,OAAe,EACnD,IAA2B,EAAE,IAAa,EAAE,OAAiB;YAE7D,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;gBACvB,CAAC,CAAC,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;gBACzC,IAAI,SAAS,IAAI,IAAI,EAAE;oBACnB,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;iBACvB;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC;YAEF,IAAI,IAAI,IAAI,IAAI;gBACZ,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAE9D,eAAe,CAAC,OAAO,EAAE,wBAAwB,EAC7C,UAAU,OAAO;gBACb,cAAc,GAAG,OAAO,CAAC;gBACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,SAAS,GAAG,IAAI,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC;QA1Be,iCAAuB,0BA0BtC,CAAA;QAED,SAAgB,mBAAmB,CAAC,OAAe,EAC/C,IAA2B,EAAE,MAA2B;YAExD,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;gBACvB,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7C,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC;iBACtC;qBACI;oBACD,OAAO,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;iBACnC;gBACD,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC/C,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,WAAW,CAAC;iBACxC;qBACI;oBACD,OAAO,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;iBACpC;gBAED,IAAI,SAAS,IAAI,IAAI;oBACjB,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;gBAExB,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC;YAEF,IAAI,aAAa,GAAQ,IAAI,CAAC;YAC9B,yBAAyB,CAAC,OAAO,EAAE,UAAC,KAAK,EAAE,KAAK,EAAE,IAAI;gBAClD,UAAU,GAAG,KAAK,CAAC;gBACnB,WAAW,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBACpB,aAAa,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,CAAC,EAAE,MAAM,CAAC,CAAC;YAEX,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE;gBACvC,IAAI,aAAa,IAAI,IAAI,EAAE;oBACvB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;oBACpC,aAAa,GAAG,IAAI,CAAC;iBACxB;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAzCe,6BAAmB,sBAyClC,CAAA;QAED,SAAgB,yBAAyB,CAAC,SAAiB,EACvD,QAAuE,EACvE,MAA2B;YAE3B,IAAI,GAAG,GAAG,CAAC,CAAC,iCAAiC,CAAC;iBACzC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAEvD,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;aAC3C;YAED,IAAI,SAAA,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBACjC,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,QAAe;aAC5B,CAAC,CAAC;QACP,CAAC;QAfe,mCAAyB,4BAexC,CAAA;QAED,SAAgB,aAAa,CAAC,IAAgB,EAC1C,UAAyC;YAEzC,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,cAAc,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI;gBACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY;wBACrC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE;wBACzC,CAAC,CAAC,eAAe,EAAE,CAAC;wBACpB,OAAO,KAAK,CAAC;qBAChB;iBACJ;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,KAAK;gBACnD,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC3C,IAAI;oBACA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;iBAC5B;gBACD,OAAO,GAAG,EAAE;iBACX;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;QAzBe,uBAAa,gBAyB5B,CAAA;QAED,SAAgB,8BAA8B,CAAC,IAAwB,EACnE,KAA0B,EAAE,eAAiC,EAAE,OAAe,EAC9E,gBAA8D;YAE9D,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,EAAE,YAAY;gBACtD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACnB,OAAO;iBACV;gBAED,IAAI,KAAa,CAAC;gBAClB,IAAI,KAAK,GAAG,YAAY,CAAC;gBACzB,IAAI,KAAK,GAAG,CAAC,EAAE;oBACX,KAAK,GAAG,CAAC,CAAC;iBACb;qBACI,IAAI,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;oBACtC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC1C,IAAI,KAAK,KAAK,CAAC,EAAE;wBACb,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC;qBAC5B;yBACI;wBACD,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;qBACrB;iBACJ;qBACI;oBACD,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnC,IAAI,KAAK,KAAK,CAAC,EAAE;wBACb,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC;qBAC5B;iBACJ;gBAED,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,IAAI,GAAQ,IAAI,CAAC;gBACrB,IAAI,GAAG;oBACH,CAAC,CAAC,WAAW,CAAC;wBACV,OAAO,EAAE,OAAO;wBAChB,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;wBACnC,SAAS,EAAE,UAAU,QAAQ;4BACzB,CAAC,EAAE,CAAC;4BACJ,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;gCACjB,IAAI,EAAE,CAAC;6BACV;iCACI;gCACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;6BACxB;wBACL,CAAC;qBACJ,CAAC,CAAC;gBACP,CAAC,CAAC;gBACF,IAAI,EAAE,CAAC;YACX,CAAC,CAAC,CAAC;QACP,CAAC;QApDe,wCAA8B,iCAoD7C,CAAA;IACL,CAAC,EA1LgB,SAAS,GAAT,kBAAS,KAAT,kBAAS,QA0LzB;IAED,IAAiB,0BAA0B,CA8D1C;IA9DD,WAAiB,0BAA0B;QACvC,SAAgB,cAAc,CAAC,KAAqB;YAChD,IAAI,MAAM,GAAmB,EAAE,CAAC;YAChC,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,MAAM,CAAC;aACjB;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACxC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QATe,yCAAc,iBAS7B,CAAA;QAED,SAAgB,aAAa,CAAC,IAAkB;YAC5C,IAAI,MAAM,GAAiB;gBACvB,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,UAAU,EAAE,IAAI;gBAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,KAAK;gBACjC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBACxC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBAC3C,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACvC,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;gBAC/E,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS;aACxD,CAAC;YAEF,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;gBAC/D,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAExF,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,IAAI,IAAI,IAAI;gBACZ,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACtB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YAEnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE;oBACnC,MAAM,CAAC,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;iBACjD;qBACI;oBACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;iBAC/C;aACJ;YAED,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAE7D,IAAI,SAAS,GAAI,EAAU,CAAC,IAAI,CAAE,EAAU,CAAC,cAAc,CACvD,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAEvF,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;oBAC9B,SAAA,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;iBAChE;gBAED,IAAI,WAAW,GAAI,EAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;gBAC9E,IAAI,WAAW,IAAI,IAAI,EAAE;oBACrB,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;iBACxC;gBAED,MAAM,CAAC,MAAM,GAAG,UAAC,GAAG,IAAK,OAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAArB,CAAqB,CAAC;aAClD;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAjDe,wCAAa,gBAiD5B,CAAA;IACL,CAAC,EA9DgB,0BAA0B,GAA1B,mCAA0B,KAA1B,mCAA0B,QA8D1C;IAED,IAAiB,eAAe,CAyF/B;IAzFD,WAAiB,eAAe;QAC5B,SAAgB,WAAW,CAAC,OAAe,EAAE,IAAY;YACrD,OAAO,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,CAAC;QAFe,2BAAW,cAE1B,CAAA;QAED,SAAgB,UAAU,CAAQ,OAAsC,EAAE,KAAwB,EAC9F,SAAuB;YACvB,OAAO,UAAU,GAA2B;gBACxC,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;gBACrB,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC7C,IAAI,MAAM,GAAG,0CAA0C,GAAG,EAAE,GAAG,MAAM,GAAG,aAAa,CAAC;gBACtF,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC9B,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,IAAI,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC7C,IAAI,UAAU,GAAG,MAAM,EAAE;wBACrB,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;4BACzB,OAAO,MAAM,GAAG,iDAAiD,GAAG,IAAI,CAAC;yBAC5E;6BACI;4BACD,OAAO,MAAM,GAAG,mDAAmD,GAAG,IAAI,CAAC;yBAC9E;qBACJ;iBACJ;gBACD,OAAO,MAAM,GAAG,oCAAoC,GAAG,IAAI,CAAC;YAChE,CAAC,CAAC;QACN,CAAC;QAvBe,0BAAU,aAuBzB,CAAA;QAED,SAAgB,IAAI,CAAC,MAAe;YAChC,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;aACjC;YAED,OAAO,UAAU,GAA2B;gBACxC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC;QACN,CAAC;QARe,oBAAI,OAQnB,CAAA;QAED,SAAgB,QAAQ,CAAC,MAAe;YACpC,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;aACrC;YACD,OAAO,UAAU,GAA2B;gBACxC,OAAO,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1E,CAAC,CAAC;QACN,CAAC;QAPe,wBAAQ,WAOvB,CAAA;QAED,SAAgB,QAAQ;YACpB,OAAO,UAAU,GAA2B;gBACxC,OAAO,kCAAkC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;YAC9F,CAAC,CAAC;QACN,CAAC;QAJe,wBAAQ,WAIvB,CAAA;QAED,SAAgB,MAAM,CAAC,MAAc;YACjC,OAAO,UAAU,GAA2B;gBACxC,OAAO,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9D,CAAC,CAAC;QACN,CAAC;QAJe,sBAAM,SAIrB,CAAA;QAED,SAAgB,WAAW,CAAC,IAAY;YACpC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QAFe,2BAAW,cAE1B,CAAA;QAED,SAAgB,SAAS,CAAC,IAAY;YAClC,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnD,CAAC;QAHe,yBAAS,YAGxB,CAAA;QAED,SAAgB,YAAY,CAAC,QAAgB,EAAE,EAAO,EAAE,IAAS,EAC7D,UAAkB,EAAE,MAAe;YACnC,OAAO,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC;gBACtE,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,mBAAmB;gBAC3C,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,iBAAiB;gBAChD,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,uBAAuB;gBAChD,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;gBACzC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,GAAG,IAAI;gBAC9D,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;QACtF,CAAC;QATe,4BAAY,eAS3B,CAAA;QAED,SAAgB,QAAQ,CAAC,QAAgB,EAAE,OAAe,EAAE,OAAqB,EAC7E,QAAuB,EAAE,MAAgB;YACzC,OAAO,UAAU,GAA2B;gBACxC,OAAO,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAC3C,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAC5C,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACzD,CAAC,CAAC;QACN,CAAC;QAPe,wBAAQ,WAOvB,CAAA;IACL,CAAC,EAzFgB,eAAe,GAAf,wBAAe,KAAf,wBAAe,QAyF/B;IAED,IAAiB,WAAW,CA6C3B;IA7CD,WAAiB,WAAW;QACxB,SAAgB,WAAW,CAAC,OAAuB,EAAE,eAAwB;YACzE,KAAgB,UAAO,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO,EAAE;gBAApB,IAAI,GAAG,gBAAA;gBACR,GAAG,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;gBAChB,IAAI,EAAE,IAAI,IAAI,EAAE;oBACZ,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;iBAClB;gBACD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;gBAEZ,IAAI,eAAe,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI;oBACzC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;oBACnD,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC3D,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC;iBAC5C;gBAED,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE;oBAC7C,GAAG,CAAC,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBAClD;qBACI,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE;oBAC5B,GAAG,CAAC,SAAS,GAAG,UAAU,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;wBACpD,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC/B,CAAC,CAAC;iBACL;aACJ;YAED,OAAO,OAAO,CAAC;QACnB,CAAC;QA1Be,uBAAW,cA0B1B,CAAA;QAED,SAAgB,kBAAkB,CAAC,MAAoB;YACnD,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,OAAO,IAAI,CAAC;aACf;iBACI;gBACD,OAAO,UAAU,GAAW,EAAE,IAAY,EAAE,KAAU,EAAE,MAAoB,EAAE,IAAS;oBACnF,OAAO,MAAM,CAAC;wBACV,GAAG,EAAE,GAAG;wBACR,IAAI,EAAE,IAAI;wBACV,KAAK,EAAE,KAAK;wBACZ,MAAM,EAAE,MAAM;wBACd,IAAI,EAAE,IAAI;qBACb,CAAC,CAAC;gBACP,CAAC,CAAA;aACJ;QACL,CAAC;QAfe,8BAAkB,qBAejC,CAAA;IACL,CAAC,EA7CgB,WAAW,GAAX,oBAAW,KAAX,oBAAW,QA6C3B;IAED,IAAiB,eAAe,CAoG/B;IApGD,WAAiB,eAAe;QAC5B,SAAgB,YAAY,CAAQ,IAAW,EAAE,SAA4B;YACzE,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,OAAO,MAAM,IAAI,IAAI,EAAE;gBACnB,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;oBACrB,OAAO,KAAK,CAAC;iBAChB;gBACD,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,IAAI,EAAE,GAAG,IAAI,EAAE;oBACf,MAAM,IAAK,EAAU,CAAC,yBAAyB,CAC3C,kEAAkE,CAAC,CAAC;iBAC3E;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAde,4BAAY,eAc3B,CAAA;QAED,SAAgB,UAAU,CAAQ,IAAW,EAAE,IAA6B,EACxE,WAA8B;YAC9B,OAAO,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC;gBACjC,IAAI,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,QAAQ,IAAI,IAAI,EAAE;oBAClB,OAAO,IAAI,CAAC;iBACf;gBACD,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC;QATe,0BAAU,aASzB,CAAA;QAED,SAAgB,YAAY,CAAQ,KAAc,EAAE,SAAkB;YAClE,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,KAAiB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;oBAAnB,IAAI,IAAI,cAAA;oBACR,IAAY,CAAC,UAAU,GAAG,SAAS,CAAC;iBACxC;aACJ;QACL,CAAC;QANe,4BAAY,eAM3B,CAAA;QAED,SAAgB,gBAAgB,CAAQ,IAAW,EAAE,SAAkB;YAClE,IAAY,CAAC,UAAU,GAAG,SAAS,CAAC;QACzC,CAAC;QAFe,gCAAgB,mBAE/B,CAAA;QAED,SAAgB,UAAU,CAAQ,KAAc,EAAE,KAAwB,EACtE,WAA8B,EAAE,YAAsB;YACtD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC5C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvB,IAAI,IAAI,GAAG,CAAC,EAAE;oBACV,IAAI,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;wBACzD,KAAK,IAAI,CAAC,CAAC;qBACd;yBACI,IAAI,QAAQ,IAAI,IAAI,EAAE;wBACvB,KAAK,GAAG,CAAC,CAAC;qBACb;yBACI,IAAI,QAAQ,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE;wBAChD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;4BAC1B,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;yBAChC;6BACI;4BACD,KAAK,GAAG,CAAC,CAAC;yBACb;qBACJ;iBACJ;gBACD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;gBAC3B,IAAY,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC9B,IAAI,YAAY,IAAI,IAAI,EAAE;oBACrB,IAAY,CAAC,UAAU,GAAG,YAAY,CAAC;iBAC3C;aACJ;QACL,CAAC;QA7Be,0BAAU,aA6BzB,CAAA;QAED,SAAgB,WAAW,CAAQ,CAAoB,EAAE,GAAW,EAAE,IAAY,EAC9E,IAA6B,EAAE,KAAwB;YACvD,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;gBAClC,OAAO;aACV;YACD,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;gBACtE,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;wBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;qBAC1B;yBACI;wBACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;qBAC3B;oBACD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;iBACtC;gBACD,IAAI,CAAC,CAAC,QAAQ,EAAE;oBACZ,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,IAAI;wBACA,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;qBACxC;4BACO;wBACJ,IAAI,CAAC,SAAS,EAAE,CAAC;qBACpB;iBACJ;aACJ;QACL,CAAC;QA5Be,2BAAW,cA4B1B,CAAA;IACL,CAAC,EApGgB,eAAe,GAAf,wBAAe,KAAf,wBAAe,QAoG/B;AAEL,CAAC,EApzBS,QAAQ,KAAR,QAAQ,QAozBjB;ACpzBD,IAAU,QAAQ,CAkGjB;AAlGD,WAAU,QAAQ;IACd,IAAiB,cAAc,CAgG9B;IAhGD,WAAiB,cAAc;QAC3B,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,SAAgB,oBAAoB,CAAC,OAAe,EAAE,QAAkB;YACpE,aAAa,EAAE,CAAC;YAChB,IAAI,UAAU,GAAG,sBAAsB,GAAG,aAAa,CAAC;YACxD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;gBACxB,QAAQ,EAAE,CAAC;aACd;iBACI;gBACD,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,EAAE,UAAU,CAAC;wBACjD,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;4BACxB,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC;4BAC5C,IAAI,CAAC,QAAQ,EAAE;gCACX,QAAQ,GAAG,IAAI,CAAC;gCAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;gCACtC,QAAQ,EAAE,CAAC;6BACd;yBACJ;oBACL,CAAC,CAAC,CAAC;iBACN;gBACD,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,UAAA,CAAC;wBACxB,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;4BACrC,QAAQ,GAAG,IAAI,CAAC;4BAChB,QAAQ,EAAE,CAAC;yBACd;oBACL,CAAC,CAAC,CAAC;iBACN;gBACD,IAAI,MAAc,CAAC;gBACnB,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;oBAC/B,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;iBACnD;qBACI;oBACD,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;iBACtE;gBACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBACnB,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,EAAE;wBACjE,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC;wBAC1C,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;wBACzC,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE;4BACrC,QAAQ,GAAG,IAAI,CAAC;4BAChB,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;4BACtC,QAAQ,EAAE,CAAC;yBACd;oBACL,CAAC,CAAC,CAAC;iBACN;gBACD,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE;oBAChC,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;wBACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;wBACtC,IAAI,CAAC,QAAQ,EAAE;4BACX,QAAQ,GAAG,IAAI,CAAC;4BAChB,QAAQ,EAAE,CAAC;yBACd;qBACJ;gBACL,CAAC,CAAC,CAAC;aACN;QACL,CAAC;QA1De,mCAAoB,uBA0DnC,CAAA;QAED,SAAgB,yBAAyB,CAAC,OAAe,EAAE,QAAkB,EAAE,gBAAyB;YACpG,aAAa,EAAE,CAAC;YAChB,IAAI,UAAU,GAAG,2BAA2B,GAAG,aAAa,CAAC;YAC7D,IAAI,UAAU,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YAExC,IAAI,UAAU,IAAI,gBAAgB,EAAE;gBAChC,QAAQ,EAAE,CAAC;aACd;YAED,IAAI,KAAK,GAAG,UAAU,CAAM;gBACxB,IAAI,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;oBACxB,IAAI,CAAC,UAAU,EAAE;wBACb,UAAU,GAAG,IAAI,CAAC;wBAClB,QAAQ,EAAE,CAAC;qBACd;iBACJ;qBACI;oBACD,UAAU,GAAG,KAAK,CAAC;iBACtB;YACL,CAAC,CAAC;YAEF,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC;aACpD;YAED,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;YACvE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC;aAC/E;YAED,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QAhCe,wCAAyB,4BAgCxC,CAAA;IACL,CAAC,EAhGgB,cAAc,GAAd,uBAAc,KAAd,uBAAc,QAgG9B;AACL,CAAC,EAlGS,QAAQ,KAAR,QAAQ,QAkGjB;AClGD,IAAU,QAAQ,CA+CjB;AA/CD,WAAU,QAAQ;IACd,IAAiB,eAAe,CA6C/B;IA7CD,WAAiB,eAAe;QAC5B,SAAgB,gBAAgB,CAAC,MAAW,EAAE,KAA2B,EACrE,UAAiD,EAAE,UAAoB;YACvE,IAAI,UAAU,GAAI,KAAa,CAAC,UAAU,CAAC;YAC3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,EAAE,UAAU,CAAoB,EAAE,GAAQ;gBACtF,IAAI,UAAU,EAAE;oBACZ,MAAM,CAAC,UAAU,CAAC;wBACd,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACvB,CAAC,EAAE,CAAC,CAAC,CAAC;iBACT;qBACI;oBACD,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBACtB;YACL,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,EAAE;gBAC5B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAhBe,gCAAgB,mBAgB/B,CAAA;QAED,SAAgB,iBAAiB,CAAC,MAA4B;YAC1D,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC9C,OAAO,MAAM,CAAC;QAClB,CAAC;QAHe,iCAAiB,oBAGhC,CAAA;QAED,SAAgB,kBAAkB,CAAC,OAAe;YAC9C,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACvC,OAAO,OAAO,CAAC;QACnB,CAAC;QAHe,kCAAkB,qBAGjC,CAAA;QAED,SAAgB,gBAAgB,CAAC,MAAW,EAAE,KAA2B,EAAE,UAAoB;YAC3F,OAAO,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,GAAG;gBACnD,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACjD,CAAC,EAAE,UAAU,CAAC,CAAC;QACnB,CAAC;QAJe,gCAAgB,mBAI/B,CAAA;QAED,SAAgB,OAAO,CAAC,cAAmB,EAAE,SAAiB;YAC1D,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAoB;gBACnE,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;YAClG,CAAC,CAAC,CAAC;YACH,OAAO,cAAc,CAAC;QAC1B,CAAC;QALe,uBAAO,UAKtB,CAAA;QAED,SAAgB,oBAAoB,CAAC,OAAe;YAChD,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,CAAC;QAFe,oCAAoB,uBAEnC,CAAA;IACL,CAAC,EA7CgB,eAAe,GAAf,wBAAe,KAAf,wBAAe,QA6C/B;AACL,CAAC,EA/CS,QAAQ,KAAR,QAAQ,QA+CjB;AC/CD,IAAU,QAAQ,CA0FjB;AA1FD,WAAU,QAAQ;IACd,IAAiB,cAAc,CAwF9B;IAxFD,WAAiB,cAAc;QAC3B,SAAgB,WAAW,CAAC,IAAY,EAAE,MAAc,EAAE,UAAmB;YACzE,IAAI,CAAC,IAAI;gBACL,OAAO;YAEX,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG;gBACJ,OAAO;YAEX,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO;aACV;YAED,IAAI,UAAU,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACvD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;aACpC;YAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QAlBe,0BAAW,cAkB1B,CAAA;QAED,SAAgB,MAAM,CAAC,IAAY,EAAE,MAAc,EAAE,OAAgB;YACjE,IAAI,CAAC,IAAI;gBACL,OAAO;YAEX,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG;gBACJ,OAAO;YAEX,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO;aACV;YAED,IAAI,CAAC,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;aACpC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QAlBe,qBAAM,SAkBrB,CAAA;QAED,SAAgB,YAAY,CAAC,IAAY;YACrC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;iBACzB,QAAQ,CAAC,IAAI,CAAC;iBACd,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;iBACjC,QAAQ,CAAC,GAAG,CAAC;iBACb,IAAI,CAAC,MAAM,CAAC;iBACZ,QAAQ,EAAE,CAAC;YAEhB,IAAI,MAAM,GAAG,MAAM,CAAC;YACpB,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,SAAS,IAAI,CAAC,EAAE;gBAChB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;aACjD;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAde,2BAAY,eAc3B,CAAA;QAED,SAAgB,UAAU,CAAC,IAAY;YACnC,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,EAAE;gBACb,UAAU,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;oBACrE,IAAI,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC9C,IAAI,MAAM,GAAG,MAAM,CAAC;oBACpB,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACzC,IAAI,SAAS,IAAI,CAAC,EAAE;wBAChB,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;qBACjD;oBACD,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;aACvC;YAED,OAAO,UAAU,CAAC;QACtB,CAAC;QAjBe,yBAAU,aAiBzB,CAAA;QAED,SAAgB,SAAS,CAAC,IAAY,EAAE,MAAc;YAClD,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG;gBACJ,OAAO;YACX,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO;aACV;YACD,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;aACxC;QACL,CAAC;QAXe,wBAAS,YAWxB,CAAA;IACL,CAAC,EAxFgB,cAAc,GAAd,uBAAc,KAAd,uBAAc,QAwF9B;AACL,CAAC,EA1FS,QAAQ,KAAR,QAAQ,QA0FjB;AC1FD,IAAU,QAAQ,CA8MjB;AA9MD,WAAU,QAAQ;IACd,IAAiB,YAAY,CAsL5B;IAtLD,WAAiB,YAAY;QAEzB,SAAgB,cAAc,CAAC,OAA2B;YACtD,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC/C,IAAI,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;iBAC/C,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;iBACtC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;iBACxD,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE9D,IAAI,OAAO,CAAC,aAAa,EAAE;gBACvB,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;aAC5C;YAEA,WAAmB,CAAC,UAAU,CAAC;gBAC5B,QAAQ,EAAE,MAAM;gBAChB,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,SAAS,EAAE,OAAO,CAAC,IAAI;gBACvB,IAAI,EAAE,UAAU,CAAoB,EAAE,IAAS;oBAC3C,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC3B,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;wBAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACxD;gBACL,CAAC;gBACD,KAAK,EAAE;oBACH,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChB,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;wBAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;qBAC3B;gBACL,CAAC;gBACD,IAAI,EAAE;oBACF,CAAC,CAAC,SAAS,EAAE,CAAC;oBACd,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;wBAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;qBAC3B;gBACL,CAAC;gBACD,QAAQ,EAAE,UAAU,EAAqB,EAAE,KAAU;oBACjD,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;wBAC1B,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;wBAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC;qBACtE;gBACL,CAAC;aACJ,CAAC,CAAC;YACH,OAAO,WAAW,CAAC;QACvB,CAAC;QAzCe,2BAAc,iBAyC7B,CAAA;QAED,SAAgB,qBAAqB,CAAC,IAAoB,EACtD,GAA6B;YAE7B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;gBACrC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;gBACvD,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE;gBAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,EAC9D,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE;gBAC5C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,EAC5D,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,OAAO,IAAI,CAAC;aACf;YACD,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;gBAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzE,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;gBAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzE,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE;gBAClD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3E,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE;gBAClD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC3E,OAAO,KAAK,CAAC;aAChB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QArCe,kCAAqB,wBAqCpC,CAAA;QAED,SAAgB,mBAAmB,CAAC,IAAY,EAAE,KAAa;YAC3D,OAAO,IAAI,GAAG,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QACtD,CAAC;QAFe,gCAAmB,sBAElC,CAAA;QAED,SAAgB,eAAe,CAAC,KAAa;YACzC,IAAI,QAAQ,GAAI,EAAU,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;YAC5D,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,QAAQ,GAAI,EAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC3D,MAAM,GAAG,IAAI,CAAC;aACjB;YACD,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,IAAI,KAAK,CAAC;YACV,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1D;iBACI;gBACD,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;aACxB;YACD,OAAO,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;QAChC,CAAC;QAhBe,4BAAe,kBAgB9B,CAAA;QAED,SAAgB,iBAAiB,CAAC,QAAgB;YAC9C,IAAI,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;gBAC3B,OAAO,KAAK,CAAC;aAChB;YACD,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YAClC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;gBAChE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QAPe,8BAAiB,oBAOhC,CAAA;QAED,SAAgB,aAAa,CAAC,QAAgB;YAC1C,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACtC;YACD,OAAO,QAAQ,GAAG,QAAQ,CAAC;QAC/B,CAAC;QAPe,0BAAa,gBAO5B,CAAA;QAED,SAAgB,SAAS,CAAC,QAAgB;YACtC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;QAChD,CAAC;QAHe,sBAAS,YAGxB,CAAA;QAED,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAY;YAC9C,IAAY,CAAC,QAAQ,CAAC;gBACnB,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC;gBACvD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC;gBACtD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC;gBACjD,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC;aACtD,CAAC,CAAC;QACP,CAAC;QAPe,qBAAQ,WAOvB,CAAA;QAED,SAAgB,mBAAmB,CAAC,SAAiB,EAAE,KAAqB,EACxE,mBAA6B,EAAE,SAAkB;YAEjD,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;YACpB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC/C,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC/D,IAAI,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/C,IAAI,OAAO,EAAE;oBACT,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;iBAC7B;qBACI;oBACD,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;iBAC9B;gBACD,IAAI,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC;gBAC3B,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACrD,IAAI,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBACrD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7B,IAAI,SAAS,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI;oBACrC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE;oBACvC,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;iBACnC;gBAED,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;oBAChC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;iBACrC;gBAED,IAAI,OAAO,EAAE;oBACT,KAAK,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,GAAG,SAAS,CAC5C,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1C,QAAQ,CAAC,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;iBACjC;gBAED,IAAI,mBAAmB,EAAE;oBACrB,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;yBAC9C,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;iBACjD;gBAED,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC1B;QACL,CAAC;QA3Ce,gCAAmB,sBA2ClC,CAAA;IACL,CAAC,EAtLgB,YAAY,GAAZ,qBAAY,KAAZ,qBAAY,QAsL5B;AAuBL,CAAC,EA9MS,QAAQ,KAAR,QAAQ,QA8MjB;AC9MD,IAAU,QAAQ,CA6MjB;AA7MD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,UAAU;YADtB,SAAA,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;WACvC,UAAU,CACtB;QAAD,iBAAC;KAAA,AADD,IACC;IADY,mBAAU,aACtB,CAAA;IAcD,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;YAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YACvD,KAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAE,KAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;SAC/E;aACI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;YAC7B,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACrD,KAAa,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAE,KAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;SAC/E;aACI;YACD,MAAM,CAAC,OAAO,CAAC,GAAG;gBACd,SAAS,EAAE,cAAc,CAAQ;gBACjC,QAAQ,EAAE,YAAmB;gBAC7B,aAAa,EAAE,cAAc,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAQ;aACnE,CAAA;YACR,MAAM,CAAC,UAAU,CAAC,GAAG;gBACjB,MAAM,EAAE,cAAc,MAAM,KAAK,CAAC,gEAAgE,CAAC,CAAC,CAAC,CAAC;aACzG,CAAA;SACJ;KACJ;IAGD;QAAsC,0BAA8B;QAQhE,gBAAY,OAAe,EAAE,OAAkB;YAA/C,YACI,kBAAM,OAAO,CAAC,SA4BjB;YA1BG,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,KAAI,CAAC,OAAO,GAAG,OAAO,IAAK,EAAe,CAAC;YAE3C,KAAI,CAAC,UAAU,GAAG,QAAM,CAAC,aAAa,CAAE,EAAU,CAAC,eAAe,CAAC,KAAI,CAAC,CAAC,CAAC;YAC1E,KAAI,CAAC,UAAU,GAAG,KAAI,CAAC,UAAU,GAAG,CAAC,QAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE3E,IAAI,OAAO,CAAC,IAAI,CAAC,KAAI,CAAC,UAAU,CAAC,EAAE;gBAC/B,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,uCAAuC,EAAE,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aAC9F;YAED,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBACvC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,EAAE;oBAC3B,OAAO;iBACV;gBACD,KAAI,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE,KAAI,CAAC,CAAC;YAE/B,KAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,IAAI,KAAI,CAAC,aAAa,EAAE,EAAE;gBACtB,MAAM,CAAC,UAAU,CAAC;oBACd,IAAI,OAAO,IAAI,CAAC,KAAI,CAAC,YAAY,EAAE;wBAC/B,KAAI,CAAC,YAAY,GAAG,KAAI,CAAC,eAAe,EAAE,CAAC;qBAC9C;gBACL,CAAC,EAAE,CAAC,CAAC,CAAC;aACT;;QACL,CAAC;mBArCQ,MAAM;QAuCR,wBAAO,GAAd;YACI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,GAAI,EAAU,CAAC,WAAW,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC7B,CAAC;QAES,4BAAW,GAArB;YACI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9C,CAAC;QAES,4BAAW,GAArB;YACI,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,KAAK,GAAG,IAAI,GAAI,EAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,SAAS,GAAG,CAAC,CAAC,UAAU,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAE1E,KAAc,UAAuB,EAAvB,KAAA,CAAC,CAAC,MAAM,CAAC,cAAc,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;gBAAlC,IAAI,CAAC,SAAA;gBACN,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE;oBAClC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC3C,MAAM;iBACT;aACJ;YAED,SAAS,GAAG,IAAI,GAAG,SAAS,CAAC;YAC7B,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC;QACnC,CAAC;QAES,gCAAe,GAAzB;YACI,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7B,CAAC;QAES,8BAAa,GAAvB;YACI,OAAQ,EAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC;QAEa,oBAAa,GAA3B,UAA4B,IAAc;YACtC,OAAO,CAAC,CAAC,UAAU,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;QAEa,iBAAU,GAAxB,UAAkC,UAA6C;YAC3E,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACzF,IAAI,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YACjF,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;QAAA,CAAC;QAEY,aAAM,GAApB,UAAyD,MAAyC;YAC9F,IAAI,MAAe,CAAC;YAEpB,IAAK,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;gBAC7D,MAAM,GAAG,IAAK,MAAM,CAAC,IAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,MAAM,CAAC,SAAS;oBAChB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC9C,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aACpD;iBACI;gBACD,IAAI,CAAC,GAAG,QAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,MAAM,CAAC,SAAS;oBAChB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;aAC/C;YAED,IAAI,MAAM,CAAC,aAAa,EAAE;gBACtB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBACxB;gBACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACtC;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAEM,qBAAI,GAAX,UAAY,MAA8B;YAA1C,iBAMC;YALG,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,MAAM,EAAE;gBACR,OAAO,CAAC,IAAI,CAAC,cAAM,OAAA,MAAM,CAAC,KAAI,CAAC,EAAZ,CAAY,CAAC,CAAC;aACpC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,2BAAU,GAAjB;YACI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;aAC5B;YAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;aAC9C;YAED,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;;QApIc,uBAAgB,GAAG,CAAC,CAAC;QAsIrB,qBAAc,GAAG,IAAI,CAAC;QAvI5B,MAAM;YADlB,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE;WACvB,MAAM,CAyIlB;QAAD,aAAC;KAAA,AAzID,CAAsC,KAAK,CAAC,SAAS,GAyIpD;IAzIY,eAAM,SAyIlB,CAAA;IAyBD,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,UAAU,UAAkB,EAAE,IAA4B;QAC3F,OAAO,SAAA,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC,CAAA;AACL,CAAC,EA7MS,QAAQ,KAAR,QAAQ,QA6MjB;AC5MD,IAAU,QAAQ,CAsEjB;AAtED,WAAU,QAAQ;IACd,IAAiB,gBAAgB,CA8ChC;IA9CD,WAAiB,gBAAgB;QAC7B,SAAgB,WAAW,CAAC,IAAY,EAAE,kBAAiC,EAAE,aAAyB;YAClG,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;YACrC,IAAK,WAAmB,CAAC,YAAY,EAAE;gBACnC,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,kBAAkB,IAAI,IAAI,IAAI,kBAAkB,EAAE,KAAK,KAAK,EAAE;gBAC9D,OAAO,KAAK,CAAC;aAChB;YACD,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,qBAAqB,CAAC;YACtD,WAAW,CAAC,eAAe,CAAC,GAAG;gBAC3B,IAAI,aAAa,IAAI,IAAI,EAAE;oBACvB,aAAa,EAAE,CAAC;iBACnB;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QAChB,CAAC;QAlBe,4BAAW,cAkB1B,CAAA;QAED,SAAgB,MAAM,CAAC,IAAY,EAAE,kBAAiC,EAAE,aAAyB;YAC7F,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;YACrC,IAAK,WAAmB,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3C,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,kBAAkB,IAAI,IAAI,IAAI,kBAAkB,EAAE,KAAK,KAAK,EAAE;gBAC9D,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE;gBACnB,OAAO,KAAK,CAAC;aAChB;YACD,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,aAAa,EAAE,CAAC;aACnB;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAhBe,uBAAM,SAgBrB,CAAA;QAED,SAAgB,YAAY,CAAC,OAAe;YACxC,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnB,OAAO,IAAI,CAAC;aACf;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QANe,6BAAY,eAM3B,CAAA;IACL,CAAC,EA9CgB,gBAAgB,GAAhB,yBAAgB,KAAhB,yBAAgB,QA8ChC;IAED,IAAiB,EAAE,CAoBlB;IApBD,WAAiB,EAAE;QACf,SAAgB,iBAAiB,CAAC,OAAe,EAAE,UAAkB,EAAE,IAA4B;YAC/F,IAAG,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,OAAO,CAAC;aAClB;YACD,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;aAC3C;YACD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,UAAU,EAAE,IAAW,CAAC,CAAC;YACrF,OAAO,OAAO,CAAC;QACnB,CAAC;QATe,oBAAiB,oBAShC,CAAA;QAED,SAAgB,oBAAoB,CAAC,OAAe,EAAE,UAAkB;YACpE,OAAO,CAAC,MAAM,CAAC,iBAAiB,GAAG,UAAU,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC;QACnB,CAAC;QAHe,uBAAoB,uBAGnC,CAAA;QAED,SAAgB,eAAe,CAAC,SAAqC,EAAE,MAA4B;YAC/F,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAQ,CAAC,CAAC;QACvD,CAAC;QAFe,kBAAe,kBAE9B,CAAA;IACL,CAAC,EApBgB,EAAE,GAAF,WAAE,KAAF,WAAE,QAoBlB;AACL,CAAC,EAtES,QAAQ,KAAR,QAAQ,QAsEjB;ACvED,IAAU,QAAQ,CAqIjB;AArID,WAAU,QAAQ;IAGd;QAA+C,mCAAgB;QAK3D,yBAAY,SAAiB,EAAE,OAAkB;YAAjD,YACI,kBAAM,SAAS,EAAE,OAAO,CAAC,SAsB5B;YApBG,KAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YAEtC,IAAI,YAAY,GAAG,KAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,KAAI,CAAC,QAAQ,CAAC,CAAC;YAEpF,yDAAyD;YACzD,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,OAAO,IAAI,EAAE;gBACT,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAChD,IAAI,GAAG,GAAG,CAAC;oBACP,MAAM;gBACV,IAAI,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC3C,IAAI,GAAG,GAAG,CAAC;oBACP,MAAM;gBACV,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;gBACtD,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBACjF,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;aAC3B;YAED,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;QACpC,CAAC;4BA5BQ,eAAe;QA8Bd,8BAAI,GAAd,UAAe,EAAU;YACrB,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QAEO,8BAAI,GAAZ,UAAsB,EAAU,EAAE,IAAuC;YACrE,OAAO,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QAEc,yBAAS,GAAxB,UAAyB,CAAS;YAC9B,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,IAAI,CAAC,EAAE;gBACb,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC9B;YACD,OAAO,CAAC,CAAC;QACb,CAAC;QAEO,gDAAsB,GAA9B;YACI,OAAO,iBAAe,CAAC,SAAS,CAAE,EAAU,CAAC,WAAW,CACnD,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QAES,yCAAe,GAAzB;YAEI,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,QAAQ,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEjD,IAAI,aAAa,GAAG,iBAAe,CAAC,aAAa,CAAC;YAElD,IAAI,UAAU,GAAG,iBAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,OAAO,UAAU,CAAC;aACrB;YAED,OAAO,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,MAAM,EAAE;gBACrC,IAAI,IAAI,GAAG,iBAAe,CAAC,SAAS,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBAExE,KAAc,UAAuB,EAAvB,KAAA,CAAC,CAAC,MAAM,CAAC,cAAc,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;oBAAlC,IAAI,CAAC,SAAA;oBACN,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE;wBAC7B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBACjC,MAAM;qBACT;iBACJ;gBAED,IAAI,CAAC,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE;oBACzC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAC/B,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACpC,IAAI,CAAC,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC;oBACvC,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAC/B,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,GAAG,iBAAe,CAAC,SAAS,CAAE,EAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC;oBACvC,CAAC,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzC,iBAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAC/C,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,GAAI,EAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aACxC;YAED,aAAa,CAAC,QAAQ,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACrE,OAAO,UAAU,CAAC;QACtB,CAAC;QAES,6CAAmB,GAA7B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,qCAAW,GAArB;YACI,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAE1C,IAAI,MAAM,GAAG,CAAC,CAAC,kBAAkB,GAAG,YAAY,CAAC,CAAC;YAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;aACxB;YAED,IAAI,QAAgB,CAAC;YACrB,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,WAAW,GAAG,YAAY,CAAC;gBAChD,IAAI,CAAC,sBAAsB,EAAE,IAAI,YAAY,EAAE;gBAC/C,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACtC,IAAI,QAAQ,IAAI,IAAI;oBAChB,OAAO,QAAQ,CAAC;aACvB;YAED,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAEvC,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CACpB,yDAAyD,EACxD,EAAU,CAAC,WAAW,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;aAClF;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC;;QA7Hc,6BAAa,GAAyB,EAAE,CAAC;QAH/C,eAAe;YAD3B,QAAQ,CAAC,UAAU,CAAC,aAAa,EAAE;WACvB,eAAe,CAiI3B;QAAD,sBAAC;KAAA,AAjID,CAA+C,SAAA,MAAM,GAiIpD;IAjIY,wBAAe,kBAiI3B,CAAA;AACL,CAAC,EArIS,QAAQ,KAAR,QAAQ,QAqIjB;ACrID,IAAU,QAAQ,CAWjB;AAXD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,aAAa;YADzB,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE;WAC3B,aAAa,CACzB;QAAD,oBAAC;KAAA,AADD,IACC;IADY,sBAAa,gBACzB,CAAA;AAOL,CAAC,EAXS,QAAQ,KAAR,QAAQ,QAWjB;ACXD,IAAU,QAAQ,CAUjB;AAVD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,YAAY;YADxB,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE;WAC3B,YAAY,CACxB;QAAD,mBAAC;KAAA,AADD,IACC;IADY,qBAAY,eACxB,CAAA;AAML,CAAC,EAVS,QAAQ,KAAR,QAAQ,QAUjB;ACVD,IAAU,QAAQ,CASjB;AATD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,aAAa;YADzB,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE;WAC3B,aAAa,CACzB;QAAD,oBAAC;KAAA,AADD,IACC;IADY,sBAAa,gBACzB,CAAA;AAKL,CAAC,EATS,QAAQ,KAAR,QAAQ,QASjB;ACTD,IAAU,QAAQ,CASjB;AATD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,aAAa;YADzB,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE;WAC3B,aAAa,CACzB;QAAD,oBAAC;KAAA,AADD,IACC;IADY,sBAAa,gBACzB,CAAA;AAKL,CAAC,EATS,QAAQ,KAAR,QAAQ,QASjB;ACTD,IAAU,QAAQ,CAUjB;AAVD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,YAAY;YADxB,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE;WAC3B,YAAY,CACxB;QAAD,mBAAC;KAAA,AADD,IACC;IADY,qBAAY,eACxB,CAAA;AAML,CAAC,EAVS,QAAQ,KAAR,QAAQ,QAUjB;ACVD,IAAU,QAAQ,CAUjB;AAVD,WAAU,QAAQ;IAQd;QAAA;QACA,CAAC;QADY,SAAS;YADrB,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;WAC/C,SAAS,CACrB;QAAD,gBAAC;KAAA,AADD,IACC;IADY,kBAAS,YACrB,CAAA;AACL,CAAC,EAVS,QAAQ,KAAR,QAAQ,QAUjB;ACVD,IAAU,QAAQ,CAuEjB;AAvED,WAAU,QAAQ;IA6Dd,IAAY,WAOX;IAPD,WAAY,WAAW;QACnB,sDAAa,CAAA;QACb,6CAAQ,CAAA;QACR,2CAAO,CAAA;QACP,2CAAO,CAAA;QACP,2CAAO,CAAA;QACP,2CAAO,CAAA;IACX,CAAC,EAPW,WAAW,GAAX,oBAAW,KAAX,oBAAW,QAOtB;IAED,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAA;AACzE,CAAC,EAvES,QAAQ,KAAR,QAAQ,QAuEjB;ACvED,IAAU,QAAQ,CAoXjB;AApXD,WAAU,QAAQ;IAEd,IAAO,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAA;IAI1C;QAAgC,8BAAW;QAQvC,oBAAY,KAAa;YAAzB,YACI,kBAAM,KAAK,CAAC,SA2Cf;YAzCG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACxB,KAAK,CAAC,UAAU,CAAC;gBACb,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,UAAC,GAAG,EAAE,IAAI;oBAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAQ,CAAC;gBAC9C,CAAC;gBACD,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,SAAS,EAAE,UAAU,CAAC;aACpD,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBACpC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,KAAI,CAAC,YAAY,EAAE,EAAE;oBACxC,IAAI,KAAI,CAAC,eAAe,EAAE,IAAK,EAAU,CAAC,KAAK,EAAE,EAAE;wBAC/C,KAAI,CAAC,eAAe,CAAE,EAAU,CAAC,KAAK,EAAE,CAAC,CAAC;wBAC1C,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;qBAClC;iBACJ;qBACI;oBACD,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;iBACzC;YACL,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAE7E,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAI,CAAC,UAAU,EAAE,UAAA,EAAE;gBACpD,IAAI,KAAK,GAAG,KAAI,CAAC,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;oBACxB,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,YAAY,EAAE,CAAC,IAAK,EAAU,CAAC,cAAc,CAAC,KAAK,EAAE,KAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE;oBACrG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,KAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC1F;gBAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,YAAY,EAAE,CAAC,IAAK,EAAU,CAAC,cAAc,CAAC,KAAK,EAAE,KAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;oBACtG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,KAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;iBAC1F;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;;QAC5B,CAAC;QAED,8BAAS,GAAT;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,OAAO,IAAI,CAAC;aACf;YAEV,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,sBAAI,6BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAcD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAhBA;QAED,8BAAS,GAAT,UAAU,KAAa;YACnB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACxB;iBACL,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE;gBAC9D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAE,EAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;aAC7D;iBACL;gBACQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;aAC/C;QACL,CAAC;QAMO,oCAAe,GAAvB;YACI,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;gBACnC,OAAO,IAAI,CAAC;aACf;YAEV,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,sBAAI,mCAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBAUD,UAAgB,CAAO;gBACnB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;;;WAZA;QAEO,oCAAe,GAAvB,UAAwB,KAAW;YAC/B,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aACxB;YAEV,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;QAC7C,CAAC;QAMD,iCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,iCAAY,GAAZ,UAAa,KAAc;YAEvB,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC/B,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;iBACxE;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAC5D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;iBACtE;aACJ;QACL,CAAC;QAMD,iCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,iCAAY,GAAZ,UAAa,KAAa;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QAGD,iCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,iCAAY,GAAZ,UAAa,KAAa;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,gCAAW,GAAX;YACI,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,gCAAW,GAAX,UAAY,KAAW;YACnB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;QACzD,CAAC;QAGD,gCAAW,GAAX;YACI,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,gCAAW,GAAX,UAAY,KAAW;YACnB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;QACzD,CAAC;QAGD,kCAAa,GAAb;YACI,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,CAAC;QACxF,CAAC;QAED,kCAAa,GAAb,UAAc,KAAc;YACxB,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAChC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;aACnC;iBACL;gBACQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aAC3B;QACL,CAAC;QAsBM,yBAAc,GAArB,UAAsB,CAAoB;YAEtC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;gBAC/B,OAAO;aACV;YAED,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBACrB,OAAO;aACV;YAED,IAAI,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;gBACjD,OAAO;aACV;YAED,IAAI,GAAG,GAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAK,KAAK,CAAC,CAAC,CAAS,CAAC,YAAY,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE;gBACvE,OAAO;aACV;YAED,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;gBACvE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EACzE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC9B,OAAO;aACV;YAED,SAAS,SAAS,CAAC,CAAS;gBACxB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,CAAC;YAED,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE;gBAEnC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa;oBACzE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;oBACxD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzC,OAAO;iBACV;gBAED,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;oBACxD,OAAO;iBACV;gBAED,QAAQ,GAAG,CAAC,MAAM,EAAE;oBAChB,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;4BAC9B,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;4BAChB,MAAM;yBACT;6BACI;4BACD,OAAO;yBACV;qBACJ;oBAED,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;4BAC1C,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG;gCACrD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;4BAC5C,MAAM;yBACT;6BACI;4BACD,OAAO;yBACV;qBACJ;oBAED,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;4BAC3C,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;4BAChB,MAAM;yBACT;6BACI,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BACjC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC5B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;4BAC3C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gCAC/B,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;4BAC5E,MAAM;yBACT;6BACI;4BACD,MAAM;yBACT;qBACJ;oBACD,OAAO,CAAC,CAAC;wBACL,OAAO;qBACV;iBACJ;gBACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAClB;YAED,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;gBACrF,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC3C,QAAQ,GAAG,CAAC,MAAM,EAAE;oBAChB,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;4BACzB,OAAO;yBACV;wBACD,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;wBAChB,MAAM;qBACT;oBAED,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;4BAC/B,OAAO;yBACV;wBACD,MAAM;qBACT;oBAED,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC7B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa;4BACzC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;4BACzB,OAAO;yBACV;wBAED,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC1E,MAAM;qBACT;oBAED,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;4BAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gCAC7B,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;gCAC/B,OAAO;6BACV;4BAED,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;4BAChB,MAAM;yBACT;6BACI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;4BAC/C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gCAC7B,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gCAC7B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;gCACzB,OAAO;6BACV;4BAED,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa;gCACzD,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BACxB,MAAM;yBACT;6BACI;4BACD,OAAO;yBACV;qBACJ;oBACD,KAAK,CAAC,CAAC,CAAC;wBACJ,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa;4BACzC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC7B,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAC7B,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;4BAC/B,OAAO;yBACV;wBAED,MAAM;qBACT;oBAED,OAAO,CAAC,CAAC;wBACL,OAAO;qBACV;iBACJ;gBAED,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;aAC5C;QACL,CAAC;QAAA,CAAC;QAzLK,0BAAe,GAAG,UAAU,CAAoB;YACnD,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;gBAC/B,OAAO;aACV;YACD,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBACrB,OAAO;aACV;YACD,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAK,EAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;gBACvD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aACtH;YACD,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE;gBACnD,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;aACpC;QACL,CAAC,CAAC;QAvEF;YADC,MAAM,EAAE;qDACgB;QAGzB;YADC,MAAM,EAAE;sDAGR;QAOD;YADC,MAAM,EAAE;sDAGR;QAeD;YADC,MAAM,EAAE;qDAGR;QAOD;YADC,MAAM,EAAE;uDAGR;QAtKQ,UAAU;YAFtB,SAAA,UAAU,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,SAAA,YAAY,EAAE,SAAA,SAAS,CAAC,CAAC;YAC3E,SAAA,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC;WAC9B,UAAU,CA6WtB;QAAD,iBAAC;KAAA,AA7WD,CAAgC,SAAA,MAAM,GA6WrC;IA7WY,mBAAU,aA6WtB,CAAA;AACL,CAAC,EApXS,QAAQ,KAAR,QAAQ,QAoXjB;ACpXD,IAAU,QAAQ,CA4RjB;AA5RD,WAAU,QAAQ;IAEd,IAAO,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAA;IAI1C;QAAoC,kCAA6B;QAS7D,wBAAY,KAAa,EAAE,GAA2B;YAAtD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAoFpB;YAlFG,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,UAAU,CAAC;gBAChD,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE;oBACR,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAQ;gBACR,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC;aAC5D,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBACpC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,KAAI,CAAC,YAAY,EAAE,EAAE;oBACxC,IAAI,KAAI,CAAC,eAAe,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE;wBACvC,KAAI,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;wBACjC,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;qBAClC;iBACJ;qBACI;oBACD,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;iBACzC;YACL,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,EAClC,SAAA,UAAU,CAAC,eAAe,CAAC,CAAC;YAEhC,KAAI,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;YACpE,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACjD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,KAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAChC;iBACI;gBACD,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAC7C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,KAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;iBACjC;qBACI;oBACD,KAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAChC;aACJ;YAED,IAAI,OAAO,GAAG,gBAAc,CAAC,cAAc,CACvC,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EACxC,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EACxC,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;YAEjD,KAAc,UAAO,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO,EAAE;gBAAlB,IAAI,CAAC,gBAAA;gBACN,CAAC,CAAC,SAAS,CAAC,KAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAChC;YAED,SAAA,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAI,CAAC,UAAU,EAAE,UAAA,EAAE;gBAC3C,IAAI,KAAK,GAAG,KAAI,CAAC,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;oBACxB,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,YAAY,EAAE,CAAC;oBACpC,EAAU,CAAC,cAAc,CAAC,KAAK,EAAE,KAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE;oBAC5D,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,EACxC,CAAC,CAAC,UAAU,CAAC,KAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;iBAChD;gBAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,YAAY,EAAE,CAAC;oBACpC,EAAU,CAAC,cAAc,CAAC,KAAK,EAAE,KAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;oBAC7D,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,EACxC,CAAC,CAAC,UAAU,CAAC,KAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;iBAChD;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEzB,CAAC,CAAC,uDAAuD,CAAC;iBACrD,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;iBAC3B,WAAW,CAAC,KAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAA,EAAE;gBAC5B,IAAI,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;oBACnC,OAAO;iBACV;gBACD,KAAI,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACjC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEP,KAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE;gBAC/B,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;;QACP,CAAC;2BA9FQ,cAAc;QAgGvB,kCAAS,GAAT;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,OAAO,IAAI,CAAC;aACf;YAEV,IAAI,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACxC,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,MAAM,GAAG,QAAQ,GAAG,GAAG,GAAG,QAAQ,GAAG,SAAS,CAAC;YAEnD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACrB,MAAM,GAAG,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;aAC/D;YAEV,OAAO,MAAM,CAAC;QACT,CAAC;QAED,sBAAI,iCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAmBD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WArBA;QAED,kCAAS,GAAT,UAAU,KAAa;YACnB,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aAC1B;iBACL,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;gBAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAE,EAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aAC1B;iBACL;gBACQ,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrF,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;aAC7C;QACL,CAAC;QAMO,wCAAe,GAAvB;YACI,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;gBACnC,OAAO,IAAI,CAAC;aACf;YAEV,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,sBAAI,uCAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBAUD,UAAgB,KAAW;gBACvB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;;;WAZA;QAEO,wCAAe,GAAvB,UAAwB,KAAW;YAC/B,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aACxB;YAEV,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACnD,CAAC;QAOD,qCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,qCAAY,GAAZ,UAAa,KAAa;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QAGD,qCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,qCAAY,GAAZ,UAAa,KAAa;YACtB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QAED,oCAAW,GAAX;YACI,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,oCAAW,GAAX,UAAY,KAAW;YACnB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,oCAAW,GAAX;YACI,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,oCAAW,GAAX,UAAY,KAAW;YACnB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAClE,CAAC;QAGD,sCAAa,GAAb;YACI,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,YAAY,CAAC;QACxF,CAAC;QAED,sCAAa,GAAb,UAAc,KAAc;YACxB,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBAChC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;aACnC;iBACI;gBACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aAC3B;QACL,CAAC;QAED,qCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,qCAAY,GAAZ,UAAa,KAAc;YAEvB,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC/B,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;oBACrE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;iBAE9D;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAC5D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;oBACnE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;iBAC5D;gBACD,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACtD;QACL,CAAC;QAEM,6BAAc,GAArB,UAAsB,IAAU,EAAE,WAAmB;YACjD,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,GAAI,EAAU,CAAC,KAAK,CAAC,KAAK,CAAE,EAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;YAClG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;;QAEM,6BAAc,GAAG,UAAU,QAAgB,EAAE,OAAe,EAC/D,MAAc,EAAE,KAAa,EAAE,QAAgB;YAC/C,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,MAAM,IAAI,EAAE,EAAE;gBACd,MAAM,GAAG,EAAE,CAAC;aACf;YACD,IAAI,KAAK,IAAI,EAAE,EAAE;gBACb,KAAK,GAAG,EAAE,CAAC;aACd;YACD,IAAI,IAAI,GAAG,QAAQ,CAAC;YACpB,IAAI,GAAG,GAAG,OAAO,CAAC;YAClB,OAAO,IAAI,EAAE;gBACT,IAAI,IAAI,GAAG,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG,KAAK,EAAE;oBACjD,MAAM;iBACT;gBACD,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAChF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,GAAG,IAAI,QAAQ,CAAC;gBAChB,IAAI,GAAG,IAAI,EAAE,EAAE;oBACX,GAAG,IAAI,EAAE,CAAC;oBACV,IAAI,EAAE,CAAC;iBACV;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QAzGF;YADC,MAAM,EAAE;0DAGR;QAOD;YADC,MAAM,EAAE;0DAGR;QAeD;YADC,MAAM,EAAE;yDAGR;QAOD;YADC,MAAM,EAAE;2DAGR;QAxMQ,cAAc;YAF1B,SAAA,UAAU,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC,SAAA,YAAY,EAAE,SAAA,SAAS,CAAC,CAAC;YAC/E,SAAA,UAAU,CAAC,OAAO,CAAC,sBAAsB,CAAC;WAC9B,cAAc,CA6Q1B;QAAD,qBAAC;KAAA,AA7QD,CAAoC,SAAA,MAAM,GA6QzC;IA7QY,uBAAc,iBA6Q1B,CAAA;AASL,CAAC,EA5RS,QAAQ,KAAR,QAAQ,QA4RjB;AC3RD,IAAU,QAAQ,CAiwBjB;AAjwBD,WAAU,QAAQ;IA8Bd;QAAoD,iCAAgB;QAQhE,uBAAY,MAAc,EAAE,GAAS;YAArC,YACI,kBAAM,MAAM,EAAE,GAAG,CAAC,SAyBrB;YA7BS,cAAQ,GAAW,GAAG,CAAC;YAM7B,KAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,KAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,aAAa,GAAG,KAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;aAC7C;YACD,IAAI,cAAc,GAAG,KAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAE5B,0BAA0B;YAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,EAAO,UAAU,CAAoB,EAAE,CAAU;gBACpF,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBAC3C,IAAI,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;wBACxD,MAAM,CAAC,KAAK,EAAE,CAAC;qBAClB;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,cAAc,CAAE,KAAI,CAAC,OAAgC,CAAC,WAAW,CAAC,CAAC;YAExE,IAAI,KAAI,CAAC,aAAa,EAAE;gBACpB,KAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,EAAE,IAAI,CAAC,CAAC;;QAChF,CAAC;QAED,+BAAO,GAAP;YACI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aACnC;YAEV,iBAAM,OAAO,WAAE,CAAC;QACX,CAAC;QAES,qCAAa,GAAvB;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAC9C,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;QACvD,CAAC;QAES,kCAAU,GAApB;YACI,OAAQ,IAAI,CAAC,OAAgC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;gBAC9D,CAAC,CAAE,IAAI,CAAC,OAAgC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC;QAC3F,CAAC;QAES,kCAAU,GAApB;YACI,OAAO,CAAC,CAAE,IAAI,CAAC,OAAgC,CAAC,QAAQ,CAAC;QAC7D,CAAC;QAES,yCAAiB,GAA3B;YAAA,iBAgEC;YA/DG,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,GAAG,GAAmB;gBACtB,IAAI,EAAE,IAAI,CAAC,KAAK;gBAChB,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC3B,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC7B,0BAA0B,EAAE,QAAQ;gBACpC,KAAK,EAAE,UAAC,KAAK;oBACT,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CACvE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBAE/C,IAAI,OAAO,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI;wBAC1C,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAC5D,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;oBACxD,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,IAAI,OAAZ,OAAO,EAAS,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAA,KAAK;wBACnC,OAAA,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CACtD,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC;4BACpD,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;iCACnD,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBAHrC,CAGqC,CAAC,EAAE;oBAE5C,KAAK,CAAC,QAAQ,CAAC;wBACX,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,GAAG,KAAI,CAAC,QAAQ,CAAC;wBACpF,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,GAAG,KAAI,CAAC,QAAQ;qBACrD,CAAC,CAAC;gBACP,CAAC;gBACD,aAAa,EAAE,UAAC,OAAO,EAAE,QAAQ;oBAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBACxB,IAAI,cAAc,GAAG,KAAI,CAAC,cAAc,EAAE,CAAC;oBAC3C,IAAI,KAAI,CAAC,UAAU,EAAE,EAAE;wBACnB,IAAI,IAAI,GAAG,EAAE,CAAC;wBACd,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACzB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;4BACvC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;4BACjB,IAAI,KAAK,GAAG,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAC7B,IAAI,KAAK,IAAI,IAAI,IAAI,cAAc,EAAE;gCACjC,KAAK,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gCAC3B,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;6BACvB;4BACD,IAAI,KAAK,IAAI,IAAI,EAAE;gCACf,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;6BACpB;yBACJ;wBACD,QAAQ,CAAC,IAAI,CAAC,CAAC;wBACf,OAAO;qBACV;oBACD,IAAI,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC5B,IAAI,EAAE,IAAI,IAAI,IAAI,cAAc,EAAE;wBAC9B,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;wBAC5B,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;qBACpB;oBACD,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;aACJ,CAAA;YAED,IAAK,IAAI,CAAC,OAAgC,CAAC,uBAAuB,IAAI,IAAI;gBACtE,GAAG,CAAC,uBAAuB,GAAI,IAAI,CAAC,OAAgC,CAAC,uBAAuB,CAAC;YAEjG,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE;gBAC7C,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAE9D,OAAO,GAAG,CAAC;QACf,CAAC;QAED,qCAAa,GAAb;YACI,OAAO,CAAC,CAAE,IAAI,CAAC,OAAgC,CAAC,SAAS,CAAC;QAC9D,CAAC;QAEM,kCAAU,GAAjB;YACK,EAAU,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACvB,CAAC;QAEM,+BAAO,GAAd,UAAe,IAAiB;YAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QAClC,CAAC;QAEM,iCAAS,GAAhB,UAAiB,GAAW,EAAE,IAAY,EAAE,MAAY,EAAE,QAAkB;YACxE,IAAI,CAAC,OAAO,CAAC;gBACT,EAAE,EAAE,GAAG;gBACP,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,QAAQ;aACrB,CAAC,CAAC;QACP,CAAC;QAES,wCAAgB,GAA1B,UAA2B,QAAgB,EAAE,SAAiB;YAA9D,iBA+CC;YA9CG,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC5E,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC/E,IAAI,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC;iBAC/B,QAAQ,CAAC,+BAA+B,CAAC;iBACzC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;iBACvB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;gBACxC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEP,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAE7E,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAC,EAAqB;gBAC3C,IAAI,KAAK,GAAG,KAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBACnE,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,UAAC,EAAqB;gBAClD,IAAI,KAAI,CAAC,UAAU,EAAE,EAAE;oBACnB,IAAI,MAAM,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;oBAC/B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE;wBAC5E,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;wBACpD,KAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;qBAC/B;iBACJ;qBACI,IAAI,KAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACnD,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACrB,KAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;iBAC/B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,wBAAwB,EAAE,UAAC,EAAqB;oBAC1G,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBACrB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE;wBACtC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;qBAC3C;oBACD,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;oBACtB,IAAI,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;oBAChC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,KAAI,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE;wBAChD,OAAO;qBACV;oBACD,EAAE,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;oBAChC,KAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;aACN;QACL,CAAC;QAES,qCAAa,GAAvB;YACI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxB,IAAI,CAAC,OAAgC,CAAC,UAAU;gBACjD,CAAE,IAAI,CAAC,OAAgC,CAAC,oBAAoB,IAAI,IAAI;oBAChE,CAAC,CAAC,aAAa,CAAC,aAAa,CAAE,IAAI,CAAC,OAAgC,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACxG,CAAC;QAES,sCAAc,GAAxB;YACI,OAAO,CAAC,CAAE,IAAI,CAAC,OAAgC,CAAC,YAAY,CAAC;QACjE,CAAC;QAEM,6CAAqB,GAA5B,UAA6B,OAA2B;YAAxD,iBA4CC;YA3CG,OAAO,UAAC,CAAS;gBAEb,KAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBACxB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBAElE,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;oBACrB,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,CAAC,CAAC,GAAG,CAAC,KAAI,CAAC,SAAS,EAAE,EAAE,UAAC,CAAc;oBACnC,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAChD,OAAO,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBACrF,CAAC,CAAC;oBACE,OAAO,IAAI,CAAC;gBAEhB,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAI,CAAC,SAAS,EAAE,EAAE,UAAA,EAAE;oBAC3B,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACjG,CAAC,CAAC,EAAE;oBACA,IAAI,KAAI,CAAC,cAAc,EAAE,EAAE;wBACvB,OAAO;4BACH,EAAE,EAAE,KAAI,CAAC,cAAc;4BACvB,IAAI,EAAE,KAAI,CAAC,cAAc;yBAC5B,CAAC;qBACL;oBAED,OAAO;wBACH,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;wBAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,8CAA8C,CAAC;qBAC/D,CAAC;iBACL;gBAED,IAAI,KAAI,CAAC,cAAc,EAAE,EAAE;oBACvB,OAAO;wBACH,EAAE,EAAE,KAAI,CAAC,cAAc;wBACvB,IAAI,EAAE,KAAI,CAAC,cAAc;qBAC5B,CAAC;iBACL;gBAED,OAAO;oBACH,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;oBAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC;iBACtD,CAAC;YACN,CAAC,CAAA;QACL,CAAC;QAED,oCAAY,GAAZ,UAAa,MAAW,EAAE,QAAsB;YAC5C,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,IAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACf,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACxB;iBACL;gBACQ,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;aACzD;QACL,CAAC;QAED,oCAAY,GAAZ,UAAa,QAAsB,EAAE,MAAW;YAC5C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;aAC5C;iBACL;gBACQ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;aAC7C;QACL,CAAC;QAES,4CAAoB,GAA9B;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC;QAES,iCAAS,GAAnB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAES,qCAAa,GAAvB;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,iCAAS,GAAT;YACI,IAAI,GAAG,CAAC;YACR,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC9B,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC/B,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACxB;aACJ;;gBAEG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAEtC,OAAO,GAAG,CAAC;QACN,CAAC;QAED,sBAAI,gCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAqBD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAvBA;QAED,iCAAS,GAAT,UAAU,KAAa;YAEnB,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAC3B,IAAI,GAAG,GAAQ,KAAK,CAAC;gBACrB,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;oBAC9C,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;wBACtD,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC3B,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;wBAClB,OAAO,EAAE,IAAI,IAAI,CAAC;oBACtB,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;qBAC3B,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAChC;QACL,CAAC;QAMD,sBAAI,uCAAY;iBAAhB;gBACI,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrC,IAAI,aAAa,IAAI,IAAI,CAAC,QAAQ,EAAE;oBAChC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;oBACxC,IAAI,IAAI;wBACJ,OAAO,IAAI,CAAC,MAAM,CAAC;iBAC1B;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;;;WAAA;QAES,kCAAU,GAApB;YAEI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,GAAG,IAAI,IAAI,EAAE;gBACb,OAAO,EAAE,CAAC;aACb;YAEV,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACP,OAAO,GAAG,CAAC;aACd;YAED,IAAI,GAAG,GAAG,GAAG,CAAC;YACd,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBACtB,OAAO,EAAE,CAAC;aACb;YAEV,OAAO,CAAC,GAAG,CAAC,CAAC;QACR,CAAC;QAED,sBAAI,iCAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,CAAC;iBAYD,UAAW,KAAe;gBACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;;;WAdA;QAES,kCAAU,GAApB,UAAqB,KAAe;YAEhC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrB,OAAO;aACV;YAEV,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QAMS,gCAAQ,GAAlB;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;QAC7D,CAAC;QAED,sBAAI,+BAAI;iBAAR;gBACI,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;;;WAAA;QAED,oCAAY,GAAZ;YACI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,sBAAI,mCAAQ;iBAAZ;gBACI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,CAAC;iBAmBD,UAAa,KAAc;gBACvB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;;;WArBA;QAEO,6CAAqB,GAA7B;YACI,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;gBAC9B,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEvC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;iBAClC,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC9C,GAAG,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACvC,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,oCAAY,GAAZ,UAAa,KAAc;YACvB,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC/B,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAChC;QACL,CAAC;QAMS,2CAAmB,GAA7B,UAA8B,MAA4B;YACtD,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAIS,sCAAc,GAAxB,UAAyB,KAAa;YAAtC,iBAiBC;YAfG,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;oBAC1B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC3B;gBACA,IAAI,CAAC,OAAgC,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1D,OAAO;aACV;YAED,IAAI,CAAC,WAAW,GAAG,IAAI,QAAQ,CAAC,kBAAkB,CAAc,SAAA,MAAM,EAAE,IAAI,EAAE,UAAA,CAAC;gBAC3E,KAAI,CAAC,gBAAgB,CAAC,KAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,OAAgC,CAAC,WAAW,GAAG,KAAK,CAAC;QAC/D,CAAC;QAES,uCAAe,GAAzB;YACI,OAAQ,IAAI,CAAC,OAAgC,CAAC,WAAW,CAAC;QAC9D,CAAC;QAED,sBAAI,sCAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBASD,UAAgB,KAAa;gBACzB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;;;WAXA;QAES,uCAAe,GAAzB,UAA0B,KAAa;YACnC,IAAI,KAAK,KAAM,IAAI,CAAC,OAAgC,CAAC,WAAW,EAAE;gBAC9D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAMS,wCAAgB,GAA1B;YACI,OAAO,CAAC,CAAC,QAAQ,CAAE,IAAI,CAAC,OAAgC,CAAC,YAAY,EAAG,IAAI,CAAC,OAAgC,CAAC,WAAW,CAAC,CAAC;QAC/H,CAAC;QAED,sBAAI,uCAAY;iBAAhB;gBACI,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,CAAC;iBAMD,UAAiB,KAAa;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;;;WARA;QAES,wCAAgB,GAA1B,UAA2B,KAAa;YACnC,IAAI,CAAC,OAAgC,CAAC,YAAY,GAAG,KAAK,CAAC;QAChE,CAAC;QAMS,wCAAgB,GAA1B;YACI,OAAQ,IAAI,CAAC,OAAgC,CAAC,YAAY,CAAC;QAC/D,CAAC;QAED,sBAAI,uCAAY;iBAAhB;gBACI,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,CAAC;iBAUD,UAAiB,KAAU;gBACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;;;WAZA;QAES,wCAAgB,GAA1B,UAA2B,KAAU;YACjC,IAAK,IAAI,CAAC,OAAgC,CAAC,YAAY,KAAK,KAAK,EAAE;gBAC9D,IAAI,CAAC,OAAgC,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC5D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAMS,uCAAe,GAAzB;YACI,OAAQ,IAAI,CAAC,OAAgC,CAAC,WAAW,CAAC;QAC9D,CAAC;QAED,sBAAI,sCAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBAMD,UAAgB,KAAa;gBACzB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;;;WARA;QAES,uCAAe,GAAzB,UAA0B,KAAa;YAClC,IAAI,CAAC,OAAgC,CAAC,WAAW,GAAG,KAAK,CAAC;QAC/D,CAAC;QAMS,uCAAe,GAAzB;YACI,OAAQ,IAAI,CAAC,OAAgC,CAAC,WAAW,CAAC;QAC9D,CAAC;QAED,sBAAI,sCAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBAUD,UAAgB,KAAU;gBACtB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;;;WAZA;QAES,uCAAe,GAAzB,UAA0B,KAAU;YAChC,IAAK,IAAI,CAAC,OAAgC,CAAC,WAAW,KAAK,KAAK,EAAE;gBAC7D,IAAI,CAAC,OAAgC,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAMS,oCAAY,GAAtB,UAAuB,KAAc;YAEjC,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAElC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;gBAE3B,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;oBAC3C,OAAO,EAAE,CAAC;iBACb;gBAED,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAElC,OAAO,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC;gBACjB,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACP,CAAC;QAES,mCAAW,GAArB,UAAsB,KAAc;YAChC,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAEjC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;gBAC3B,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC;gBACjB,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACP,CAAC;QAES,mCAAW,GAArB;QACA,CAAC;QAES,wCAAgB,GAA1B;YACI,IAAK,IAAI,CAAC,OAAgC,CAAC,UAAU,IAAI,IAAI,EAAE;gBAC3D,OAAQ,IAAI,CAAC,OAAgC,CAAC,UAAU,CAAC;aAC5D;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,wCAAgB,GAA1B,UAA2B,QAAoC;YAC3D,IAAI,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5C,IAAI,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAChE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBACnB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,QAAQ,CAAC,CAAQ,CAAC,EAAlB,CAAkB;aAChC,CAAC,CAAC;QACP,CAAC;QAIS,qCAAa,GAAvB,UAAwB,MAAa;YACjC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;gBAC3C,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC7D;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE;gBAC1C,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;aAC3D;YAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;gBAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;aAChC;QACL,CAAC;QAES,6CAAqB,GAA/B,UAAgC,MAAW;YACvC,qBAAqB;YACrB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO;iBAC3B,IAAI,CAAC,4BAA4B,CAAC;iBAClC,QAAQ,CAAC,UAAU,CAAC;iBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAES,4CAAoB,GAA9B;QACA,CAAC;QAES,0CAAkB,GAA5B,UAA6B,MAAa,EAAE,IAAY;QACxD,CAAC;QAES,0CAAkB,GAA5B,UAA6B,CAAoB;YAAjD,iBAqEC;YAnEG,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBACtD,OAAO;YAEX,IAAI,CAAC,gBAAgB,CAAC,UAAA,MAAM;gBAExB,IAAI,KAAI,CAAC,YAAY,EAAE;oBACnB,KAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBAEvC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAI,EAAE,UAAC,CAAC,EAAE,GAAG;oBAC3D,KAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,KAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,KAAI,CAAC,cAAc,GAAG,IAAI,CAAC;oBAE3B,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;wBAChD,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE;wBACtB,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;wBAEjC,IAAI,KAAI,CAAC,UAAU,EAAE,EAAE;4BACnB,IAAI,MAAM,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;4BACvC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;gCACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;6BACnB;4BACD,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;4BACtB,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;yBACnC;6BACI;4BACD,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;4BACrB,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;yBACtB;qBACJ;yBACI,IAAI,KAAI,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;wBAC/C,GAAG,CAAC,QAAQ,IAAI,IAAI,EAAE;wBACtB,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;wBAClC,IAAI,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,CAAC;wBAExC,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAChC,IAAI,IAAI,IAAI,CAAC;4BACT,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBAE5B,KAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;qBACpC;yBACI,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE,EAAE;wBACzB,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBACxB;gBACL,CAAC,EAAE,IAAI,CAAC,CAAC;gBAET,IAAI,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC7B,IAAI,QAAQ,IAAI,IAAI,EAAE;oBAClB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;wBACjB,MAAc,CAAC,UAAU,CAAC,KAAI,CAAC,iBAAiB,CAAC,CAAC;oBACvD,CAAC,EAAE,IAAI,CAAC,CAAC;iBACZ;qBACI,IAAI,KAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,SAAS,EAAE,CAAC,EAAE;oBAC7D,IAAI,MAAM,GAAU,EAAS,CAAC;oBAC9B,KAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC;oBACpE,KAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;wBACf,MAAc,CAAC,UAAU,CAAC,KAAI,CAAC,iBAAiB,CAAC,CAAC;oBACvD,CAAC,EAAE,IAAI,CAAC,CAAC;iBACZ;qBACI;oBACD,MAAM,CAAC,IAAI,CAAC,KAAI,CAAC,SAAS,EAAE,EAAE;wBACzB,MAAc,CAAC,UAAU,CAAC,KAAI,CAAC,iBAAiB,CAAC,CAAC;oBACvD,CAAC,EAAE,IAAI,CAAC,CAAC;iBACZ;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QA1qBQ,aAAa;YAHzB,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,wBAAwB,EACvD,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC/F,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,0BAA0B,CAAC;WAC3C,aAAa,CA6qBzB;QAAD,oBAAC;KAAA,AA7qBD,CAAoD,SAAA,MAAM,GA6qBzD;IA7qBY,sBAAa,gBA6qBzB,CAAA;IAkBD;QAAkC,gCAA+C;QAC7E,sBAAY,MAAc,EAAE,GAAyB;YAArD,YACI,kBAAM,MAAM,EAAE,GAAG,CAAC,SAErB;YADG,KAAI,CAAC,WAAW,EAAE,CAAC;;QACvB,CAAC;QAED,+BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,CAAC;QAES,oCAAa,GAAvB;YACI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAChD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;aACvC;YACD,OAAO,iBAAM,aAAa,WAAE,CAAC;QACjC,CAAC;QAED,kCAAW,GAAX;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,IAAI,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;gBAC/C,KAAiB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;oBAAnB,IAAI,IAAI,cAAA;oBACT,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3D,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;iBAC1C;aACJ;QACL,CAAC;QA7BQ,YAAY;YADxB,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,uBAAuB,CAAC;WAC9C,YAAY,CA8BxB;QAAD,mBAAC;KAAA,AA9BD,CAAkC,aAAa,GA8B9C;IA9BY,qBAAY,eA8BxB,CAAA;AAML,CAAC,EAjwBS,QAAQ,KAAR,QAAQ,QAiwBjB;AClwBD,IAAU,QAAQ,CAiEjB;AAjED,WAAU,QAAQ;IAGd;QAAoC,kCAAY;QAE5C,wBAAY,MAAc,EAAE,GAA0B;YAAtD,YACI,kBAAM,MAAM,EAAE,GAAG,CAAC,SAGrB;YADG,KAAI,CAAC,WAAW,EAAE,CAAC;;QACvB,CAAC;QAED,iCAAQ,GAAR;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAgC,CAAC;YAEhD,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC5C,OAAO,GAAG,CAAC,KAAK,CAAC;aACpB;YAED,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACzC,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAEzC,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAChC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAClD;iBACI,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACrC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAClD;iBACI;gBACD,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;aACvC;YAED,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxD,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAChC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAClD;iBACI,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACrC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aAClD;iBACI;gBACD,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;aACvC;YAED,IAAI,GAAG,CAAC,UAAU,EAAE;gBAChB,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;oBACrC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAC5B;aACJ;iBACI;gBACD,KAAK,IAAI,EAAE,GAAG,OAAO,EAAE,EAAE,IAAI,OAAO,EAAE,EAAE,EAAE,EAAE;oBACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAC7B;aACJ;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QArDQ,cAAc;YAD1B,SAAA,UAAU,CAAC,cAAc,CAAC,yBAAyB,CAAC;WACxC,cAAc,CAsD1B;QAAD,qBAAC;KAAA,AAtDD,CAAoC,SAAA,YAAY,GAsD/C;IAtDY,uBAAc,iBAsD1B,CAAA;AAQL,CAAC,EAjES,QAAQ,KAAR,QAAQ,QAiEjB;ACjED,IAAU,QAAQ,CAsIjB;AAtID,WAAU,QAAQ;IAOd;QAAmF,oCAA8B;QAE7G,0BAAY,KAAa,EAAE,GAAc;YAAzC,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SASpB;YAPG,IAAI,IAAI,GAAG,KAAI,CAAC;YAChB,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,KAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,GAAG,KAAI,CAAC,YAAY,EAAE,EAAE,KAAI,CAAC,UAAU,EAAE;oBACxE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvB,CAAC,CAAC,CAAC;aACN;;QACL,CAAC;QAES,0CAAe,GAAzB;YAAA,iBAMC;YALG,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,GAAG,KAAI,CAAC,YAAY,EAAE,EAAE,KAAI,CAAC,UAAU,EAAE;oBACxE,KAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACP,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAED,kCAAO,GAAP;YACI,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/C,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAES,uCAAY,GAAtB;YACI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,EAAE;gBAChC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;aACjC;YAED,IAAI,GAAG,GAAI,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzE,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,IAAI,CAAC,EAAE;gBACV,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;aAChC;YAED,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;gBAC3B,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACvC;YAED,OAAO,GAAG,CAAC;QACf,CAAC;QAES,oCAAS,GAAnB;YACI,OAAO,CAAC,CAAC,SAAS,CAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnD,CAAC;QAES,yCAAc,GAAxB;YAAA,iBAKC;YAJG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,GAAG,GAAG,KAAI,CAAC,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAC,cAAc,CAAQ,GAAG,CAAC,CAAC;YACxC,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAES,mCAAQ,GAAlB,UAAmB,MAAuB;YACtC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;QAES,sCAAW,GAArB,UAAsB,IAAW,EAAE,MAAuB;YACtD,IAAI,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3F,OAAO,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QACzD,CAAC;QAES,0CAAe,GAAzB,UAA0B,IAAW,EAAE,MAAuB;YAC1D,OAAO,KAAK,CAAC;QACjB,CAAC;QAEM,sCAAW,GAAlB;YACI,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBACzC,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtB,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAClD,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,OAAO,CAAC;oBACT,EAAE,EAAE,EAAE;oBACN,IAAI,EAAE,IAAI;oBACV,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,QAAQ;iBACrB,CAAC,CAAC;aACN;QACL,CAAC;QAEM,2CAAgB,GAAvB;YAAA,iBAaC;YAZG,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,UAAC,MAAM;gBACrC,KAAI,CAAC,UAAU,EAAE,CAAC;gBAClB,IAAI,KAAK,GAAG,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBACzC,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtB,IAAI,IAAI,GAAG,KAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC1C,IAAI,QAAQ,GAAG,KAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBAClD,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACnC,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACrD,KAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;iBAC1E;YACL,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAES,2CAAgB,GAA1B;YACI,IAAI,aAAa,GAAG,iBAAM,gBAAgB,WAAE,CAAC;YAC7C,IAAI,aAAa;gBACb,OAAO,aAAa,CAAC;YAEzB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/B,CAAC;QAES,mDAAwB,GAAlC,UAAmC,MAAa,EAAE,IAAY;YAC1D,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC9C,CAAC;QAES,+CAAoB,GAA9B;YACI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACxC,CAAC;QAtHQ,gBAAgB;YAD5B,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,2BAA2B,CAAC;WACnD,gBAAgB,CAuH5B;QAAD,uBAAC;KAAA,AAvHD,CAAmF,SAAA,aAAa,GAuH/F;IAvHY,yBAAgB,mBAuH5B,CAAA;IAGD;QAAkC,gCAA0C;QACxE,sBAAY,MAAc,EAAE,GAAyB;mBACjD,kBAAM,MAAM,EAAE,GAAG,CAAC;QACtB,CAAC;QAHQ,YAAY;YADxB,SAAA,UAAU,CAAC,cAAc,CAAC,uBAAuB,CAAC;WACtC,YAAY,CAIxB;QAAD,mBAAC;KAAA,AAJD,CAAkC,gBAAgB,GAIjD;IAJY,qBAAY,eAIxB,CAAA;AACL,CAAC,EAtIS,QAAQ,KAAR,QAAQ,QAsIjB;ACtID,IAAU,QAAQ,CAo4DjB;AAp4DD,WAAU,QAAQ;IAEd,IAAO,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAA;IAE1C,IAAiB,kBAAkB,CAkGlC;IAlGD,WAAiB,kBAAkB;QAC/B,IAAI,UAAqC,CAAC;QAE1C,SAAgB,GAAG,CAAC,GAAW;YAE3B,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;gBACtB,MAAM,IAAK,EAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;aACtD;YAED,UAAU,EAAE,CAAC;YAEb,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAC/C,IAAI,UAAU,IAAI,IAAI,EAAE;gBAEpB,IAAI,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;oBACrC,OAAO,IAAI,CAAC;iBACf;gBAED,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,CAAC;aACxE;YACD,OAAO,UAAU,CAAC;QAEtB,CAAC;QArBe,sBAAG,MAqBlB,CAAA;QAED,SAAS,UAAU;YAEf,IAAI,UAAU,IAAI,IAAI;gBAClB,OAAO;YAEX,UAAU,GAAG,EAAE,CAAC;YAEhB,IAAI,UAAU,GAAI,EAAU,CAAC,aAAa,EAAE,CAAC;YAC7C,KAAqB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;gBAA5B,IAAI,QAAQ,mBAAA;gBACb,KAAiB,UAAsC,EAAtC,KAAC,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAtC,cAAsC,EAAtC,IAAsC,EAAE;oBAApD,IAAI,IAAI,SAAA;oBAET,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAC9C,SAAS;qBACZ;oBAED,IAAK,EAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE;wBAC3C,SAAS;qBACZ;oBAED,IAAI,QAAQ,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC/D,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAE5B,IAAI,UAAU,GAAI,EAAU,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;oBAClF,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7C,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;wBAChC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;4BAC3B,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC;yBAC5C;qBACJ;oBAED,KAAc,UAAuB,EAAvB,KAAA,CAAC,CAAC,MAAM,CAAC,cAAc,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;wBAAlC,IAAI,CAAC,SAAA;wBACN,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,EAAE;4BAC/C,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;4BACrD,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;gCACxB,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;6BACzB;yBACJ;qBACJ;iBACJ;aACJ;YAED,8BAA8B,EAAE,CAAC;QACrC,CAAC;QAED,SAAgB,KAAK;YACjB,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC;QAFe,wBAAK,QAEpB,CAAA;QAED,SAAS,8BAA8B;YACnC,IAAI,MAAM,GAAG,QAAQ,CAAC;YACtB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,KAAc,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI,EAAE;gBAAf,IAAI,CAAC,aAAA;gBACN,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aACtC;QACL,CAAC;QAED,SAAS,gBAAgB,CAAC,GAAW,EAAE,CAAuB;YAC1D,IAAI,MAAM,GAAG,QAAQ,CAAC;YAEtB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBACxB,OAAO;YAEX,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAElD,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAClB,OAAO;YAEX,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI;gBACrB,OAAO;YAEX,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;IACL,CAAC,EAlGgB,kBAAkB,GAAlB,2BAAkB,KAAlB,2BAAkB,QAkGlC;IAED,IAAiB,WAAW,CAoP3B;IApPD,WAAiB,WAAW;QAExB,SAAgB,cAAc,CAAC,MAA4B;YAEvD,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE7C,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC1C,IAAI,IAAI,IAAI,IAAI;oBACZ,OAAO,EAAE,CAAC;gBAEd,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;aACpC;YAED,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,EAAE,CAAC;aACb;YAED,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,KAAK,CAAC;YAEjB,IAAI,KAAK,YAAY,OAAO;gBACxB,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,yCAAyC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC3F,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,yCAAyC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAEtF,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC;QAzBe,0BAAc,iBAyB7B,CAAA;QAED,IAAI,KAAK,GAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAExC,SAAgB,QAAQ,CAAC,MAA4B;YACjD,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACjC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAJe,oBAAQ,WAIvB,CAAA;QAED,SAAgB,SAAS,CAAC,MAA4B,EAAE,IAAkB,EAAE,MAAW;YAEnF,IAAI,YAAY,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YAExE,IAAI,YAAY,IAAI,IAAI,EAAE;gBACtB,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,IAAI,WAAW,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;gBAC5C,OAAO;aACV;YAED,IAAI,YAAY,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,YAAY,IAAI,IAAI,EAAE;gBACtB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;gBAC7C,OAAO;aACV;YAED,IAAI,WAAW,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,IAAI,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBAClD,OAAO;aACV;YAED,IAAK,MAAc,CAAC,YAAY,IAAI,IAAI,EAAE;gBACrC,MAAc,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC3C,OAAO;aACV;YAED,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACzC,OAAO;aACV;QACL,CAAC;QArCe,qBAAS,YAqCxB,CAAA;QAED,SAAgB,QAAQ,CAAC,MAA4B,EAAE,KAAU;YAC7D,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;YAC1B,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACrC,CAAC;QAHe,oBAAQ,WAGvB,CAAA;QAED,SAAgB,SAAS,CAAC,MAA4B,EAAE,IAAkB,EAAE,MAAW;YAEnF,IAAI,YAAY,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,YAAY,IAAI,IAAI,EAAE;gBACtB,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,IAAI,WAAW,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;iBAC5B;gBACD,WAAW,CAAC,SAAS,CAAE,EAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBACvD,OAAO;aACV;YAED,IAAI,YAAY,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,YAAY,IAAI,IAAI,EAAE;gBACtB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;oBAC9B,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBACtC;qBACI;oBACD,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;iBACpC;gBACD,OAAO;aACV;YAED,IAAI,WAAW,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtE,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAK,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAE,EAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;oBAC3G,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;iBAC/B;qBACI,IAAK,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;oBAC9C,WAAW,CAAC,SAAS,CAAE,EAAU,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAE,EAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChG;qBACI,IAAK,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;oBAC/C,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxC;qBACI;oBACD,WAAW,CAAC,SAAS,CAAE,EAAU,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;iBACtD;gBACD,OAAO;aACV;YAED,IAAK,MAAc,CAAC,YAAY,IAAI,IAAI,EAAE;gBACrC,MAAc,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3C,OAAO;aACV;YAED,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBAC7B,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,IAAI,EAAE;oBACX,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAC1B;qBACI;oBACD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACzB;gBACD,OAAO;aACV;QACL,CAAC;QA/De,qBAAS,YA+DxB,CAAA;QAED,SAAgB,WAAW,CAAC,QAAgB,EAAE,UAAmB;YAC7D,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;gBAC7B,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,UAAU,EAAE;oBAC7D,IAAI,UAAU,EAAE;wBACZ,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;qBACzD;yBACI;wBACD,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;qBACtD;iBACJ;qBACI,IAAI,UAAU,EAAE;oBACjB,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;iBACzD;qBACI;oBACD,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBACtD;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QACpB,CAAC;QArBe,uBAAW,cAqB1B,CAAA;QAED,SAAgB,WAAW,CAAC,MAA4B,EAAE,UAAmB;YAEzE,IAAI,QAAQ,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEhE,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;aACrC;iBACI,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBAClC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;aAC3C;QACL,CAAC;QAVe,uBAAW,cAU1B,CAAA;QAED,SAAgB,WAAW,CAAC,MAA4B,EAAE,UAAmB;YACzE,IAAI,GAAG,GAAI,EAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAA,iBAAiB,CAAC,CAAC;YAC1D,IAAI,GAAG,IAAI,IAAI,EAAE;gBACb,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;aAChC;iBACI,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBAClC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;aACxD;YACD,IAAI,SAAS,GAAG,SAAA,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACxC,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACxD,IAAI,UAAU,IAAI,CAAC,UAAU,EAAE;gBAC3B,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;qBACxE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACjD;iBACI,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE;gBAChC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACxC;QACL,CAAC;QAjBe,uBAAW,cAiB1B,CAAA;QAED,SAAgB,oBAAoB,CAAC,SAAiB,EAAE,QAAiB;YAErE,IAAI,CAAC,QAAQ,EAAE;gBAEX,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC;oBACzC,OAAO;gBAEX,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC;qBACzE,WAAW,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;oBACzC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC3C,IAAI,CAAC,IAAI,IAAI;wBACT,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;;wBAE3C,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;gBAEP,OAAO;aACV;YAED,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;iBACnD,GAAG,CAAC,qBAAqB,CAAC;iBAC1B,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;gBACP,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,CAAC,IAAI,IAAI,EAAE;oBAEX,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE;wBACnB,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE;4BACnB,OAAO;qBACd;yBACI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;wBACnG,OAAO;oBAEX,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;oBACpC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iBAE7C;qBACI;oBACD,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC;wBAC9F,OAAO;oBAEX,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,CAAC;iBAC/E;YACL,CAAC,CAAC,CAAC;QACX,CAAC;QA3Ce,gCAAoB,uBA2CnC,CAAA;IACL,CAAC,EApPgB,WAAW,GAAX,oBAAW,KAAX,oBAAW,QAoP3B;IAED,SAAS,MAAM,CAAC,IAAY,EAAE,IAAY;QACtC,OAAO,SAAA,UAAU,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAA;IACzE,CAAC;IAED,IAAO,OAAO,GAAG,SAAA,UAAU,CAAC,OAAO,CAAA;IAInC;QAAmC,iCAAW;QAE1C,uBAAY,KAAa;YAAzB,YACI,kBAAM,KAAK,CAAC,SAGf;YADG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;;QACjC,CAAC;QAED,sBAAW,gCAAK;iBAAhB;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;iBAMD,UAAiB,KAAc;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;;;WARA;QAES,iCAAS,GAAnB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAMS,iCAAS,GAAnB,UAAoB,KAAc;YAC9B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QAtBQ,aAAa;YAFzB,MAAM,CAAC,SAAS,EAAE,CAAC,SAAA,aAAa,CAAC,CAAC;YAClC,OAAO,CAAC,0BAA0B,CAAC;WACvB,aAAa,CAuBzB;QAAD,oBAAC;KAAA,AAvBD,CAAmC,SAAA,MAAM,GAuBxC;IAvBY,sBAAa,gBAuBzB,CAAA;IAID;QAAmC,iCAA4B;QAE3D,uBAAY,KAAa,EAAE,GAA0B;YAArD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAiBpB;YAfG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACpC,IAAI,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAyB,EAAE,EAAE;gBACjF,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACxJ,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;aAC7D,CAAC,CAAC;YAEH,IAAI,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;gBAC/B,cAAc,CAAC,IAAI,GAAG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC/C;YAED,IAAI,KAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE;gBAClC,cAAc,CAAC,IAAI,GAAG,KAAI,CAAC,OAAO,CAAC,WAAW,CAAC;aAClD;YAEA,KAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;;QAC/C,CAAC;QAED,iCAAS,GAAT;YACI,IAAI,GAAG,GAAI,IAAI,CAAC,OAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAEnD,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC;YAEhB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,sBAAI,gCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAWD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAbA;QAED,iCAAS,GAAT,UAAU,KAAa;YACnB,IAAI,KAAK,IAAI,IAAI,IAAK,KAAa,KAAK,EAAE,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACxB;iBACI;gBACA,IAAI,CAAC,OAAe,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACnD;QACL,CAAC;QAMD,mCAAW,GAAX;YACI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACpC,CAAC;QAEM,uCAAyB,GAAhC;YACI,OAAO;gBACH,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB;gBAChC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC1D,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxD,IAAI,EAAE,IAAI;aACb,CAAC;QACN,CAAC;QA3DQ,aAAa;YAFzB,MAAM,CAAC,SAAS,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;YACjC,OAAO,CAAC,sBAAsB,CAAC;WACnB,aAAa,CA4DzB;QAAD,oBAAC;KAAA,AA5DD,CAAmC,SAAA,MAAM,GA4DxC;IA5DY,sBAAa,gBA4DzB,CAAA;IAUD;QAAmC,iCAA4B;QAE3D,uBAAY,KAAa,EAAE,GAA0B;YAArD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAWpB;YATG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC3B,IAAI,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,yBAAyB,EAAE,EAC5E;gBACX,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC7I,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;gBACnD,IAAI,EAAE,IAAI;aACb,CAAC,CAAC;YAEN,KAAa,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;;QAC/C,CAAC;QAED,iCAAS,GAAT;YACI,IAAI,GAAG,GAAI,IAAI,CAAC,OAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACzB,OAAO,IAAI,CAAC;aACf;iBACI;gBACD,OAAO,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;aAC5B;QACL,CAAC;QAED,sBAAI,gCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAWD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAbA;QAED,iCAAS,GAAT,UAAU,KAAa;YACnB,IAAI,KAAK,IAAI,IAAI,IAAK,KAAa,KAAK,EAAE,EAAE;gBACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACxB;iBACI;gBACA,IAAI,CAAC,OAAe,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;aACnD;QACL,CAAC;QAMD,mCAAW,GAAX;YACI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QACpC,CAAC;QA7CQ,aAAa;YAFzB,MAAM,CAAC,SAAS,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;YACjC,OAAO,CAAC,sBAAsB,CAAC;WACnB,aAAa,CA8CzB;QAAD,oBAAC;KAAA,AA9CD,CAAmC,SAAA,MAAM,GA8CxC;IA9CY,sBAAa,gBA8CzB,CAAA;IAkBD;QAAiC,+BAA0B;QAEvD,qBAAY,KAAa,EAAE,GAAuB;YAAlD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SA2CpB;YAzCG,aAAW,CAAC,yBAAyB,EAAE,CAAC;YAExC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAEnD,IAAI,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE3E,IAAI,MAAM,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACvG,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE;gBACnC,IAAI,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzD,IAAI,SAAS,IAAI,IAAI,EAAE;oBACnB,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBACvC,MAAM,CAAC,GAAG,CAAC,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aACnC;YAED,IAAI,KAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC7B,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;aACnF;YAED,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,KAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBACvC,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EAAE;oBAChB,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,cAAc,EAAE;wBAC9B,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,MAAM,EAAE,CAAC;qBACnB;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,KAAI,CAAC,UAAU,EAAE,UAAU,EAAE;gBACnD,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE;oBACjB,EAAE,CAAC,cAAc,EAAE,CAAC;iBACvB;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,cAAc,EAAE;gBAC9B,KAAK,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAA3B,CAA2B,CAAC,CAAC;aACnD;;QACL,CAAC;wBA9CQ,WAAW;QAgDb,qCAAyB,GAAhC;YACI,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI;gBACxC,OAAO;YAEX,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,UAAU,KAAK,EAAE,OAAO;gBAEvD,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE;oBAEtD,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;wBACpD,OAAO,IAAI,CAAC;qBACf;oBAED,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;oBAEnC,IAAI,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE;wBAC9B,OAAO,CAAC,IAAI,MAAM,CAAC,oEAAoE;4BACnF,qEAAqE,CAAC,CAAC;6BACtE,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpB;oBAED,OAAO,CAAC,IAAI,MAAM,CAAC,sDAAsD;wBACrE,kEAAkE;wBAClE,6FAA6F;wBAC7F,mGAAmG;wBACnG,8HAA8H;wBAC9H,2HAA2H;wBAC3H,+GAA+G;wBAC/G,yIAAyI;wBACzI,yIAAyI;wBACzI,6GAA6G,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxI;qBACI;oBAED,IAAI,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE;wBAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACnG;oBAED,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,uGAAuG;wBAChJ,qIAAqI;wBACrI,oIAAoI;wBACpI,wIAAwI;wBACxI,0CAA0C,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACrE;YACL,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,+BAAS,GAAT;YACI,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;oBAC7D,OAAO,EAAE,CAAC;iBACb;gBACD,OAAO,GAAG,GAAG,WAAW,CAAC;aAC5B;YACD,OAAO,KAAK,GAAG,GAAG,GAAG,WAAW,CAAC;QACrC,CAAC;QAED,sBAAI,8BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAoCD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAtCA;QAED,+BAAS,GAAT,UAAU,KAAa;YACnB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAClD,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;oBAC9B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBAClB;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACxB;iBACI;gBACD,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;wBAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9B;yBACI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;4BAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;yBAC3B;6BACI;4BACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC9B;qBACJ;yBACI;wBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9B;iBACJ;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC9B;aACJ;QACL,CAAC;QAMD,kCAAY,GAAZ;YACI,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAClD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI;gBAC1C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,kCAAY,GAAZ,UAAa,KAAc;YACvB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC/D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;oBAC9B,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;iBAC5D;aACJ;iBACI;gBACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE;oBAC9B,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;iBACzD;aACJ;QACL,CAAC;;QA1KQ,WAAW;YAFvB,MAAM,CAAC,OAAO,EAAE,CAAC,SAAA,YAAY,EAAE,SAAA,SAAS,CAAC,CAAC;YAC1C,OAAO,CAAC,sBAAsB,CAAC;WACnB,WAAW,CA2KvB;QAAD,kBAAC;KAAA,AA3KD,CAAiC,SAAA,MAAM,GA2KtC;IA3KY,oBAAW,cA2KvB,CAAA;IAQD;QAAgC,8BAA6C;QACzE,oBAAY,MAAc,EAAE,GAAsB;YAAlD,YACI,kBAAM,MAAM,EAAE,GAAG,CAAC,SAErB;YADG,KAAI,CAAC,WAAW,EAAE,CAAC;;QACvB,CAAC;QAES,gCAAW,GAArB;YACI,IAAI,CAAC,UAAU,EAAE,CAAC;YAElB,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5F,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAEnC,IAAI,OAAO,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACrC,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBACxF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxB,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;iBAClC;aACJ;YAED,IAAI,MAAM,GAAI,EAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAClD,KAAc,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;gBAAjB,IAAI,CAAC,eAAA;gBACN,IAAI,IAAI,GAAI,EAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,SAAS,CAAE,EAAU,CAAC,IAAI,CAAC,CAAC,EAAG,EAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAC5D,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aACrF;QACL,CAAC;QAES,+BAAU,GAApB;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QA7BQ,UAAU;YADtB,MAAM,CAAC,MAAM,CAAC;WACF,UAAU,CA8BtB;QAAD,iBAAC;KAAA,AA9BD,CAAgC,SAAA,aAAa,GA8B5C;IA9BY,mBAAU,aA8BtB,CAAA;IAgBD;QAA+B,6BAAwB;QAInD,mBAAY,SAAiB,EAAE,GAAqB;YAApD,YACI,kBAAM,SAAS,EAAE,GAAG,CAAC,SAoCxB;YAlCG,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAC/B,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EACpC,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAE3C,IAAI,MAAM,GAAQ,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YACvB,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,KAAI,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAErD,IAAI,KAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,EAAE;gBAClC,IAAI,SAAS,GAAQ,IAAI,MAAM,EAAE,CAAC;gBAElC,IAAI,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC;gBACtC,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;iBAC9C;gBACD,IAAI,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,eAAe,CAAC;gBACvC,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;iBAC/C;gBACD,SAAS,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACtD,SAAS,CAAC,GAAG,GAAG,KAAI,CAAC,GAAG,CAAC;gBACzB,SAAS,CAAC,KAAK,GAAG,KAAI,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3C,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;gBACxB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aACrC;YAED,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAE;gBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClD,KAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC3B,6CAA6C;YACjD,CAAC,CAAC,CAAC;;QACP,CAAC;QAED,2BAAO,GAAP;YACI,OAAO,IAAI,CAAC,GAAG,CAAC;QACpB,CAAC;QA7CQ,SAAS;YAFrB,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,OAAO,CAAC,QAAQ,CAAC;WACL,SAAS,CA8CrB;QAAD,gBAAC;KAAA,AA9CD,CAA+B,SAAA,MAAM,GA8CpC;IA9CY,kBAAS,YA8CrB,CAAA;IAUD;QAAuC,qCAAgC;QAKnE,2BAAY,QAAgB,EAAE,GAA8B;YAA5D,YACI,kBAAM,QAAQ,EAAE,GAAG,CAAC,SA+BvB;YA7BG,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAC5B,mBAAiB,CAAC,eAAe,EAAE,CAAC;YAEpC,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;gBACtB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAI,CAAC,UAAU,CAAC,CAAC;gBACrC,EAAE,GAAG,KAAI,CAAC,UAAU,CAAC;aACxB;YAED,IAAI,KAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI;gBACzB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,KAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI;gBACzB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAE7C,KAAI,CAAC,iBAAiB,CAAC,KAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBACrC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;oBACxB,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,KAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC3C,IAAI,KAAK,IAAI,IAAI;wBACb,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;iBAC5C;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,KAAI,CAAC,OAAO,EAAE;gBACvD,IAAI,MAAM,GAAG,KAAI,CAAC,SAAS,EAAE,CAAC;gBAC9B,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;;QACP,CAAC;8BArCQ,iBAAiB;QAuChB,yCAAa,GAAvB,UAAwB,CAAM;YAC1B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEnE,yBAAyB;YACzB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9C,CAAC;QAES,uCAAW,GAArB;YACI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;gBACnB,OAAO,IAAI,CAAC;YAEhB,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAElC,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC;aACf;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC5C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACjD;YACD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC;aACf;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,qCAAS,GAAnB;YAAA,iBA+CC;YA9CG,OAAO;gBACH,YAAY,EAAE,EAAE;gBAChB,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE;gBAC5B,SAAS,EAAE,mBAAmB;gBAC9B,EAAE,EAAE;oBACA,aAAa,EAAE,UAAC,CAAM,IAAK,OAAA,KAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAArB,CAAqB;oBAChD,MAAM,EAAE,UAAC,EAAO;wBACZ,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;wBAC1B,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAC1C,CAAC;iBACJ;gBACD,aAAa,EAAE;oBACX;wBACI,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;qBAChC,EAAE;wBACC,IAAI,EAAE,SAAS;wBACf,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC;qBAChD,EAAE;wBACC,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;qBAClE,EAAE;wBACC,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;qBAChF,EAAE;wBACC,IAAI,EAAE,QAAQ;qBACjB,EAAE;wBACC,IAAI,EAAE,aAAa;wBACnB,MAAM,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;qBACrC,EAAE;wBACC,IAAI,EAAE,OAAO;qBAChB,EAAE;wBACC,IAAI,EAAE,QAAQ;qBACjB;iBAAC;gBACN,aAAa,EAAE,qCAAqC;gBACpD,WAAW,EAAE,gBAAgB;gBAC7B,gBAAgB,EAAE,8BAA8B;gBAChD,aAAa,EAAE,oBAAoB;gBACnC,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,qCAAqC,CAAC;gBAChE,QAAQ,EAAE,KAAK;gBACf,cAAc,EAAE,KAAK;gBACrB,cAAc,EAAE,KAAK;gBACrB,iBAAiB,EAAE,IAAI;gBACvB,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACnE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;aACxC,CAAC;QACN,CAAC;QAES,6CAAiB,GAA3B;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,mCAAO,GAAP;YACI,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAED,qCAAS,GAAT;YACI,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,cAAc,IAAI,QAAQ,EAAE;gBACjC,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;aAC7B;iBACI;gBACD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;aAC7B;QACL,CAAC;QAED,sBAAI,oCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBASD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAXA;QAED,qCAAS,GAAT,UAAU,KAAa;YACnB,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,IAAI,CAAC,cAAc,IAAI,QAAQ;gBAC/B,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAMD,wCAAY,GAAZ;YACI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,wCAAY,GAAZ,UAAa,KAAc;YAEvB,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;gBAC/B,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;iBAC7C;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBACvC;gBAED,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACxC,IAAI,IAAI,CAAC,cAAc,IAAI,QAAQ;oBAC/B,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACnC;QACL,CAAC;QAIM,iCAAe,GAAtB;YACI,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE;gBACpB,OAAO;aACV;YAED,IAAI,MAAM,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAClC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnB,OAAO;aACV;YAED,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC;iBACzC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;iBAC5B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,mCAAmC;gBACzD,mBAAiB,CAAC,WAAW,CAAC,CAAC;iBAClC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QAAA,CAAC;;QAjBK,6BAAW,GAAG,OAAO,CAAC;QA7KpB,iBAAiB;YAF7B,MAAM,CAAC,aAAa,EAAE,CAAC,SAAA,YAAY,EAAE,SAAA,SAAS,CAAC,CAAC;YAChD,OAAO,CAAC,aAAa,CAAC;WACV,iBAAiB,CA+L7B;QAAD,wBAAC;KAAA,AA/LD,CAAuC,SAAA,MAAM,GA+L5C;IA/LY,0BAAiB,oBA+L7B,CAAA;IAGD;QAA2C,yCAAiB;QACxD,+BAAY,QAAgB,EAAE,GAA8B;mBACxD,kBAAM,QAAQ,EAAE,GAAG,CAAC;QACxB,CAAC;QAES,yCAAS,GAAnB;YACI,IAAI,MAAM,GAAG,iBAAM,SAAS,WAAE,CAAC;YAC9B,MAAc,CAAC,aAAa,IAAI,4CAA4C;gBACzE,oEAAoE;gBACpE,iEAAiE;gBACjE,wEAAwE;gBACxE,sDAAsD;gBACtD,oDAAoD,CAAC;YAExD,MAAc,CAAC,aAAa,GAAG,iCAAiC,CAAC;YAClE,OAAO,MAAM,CAAC;QAClB,CAAC;QAhBQ,qBAAqB;YADjC,MAAM,CAAC,iBAAiB,CAAC;WACb,qBAAqB,CAiBjC;QAAD,4BAAC;KAAA,AAjBD,CAA2C,iBAAiB,GAiB3D;IAjBY,8BAAqB,wBAiBjC,CAAA;IAGD;QAA6C,2CAAiB;QAC1D,iCAAY,QAAgB,EAAE,GAA8B;mBACxD,kBAAM,QAAQ,EAAE,GAAG,CAAC;QACxB,CAAC;QAES,2CAAS,GAAnB;YACI,IAAI,MAAM,GAAG,iBAAM,SAAS,WAAE,CAAC;YAC9B,MAAc,CAAC,aAAa,IAAI,4CAA4C;gBACzE,0DAA0D;gBAC1D,+DAA+D;gBAC/D,kEAAkE;gBAClE,wEAAwE;gBACxE,oDAAoD,CAAC;YAExD,MAAc,CAAC,aAAa,GAAG,iCAAiC,CAAC;YAClE,OAAO,MAAM,CAAC;QAClB,CAAC;QAhBQ,uBAAuB;YADnC,MAAM,CAAC,mBAAmB,CAAC;WACf,uBAAuB,CAiBnC;QAAD,8BAAC;KAAA,AAjBD,CAA6C,iBAAiB,GAiB7D;IAjBY,gCAAuB,0BAiBnC,CAAA;IAiBD;QAAuC,qCAAgC;QAGnE,2BAAY,GAAW,EAAE,GAA6B;YAAtD,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SAmBlB;YAjBG,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACpC,IAAI,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC;gBAClD,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAEvC,KAAI,CAAC,OAAO,GAAG,IAAI,SAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,EAAE;gBAC3D,OAAO,EAAE,KAAI,CAAC,cAAc,EAAE;aACjC,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAG,CAAC,CAAC,wBAAwB,CAAC;iBACrC,QAAQ,CAAC,iBAAiB,CAAC;iBAC3B,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,GAAG,GAAG,KAAI,CAAC,qBAAqB,EAAE,CAAC;YACvC,KAAI,CAAC,WAAW,GAAG,SAAA,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAEpD,KAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;YACrD,KAAI,CAAC,eAAe,EAAE,CAAC;;QAC3B,CAAC;QAES,iDAAqB,GAA/B;YAAA,iBAqBC;YApBG,OAAO;gBACH,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC;gBACrD,IAAI,EAAE,IAAI,CAAC,OAAO;gBAClB,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,UAAC,QAAQ,EAAE,IAAI,EAAE,IAAI;oBAC3B,IAAI,CAAC,SAAA,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAI,CAAC,OAAO,CAAC,EAAE;wBAC7D,OAAO;qBACV;oBAED,IAAI,SAAS,GAAiB;wBAC1B,YAAY,EAAE,IAAI;wBAClB,QAAQ,EAAE,QAAQ,CAAC,aAAa;qBACnC,CAAC;oBAEF,KAAI,CAAC,MAAM,GAAG,SAAS,CAAC;oBACxB,KAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,KAAI,CAAC,eAAe,EAAE,CAAC;gBAC3B,CAAC;aACJ,CAAA;QACL,CAAC;QAES,6CAAiB,GAA3B;YACI,OAAO,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAES,0CAAc,GAAxB;YAAA,iBAmBC;YAlBG,OAAO;gBACH;oBACI,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;oBAC/B,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE;oBACT,CAAC;iBACJ;gBACD;oBACI,KAAK,EAAE,EAAE;oBACT,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC;oBACrD,QAAQ,EAAE,eAAe;oBACzB,OAAO,EAAE;wBACL,KAAI,CAAC,MAAM,GAAG,IAAI,CAAC;wBACnB,KAAI,CAAC,QAAQ,EAAE,CAAC;wBAChB,KAAI,CAAC,eAAe,EAAE,CAAC;oBAC3B,CAAC;iBACJ;aACJ,CAAC;QACN,CAAC;QAES,oCAAQ,GAAlB;YACI,IAAI,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe;gBAClD,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAEzD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;gBACrB,SAAA,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAC7C,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aAC1D;iBACI;gBACD,SAAA,YAAY,CAAC,mBAAmB,CAC5B,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,mBAAmB,EACpD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;aAC/B;QACL,CAAC;QAES,2CAAe,GAAzB;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAC3D,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACzD,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACvD,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE;gBACjD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,wCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;QACrD,CAAC;QAED,wCAAY,GAAZ,UAAa,KAAc;YACvB,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;gBAC/B,IAAI,KAAK,EAAE;oBACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;iBAChF;qBACI;oBACA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;iBACzE;gBACD,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;QACL,CAAC;QAED,qCAAS,GAAT;YACI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;gBACrB,OAAO,IAAI,CAAC;aACf;YACD,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,oCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAkBD,UAAU,CAAe;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WApBA;QAED,qCAAS,GAAT,UAAU,KAAmB;YACzB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;oBACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;iBACtB;qBACI;oBACD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;iBACrC;aACJ;iBACI;gBACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;aACtB;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAMD,wCAAY,GAAZ,UAAa,QAAsB,EAAE,MAAW;YAC5C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChD,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,wCAAY,GAAZ,UAAa,MAAW,EAAE,QAAsB;YAC5C,IAAI,KAAK,GAAiB,EAAE,CAAC;YAC7B,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE;gBAEpD,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;oBAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;oBACvC,IAAI,GAAG,GAAI,EAAU,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;oBACxD,IAAI,GAAG,IAAI,CAAC,EAAE;wBACV,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;qBAC1C;yBACI;wBACD,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;qBAC1B;iBACJ;aACJ;iBACI;gBACD,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;aAClE;YAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QA1KQ,iBAAiB;YAF7B,MAAM,CAAC,aAAa,EAAE,CAAC,SAAA,SAAS,CAAC,CAAC;YAClC,OAAO,CAAC,QAAQ,CAAC;WACL,iBAAiB,CAiL7B;QAAD,wBAAC;KAAA,AAjLD,CAAuC,SAAA,MAAM,GAiL5C;IAjLY,0BAAiB,oBAiL7B,CAAA;IAID;QAA+C,6CAAgC;QAQ3E,mCAAY,GAAW,EAAE,GAA6B;YAAtD,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SA+BlB;YA7BG,KAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;YAC5C,IAAI,IAAI,GAAG,KAAI,CAAC;YAChB,KAAI,CAAC,OAAO,GAAG,IAAI,SAAA,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,EAAE;gBAC3D,OAAO,EAAE,KAAI,CAAC,cAAc,EAAE;aACjC,CAAC,CAAC;YACH,IAAI,QAAQ,GAAG,CAAC,CAAC,wBAAwB,CAAC;iBACrC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEjE,IAAI,aAAa,GAAG,KAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAE/D,KAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC;gBACpD,SAAS,EAAE,aAAa;gBACxB,IAAI,EAAE,KAAI,CAAC,OAAO;gBAClB,SAAS,EAAE,KAAI,CAAC,UAAU;gBAC1B,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,UAAC,QAAQ,EAAE,IAAI,EAAE,IAAI;oBAC3B,IAAI,CAAC,SAAA,YAAY,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAI,CAAC,OAAO,CAAC,EAAE;wBAC7D,OAAO;qBACV;oBACD,IAAI,SAAS,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC;oBACzE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC3B,CAAC;aACJ,CAAC,CAAC;YAEH,KAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;YACrD,KAAI,CAAC,eAAe,EAAE,CAAC;;QAC3B,CAAC;QAES,qDAAiB,GAA3B;YACI,OAAO,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAES,kDAAc,GAAxB;YACI,OAAO,CAAC;oBACJ,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE;oBAC/B,QAAQ,EAAE,iBAAiB;oBAC3B,OAAO,EAAE;oBACT,CAAC;iBACJ,CAAC,CAAC;QACP,CAAC;QAES,4CAAQ,GAAlB;YAAA,iBAaC;YAZG,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EACrE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAElC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,CAAC,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;qBAC3D,KAAK,CAAC,UAAA,EAAE;oBACL,EAAE,CAAC,cAAc,EAAE,CAAC;oBACnB,EAAU,CAAC,QAAQ,CAAC,KAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACvC,KAAI,CAAC,QAAQ,EAAE,CAAC;gBACpB,CAAC,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;QACP,CAAC;QAES,mDAAe,GAAzB;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAC3D,SAAS,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,gDAAY,GAAZ;YACI,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;QACrD,CAAC;QAED,gDAAY,GAAZ,UAAa,KAAc;YACvB,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;gBAC/B,IAAI,KAAK,EAAE;oBACN,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;iBAChF;qBACI;oBACA,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;iBACzE;gBACD,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;QACL,CAAC;QAED,6CAAS,GAAT;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;gBAChC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACP,CAAC;QAED,sBAAI,4CAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAUD,UAAU,CAAiB;gBACvB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAZA;QAED,6CAAS,GAAT,UAAU,KAAqB;YAC3B,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;gBACzC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAMD,gDAAY,GAAZ,UAAa,QAAsB,EAAE,MAAW;YAC5C,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aACtD;iBACI;gBACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;aAC5C;QACL,CAAC;QAED,gDAAY,GAAZ,UAAa,MAAW,EAAE,QAAsB;YAC5C,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,IAAK,EAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;gBAC3C,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;oBAClD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;iBACrC;qBACI;oBACD,IAAI,CAAC,SAAS,CAAC,CAAC;4BACZ,QAAQ,EAAE,IAAI;4BACd,YAAY,EAAE,aAAa;yBAC9B,CAAC,CAAC,CAAC;iBACP;aACJ;iBACI;gBACD,IAAI,CAAC,SAAS,CAAC,GAAU,CAAC,CAAC;aAC9B;QACL,CAAC;QAGD;YADC,MAAM,EAAE;0EACuB;QA/IvB,yBAAyB;YAFrC,MAAM,CAAC,qBAAqB,EAAE,CAAC,SAAA,SAAS,CAAC,CAAC;YAC1C,OAAO,CAAC,QAAQ,CAAC;WACL,yBAAyB,CAgJrC;QAAD,gCAAC;KAAA,AAhJD,CAA+C,SAAA,MAAM,GAgJpD;IAhJY,kCAAyB,4BAgJrC,CAAA;IAED,uDAAuD;IAGvD;QAAkC,gCAA2B;QAEzD,sBAAY,KAAa,EAAE,GAAyB;YAApD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAKpB;YAHI,KAAa,CAAC,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;gBACzC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;aACzD,CAAC,CAAC;;QACP,CAAC;QAED,sBAAW,+BAAK;iBAAhB;gBACI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;gBACzC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9B,CAAC;iBAMD,UAAiB,KAAa;gBAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;;;WARA;QAES,gCAAS,GAAnB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAMS,gCAAS,GAAnB,UAAoB,KAAa;YAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QAzBQ,YAAY;YAFxB,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;YAChC,OAAO,CAAC,wBAAwB,CAAC;WACrB,YAAY,CA0BxB;QAAD,mBAAC;KAAA,AA1BD,CAAkC,SAAA,MAAM,GA0BvC;IA1BY,qBAAY,eA0BxB,CAAA;IASD;QAAkC,gCAAW;QAEzC,sBAAY,KAAa;mBACrB,kBAAM,KAAK,CAAC;QAChB,CAAC;QAED,sBAAW,+BAAK;iBAAhB;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9B,CAAC;iBAMD,UAAiB,KAAa;gBAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;;;WARA;QAES,gCAAS,GAAnB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAMS,gCAAS,GAAnB,UAAoB,KAAa;YAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QApBQ,YAAY;YAFxB,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;YAChC,OAAO,CAAC,wBAAwB,CAAC;WACrB,YAAY,CAqBxB;QAAD,mBAAC;KAAA,AArBD,CAAkC,SAAA,MAAM,GAqBvC;IArBY,qBAAY,eAqBxB,CAAA;IAGD;QAAwC,sCAAqB;QACzD,4BAAY,KAAa;YAAzB,YACI,kBAAM,KAAK,CAAC,SAIf;YAFG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;iBACtB,QAAQ,CAAC,OAAO,CAAC,CAAC;;QAC3B,CAAC;QANQ,kBAAkB;YAD9B,MAAM,CAAC,cAAc,CAAC;WACV,kBAAkB,CAO9B;QAAD,yBAAC;KAAA,AAPD,CAAwC,QAAQ,CAAC,YAAY,GAO5D;IAPY,2BAAkB,qBAO9B,CAAA;IAGD;QAAoC,kCAAY;QAC5C,wBAAY,KAAa;YAAzB,YACI,kBAAM,KAAK,CAAC,SAGf;YADG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;;QACnC,CAAC;QALQ,cAAc;YAD1B,MAAM,CAAC,UAAU,CAAC;WACN,cAAc,CAM1B;QAAD,qBAAC;KAAA,AAND,CAAoC,YAAY,GAM/C;IANY,uBAAc,iBAM1B,CAAA;IAUD;QAAuC,qCAAgC;QAGnE,2BAAY,KAAa,EAAE,GAA6B;YAAxD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAmCpB;YAjCG,IAAI,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBACrC,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI;gBAC7B,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;;aAE5C;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gBAC1C,IAAI,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACjD,KAAiB,UAAY,EAAZ,KAAA,MAAM,CAAC,KAAK,EAAZ,cAAY,EAAZ,IAAY,EAAE;oBAA1B,IAAI,IAAI,SAAA;oBACT,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBACvC,IAAI,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC3D,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACnC,IAAI,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACrD,KAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBAC3B;aACJ;iBACI;gBACD,IAAI,QAAQ,GAAG,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5F,IAAI,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBACnC,IAAI,OAAO,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACrC,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;oBACxF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxB,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;qBAClC;iBACJ;gBAED,IAAI,MAAM,GAAI,EAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAClD,KAAc,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;oBAAjB,IAAI,CAAC,eAAA;oBACN,IAAI,IAAI,GAAI,EAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAClD,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAC/C,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;iBAChD;aACJ;;QACL,CAAC;QAES,oCAAQ,GAAlB,UAAmB,KAAa,EAAE,IAAY;YAC1C,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;iBACnD,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC;iBACzC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAED,qCAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;QAC5D,CAAC;QAED,sBAAI,oCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAkBD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WApBA;QAED,qCAAS,GAAT,UAAU,KAAa;YACnB,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,EAAE;gBAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,MAAM,CAAC,CAAC,CAAsB,CAAC,OAAO,GAAG,KAAK,CAAC;iBACnD;gBACD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;oBACzB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;oBAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClB,MAAM,CAAC,CAAC,CAAsB,CAAC,OAAO,GAAG,IAAI,CAAC;qBAClD;iBACJ;aACJ;QACL,CAAC;QAMD,wCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;QACjD,CAAC;QAED,wCAAY,GAAZ,UAAa,KAAc;YACvB,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;gBAC/B,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;yBACpC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;iBACnD;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;yBAC9B,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBAC7C;aACJ;QACL,CAAC;QA5FQ,iBAAiB;YAF7B,MAAM,CAAC,aAAa,EAAE,CAAC,SAAA,YAAY,EAAE,SAAA,SAAS,CAAC,CAAC;YAChD,OAAO,CAAC,QAAQ,CAAC;WACL,iBAAiB,CA8F7B;QAAD,wBAAC;KAAA,AA9FD,CAAuC,SAAA,MAAM,GA8F5C;IA9FY,0BAAiB,oBA8F7B,CAAA;IASD;QAA+B,6BAAwB;QACnD,mBAAY,GAAW,EAAE,GAAqB;YAA9C,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SA+BlB;YA7BG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChF,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;gBAC/E,IAAI,GAAG,GAAG,yCAAyC,CAAC;gBACpD,IAAI,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAChC,IAAI,GAAG,IAAI,IAAI,EAAE;oBACb,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;iBAChD;gBACD,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;gBACpB,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;aAC1F;YAED,IAAI,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,KAAI,CAAC,OAAO,CAAC;iBACnD,IAAI,CAAC,IAAI,EAAE,KAAI,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAExD,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;YAC7B,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACrB,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;YACtB,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAEvB,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,IAAI,GAAG,KAAI,CAAC;YAEhB,SAAA,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBAC1C,IAAI,CAAC,CAAC,aAAa,CAAC,KAAI,CAAC,SAAS,EAAE,CAAC,EAAE;oBACnC,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;iBACxC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;;QACP,CAAC;QAED,6BAAS,GAAT;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5D,CAAC;QAED,6BAAS,GAAT,UAAU,KAAa;YACnB,SAAS;QACb,CAAC;QAzCQ,SAAS;YAFrB,SAAA,UAAU,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;YAC/D,SAAA,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;WAChB,SAAS,CA0CrB;QAAD,gBAAC;KAAA,AA1CD,CAA+B,SAAA,MAAM,GA0CpC;IA1CY,kBAAS,YA0CrB,CAAA;IASD;QAAoC,kCAA6B;QAE7D,wBAAY,KAAa,EAAE,GAA2B;YAAtD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAQpB;YANG,IAAI,KAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;aACzD;YACD,IAAI,KAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;aACxD;;QACL,CAAC;QAED,sBAAW,iCAAK;iBAAhB;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC9B,CAAC;iBAMD,UAAiB,KAAa;gBAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;;;WARA;QAES,kCAAS,GAAnB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAMS,kCAAS,GAAnB,UAAoB,KAAa;YAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QA3BQ,cAAc;YAF1B,MAAM,CAAC,UAAU,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;YAClC,OAAO,CAAC,cAAc,CAAC;WACX,cAAc,CA4B1B;QAAD,qBAAC;KAAA,AA5BD,CAAoC,SAAA,MAAM,GA4BzC;IA5BY,uBAAc,iBA4B1B,CAAA;IAWD;QAAgC,8BAAyB;QAIrD,oBAAY,KAAa,EAAE,GAAuB;YAAlD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAkBpB;YAhBG,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;YAE3C,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,aAAa,EAAE;gBAC7B,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;aAChC;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,KAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;gBAChF,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;aAC3E;YAED,KAAI,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxF,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAM,OAAA,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAA9B,CAA8B,CAAC,CAAC;YAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE;gBAC/D,CAAC,CAAC,SAAS,CAAC,KAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;aAClF;;QACL,CAAC;QAED,sBAAW,6BAAK;iBAAhB;gBACI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtC,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxC,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,EAAE;oBAChC,OAAO,IAAI,CAAC;iBACf;gBACD,OAAO,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;YAC9B,CAAC;iBAMD,UAAiB,KAAa;gBAC1B,IAAI,CAAC,KAAK,EAAE;oBACR,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;wBAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACzB;yBACI;wBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACzB;iBACJ;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;iBAChC;YACL,CAAC;;;WArBA;QAES,8BAAS,GAAnB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAmBS,8BAAS,GAAnB,UAAoB,KAAa;YAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QAED,iCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;QAED,iCAAY,GAAZ,UAAa,KAAc;YAEvB,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;gBAC/B,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;iBAClE;qBACI;oBACD,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBAC/D;gBACD,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aACzD;QACL,CAAC;QA1EQ,UAAU;YAFtB,MAAM,CAAC,MAAM,EAAE,CAAC,SAAA,YAAY,EAAE,SAAA,SAAS,CAAC,CAAC;YACzC,OAAO,CAAC,YAAY,CAAC;WACT,UAAU,CA2EtB;QAAD,iBAAC;KAAA,AA3ED,CAAgC,SAAA,MAAM,GA2ErC;IA3EY,mBAAU,aA2EtB,CAAA;IAGD;QAA+B,6BAAY;QAEvC,mBAAY,KAAa;YAAzB,YACI,kBAAM,KAAK,CAAC,SAuBf;YArBG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,8DAA8D,CAAC,CAAC;YAEpG,KAAK,CAAC,EAAE,CAAC,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBACjC,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAA+B,CAAC;gBACtF,IAAI,SAAS,IAAI,IAAI;oBACjB,OAAO;gBAEX,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACxB,OAAO;gBAEX,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK;oBACN,OAAO;gBAEX,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;gBAE1B,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;oBACrE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACjB,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC5B;YACL,CAAC,CAAC,CAAC;;QACP,CAAC;QA1BQ,SAAS;YADrB,MAAM,CAAC,KAAK,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;WACjB,SAAS,CA2BrB;QAAD,gBAAC;KAAA,AA3BD,CAA+B,YAAY,GA2B1C;IA3BY,kBAAS,YA2BrB,CAAA;IAID;QAAwD,qCAAgB;QAGpE,2BAAY,MAAc,EAAE,GAAa;YAAzC,YACI,kBAAM,MAAM,EAAE,GAAG,CAAC,SAgBrB;YAnBD,cAAQ,GAAW,EAAE,CAAC;YAKlB,IAAI,aAAa,GAAG,KAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,aAAa,IAAI,IAAI;gBACrB,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAE9C,MAAM,CAAC,OAAO,CAAC,KAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAEzC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,0BAA0B;YAEvD,MAAM,CAAC,EAAE,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,EAAE,UAAC,CAAC,EAAE,CAAC;gBACxC,IAAI,SAAA,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBAC9B,IAAI,SAAA,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,IAAI;wBAC7C,MAAM,CAAC,KAAK,EAAE,CAAC;iBACtB;YACL,CAAC,CAAC,CAAC;;QACP,CAAC;QAES,yCAAa,GAAvB;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC3C,IAAI,GAAG,IAAI,IAAI,EAAE;gBACb,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;aACvD;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QAES,sCAAU,GAApB;YACI,MAAM,IAAK,EAAU,CAAC,uBAAuB,EAAE,CAAC;QACpD,CAAC;QAES,iCAAK,GAAf,UAAgB,OAAoB,EAAE,QAAyC;YAC3E,IAAI,OAAO,GAA0B;gBACjC,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO;gBACpC,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,UAAU,QAAQ;oBACzB,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACvB,CAAC;aACJ,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAES,wCAAY,GAAtB,UAAuB,OAA0C;YAC7D,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAES,sCAAU,GAApB,UAAqB,GAAW,EAAE,QAA2B;YACzD,IAAI,OAAO,GAA0B;gBACjC,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW;gBACxC,OAAO,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;gBAC1B,SAAS,EAAE,UAAU,QAAQ;oBACzB,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;aACJ,CAAC;YACF,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAES,6CAAiB,GAA3B,UAA4B,OAA8C;YACtE,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAES,sCAAU,GAApB,UAAqB,IAAS;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,uCAAW,GAArB,UAAsB,IAAS;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,wCAAY,GAAtB;YACI,OAAO,GAAG,CAAC;QACf,CAAC;QAES,6CAAiB,GAA3B;YAAA,iBA0CC;YAzCG,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACzC,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,OAAO;gBACH,uBAAuB,EAAE,EAAE;gBAC3B,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;gBACrE,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBACpC,KAAK,EAAE,UAAA,KAAK;oBACR,IAAI,OAAO,GAAG;wBACV,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAI,CAAC,QAAQ,GAAG,CAAC;qBAC1G,CAAC;oBAEF,IAAI,YAAY,KAAK,CAAC,EAAE;wBACpB,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;qBACrC;oBAED,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC;wBAC7B,KAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAA,QAAQ;4BACxB,KAAK,CAAC,QAAQ,CAAC;gCACX,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC;oCACpD,OAAO,EAAE,EAAE,EAAE,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;gCAC5E,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAI,CAAC,QAAQ;6BACtD,CAAC,CAAC;wBACP,CAAC,CAAC,CAAC;oBACP,CAAC,EAAE,KAAI,CAAC,YAAY,EAAE,CAAC,CAAC;gBAE5B,CAAC;gBACD,aAAa,EAAE,UAAC,OAAO,EAAE,QAAQ;oBAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBACxB,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;wBACtB,QAAQ,CAAC,IAAI,CAAC,CAAC;wBACf,OAAO;qBACV;oBACD,KAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAA,MAAM;wBACvB,QAAQ,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;4BAC9B,EAAE,EAAE,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC;4BAC3B,IAAI,EAAE,KAAI,CAAC,WAAW,CAAC,MAAM,CAAC;4BAC9B,MAAM,EAAE,MAAM;yBACjB,CAAC,CAAC,CAAC;oBACR,CAAC,CAAC,CAAC;gBACP,CAAC;aACJ,CAAC;QACN,CAAC;QAES,4CAAgB,GAA1B,UAA2B,KAAa;YACpC,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;iBACrD,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7D,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEP,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;iBACxC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAES,8CAAkB,GAA5B,UAA6B,CAAM;QACnC,CAAC;QAES,gDAAoB,GAA9B;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACtD,CAAC;QAED,qCAAS,GAAT;YACI,OAAQ,EAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QACrE,CAAC;QAED,sBAAI,oCAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBASD,UAAU,CAAS;gBACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAXA;QAED,qCAAS,GAAT,UAAU,KAAa;YACnB,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;qBAC7B,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;aACzC;QACL,CAAC;QAzJQ,iBAAiB;YAF7B,MAAM,CAAC,aAAa,EAAE,CAAC,SAAA,YAAY,CAAC,CAAC;YACrC,OAAO,CAAC,yBAAyB,CAAC;WACtB,iBAAiB,CA8J7B;QAAD,wBAAC;KAAA,AA9JD,CAAwD,SAAA,MAAM,GA8J7D;IA9JY,0BAAiB,oBA8J7B,CAAA;AACL,CAAC,EAp4DS,QAAQ,KAAR,QAAQ,QAo4DjB;ACp4DD,IAAU,QAAQ,CAkCjB;AAlCD,WAAU,QAAQ;IAQd,IAAiB,eAAe,CAyB/B;IAzBD,WAAiB,eAAe;QAEf,sBAAM,GAAG,MAAM,CAAC;QAChB,uBAAO,GAAG,OAAO,CAAC;QAClB,wBAAQ,GAAG,UAAU,CAAC;QACtB,0BAAU,GAAG,YAAY,CAAC;QAC1B,kBAAE,GAAG,IAAI,CAAC;QACV,kBAAE,GAAG,IAAI,CAAC;QACV,kBAAE,GAAG,IAAI,CAAC;QACV,kBAAE,GAAG,IAAI,CAAC;QACV,kBAAE,GAAG,IAAI,CAAC;QACV,kBAAE,GAAG,IAAI,CAAC;QACV,kBAAE,GAAG,IAAI,CAAC;QACV,kBAAE,GAAG,IAAI,CAAC;QACV,sBAAM,GAAG,QAAQ,CAAC;QAClB,yBAAS,GAAG,WAAW,CAAC;QAExB,kCAAkB,GAAyB;YACpD,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,GAAG;YACP,EAAE,EAAE,IAAI;SACX,CAAC;IACN,CAAC,EAzBgB,eAAe,GAAf,wBAAe,KAAf,wBAAe,QAyB/B;AACL,CAAC,EAlCS,QAAQ,KAAR,QAAQ,QAkCjB;AElCD,IAAU,QAAQ,CAgLjB;AAhLD,WAAU,QAAQ;IAGd;QAEI,qBAAY,MAAsB;YAE9B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAEhB,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,MAAM,IAAK,EAAU,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;aACzD;YAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YAE7B,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjC,IAAI,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,MAAM,IAAI,IAAI,EAAE;oBAChB,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;oBACjB,IAAI,MAAM,IAAI,IAAI;wBACd,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;iBACvB;gBAED,IAAI,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,MAAM,IAAI,IAAI,EAAE;oBAChB,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;oBACjB,IAAI,MAAM,IAAI,IAAI;wBACd,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;iBACvB;gBAED,OAAO,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YAEtB,KAAkB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;gBAArB,IAAI,KAAK,eAAA;gBACV,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aAC9C;QACL,CAAC;wBAnCQ,WAAW;QAqCb,0BAAc,GAArB,UAAsB,KAAmB;YAErC,IAAI,KAAK,IAAI,IAAI;gBACb,OAAO,CAAC,EAAE,CAAC,CAAC;YAEhB,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;YAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEpB,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;oBAE/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;wBAE1C,IAAI,QAAQ;4BACR,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;wBAEzD,IAAI,SAAS;4BACT,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EACtC,IAAI,EAAE,YAAY,CAAC,CAAC;;4BAExB,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EACtC,KAAK,EAAE,YAAY,CAAC,CAAC;wBAE7B,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;qBACvB;oBAED,QAAQ,GAAG,KAAK,CAAC;iBACpB;gBAED,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;oBACtB,QAAQ,GAAG,IAAI,CAAC;iBACnB;gBAED,IAAI,IAAI,CAAC,IAAI;oBACT,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAC9C,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;oBAEzB,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAC9C,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBAC1C,IAAI,SAAS;oBACT,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EACtC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;;oBAEjD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EACtC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;aACzD;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC;QAEM,6BAAiB,GAAxB,UAAyB,KAAmB;YAExC,IAAI,KAAK,IAAI,IAAI;gBACb,OAAO,EAAE,CAAC;YAEd,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,WAAW,GAAG,EAAE,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEpB,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;oBACjD,WAAW,IAAI,GAAG,CAAC;oBACnB,QAAQ,GAAG,KAAK,CAAC;iBACpB;gBAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxB,WAAW,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,uBAAuB;wBAC/C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;iBACzC;gBAED,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,WAAW,IAAI,GAAG,CAAC;oBACnB,QAAQ,GAAG,IAAI,CAAC;iBACnB;gBAED,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;aACnC;YAED,IAAI,QAAQ,EAAE;gBACV,WAAW,IAAI,GAAG,CAAC;aACtB;YAED,OAAO,WAAW,CAAC;QACvB,CAAC;QAQD,gCAAU,GAAV;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,qCAAe,GAAf;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;QAED,+BAAS,GAAT;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,kCAAY,GAAZ;YACI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAG,EAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACpE,CAAC;QAED,iCAAW,GAAX,UAAY,KAA6C;YACrD,IAAI,CAAC,OAAO,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QAED,oCAAc,GAAd,UAAe,KAA6C;YACxD,IAAI,CAAC,OAAO,GAAI,EAAU,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;QAED,wCAAkB,GAAlB;YACI,OAAO,aAAW,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAED,qCAAe,GAAf;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;gBACxB,IAAI,CAAC,WAAW,GAAG,aAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAEjE,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;;QA3KQ,WAAW;YADvB,SAAA,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC;WAC3B,WAAW,CA4KvB;QAAD,kBAAC;KAAA,AA5KD,IA4KC;IA5KY,oBAAW,cA4KvB,CAAA;AACL,CAAC,EAhLS,QAAQ,KAAR,QAAQ,QAgLjB;AChLD,IAAU,QAAQ,CAgtBjB;AAhtBD,WAAU,QAAQ;IAgBd;QAAA;QACA,CAAC;QADY,UAAU;YADtB,SAAA,UAAU,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;WACvC,UAAU,CACtB;QAAD,iBAAC;KAAA,AADD,IACC;IADY,mBAAU,aACtB,CAAA;IAYD;QAAA;QACA,CAAC;QADY,eAAe;YAD3B,SAAA,UAAU,CAAC,iBAAiB,CAAC,0BAA0B,CAAC;WAC5C,eAAe,CAC3B;QAAD,sBAAC;KAAA,AADD,IACC;IADY,wBAAe,kBAC3B,CAAA;IAED,IAAO,SAAS,GAAG,SAAA,eAAe,CAAC;IACnC,IAAO,MAAM,GAAG,SAAA,UAAU,CAAC,MAAM,CAAA;IAGjC;QAAA;QAiPA,CAAC;QA7OU,iCAAS,GAAhB;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,iCAAS,GAAT,UAAU,KAAmB;YACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QAID,qCAAa,GAAb;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAED,qCAAa,GAAb,UAAc,KAAa;YACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;QAID,oCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,oCAAY,GAAZ,UAAa,KAAqB;YAC9B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QAIS,+CAAuB,GAAjC,UAAkC,IAAsB;YACpD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;gBACpB,OAAO,IAAI,CAAC;aACf;YACD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,iDAAyB,GAAnC,UAAoC,IAAsB;YACtD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,kCAAU,GAApB;YACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC;QAC9C,CAAC;QAEM,oCAAY,GAAnB;YACI,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE;gBAC7B,KAAK,MAAM,CAAC;gBACZ,KAAK,OAAO,CAAC;gBACb,KAAK,QAAQ,CAAC;gBACd,KAAK,WAAW,CAAC,CAAC;oBACd,OAAO;iBACV;gBACD,KAAK,UAAU,CAAC;gBAChB,KAAK,YAAY,CAAC;gBAClB,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC,CAAC;oBACP,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;oBAClD,OAAO;iBACV;aACJ;YAED,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,kDAAkD,EAC7E,EAAU,CAAC,WAAW,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9F,CAAC;QAES,sCAAc,GAAxB,UAAyB,EAAkB;YACvC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAChD,uCAAuC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;QAES,gCAAQ,GAAlB,UAAmB,KAAmB;YAClC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtF,CAAC;QAES,mCAAW,GAArB,UAAsB,EAAkB,EAAE,MAAc;YACpD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBAChC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACvE;iBACI,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAClF;iBACI;gBACD,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7F;QACL,CAAC;QAES,wCAAgB,GAA1B;YACI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3B,CAAC;QAEM,mCAAW,GAAlB;YACI,IAAI,MAAM,GAAqB,EAAE,CAAC;YAClC,IAAI,IAAY,CAAC;YACjB,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE;gBAC7B,KAAK,MAAM,CAAC,CAAC;oBACT,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC/D,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;oBACzD,OAAO,MAAM,CAAC;iBACjB;gBAED,KAAK,OAAO,CAAC,CAAC;oBACV,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC/D,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC1D,OAAO,MAAM,CAAC;iBACjB;gBAED,KAAK,QAAQ,CAAC,CAAC;oBACX,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC/D,MAAM,CAAC,QAAQ,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;oBACzD,OAAO,MAAM,CAAC;iBACjB;gBAED,KAAK,WAAW,CAAC,CAAC;oBACd,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC/D,MAAM,CAAC,QAAQ,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;oBAC7D,OAAO,MAAM,CAAC;iBACjB;gBAED,KAAK,UAAU,CAAC,CAAC;oBACb,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC5B,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnE,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;oBACxE,OAAO,MAAM,CAAC;iBACjB;gBAED,KAAK,YAAY,CAAC,CAAC;oBACf,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC5B,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnE,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;oBAClE,OAAO,MAAM,CAAC;iBACjB;gBAED,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC,CAAC;oBACP,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC5B,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;oBACnE,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,kBAAkB,CACrF,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;oBACrD,OAAO,MAAM,CAAC;iBACjB;aACJ;YAED,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,mDAAmD,EAC9E,EAAU,CAAC,WAAW,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9F,CAAC;QAED,iCAAS,GAAT,UAAU,KAAU;YAChB,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;YACxD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,iCAAS,GAAT;YACI,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE;gBAC7B,KAAK,UAAU,CAAC;gBAChB,KAAK,YAAY,CAAC;gBAClB,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC,CAAC;oBACP,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;oBACxD,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC;iBACtB;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,oCAAY,GAAtB;YACI,OAAO,IAAK,EAAU,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;QACxG,CAAC;QAED,2CAAmB,GAAnB,UAAoB,KAAa;YAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;aAC7B;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,sCAAc,GAAd;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;YACjF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,iDAAiD,EAC7E,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvD;YAED,IAAI,KAAK,CAAC;YACV,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE;gBAC/B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAChC;iBACI;gBACD,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;aACvB;YAED,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAErC,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,qCAAa,GAAb;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YACvG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;aAC7C;YACD,IAAI,KAAK,CAAC;YACV,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE;gBAC/B,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;aACtD;iBACI;gBACD,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;aACvB;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,uCAAe,GAAf,UAAgB,MAAqC;YACjD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;YACpC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,CAAC;QACzE,CAAC;QAhPiB,aAAa;YADlC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;WACrE,aAAa,CAiPlC;QAAD,oBAAC;KAAA,AAjPD,IAiPC;IAjPqB,sBAAa,gBAiPlC,CAAA;IAED,SAAS,SAAS,CAAC,IAAY;QAC3B,OAAO,SAAA,UAAU,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,GAAG,WAAW,CAAC,CAAA;IACrE,CAAC;IAGD;QAA+E,uCAAa;QACxF,6BAAmB,UAAe;YAAlC,YACI,iBAAO,SACV;YAFkB,gBAAU,GAAV,UAAU,CAAK;;QAElC,CAAC;QAES,uCAAS,GAAnB;YACI,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE;gBAC7B,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI;oBACL,OAAO,IAAI,CAAC;aACnB;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;QAID,0CAAY,GAAZ;YACI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;oBACjC,IAAI,EAAE,IAAI,CAAC,UAAU;oBACrB,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE;oBAC/B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;oBAChC,IAAI,EAAE,IAAI;iBACb,CAAQ,CAAC;gBACV,OAAO;aACV;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,iBAAM,YAAY,WAAE,CAAC;QACzB,CAAC;QAES,wCAAU,GAApB;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,8CAAgB,GAAhB;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,UAAU,EAAE;gBACjB,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE;gBACrD,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,CAAC;aAC5C;YAED,OAAO,iBAAM,gBAAgB,WAAE,CAAC;QACpC,CAAC;QAED,8CAAgB,GAAhB;YACI,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;YACzD,OAAO,GAAG,CAAC,aAAa,CAAC,CAAC;YAC1B,mDAAmD;YACnD,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,CAAC,CAAC;QAC9D,CAAC;QAED,uCAAS,GAAT,UAAU,KAAU;YAChB,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,OAAO;iBACV;gBAED,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAClD,OAAO;aACV;YAED,iBAAM,SAAS,YAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,uCAAS,GAAT;YACI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrD;YAED,OAAO,iBAAM,SAAS,WAAE,CAAC;QAC7B,CAAC;QAED,4CAAc,GAAd;YACI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,IAAI,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEvD,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;oBACxE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAE9B,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,iBAAM,cAAc,WAAE,CAAC;QAClC,CAAC;QAED,6CAAe,GAAf,UAAgB,MAAqC;YACjD,iBAAM,eAAe,YAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;YAC9B,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,EAC3B,IAAI,CAAC,gBAAgB,EAAE,EACvB,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,CAAC;QAC5C,CAAC;QAhGiB,mBAAmB;YADxC,SAAS,CAAC,YAAY,CAAC;WACF,mBAAmB,CAiGxC;QAAD,0BAAC;KAAA,AAjGD,CAA+E,aAAa,GAiG3F;IAjGqB,4BAAmB,sBAiGxC,CAAA;IAGD;QAAmC,iCAA+B;QAE9D;mBACI,kBAAM,SAAA,UAAU,CAAC;QACrB,CAAC;QAED,oCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QARQ,aAAa;YADzB,SAAS,CAAC,MAAM,CAAC;WACL,aAAa,CASzB;QAAD,oBAAC;KAAA,AATD,CAAmC,mBAAmB,GASrD;IATY,sBAAa,gBASzB,CAAA;IAGD;QAAsC,oCAAa;QAAnD;;QAOA,CAAC;QANG,uCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC;gBAChC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;gBACxC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE;aAC5C,CAAC,CAAC;QACP,CAAC;QANQ,gBAAgB;YAD5B,SAAS,CAAC,SAAS,CAAC;WACR,gBAAgB,CAO5B;QAAD,uBAAC;KAAA,AAPD,CAAsC,aAAa,GAOlD;IAPY,yBAAgB,mBAO5B,CAAA;IAGD;QAAuC,qCAA+B;QAElE;mBACI,kBAAM,SAAA,cAAc,CAAC;QACzB,CAAC;QAED,wCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,uBAAuB,CAC/B,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,uCAAW,GAAX;YACI,IAAI,MAAM,GAAqB,EAAE,CAAC;YAElC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE;gBAC7B,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,CAAC,CAAC;oBACP;wBACI,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;wBAChC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;wBACnE,IAAI,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;wBACrD,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;wBACrE,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC7E,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;wBACzC,IAAI,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;wBACjD,IAAI,SAAS,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;wBACjD,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE;4BAC7B,KAAK,IAAI,CAAC,CAAC;gCACP,MAAM,CAAC,QAAQ,GAAG,SAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;gCAChG,OAAO,MAAM,CAAC;6BACjB;4BACD,KAAK,IAAI,CAAC,CAAC;gCACP,MAAM,CAAC,QAAQ,GAAG,SAAA,QAAQ,CAAC,KAAK,CAAC,SAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gCAC9G,OAAO,MAAM,CAAC;6BACjB;4BACD,KAAK,IAAI,CAAC,CAAC;gCACP,MAAM,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gCAC7C,OAAO,MAAM,CAAC;6BACjB;4BACD,KAAK,IAAI,CAAC,CAAC;gCACP,MAAM,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;gCAC7C,OAAO,MAAM,CAAC;6BACjB;4BACD,KAAK,IAAI,CAAC,CAAC;gCACP,MAAM,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gCAC9C,OAAO,MAAM,CAAC;6BACjB;4BACD,KAAK,IAAI,CAAC,CAAC;gCACP,MAAM,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gCAC9C,OAAO,MAAM,CAAC;6BACjB;yBACJ;qBACJ;oBACD,MAAM;iBACT;aACJ;YAED,OAAO,iBAAM,WAAW,WAAE,CAAC;QAC/B,CAAC;QA9DQ,iBAAiB;YAD7B,SAAS,CAAC,UAAU,CAAC;WACT,iBAAiB,CA+D7B;QAAD,wBAAC;KAAA,AA/DD,CAAuC,mBAAmB,GA+DzD;IA/DY,0BAAiB,oBA+D7B,CAAA;IAGD;QAAsC,oCAAkC;QACpE;mBACI,kBAAM,SAAA,aAAa,CAAC;QACxB,CAAC;QAED,uCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,uBAAuB,CAC/B,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QARQ,gBAAgB;YAD5B,SAAS,CAAC,SAAS,CAAC;WACR,gBAAgB,CAS5B;QAAD,uBAAC;KAAA,AATD,CAAsC,mBAAmB,GASxD;IATY,yBAAgB,mBAS5B,CAAA;IAGD;QAAqC,mCAAyC;QAE1E;mBACI,kBAAM,SAAA,MAAM,CAAC;QACjB,CAAC;QAWD,sCAAY,GAAZ;YACI,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YAEjC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;aACpC;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;aAC5C;YAED,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAEnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,mCAAS,GAAnB;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC;YAEjC,OAAO,EAAE,KAAK,SAAS,CAAC,EAAE;gBACtB,EAAE,KAAK,SAAS,CAAC,EAAE;gBACnB,CAAC,IAAI,CAAC,WAAW,IAAI,CACjB,EAAE,KAAK,SAAS,CAAC,EAAE;oBACnB,EAAE,KAAK,SAAS,CAAC,EAAE;oBACnB,EAAE,KAAK,SAAS,CAAC,EAAE;oBACnB,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QAED,0CAAgB,GAAhB;YACI,IAAI,GAAG,GAAG,iBAAM,gBAAgB,WAAE,CAAC;YACnC,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;gBAC3F,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;aACtD;YAED,OAAO,GAAG,CAAC;QACf,CAAC;QAED,sCAAY,GAAZ;YAAA,iBAcC;YAbG,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,IAAI,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAElE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;oBACjC,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,aAAa,EAAE,CAAC,EAAhC,CAAgC;oBAC9C,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;iBACnC,CAAC,CAAC;gBAEH,OAAO;aACV;YAED,iBAAM,YAAY,WAAE,CAAC;QACzB,CAAC;QAES,oCAAU,GAApB;YACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;QAED,yCAAe,GAAf,UAAgB,MAAqC;YACjD,iBAAM,eAAe,YAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC;QA5ED;YADC,MAAM,EAAE;2DACU;QAGnB;YADC,MAAM,EAAE;4DACY;QAGrB;YADC,MAAM,EAAE;wDACQ;QAbR,eAAe;YAD3B,SAAS,CAAC,QAAQ,CAAC;WACP,eAAe,CAoF3B;QAAD,sBAAC;KAAA,AApFD,CAAqC,mBAAmB,GAoFvD;IApFY,wBAAe,kBAoF3B,CAAA;IAGD;QAAmC,iCAA+B;QAC9D;mBACI,kBAAM,SAAA,UAAU,CAAC;QACrB,CAAC;QAED,oCAAY,GAAZ;YACI,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QARQ,aAAa;YADzB,SAAS,CAAC,MAAM,CAAC;WACL,aAAa,CASzB;QAAD,oBAAC;KAAA,AATD,CAAmC,mBAAmB,GASrD;IATY,sBAAa,gBASzB,CAAA;IAGD;QAAsC,oCAAkC;QACpE;mBACI,kBAAM,SAAA,aAAa,CAAC;QACxB,CAAC;QAED,uCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QAPQ,gBAAgB;YAD5B,SAAS,CAAC,SAAS,CAAC;WACR,gBAAgB,CAQ5B;QAAD,uBAAC;KAAA,AARD,CAAsC,mBAAmB,GAQxD;IARY,yBAAgB,mBAQ5B,CAAA;IAGD;QAAqC,mCAAiC;QAElE;mBACI,kBAAM,SAAA,YAAY,CAAC;QACvB,CAAC;QAED,sCAAY,GAAZ;YACI,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAA;YACpH,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAES,mCAAS,GAAnB;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC;YACjC,OAAO,EAAE,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;QACpD,CAAC;QAES,oCAAU,GAApB;YACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;QAED,uCAAa,GAAb;YACI,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;aAC3B;YAED,OAAO,iBAAM,aAAa,WAAE,CAAC;QACjC,CAAC;QA1BQ,eAAe;YAD3B,SAAS,CAAC,QAAQ,CAAC;WACP,eAAe,CA2B3B;QAAD,sBAAC;KAAA,AA3BD,CAAqC,mBAAmB,GA2BvD;IA3BY,wBAAe,kBA2B3B,CAAA;IAGD;QAAqC,mCAAa;QAAlD;;QAmBA,CAAC;QAjBG,sCAAY,GAAZ;YACI,IAAI,GAAG,GAAG;gBACN,EAAE,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE;gBAC3B,EAAE,GAAG,EAAE,SAAS,CAAC,UAAU,EAAE;gBAC7B,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE;gBACrB,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE;aACxB,CAAC;YACF,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAED,6CAAmB,GAAnB,UAAoB,KAAa;YAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,iBAAM,mBAAmB,YAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAlBQ,eAAe;YAD3B,SAAS,CAAC,QAAQ,CAAC;WACP,eAAe,CAmB3B;QAAD,sBAAC;KAAA,AAnBD,CAAqC,aAAa,GAmBjD;IAnBY,wBAAe,kBAmB3B,CAAA;IAED,IAAiB,qBAAqB,CA0ErC;IA1ED,WAAiB,qBAAqB;QAElC,IAAI,UAAkC,CAAC;QAGvC,SAAS,UAAU;YAEf,IAAI,UAAU,IAAI,IAAI;gBAClB,OAAO;YAEX,UAAU,GAAG,EAAE,CAAC;YAEhB,KAAqB,UAA2B,EAA3B,KAAC,EAAU,CAAC,aAAa,EAAE,EAA3B,cAA2B,EAA3B,IAA2B,EAAE;gBAA7C,IAAI,QAAQ,SAAA;gBACb,KAAiB,UAAsC,EAAtC,KAAC,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAtC,cAAsC,EAAtC,IAAsC,EAAE;oBAApD,IAAI,IAAI,SAAA;oBACT,IAAI,CAAE,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;wBACxD,SAAS;oBAEb,IAAK,EAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC;wBACzC,SAAS;oBAEb,IAAI,QAAQ,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAE/D,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAE5B,KAAc,UAAuB,EAAvB,KAAA,CAAC,CAAC,MAAM,CAAC,cAAc,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;wBAAlC,IAAI,CAAC,SAAA;wBACN,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,EAAE;4BAC/C,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;4BAErD,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;gCACxB,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;6BACzB;yBACJ;qBACJ;iBACJ;aACJ;YAED,qCAAqC,EAAE,CAAC;QAC5C,CAAC;QAED,SAAS,qCAAqC;YAC1C,IAAI,MAAM,GAAG,WAAW,CAAC;YAEzB,KAAc,UAAuB,EAAvB,KAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;gBAAlC,IAAI,CAAC,SAAA;gBACN,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;oBACtB,SAAS;gBAEb,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBAClB,SAAS;gBAEb,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI;oBACrB,SAAS;gBAEb,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;aACjC;QACL,CAAC;QAED,SAAS,KAAK;YACV,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,SAAgB,GAAG,CAAC,GAAW;YAE3B,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;gBACpB,MAAM,IAAK,EAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAEvD,UAAU,EAAE,CAAC;YACb,IAAI,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAClD,IAAI,aAAa,IAAI,IAAI;gBACrB,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAC3B,qCAAqC,EAAE,GAAG,CAAC,CAAC,CAAC;YAErD,OAAO,aAAa,CAAC;QACzB,CAAC;QAZe,yBAAG,MAYlB,CAAA;IACL,CAAC,EA1EgB,qBAAqB,GAArB,8BAAqB,KAArB,8BAAqB,QA0ErC;AACL,CAAC,EAhtBS,QAAQ,KAAR,QAAQ,QAgtBjB;AChtBD,IAAU,QAAQ,CA6CjB;AA7CD,WAAU,QAAQ;IAGd;QAAgD,oCAAyB;QAKrE,0BAAY,GAAW,EAAE,GAAc;YAAvC,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SAKlB;YAHG,KAAI,CAAC,KAAK,GAAG,IAAI,SAAA,WAAW,CAAC,EAAE,CAAC,CAAC;YACjC,KAAI,CAAC,oBAAoB,GAAG,cAAM,OAAA,KAAI,CAAC,kBAAkB,EAAE,EAAzB,CAAyB,CAAC;YAC5D,KAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAI,CAAC,oBAAoB,CAAC,CAAC;;QACtD,CAAC;QAED,kCAAO,GAAP;YAEI,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACrD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB;YAED,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAES,6CAAkB,GAA5B;QACA,CAAC;QAED,oCAAS,GAAT;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,oCAAS,GAAT,UAAU,KAAkB;YACxB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;gBACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;oBAClB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAEzD,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,SAAA,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAClD,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC7B;QACL,CAAC;QAxCQ,gBAAgB;YAD5B,SAAA,UAAU,CAAC,aAAa,CAAC,2BAA2B,CAAC;WACzC,gBAAgB,CAyC5B;QAAD,uBAAC;KAAA,AAzCD,CAAgD,SAAA,eAAe,GAyC9D;IAzCY,yBAAgB,mBAyC5B,CAAA;AACL,CAAC,EA7CS,QAAQ,KAAR,QAAQ,QA6CjB;AC7CD,IAAU,QAAQ,CAsDjB;AAtDD,WAAU,QAAQ;IAGd;QAAsC,oCAAqB;QAEvD,0BAAY,GAAW;YAAvB,YACI,kBAAM,GAAG,CAAC,SA0Bb;YAxBG,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAC1B,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAEpD,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAC3B,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAE/C,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EACpC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;YAEpD,IAAI,gBAAgB,GAAG,UAAC,CAAoB;gBACxC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,MAAM,GAAG,IAAI,SAAA,YAAY,EAAE,CAAC;gBAChC,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,KAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC;YAEF,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACnD,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAElD,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAA,EAAE;gBAChC,EAAE,CAAC,cAAc,EAAE,CAAC;gBACnB,EAAU,CAAC,KAAK,CAAC,KAAI,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;gBAChD,KAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;YACpC,CAAC,CAAC,CAAC;;QACP,CAAC;QAES,6CAAkB,GAA5B;YACI,iBAAM,kBAAkB,WAAE,CAAC;YAE3B,IAAI,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;YAEnE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;YAC1D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;YAExD,IAAI,WAAW,IAAI,IAAI;gBACnB,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAEhE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,WAAW,GAAG,GAAG,CAAC,CAAC;QAC5D,CAAC;QAES,sCAAW,GAArB;YACI,OAAO,gDAAgD;gBACnD,gDAAgD;gBAChD,iCAAiC,CAAC;QAC1C,CAAC;QAjDQ,gBAAgB;YAD5B,SAAA,UAAU,CAAC,aAAa,CAAC,2BAA2B,CAAC;WACzC,gBAAgB,CAkD5B;QAAD,uBAAC;KAAA,AAlDD,CAAsC,SAAA,gBAAgB,GAkDrD;IAlDY,yBAAgB,mBAkD5B,CAAA;AACL,CAAC,EAtDS,QAAQ,KAAR,QAAQ,QAsDjB;ACtDD,IAAU,QAAQ,CAkiBjB;AAliBD,WAAU,QAAQ;IAGd;QAAgC,qCAAgC;QAC5D,2BAAY,MAAc,EAAE,MAAsB;YAAlD,YACI,kBAAM,MAAM,CAAC,SAMhB;YAJG,KAAkB,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;gBAArB,IAAI,KAAK,eAAA;gBACV,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAC3D,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;aACpD;;QACL,CAAC;QAED,yCAAa,GAAb;YACI,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;aACrD;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,6CAAiB,GAAjB;YACI,IAAI,GAAG,GAAG,iBAAM,iBAAiB,WAAE,CAAC;YACpC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;YACvB,OAAO,GAAG,CAAC;QACf,CAAC;QAtBC,iBAAiB;YADtB,SAAA,UAAU,CAAC,aAAa,CAAC,4BAA4B,CAAC;WACjD,iBAAiB,CAuBtB;QAAD,wBAAC;KAAA,AAvBD,CAAgC,SAAA,aAAa,GAuB5C;IAGD;QAAmC,wCAAkC;QACjE,8BAAY,MAAc,EAAE,MAAwB;YAApD,YACI,kBAAM,MAAM,CAAC,SAUhB;YARG,KAAe,UAAM,EAAN,iBAAM,EAAN,oBAAM,EAAN,IAAM,EAAE;gBAAlB,IAAI,EAAE,eAAA;gBACP,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CACvC,CAAC,CAAC,UAAU,CAAC,qCAAqC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3E,KAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;aACrC;YAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;gBAC1B,KAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;;QACnC,CAAC;QAED,4CAAa,GAAb;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,gDAAiB,GAAjB;YACI,IAAI,GAAG,GAAG,iBAAM,iBAAiB,WAAE,CAAC;YACpC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;YACvB,OAAO,GAAG,CAAC;QACf,CAAC;QAtBC,oBAAoB;YADzB,SAAA,UAAU,CAAC,aAAa,CAAC,+BAA+B,CAAC;WACpD,oBAAoB,CAuBzB;QAAD,2BAAC;KAAA,AAvBD,CAAmC,SAAA,aAAa,GAuB/C;IAED;QAAiC,+BAAqB;QAIlD,qBAAY,GAAW;YAAvB,YACI,kBAAM,GAAG,CAAC,SAMb;YAJG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACvC,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,KAAI,CAAC,WAAW,EAAE,CAAC;YACnB,KAAI,CAAC,aAAa,EAAE,CAAC;;QACzB,CAAC;QAID,yCAAmB,GAAnB;YACI,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QAED,yCAAmB,GAAnB,UAAoB,KAAc;YAC9B,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,EAAE;gBAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC9D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC3B;aACJ;QACL,CAAC;QAES,wCAAkB,GAA5B;YACI,iBAAM,kBAAkB,WAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC;QAED,yCAAmB,GAAnB;YACI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAErB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC;YACzC,KAAiB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;gBAAnB,IAAI,IAAI,cAAA;gBACT,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAExB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBAEzC,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACtE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;qBACjD,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;oBACnD,0BAA0B,CAAC,CAAC,CAAC,CAAC;gBAEtC,IAAI,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;qBAClC,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;gBAE7D,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC/B,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;qBACrC,IAAI,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;gBAE7D,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAE5B,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;gBAC1C,IAAI,SAAS,IAAI,IAAI,EAAE;oBACnB,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC/C,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACnC;aACJ;YAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC3B;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAID,0CAAoB,GAApB;YACI,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;QAED,0CAAoB,GAApB,UAAqB,KAAc;YAC/B,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,EAAE;gBACjC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;gBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;QACL,CAAC;QAID,4CAAsB,GAAtB;YACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACnC,CAAC;QAED,4CAAsB,GAAtB,UAAuB,KAAc;YACjC,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE;gBACnC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;aACnC;QACL,CAAC;QAES,iCAAW,GAArB;YACI,OAAO,wCAAwC;gBAC3C,QAAQ;gBACR,sCAAsC;gBACtC,gEAAgE;gBAChE,sEAAsE;gBACtE,mEAAmE;gBACnE,QAAQ;gBACR,2BAA2B;gBAC3B,QAAQ,CAAA;QAChB,CAAC;QAES,iCAAW,GAArB;YAAA,iBASC;YARG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;iBAChE,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAtB,CAAsB,CAAC,CAAC;YAE1C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;iBACtE,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAzB,CAAyB,CAAC,CAAC;YAE7C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;iBACpE,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAxB,CAAwB,CAAC,CAAC;QAChD,CAAC;QAES,uCAAiB,GAA3B,UAA4B,CAAoB;YAC5C,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,mCAAa,GAAb;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;iBAC3C,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,4BAAM,GAAN;YACI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACpC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;YAErC,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,SAAS,GAAG,IAAI,CAAC;YACrB,IAAI,GAAG,GAAG,IAAI,CAAC;YACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrD,IAAI;oBACA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACpC,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBAC1C,IAAI,SAAS,IAAI,IAAI,EAAE;wBACnB,SAAS;qBACZ;oBAED,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;yBACjD,SAAS,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC;oBAE3C,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;wBAC7B,MAAM,IAAK,EAAU,CAAC,2BAA2B,CAAC,UAAU,EACxD,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;oBAExD,IAAI,IAAI,GAAe,EAAE,CAAC;oBAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;oBACxB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;oBACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;yBAC5B,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACxC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;yBACjC,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAChD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;yBAClC,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACjD,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;oBACpC,IAAI,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;oBACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;oBAClC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;oBACnC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;oBACxC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC1B;gBACD,OAAO,EAAE,EAAE;oBACP,EAAE,GAAI,EAAE,CAAC,SAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpC,IAAK,EAAU,CAAC,gBAAgB,CAAC,EAAE,EAAG,EAAU,CAAC,iBAAiB,CAAC,EAAE;wBACjE,SAAS,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;wBAC7B,MAAM;qBACT;yBACI;wBACD,MAAM,EAAE,CAAC;qBACZ;iBACJ;aACJ;YAED,kEAAkE;YAClE,IAAI,SAAS,IAAI,IAAI,EAAE;gBACnB,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;qBACzB,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9D,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClD,OAAO;aACV;YAEA,EAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;YAC/C,EAAU,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,WAAW,CAAC,CAAC;YACrE,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;QACpC,CAAC;QAES,oCAAc,GAAxB,UAAyB,CAAoB;YACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC;QAES,sCAAgB,GAA1B,UAA2B,CAAoB;YAC3C,CAAC,CAAC,cAAc,EAAE,CAAC;YAEnB,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;gBAC/B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxC,EAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;oBAChD,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;iBACnC;aACJ;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aAC3B;QACL,CAAC;QAES,kCAAY,GAAtB;YACI,IAAI,MAAM,GAAW,IAAI,CAAC;YAE1B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,GAAG;gBAC7C,IAAI,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;qBACpC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,OAAO,IAAI,CAAC;iBACf;gBACD,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;oBACjC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBAChB,OAAO,KAAK,CAAC;iBAChB;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QAES,iCAAW,GAArB,UAAsB,UAAmB;YAAzC,iBA+DC;YA9DG,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAEnC,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,UAAU,EAAE;oBACZ,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;iBACvD;gBACD,OAAO,QAAQ,CAAC;aACnB;YAED,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;iBAC3C,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAExC,IAAI,GAAG,GAAG,CAAC,CACP,2BAA2B;gBAC3B,qCAAqC;gBACrC,iBAAiB;gBACjB,sCAAsC;gBACtC,gCAAgC;gBAChC,qCAAqC;gBACrC,QAAQ;gBACR,iBAAiB;gBACjB,4CAA4C;gBAC5C,QAAQ;gBACR,uBAAuB;gBACvB,uBAAuB;gBACvB,iCAAiC;gBACjC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAErC,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;YAE5C,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,CAAC;iBACzC,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAA3B,CAA2B,CAAC,CAAC;YAE/C,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;YACnG,IAAI,WAAW,EAAE;gBACb,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;aAChE;iBACI;gBACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;aAClD;YAED,KAAK,CAAC,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAlB,CAAkB,CAAC,CAAC;YAEvC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;iBACnB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;iBACzD,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAtB,CAAsB,CAAC,CAAC;YAE1C,IAAI,QAAQ,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACrD,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;iBACjD,aAAa,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAxB,CAAwB,CAAC,CAAC;YAElD,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,UAAU,EAAE;gBACZ,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;aAClD;YAED,OAAO,GAAG,CAAC;QACf,CAAC;QAES,sCAAgB,GAA1B,UAA2B,CAAoB;YAC3C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC7D,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAES,oCAAc,GAAxB,UAAyB,GAAW;YAChC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAC5B,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;iBACxD,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAClC,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,OAAO,GAAG,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,EAAE,CAAC;YACpD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC;QAES,qCAAe,GAAzB,UAA0B,GAAW;YACjC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QAES,0CAAoB,GAA9B,UAA+B,GAAW;YAA1C,iBAaC;YAZG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,SAAS,IAAI,IAAI;gBACjB,OAAO;YAEX,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;iBAC9C,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE7D,IAAI,SAAS,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;YACzC,IAAI,QAAQ,GAAG,IAAI,oBAAoB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3D,QAAQ,CAAC,aAAa,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAA3B,CAA2B,CAAC,CAAC;QAC7D,CAAC;QAES,iCAAW,GAArB,UAAsB,GAAW;YAC7B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClB,OAAO,IAAI,CAAC;aACf;YACD,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;iBACxD,SAAS,CAAC,iBAAiB,CAAC,CAAC;YAElC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC/B,OAAO,IAAI,CAAC;aACf;YAED,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;QAES,qCAAe,GAAzB,UAA0B,GAAW;YACjC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAElC,IAAI,KAAK,IAAI,IAAI;gBACb,OAAO,IAAI,CAAC;YAEhB,IAAI,SAAS,GAAI,EAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,SAAA,UAAU,CAAC,CAAC;YAEpE,IAAI,SAAS,IAAI,IAAI;gBACjB,OAAO,SAAS,CAAC;YAErB,IAAI,aAAa,GAAG,SAAA,qBAAqB,CAAC,GAAG,CACzC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;YAE/C,IAAI,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtC,SAAS,GAAI,EAAU,CAAC,IAAI,CAAE,EAAU,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,SAAA,UAAU,CAAC,CAAC;YACpF,SAAA,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;YAC9D,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACnC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACjC,OAAO,SAAS,CAAC;QACrB,CAAC;QAES,yCAAmB,GAA7B,UAA8B,CAAoB;YAC9C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YACtE,IAAI;gBACA,UAAU,CAAC,KAAK,EAAE,CAAC;aACtB;YACD,OAAO,GAAG,EAAE;aACX;QACL,CAAC;QAES,uCAAiB,GAA3B,UAA4B,GAAW;YAEnC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBAClB,OAAO;aACV;YAED,IAAI,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,SAAS,IAAI,IAAI;gBACjB,OAAO;YAEX,IAAI,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;iBAC7D,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAErC,IAAI,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;gBAC3C,OAAO;YAEX,IAAI,GAAG,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;gBACjD,OAAO,CAAC,CAAC,GAAG,KAAK,cAAc,CAAC,KAAK,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,EAAE,IAAI,IAAI;gBACV,OAAO;YAEX,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC3B,SAAS,CAAC,YAAY,EAAE,CAAC;QAC7B,CAAC;QAES,oCAAc,GAAxB,UAAyB,CAAoB;YACzC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACjD,GAAG,CAAC,MAAM,EAAE,CAAC;YAEb,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC;QAES,mCAAa,GAAvB;YACI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;QAES,gCAAU,GAApB,UAAqB,CAAoB;YACrC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB;gBACrC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAES,yCAAmB,GAA7B,UAA8B,CAAoB;YAC9C,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAES,kCAAY,GAAtB;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnB,OAAO;aACV;YACD,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;iBAC3D,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrB,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;qBACxC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;aACrE;YAED,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBACrC,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBAC1C,IAAI,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAC3C,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE;oBAClC,OAAO,GAAG,KAAK,CAAC;oBAChB,IAAI,EAAE,GAAG,CAAC,EAAE;wBACR,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;qBACzC;iBACJ;gBACD,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBACvB,OAAO,GAAG,IAAI,CAAC;oBACf,IAAI,EAAE,GAAG,CAAC,EAAE;wBACR,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;qBAChC;iBACJ;aACJ;QACL,CAAC;QACL,kBAAC;IAAD,CAAC,AA3eD,CAAiC,SAAA,gBAAgB,GA2ehD;IA3eY,oBAAW,cA2evB,CAAA;AACL,CAAC,EAliBS,QAAQ,KAAR,QAAQ,QAkiBjB;AEliBD,IAAU,QAAQ,CAuJjB;AAvJD,WAAU,QAAQ;IAUd;QAAsC,oCAA+B;QAMjE,0BAAY,KAAa,EAAE,GAA4B;YAAvD,YACI,kBAAM,KAAK,EAAE,GAAG,CAAC,SAuDpB;YArDG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;iBACnD,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;YACrE,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAErD,IAAI,IAAI,GAAG,KAAI,CAAC;YAChB,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,UAAU,EAAE;gBAC1C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,EAAE;gBAC3C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YAEH,CAAC,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;iBAClD,YAAY,CAAC,KAAK,CAAC,CAAC;YAEzB,IAAI,CAAC,CAAC,OAAO,CAAC,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,OAAO,EACzD,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAEvE,IAAI,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAEhD,KAAiB,UAAmB,EAAnB,KAAA,KAAI,CAAC,OAAO,CAAC,MAAM,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;oBAAjC,IAAI,IAAI,SAAA;oBACT,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;oBACxB,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;yBACzD,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAE,EAAU,CAAC,KAAK,CAAC;wBACtD,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,KAAI;qBACd,EAAE,UAAU,CAAM;wBACf,CAAC,CAAC,cAAc,EAAE,CAAC;wBACnB,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACjF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;wBACpC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;oBACrC,CAAC,CAAC,CAAC,CAAC;iBACX;gBAED,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE;oBAC5B,UAAU,EAAE,WAAW;oBACvB,UAAU,EAAE,cAAc;oBAC1B,IAAI,EAAE,IAAI;iBACb,CAAC,CAAC;gBAEH,KAAI,CAAC,KAAK,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpC,KAAI,CAAC,sBAAsB,EAAE,CAAC;aACjC;YAED,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAI,CAAC,UAAU,EAAE,UAAA,EAAE;gBACrD,IAAI,CAAC,CAAC,KAAI,CAAC,KAAK,EAAE;oBACd,MAAM,CAAC,YAAY,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;iBACnC;gBACD,KAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;;QACP,CAAC;QAES,8CAAmB,GAA7B;YACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;gBACxC,OAAO;aACV;YAED,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACvD,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;gBAC3E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,OAAO;aACV;YAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAE1B,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;gBACd,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACnC;YAED,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;gBAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;YAE5C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;QAED,oCAAS,GAAT;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,oCAAS,GAAT,UAAU,KAAuB;YAC7B,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;gBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;aAC9B;QACL,CAAC;QAES,iDAAsB,GAAhC;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aAC9B;iBACL;gBACQ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAChB;QACL,CAAC;QAES,oCAAS,GAAnB,UAAoB,KAAa;YAAjC,iBA2BC;YA1BG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,CAC7B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAEjG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,CAC1B,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;iBAC/D,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;YAEvF,IAAI,IAAI,GAAG,UAAC,OAAY;gBACpB,KAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,kBAAkB,EAC/D,sBAAsB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,CACzC,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;gBAE7E,IAAI,CAAC,OAAO,EAAE;oBACV,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC;yBACpC,IAAI,CAAC,sBAAsB,CAAC;yBAC5B,MAAM,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;iBACzC;YACL,CAAC,CAAC;YAEF,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE;gBAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI;oBACtC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;aAClF;iBACI;gBACD,IAAI,CAAC,IAAI,CAAC,CAAC;aACd;QACL,CAAC;QACL,uBAAC;IAAD,CAAC,AA5ID,CAAsC,SAAA,MAAM,GA4I3C;IA5IY,yBAAgB,mBA4I5B,CAAA;AACL,CAAC,EAvJS,QAAQ,KAAR,QAAQ,QAuJjB;ACvJD,IAAU,QAAQ,CA0YjB;AA1YD,WAAU,QAAQ;IAOd;QAAA;QACA,CAAC;QADY,iBAAiB;YAD7B,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,4BAA4B,CAAC;WACvD,iBAAiB,CAC7B;QAAD,wBAAC;KAAA,AADD,IACC;IADY,0BAAiB,oBAC7B,CAAA;IAED,IAAO,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAA;IAE1C,SAAS,SAAS,CAAC,IAAY,EAAE,IAAY;QACzC,OAAO,SAAA,UAAU,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAA;IAC/E,CAAC;IAGD;QAAA;QAmCA,CAAC;QAlCG,iCAAM,GAAN,UAAO,GAA2B;YAE9B,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE;gBACnB,OAAO,EAAE,CAAC;aACb;YAED,IAAI,IAAI,CAAC;YACT,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;gBACb,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;oBACrB,IAAI,IAAI,IAAI,IAAI,EAAE;wBACd,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,CAAC;qBAC/D;iBACJ;aACJ;iBACI;gBACD,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpC,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;oBACtB,IAAI,IAAI,IAAI,IAAI,EAAE;wBACd,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,CAAC;qBAC7D;iBACJ;aACJ;YAED,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAGD;YADC,MAAM,EAAE;2DACgB;QAGzB;YADC,MAAM,EAAE;0DACe;QAlCf,gBAAgB;YAD5B,SAAS,CAAC,SAAS,CAAC;WACR,gBAAgB,CAmC5B;QAAD,uBAAC;KAAA,AAnCD,IAmCC;IAnCY,yBAAgB,mBAmC5B,CAAA;IAGD;QAAA;QAIA,CAAC;QAHG,kCAAM,GAAN,UAAO,GAA2B;YAC9B,OAAO,2CAA2C,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;QACvG,CAAC;QAHQ,iBAAiB;YAD7B,SAAS,CAAC,UAAU,CAAC;WACT,iBAAiB,CAI7B;QAAD,wBAAC;KAAA,AAJD,IAIC;IAJY,0BAAiB,oBAI7B,CAAA;IAGD;QACI;YACI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9C,CAAC;0BAHQ,aAAa;QAKf,oBAAM,GAAb,UAAc,KAAU,EAAE,MAAe;YACrC,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,EAAE,CAAC;aACb;YAED,IAAI,IAAU,CAAC;YAEf,IAAI,KAAK,YAAY,IAAI,EAAE;gBACvB,IAAI,GAAG,KAAK,CAAC;aAChB;iBACI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAChC,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAEjC,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBAC9B;aACJ;iBACI;gBACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;aAC3B;YAED,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC;QAKD,8BAAM,GAAN,UAAO,GAA2B;YAC9B,OAAO,eAAa,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/D,CAAC;;QAJD;YADC,MAAM,EAAE;4DACoB;QA9BpB,aAAa;YADzB,SAAS,CAAC,MAAM,CAAC;WACL,aAAa,CAmCzB;QAAD,oBAAC;KAAA,AAnCD,IAmCC;IAnCY,sBAAa,gBAmCzB,CAAA;IAGD;QAAuC,qCAAa;QAChD;YAAA,YACI,iBAAO,SAEV;YADG,KAAI,CAAC,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;;QAClD,CAAC;QAJQ,iBAAiB;YAD7B,SAAS,CAAC,UAAU,CAAC;WACT,iBAAiB,CAK7B;QAAD,wBAAC;KAAA,AALD,CAAuC,aAAa,GAKnD;IALY,0BAAiB,oBAK7B,CAAA;IAGD;QAAA;QAgDA,CAAC;0BAhDY,aAAa;QAEtB,8BAAM,GAAN,UAAO,GAA2B;YAC9B,OAAO,eAAa,CAAC,MAAM,CAAC,SAAA,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC;QAKM,oBAAM,GAAb,UAAc,QAAa,EAAE,KAAU;YAEnC,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,EAAE,CAAC;aACb;YAED,IAAI,IAAI,CAAC;YACT,IAAI;gBACA,IAAI,GAAI,EAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;aACrD;YACD,OAAO,CAAC,EAAE;gBACN,CAAC,GAAI,EAAE,CAAC,SAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAK,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAG,EAAU,CAAC,iBAAiB,CAAC,EAAE;oBAChE,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;iBAC3B;qBACI;oBACD,MAAM,CAAC,CAAC;iBACX;aACJ;YAED,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAA,gBAAgB,EAAE,KAAK,CAAC,CAAC;YAC/E,IAAI,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,EAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxG,OAAO,eAAa,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QAEM,qBAAO,GAAd,UAAe,OAAe,EAAE,IAAY;YACxC,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACvB,OAAO,EAAE,CAAC;aACb;YAED,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACzF,CAAC;QAEM,qBAAO,GAAd,UAAe,QAAa,EAAE,KAAU;YACpC,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,EAAE,CAAC;aACb;YACD,OAAQ,EAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;;QAxCD;YADC,MAAM,EAAE;sDACO;QAPP,aAAa;YADzB,SAAS,CAAC,MAAM,CAAC;WACL,aAAa,CAgDzB;QAAD,oBAAC;KAAA,AAhDD,IAgDC;IAhDY,sBAAa,gBAgDzB,CAAA;IAGD;QAAA;QAsCA,CAAC;kCAtCY,qBAAqB;QAE9B,sCAAM,GAAN,UAAO,GAA2B;YAC9B,IAAI,MAAM,GAAI,EAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;gBACzB,OAAO,EAAE,CAAC;aACb;YAED,IAAI,WAAW,GAAG,uBAAqB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1D,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC5D,EAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE9E,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EACrD,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAEvC,OAAO,sDAAsD;gBACzD,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QACvE,CAAC;QAEM,+BAAS,GAAhB,UAAiB,QAAgB;YAC7B,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;QAChD,CAAC;QAED,gDAAgB,GAAhB,UAAiB,MAAoB;YACjC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;YACxD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE;gBAC7C,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACxD,OAAO;aACV;QACL,CAAC;;QAGD;YADC,MAAM,EAAE;oEACa;QAGtB;YADC,MAAM,EAAE;2EACoB;QArCpB,qBAAqB;YADjC,SAAS,CAAC,cAAc,EAAE,CAAC,SAAA,eAAe,EAAE,iBAAiB,CAAC,CAAC;WACnD,qBAAqB,CAsCjC;QAAD,4BAAC;KAAA,AAtCD,IAsCC;IAtCY,8BAAqB,wBAsCjC,CAAA;IAGD;QAAA;QA0BA,CAAC;4BA1BY,eAAe;QAExB,gCAAM,GAAN,UAAO,GAA2B;YAC9B,OAAO,iBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAEM,sBAAM,GAAb,UAAc,KAAa;YACvB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YAClC,IAAI,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YAC/B,IAAI,OAAO,EAAE,SAAS,CAAC;YAEvB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC;gBAC7B,OAAO,EAAE,CAAC;YAEd,IAAI,IAAI,GAAG,EAAE;gBACT,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC;;gBAErB,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE9B,IAAI,MAAM,GAAG,EAAE;gBACX,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;;gBAEzB,SAAS,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAElC,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC;;QAzBQ,eAAe;YAD3B,SAAS,CAAC,QAAQ,CAAC;WACP,eAAe,CA0B3B;QAAD,sBAAC;KAAA,AA1BD,IA0BC;IA1BY,wBAAe,kBA0B3B,CAAA;IAGD;QAAA;QA0BA,CAAC;4BA1BY,eAAe;QACxB,gCAAM,GAAN,UAAO,GAA2B;YAC9B,OAAO,iBAAe,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACjE,CAAC;QAEM,sBAAM,GAAb,UAAc,KAAU,EAAE,MAAe;YACrC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACpC,IAAI,KAAK,IAAI,IAAI;gBACb,OAAO,EAAE,CAAC;YAEd,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;gBAC7B,IAAI,KAAK,CAAC,KAAK,CAAC;oBACZ,OAAO,EAAE,CAAC;gBAEd,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;aACtD;YAED,IAAI,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3C,IAAI,GAAG,IAAI,IAAI;gBACX,OAAO,EAAE,CAAC;YAEd,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1C,CAAC;;QAGD;YADC,MAAM,EAAE;8DACa;QAzBb,eAAe;YAD3B,SAAS,CAAC,QAAQ,CAAC;WACP,eAAe,CA0B3B;QAAD,sBAAC;KAAA,AA1BD,IA0BC;IA1BY,wBAAe,kBA0B3B,CAAA;IAGD;QAAA;QA4DA,CAAC;QA1DG,6BAAM,GAAN,UAAO,GAA2B;YAC9B,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC3C,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvD,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE1C,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;gBACpB,OAAO,EAAE,CAAC;YAEd,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;gBAChC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAExC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;gBACtC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAE5B,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gBACnD,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC3D,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE1C,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;gBACpC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAEpD,IAAI,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAC9C,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC7B,CAAC,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YAEzC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;YAE1C,OAAO,CAAC,CAAC;QACb,CAAC;QAED,uCAAgB,GAAhB,UAAiB,MAAoB;YACjC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;YAExD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBACxC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACnD,OAAO;aACV;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBACpC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC/C,OAAO;aACV;QACL,CAAC;QAGD;YADC,MAAM,EAAE;6DACe;QAGxB;YADC,MAAM,EAAE;2DACa;QAGtB;YADC,MAAM,EAAE;yDACW;QAGpB;YADC,MAAM,EAAE;uDACS;QAGlB;YADC,MAAM,EAAE;oDACM;QA3DN,YAAY;YADxB,SAAS,CAAC,KAAK,EAAE,CAAC,SAAA,eAAe,EAAE,iBAAiB,CAAC,CAAC;WAC1C,YAAY,CA4DxB;QAAD,mBAAC;KAAA,AA5DD,IA4DC;IA5DY,qBAAY,eA4DxB,CAAA;IAED,IAAiB,qBAAqB,CAyErC;IAzED,WAAiB,qBAAqB;QAElC,IAAI,UAAkC,CAAC;QAEvC,SAAS,iCAAiC;YACtC,IAAI,MAAM,GAAG,WAAW,CAAC;YACzB,KAAc,UAAuB,EAAvB,KAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;gBAAlC,IAAI,CAAC,SAAA;gBACN,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;oBACtB,SAAS;gBAEb,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC9C,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBAClB,SAAS;gBAEb,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI;oBACrB,SAAS;gBAEb,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;aACjC;QACL,CAAC;QAED,SAAS,UAAU;YAEf,IAAI,UAAU,EAAE;gBACZ,OAAO;aACV;YAED,UAAU,GAAG,EAAE,CAAC;YAChB,IAAI,UAAU,GAAI,EAAU,CAAC,aAAa,EAAE,CAAC;YAC7C,KAAqB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;gBAA5B,IAAI,QAAQ,mBAAA;gBACb,IAAI,KAAK,GAAI,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACnD,KAAiB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;oBAAnB,IAAI,IAAI,cAAA;oBACT,IAAI,CAAE,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC;wBAC7D,SAAS;oBAEb,IAAK,EAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC;wBACzC,SAAS;oBAEb,IAAI,QAAQ,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC/D,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBAE5B,KAAc,UAAuB,EAAvB,KAAA,CAAC,CAAC,MAAM,CAAC,cAAc,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;wBAAlC,IAAI,CAAC,SAAA;wBACN,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,EAAE;4BAC/C,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;4BACrD,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;gCACxB,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;6BACzB;yBACJ;qBACJ;iBACJ;aACJ;YAED,iCAAiC,EAAE,CAAC;QACxC,CAAC;QAED,SAAgB,GAAG,CAAC,GAAW;YAC3B,IAAI,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;gBACpB,MAAM,IAAK,EAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAEvD,UAAU,EAAE,CAAC;YAEb,IAAI,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YAClD,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAC3B,gCAAgC,EAAE,GAAG,CAAC,CAAC,CAAC;aAC/C;YAED,OAAO,aAAa,CAAC;QACzB,CAAC;QAbe,yBAAG,MAalB,CAAA;QAED,SAAgB,KAAK;YACjB,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC;QAFe,2BAAK,QAEpB,CAAA;IACL,CAAC,EAzEgB,qBAAqB,GAArB,8BAAqB,KAArB,8BAAqB,QAyErC;AACL,CAAC,EA1YS,QAAQ,KAAR,QAAQ,QA0YjB;AC1YD,IAAU,QAAQ,CAwIjB;AAxID,WAAU,QAAQ;IACd;QAA6B,2BAAsB;QAG/C,iBAAY,SAAiB,EAAE,OAAuB;YAAtD,YACI,kBAAM,SAAS,EAAE,OAAO,CAAC,SAK5B;YARO,iBAAW,GAAG,CAAC,CAAC;YAChB,iBAAW,GAAG,CAAC,CAAC;YAIpB,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,EAAE;gBACpD,KAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;;QACP,CAAC;QAED,kCAAgB,GAAhB;YAAA,iBA+BC;YA9BG,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBACrC,OAAO;aACV;YAED,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3C,IAAI,WAAW,IAAI,IAAI;gBACnB,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;YAEhD,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC7C,IAAI,YAAY,IAAI,IAAI;gBACpB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YAElD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE;gBAC3C,OAAA,KAAI,CAAC,cAAc,EAAE;YAArB,CAAqB,CAAC,CAAC;YAE3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;gBAC/C,OAAA,KAAI,CAAC,cAAc,EAAE;YAArB,CAAqB,CAAC,CAAC;YAE3B,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE;oBACzC,OAAA,KAAI,CAAC,cAAc,EAAE;gBAArB,CAAqB,CAAC,CAAC;aAC9B;YAEV,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI;gBAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9B,CAAC;QAEO,4BAAU,GAAlB,UAAmB,OAAe;YAC9B,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI;gBAC/B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAExD,IAAI,OAAO,IAAI,IAAI;gBACN,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAErC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;QAEO,4BAAU,GAAlB,UAAmB,OAAe;YAC9B,IAAI,OAAO,GAAG,IAAI,CAAC;YAEnB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI;gBAC/B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAExD,IAAI,OAAO,IAAI,IAAI;gBACN,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE9C,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;QAEO,gCAAc,GAAtB;YAAA,iBA8BC;YA7BG,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtD,IAAI,YAAY,IAAI,IAAI,EAAE;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;gBAC1C,YAAY,GAAG,KAAK,CAAC;aACxB;YAEV,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACxD,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBAC5C,aAAa,GAAG,MAAM,CAAC;aAC1B;YAEV,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,GAAG,aAAa,CAAC;YAE1C,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9B,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAEpD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;aAC7C;YAED,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;iBACtB,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;iBACzC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;gBACP,KAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACX,CAAC;QAEO,+BAAa,GAArB,UAAsB,OAAe;YACjC,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACvC,IAAG,OAAO,KAAK,CAAC,EAAE;gBACd,IAAI,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACjD,IAAI,YAAY,IAAI,IAAI,EAAE;oBACtB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;oBACrC,YAAY,GAAG,KAAK,CAAC;iBACxB;gBAED,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;aAChE;YAEV,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,OAAO,KAAK,CAAC,EAAE;gBACf,IAAI,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACnD,IAAI,aAAa,IAAI,IAAI,EAAE;oBACvB,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;oBACvC,aAAa,GAAG,MAAM,CAAC;iBAC1B;gBACD,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;aAClE;YAEV,IAAI,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;gBAC3B,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;aACpC;QACL,CAAC;QACL,cAAC;IAAD,CAAC,AA/HD,CAA6B,SAAA,MAAM,GA+HlC;IA/HY,gBAAO,UA+HnB,CAAA;AAQL,CAAC,EAxIS,QAAQ,KAAR,QAAQ,QAwIjB;ACxID,IAAU,QAAQ,CAkDjB;AAlDD,WAAU,QAAQ;IACd,IAAiB,gBAAgB,CAgDhC;IAhDD,WAAiB,gBAAgB;QAE7B,IAAI,UAAkC,CAAC;QAEvC,SAAgB,MAAM,CAAC,GAAW;YAE9B,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,UAAU,GAAG,EAAE,CAAC;gBAChB,KAAqB,UAA2B,EAA3B,KAAC,EAAU,CAAC,aAAa,EAAE,EAA3B,cAA2B,EAA3B,IAA2B,EAAE;oBAA7C,IAAI,QAAQ,SAAA;oBACb,KAAiB,UAAsC,EAAtC,KAAC,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAtC,cAAsC,EAAtC,IAAsC,EAAE;wBAApD,IAAI,IAAI,SAAA;wBACT,IAAK,EAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;4BAC1B,IAAI,QAAQ,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;4BACjD,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;4BAC5B,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;4BACpF,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gCAC/C,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;6BAC3C;4BAED,KAAc,UAAuB,EAAvB,KAAA,CAAC,CAAC,MAAM,CAAC,cAAc,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;gCAAlC,IAAI,CAAC,SAAA;gCACN,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE;oCACjC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;iCACpD;6BACJ;yBACJ;qBACJ;iBACJ;aACJ;YAED,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI;gBACvB,OAAO,IAAI,CAAC;YAEhB,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QA5Be,uBAAM,SA4BrB,CAAA;QAED,SAAgB,GAAG,CAAC,GAAW;YAC3B,IAAI,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,wEAAwE;oBAC3F,8FAA8F;oBAC9F,iGAAiG;oBACjG,4DAA4D,EAAE,GAAG,CAAC,CAAC;gBAEvE,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACjC,MAAM,IAAK,EAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aAC5C;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAbe,oBAAG,MAalB,CAAA;IACL,CAAC,EAhDgB,gBAAgB,GAAhB,yBAAgB,KAAhB,yBAAgB,QAgDhC;AACL,CAAC,EAlDS,QAAQ,KAAR,QAAQ,QAkDjB;AClDD,IAAU,QAAQ,CA2JjB;AA3JD,WAAU,QAAQ;IACd;QACI,yBAA4B,QAAgB;YAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAC5C,CAAC;QAED,8BAAI,GAAJ,UAAK,EAAU;YACX,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,2BAAC,GAAD,UAAW,EAAU,EAAE,IAAuC;YAC1D,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,SAAS,CAAU,IAAI,CAAC,CAAC;QAChE,CAAC;QACL,sBAAC;IAAD,CAAC,AAXD,IAWC;IAXY,wBAAe,kBAW3B,CAAA;IAED,IAAiB,uBAAuB,CAkEvC;IAlED,WAAiB,uBAAuB;QACpC,SAAgB,GAAG,CAAC,MAAW,EAAE,OAAY;YACzC,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,OAAO;aACV;YAED,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAI,IAAI,KAAK,MAAM,EAAE;gBACjB,OAAO;aACV;YAED,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;YACnC,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;YACrC,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,IAAI,KAAK,GAAI,EAAU,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAM;oBACxC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAM;wBACxD,OAAQ,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAM;wBACnD,OAAQ,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;oBACvF,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnB,CAAC,CAAC,CAAC;gBAEH,UAAU,GAAG,EAAE,CAAC;gBAChB,KAAc,UAAQ,EAAR,qBAAQ,EAAR,sBAAQ,EAAR,IAAQ,EAAE;oBAAnB,IAAI,CAAC,iBAAA;oBACN,UAAU,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;iBACzD;gBAED,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;aAClC;YAED,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,IAAI,MAAM,GAAI,EAAU,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAO;oBAC3C,OAAO,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAM;wBAC1C,OAAQ,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAM;wBACpD,OAAQ,EAAU,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;oBACvF,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;gBAEH,WAAW,GAAG,EAAE,CAAC;gBACjB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBAC7C,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;oBACxB,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;iBAC5D;gBACD,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;aACpC;YAED,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,KAAe,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI,EAAE;gBAAhB,IAAI,EAAE,aAAA;gBACP,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;gBACpB,IAAI,EAAE,GAAG,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAI,IAAI,EAAE;oBACV,EAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1C;qBACI;oBACD,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;oBAC3C,IAAI,CAAC,IAAI,IAAI,EAAE;wBACV,EAAU,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;qBACzC;iBACJ;aACJ;QACL,CAAC;QAhEe,2BAAG,MAgElB,CAAA;IACL,CAAC,EAlEgB,uBAAuB,GAAvB,gCAAuB,KAAvB,gCAAuB,QAkEvC;IAED,IAAiB,eAAe,CAiE/B;IAjED,WAAiB,eAAe;QAC5B,SAAgB,gBAAgB,CAAC,CAAM,EAAE,QAAgB;YACrD,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,EAAE;gBACtC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC1B;YACD,IAAI,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,EAAE;gBACtC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC1B;YACD,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QAZe,gCAAgB,mBAY/B,CAAA;QAED,SAAgB,gBAAgB,CAAC,CAAM,EAAE,QAAgB,EAAE,KAAU;YACjE,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,EAAE;gBACtC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzB,OAAO;aACV;YACD,IAAI,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW,CAAC,EAAE;gBACtC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzB,OAAO;aACV;YACD,CAAC,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QACzB,CAAC;QAde,gCAAgB,mBAc/B,CAAA;QAED,SAAgB,aAAa,CAAC,CAAS;YACnC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;gBACpB,OAAO,CAAC,CAAC;aACZ;YAED,IAAI,CAAC,KAAK,IAAI,EAAE;gBACZ,OAAO,IAAI,CAAC;aACf;YAED,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC3C,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;oBACxD,iBAAiB,EAAE,CAAC;iBACvB;qBACI;oBACD,eAAe,GAAG,IAAI,CAAC;oBACvB,MAAM;iBACT;aACJ;YAED,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,KAAK,CAAC,EAAE;gBAC/D,OAAO,CAAC,CAAC;aACZ;iBACI,IAAI,iBAAiB,GAAG,CAAC,EAAE;gBAC5B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;aAC7F;iBACI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;aAC1B;iBACI;gBACD,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACrD;QACL,CAAC;QAjCe,6BAAa,gBAiC5B,CAAA;IACL,CAAC,EAjEgB,eAAe,GAAf,wBAAe,KAAf,wBAAe,QAiE/B;IAMD;QAAA;QACA,CAAC;QADY,aAAa;YADzB,SAAA,UAAU,CAAC,aAAa,CAAC,wBAAwB,CAAC;WACtC,aAAa,CACzB;QAAD,oBAAC;KAAA,AADD,IACC;IADY,sBAAa,gBACzB,CAAA;AACL,CAAC,EA3JS,QAAQ,KAAR,QAAQ,QA2JjB;AC3JD,IAAU,QAAQ,CAoHjB;AApHD,WAAU,QAAQ;IAEd,IAAiB,EAAE,CA4ClB;IA5CD,WAAiB,EAAE;QACf,SAAgB,SAAS,CAAU,OAAe,EAAE,IAAc;YAC9D,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,MAAM,IAAK,EAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;aAC1D;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qEAAqE,EAChG,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;aAC7D;YACD,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAW,CAAC,CAAC;YAC/C,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,2EAA2E;oBAC9F,kGAAkG;oBAClG,qGAAqG;oBACrG,4BAA4B,EAAG,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrE,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBACjC,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACnC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAlBe,YAAS,YAkBxB,CAAA;QAED,SAAgB,aAAa,CAAC,IAAc;YACxC,OAAO,CAAC,CAAC,UAAU,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;QAFe,gBAAa,gBAE5B,CAAA;QAED,SAAgB,gBAAgB,CAAC,CAAM;YACnC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,WAAW,CAAC,CAAC;QACzD,CAAC;QAFe,mBAAgB,mBAE/B,CAAA;QAED,SAAgB,MAAM,CAAC,MAAW,EAAE,OAAY;YAC5C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAFe,SAAM,SAErB,CAAA;QAED,SAAgB,aAAa,CAAC,MAAW,EAAE,OAAY;YACnD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,CAAoB,EAAE,CAAU;gBACzF,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;oBAC/B,OAAO,CAAC,CAAC,CAAC,CAAC;iBACd;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QANe,gBAAa,gBAM5B,CAAA;QAED,SAAgB,YAAY,CAAC,MAA4B;YACrD,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAFe,eAAY,eAE3B,CAAA;IACL,CAAC,EA5CgB,EAAE,GAAF,WAAE,KAAF,WAAE,QA4ClB;IAED,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,UAAU,OAAO;QAC1D,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,UAAU,CAAoB,EAAE,CAAM;YACrF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAClC,OAAO,CAAC,CAAC,CAAC,CAAC;aACd;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU,QAAQ;QACpD,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,UAAU,UAAe;QACzC,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,OAAO,CAAC;QACZ,IAAK,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;YAC3D,IAAI,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC9C,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACnC,IAAI,OAAO,IAAI,IAAI,IAAI,CAAE,EAAU,CAAC,gBAAgB,CAAC,UAAU,EAAG,EAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE;gBACpG,OAAO,GAAG,IAAI,CAAC;aAClB;YACD,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,OAAO,OAAO,CAAC;aAClB;SACJ;QAED,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,OAAO,IAAI,CAAC;SACf;QAED,KAAgB,UAAiB,EAAjB,KAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAjB,cAAiB,EAAjB,IAAiB,EAAE;YAA9B,IAAI,GAAG,SAAA;YACR,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,IAAI,OAAO,IAAI,IAAI,IAAK,EAAU,CAAC,gBAAgB,CAAC,UAAU,EAAG,EAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE;gBACnG,OAAO,OAAO,CAAC;aAClB;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,UAAU,WAAgB;QACvC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,QAAQ,IAAI,IAAI,EAAE;YAClB,MAAM,IAAK,EAAU,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;SAC1D;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,qEAAqE,EAChG,EAAU,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrE;QAED,IAAI,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACjD,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,oEAAoE;gBACvF,6FAA6F;gBAC7F,6FAA6F;gBAC7F,gDAAgD,EAAG,EAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;YAChG,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACnC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC;AACN,CAAC,EApHS,QAAQ,KAAR,QAAQ,QAoHjB;ACpHD,IAAU,QAAQ,CA4nBjB;AA5nBD,WAAU,QAAQ;IAGd;QAAkC,gCAA2B;QAKzD,sBAAY,GAAW,EAAE,GAAwB;YAAjD,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SA4ElB;YAoGO,uBAAiB,GAAG,UAAC,CAAoB;gBAC7C,CAAC,CAAC,cAAc,EAAE,CAAC;gBAEnB,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;qBAClD,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAChD,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;gBAEnE,IAAI,OAAO,GAAG;oBACV,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;wBACnB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE;wBACrB,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC;gBAEF,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,MAAM,KAAK,CAAC;oBAClD,OAAO,EAAE,CAAC;qBACT;oBACA,QAAgB,CAAC,cAAc,CAAC;wBAC7B,QAAQ,EAAE,MAAM;wBAChB,SAAS,EAAE,GAAG;wBACd,QAAQ,EAAE,OAAO;qBACpB,CAAC,CAAC;iBACN;YACL,CAAC,CAAA;YAxMG,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI;gBAChB,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAEjB,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAC/B,KAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,KAAK,GAAG,KAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;YACrC,KAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAEhB,IAAI,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;gBAClC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE;gBACT,IAAI,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAtB,CAAsB,CAAC,CAAC;gBAChE,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5B,KAAI,CAAC,WAAW,CAAC,KAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;oBAEhD,CAAC,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;iBACvD;gBAED,IAAI,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAvB,CAAuB,CAAC,CAAC;gBAE9D,IAAI,EAAE,GAAG,CAAC,CAAC,6DAA6D,CAAC;qBACpE,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;gBAE5B,IAAI,EAAE,GAAG,CAAC,CAAC,gDAAgD,CAAC;qBACvD,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,CAAC;gBAE5B,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,OAAO,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE;oBAC5B,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,IAAI,QAAQ,GAAG,EAAE,CAAC;oBAElB,IAAI,CAAC,GAAG,CAAC,CAAC;oBACV,GAAG;wBACC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;qBAClC,QAAQ,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM;wBAC9B,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;oBAClD,CAAC,GAAG,CAAC,CAAC;oBAEN,IAAI,EAAE,GAAG,CAAC,CAAC,+CAA+C,CAAC;yBACtD,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAElB,IAAI,QAAQ,KAAK,CAAC,EAAE;wBAChB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;qBACzB;oBAED,IAAI,KAAK,GAAG,KAAI,CAAC,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;oBAEhD,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC;yBACrC,IAAI,CAAC,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAG,EAAU,CAAC,KAAK,CAAC;wBAC9C,GAAG,EAAE,GAAG;qBACX,EAAE,UAAU,MAAc;wBACvB,OAAO,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEb,IAAI,IAAI,GAAG,CAAC,CAAC,6CAA6C,CAAC;yBACtD,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAElB,IAAI,QAAQ,KAAK,CAAC,EAAE;wBAChB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;qBAC9B;oBAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBACvB,KAAI,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACjC,QAAQ,EAAE,CAAC;iBACd;aACJ;iBACI;gBACD,KAAI,CAAC,WAAW,CAAC,KAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;aACzC;YAED,KAAI,CAAC,eAAe,EAAE,CAAC;;QAC3B,CAAC;yBAlFQ,YAAY;QAoFrB,8BAAO,GAAP;YACI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC1C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC7B;gBACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACvB;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,EAC/C,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC;YAErC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAEO,kCAAW,GAAnB,UAAoB,SAAiB,EAAE,KAAqB;YACxD,IAAI,eAAe,GAAG,EAAE,CAAC;YACzB,IAAI,aAAa,GAAG,SAAS,CAAC;YAE9B,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC;gBAChF,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,IAAI,aAAa,EAAE;gBACf,IAAI,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBAC3D,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;iBACrC;qBACI;oBACD,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,EAChD,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC;iBACxC;aACJ;YAED,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvE,IAAI,cAAc,CAAC;YACnB,IAAI,aAAa,EAAE;gBACf,cAAc,GAAG,aAAa,CAAC;aAClC;iBACI;gBACD,cAAc,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC7E;YACD,IAAI,aAAa,GAAG,IAAI,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7B,IAAI,QAAQ,IAAI,IAAI,EAAE;oBAClB,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;iBAC3D;gBAED,IAAI,aAAa,IAAI,aAAa,KAAK,QAAQ,EAAE;oBAC7C,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAClD,eAAe,EAAE,QAAQ,EACzB,CAAC,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBACjC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;oBAE5C,IAAI,aAAa,IAAI,IAAI,EAAE;wBACvB,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;qBAC1C;oBACD,aAAa,GAAG,QAAQ,CAAC;oBACzB,cAAc,GAAG,WAAW,CAAC;iBAChC;gBACD,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACpD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC7B;QACL,CAAC;QAEO,wCAAiB,GAAzB,UAA0B,aAAqB,EAC3C,eAAqC,EAAE,QAAgB,EAAE,SAAkB;YAE3E,IAAI,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;iBAC7C,QAAQ,CAAC,aAAa,CAAC,CAAC;YAE7B,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;iBAC7C,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;iBAC5C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,MAAM;gBAC/C,OAAO,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC;YAC7C,CAAC,CAAC,CAAC;iBACF,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/B,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACtD,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE3B,IAAI,SAAS,IAAI,IAAI,EAAE;gBACnB,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;oBACxC,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAE9C,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;oBAChD,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEnD,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;oBACnB,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;oBACrC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;aACN;YAEV,OAAO,WAAW,CAAC;QACd,CAAC;QA8BO,oCAAa,GAArB,UAAsB,IAAY,EAAE,MAA6B;YAC7D,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBAC1C,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,OAAO,KAAK,CAAC;iBAChB;aACJ;YAED,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;gBACzC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACzB;YAEV,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBACvC,IAAI,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;gBAChE,IAAI,MAAM,IAAI,IAAI,EAAE;oBAChB,OAAO,MAAM,CAAC;iBACjB;aACJ;YAEV,OAAO,IAAI,CAAC;QACP,CAAC;QAEO,kCAAW,GAAnB,UAAoB,SAAiB,EAAE,IAAkB;YACrD,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;iBACvC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAExE,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACjC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACpC;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACrC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACrC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;oBAC/C,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChE,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBACxC,CAAC,CAAC,gDAAgD,CAAC;6BAC9C,YAAY,CAAC,QAAQ,CAAC,CAAC;qBAC/B;yBACI,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,CAAC,CAAC,0DAA0D,CAAC;6BACxD,YAAY,CAAC,QAAQ,CAAC,CAAC;qBAC/B;yBACI,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,CAAC,CAAC,0DAA0D,CAAC;6BACxD,YAAY,CAAC,QAAQ,CAAC,CAAC;qBAC/B;yBACI,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;wBAC7C,CAAC,CAAC,0DAA0D,CAAC;6BACxD,YAAY,CAAC,QAAQ,CAAC,CAAC;qBAC/B;iBACJ;aACJ;YACD,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACjD,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,MAAM;gBACvD,OAAO,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,OAAO;gBACtD,OAAO,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,IAAI,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,OAAO;gBACpE,OAAO,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;YAChD,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aAChC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC;iBACpB,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;iBACzC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;iBAC/C,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAExB,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACnC,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE;oBACzB,KAAK,CAAC,IAAI,EAAE,CAAC;iBAChB;qBACI;oBACD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;iBACvC;aACJ;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;gBACxB,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,EAC1B,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;qBAC5C,SAAS,CAAC,KAAK,CAAC,CAAC;aACzB;YAED,IAAI,UAAU,GAAG,QAAQ,CAAC,kBAAkB;iBACvC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,UAAU,EAClD,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACrC,IAAI,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAEvC,IAAI,OAAO,GAAG,SAAA,MAAM,CAAC,UAAU,CAAC,UAAiB,CAAC;iBAC7C,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;iBACtC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE7C,IAAI,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBACtB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;aACnD;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;gBAC/B,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;aAC5C;YACD,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,IAAI,WAAW,GAAG,IAAI,CAAC;YACvB,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,UAAU,EAClD,QAAQ,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;YAEzC,IAAI,WAAW,IAAI,IAAI,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;aAC5C;YACD,IAAI,MAAM,CAAC;YACX,IAAI,WAAW,IAAI,IAAI,EAAE;gBACrB,YAAY,GAAG,CAAC,CAAC,MAAM,CAAE,EAAU,CAAC,cAAc,CAAC,WAAW,CAAC,EAC3D,IAAI,CAAC,YAAY,CAAC,CAAC;gBAEvB,MAAM,GAAG,IAAK,UAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;aAC3D;iBACI;gBACD,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzD,MAAM,GAAG,IAAK,UAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;aAC3D;YAED,MAAM,CAAC,UAAU,EAAE,CAAC;YAEpB,IAAK,EAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAA,aAAa,CAAC;gBACnD,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE;gBACjE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC3B;YAED,IAAK,EAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAA,iBAAiB,CAAC;gBACvD,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE;gBACjE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC3B;YAED,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;gBACxB,cAAY,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aACrD;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,SAAA,uBAAuB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aAC1D;YAED,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEjD,OAAO,MAAM,CAAC;QAClB,CAAC;QAEO,uCAAgB,GAAxB,UAAyB,KAAqB;YAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,aAAa,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,IAAI,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrC,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;oBAAhB,IAAI,CAAC,cAAA;oBACN,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,IAAI,IAAI,EAAE;wBACX,SAAS;qBACZ;oBACD,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;wBACnB,SAAS;qBACZ;oBACD,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;iBACvB;aACJ;YAED,KAAe,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;gBAAjB,IAAI,EAAE,cAAA;gBACP,IAAI,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;gBAC3B,IAAI,QAAQ,IAAI,IAAI,EAAE;oBAClB,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;iBAC3D;gBACD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE;oBAC1B,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE,CAAC;iBAC9B;aACJ;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAEO,0CAAmB,GAA3B,UAA4B,SAAiB,EAAE,KAAqB;YACzE,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,YAAY,GAAG,EAAE,CAAC;YACb,KAAc,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;gBAAhB,IAAI,CAAC,cAAA;gBAClB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,IAAI,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC;gBACtB,IAAI,IAAI,IAAI,IAAI,EAAE;oBACjB,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;iBACpD;gBACD,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBAC3B,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;aACjB;YAEV,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAExC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACV,IAAI,SAAS,GAAG,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAE,EAAU,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;oBACvD,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;oBAClC,IAAI,EAAE,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;oBAClC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,EAAE;wBAC7B,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;qBACZ;yBACI,IAAI,EAAE,IAAI,IAAI,EAAE;wBACpB,CAAC,GAAG,CAAC,CAAC,CAAC;qBACP;yBACI,IAAI,EAAE,IAAI,IAAI,EAAE;wBACpB,CAAC,GAAG,CAAC,CAAC;qBACN;iBACD;gBACD,IAAI,CAAC,KAAK,CAAC,EAAE;oBACZ,CAAC,GAAI,EAAU,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;iBACrD;gBACD,IAAI,CAAC,KAAK,CAAC,EAAE;oBACZ,CAAC,GAAI,EAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC/D;gBACD,OAAO,CAAC,CAAC;YACD,CAAC,CAAC,CAAC;YAEZ,IAAI,eAAe,GAAG,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,QAAQ,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;oBACrC,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBACnE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;oBACpC,IAAI,KAAK,GAAG,CAAC,EAAE;wBACd,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;qBAClE;oBACc,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,IAAI,CACpC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EACxB,EAAU,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACpC,UAAU,MAAc;wBACpB,OAAO,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACpD,CAAC,CAAC,CAAC,CAAC;yBACX,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;yBACtB,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ;wBACrC,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;yBACjC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC;yBAC7B,SAAS,CAAC,SAAS,CAAC,CAAC;iBACzC;aACQ;YAEV,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAClD,OAAO,eAAe,CAAC;QAClB,CAAC;QAED,kCAAW,GAAX;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,gCAAS,GAAT;YACI,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,mCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACjC,CAAC;QAED,+BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC7B,CAAC;QAED,+BAAQ,GAAR,UAAS,KAAuB;YAC5B,IAAG,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE;gBAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;QACL,CAAC;QAED,WAAW;QACJ,4BAAe,GAAtB,UAAuB,MAA4B,EAC/C,IAAkB,EAAE,MAAW;QACnC,CAAC;QAED,WAAW;QACJ,4BAAe,GAAtB,UAAuB,MAA4B,EAC/C,IAAkB,EAAE,MAAW;YAE/B,SAAA,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,WAAW;QACI,wBAAW,GAA1B,UAA2B,MAA4B,EAAE,UAAmB;YACxE,SAAA,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;QAED,WAAW;QACI,wBAAW,GAA1B,UAA2B,QAAgB,EAAE,UAAmB;YAC5D,OAAO,SAAA,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACzD,CAAC;QAED,WAAW;QACI,wBAAW,GAA1B,UAA2B,MAA4B,EAAE,UAAmB;YACxE,SAAA,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChD,CAAC;QAEc,yBAAY,GAA3B,UAA4B,MAAmB,EAAE,SAAiB;YAC9D,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;gBAC7B,IAAI,SAAS,GAAG,CAAC,EAAE;oBACf,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;iBAC/C;qBACI;oBACD,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;iBAC1C;aACJ;QACL,CAAC;QAED,2BAAI,GAAJ,UAAK,MAAW;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;oBACtD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,WAAW,EAAE;oBAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;iBACzC;gBAED,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;aACxD;QACL,CAAC;QAED,2BAAI,GAAJ,UAAK,MAAY;YACb,IAAI,MAAM,IAAI,IAAI;gBACd,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;oBAClD,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC7B,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;iBACxD;aACJ;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,sBAAW,+BAAK;iBAAhB;gBACI,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;iBAED,UAAiB,GAAQ;gBACrB,IAAI,GAAG,IAAI,IAAI;oBACX,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;;;WANA;QAQO,oCAAa,GAArB,UAAsB,IAAkB;YACpC,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAA4B,EAAE;gBAC7C,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;oBAC3B,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;oBAC/B,OAAO,IAAI,CAAC;iBACf;gBAED,OAAO,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC/D;iBACI,IAAI,IAAI,CAAC,QAAQ,EAAE,mBAA4B,EAAE;gBAClD,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;oBAC1B,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;oBAC/B,OAAO,IAAI,CAAC;iBACf;gBAED,OAAO,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC/D;YACV,OAAO,IAAI,CAAC;QACP,CAAC;QAED,sCAAe,GAAf;YACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBACnE,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACnD,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,QAAQ;oBAC9C,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;gBACtD,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI;oBACrD,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;oBAC9D,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;oBAC1D,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI;wBACrC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;wBACpD,IAAI,CAAC,OAAO,KAAK,KAAK;wBACtB,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAA4B,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;wBAC3E,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;oBAE1D,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;iBACzC;aACJ;QACL,CAAC;QAED,qCAAc,GAAd,UAAe,QAA8D;YACzE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aAC1B;QACL,CAAC;;QAxmBQ,YAAY;YADxB,SAAA,UAAU,CAAC,aAAa,CAAC,cAAc,CAAC;WAC5B,YAAY,CAymBxB;QAAD,mBAAC;KAAA,AAzmBD,CAAkC,SAAA,MAAM,GAymBvC;IAzmBY,qBAAY,eAymBxB,CAAA;AAgBL,CAAC,EA5nBS,QAAQ,KAAR,QAAQ,QA4nBjB;AC5nBD,IAAU,QAAQ,CAiNjB;AAjND,WAAU,QAAQ;IAwBd;QAAqC,mCAA8B;QAC/D,yBAAY,GAAW,EAAE,GAA2B;YAApD,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SAyBlB;YAvBG,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAClC,GAAG,CAAC,KAAK,CAAC,UAAA,CAAC;gBACP,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE;oBAC9B,KAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;iBAC1B;gBAED,IAAI,IAAI,GAAG,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;oBACjB,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC;oBACnD,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC;oBACtD,EAAE,EAAE,KAAI,CAAC,OAAO;iBACnB,CAAC,CAAC;gBAEH,IAAI,EAAE,GAAG,KAAI,CAAC,UAAU,CAAC;gBACzB,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE,UAAU,CAAC;oBACtC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;iBAC3C,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;;QACxC,CAAC;QAED,iCAAO,GAAP;YACI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;aAC5B;YAED,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QApCQ,eAAe;YAD3B,SAAA,UAAU,CAAC,cAAc,CAAC,0BAA0B,CAAC;WACzC,eAAe,CAqC3B;QAAD,sBAAC;KAAA,AArCD,CAAqC,SAAA,MAAM,GAqC1C;IArCY,wBAAe,kBAqC3B,CAAA;IAOD;QAAqC,mCAAe;QAChD,yBAAY,GAAW,EAAE,GAA2B;YAApD,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SAIlB;YAFG,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAClC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;;QACvE,CAAC;QANQ,eAAe;YAD3B,SAAA,UAAU,CAAC,cAAc,CAAC,0BAA0B,CAAC;WACzC,eAAe,CAO3B;QAAD,sBAAC;KAAA,AAPD,CAAqC,eAAe,GAOnD;IAPY,wBAAe,kBAO3B,CAAA;IAQD;QAA6B,2BAAsB;QAC/C,iBAAY,GAAW,EAAE,OAAuB;YAAhD,YACI,kBAAM,GAAG,EAAE,OAAO,CAAC,SAUtB;YARG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;iBACtC,IAAI,CAAC,uDAAuD;gBACzD,+CAA+C,CAAC,CAAC;YACzD,IAAI,SAAS,GAAG,CAAC,CAAC,mBAAmB,EAAE,KAAI,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,KAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aAC5C;;QACL,CAAC;QAED,yBAAO,GAAP;YACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;oBAC1B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;iBAC5B;qBACI;oBACD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;iBAC1B;gBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;YAED,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAIS,8BAAY,GAAtB,UAAuB,SAAiB,EAAE,CAAa;YACnD,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAE1C,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,EAAE;gBAC1E,CAAC,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC1D;YAED,IAAI,GAAG,GAAG,CAAC,CAAC,qDAAqD;gBAC7D,gDAAgD,CAAC;iBAChD,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzB,IAAI,CAAC,CAAC,SAAS,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,KAAK,MAAM,EAAE;gBACnD,CAAC,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC1D;YAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACvB;YAEQ,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBACtC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;aAC1B;YAEQ,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC7B,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;oBAC7B,OAAO;iBACP;gBACD,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEZ,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC;YACnB,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,EAAE;gBAC3B,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aACpB;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBACtC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBACjC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;oBAC/B,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;iBACV;qBACI,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE;oBACvD,KAAK,GAAG,YAAY,GAAG,KAAK,CAAC;iBAC7B;gBACD,IAAI,GAAG,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC;aAC/C;YACD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACxB;iBACI;gBACJ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACnB;YAED,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK;gBACnB,GAAG,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU;gBACtD,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAE9C,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,QAAQ,IAAI,UAAU,EAAE;gBACpE,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE;oBACtB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU;wBAC/B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;oBAE9B,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU;wBAChC,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpD,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,EAAE;gBAC/D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC,CAClD,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAEtF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,EAAyB,EAAE,MAAW;oBACzF,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;wBACvB,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;qBAC5B;oBACD,OAAO,CAAC,CAAC,kBAAkB,CAAC;gBAC7B,CAAC,CAAC,CAAC;aACH;QACI,CAAC;QAED,4BAAU,GAAV,UAAW,SAAiB;YACxB,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE;gBACnD,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACnC;YACD,OAAO,CAAC,CAAC,kBAAkB,GAAG,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC;QAED,iCAAe,GAAf;YACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAS,EAAE,EAAW;gBACnE,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;YAC3C,CAAC,CAAC,CAAC;QACP,CAAC;QA5HQ,OAAO;YADnB,SAAA,UAAU,CAAC,aAAa,CAAC,kBAAkB,CAAC;WAChC,OAAO,CA6HnB;QAAD,cAAC;KAAA,AA7HD,CAA6B,SAAA,MAAM,GA6HlC;IA7HY,gBAAO,UA6HnB,CAAA;AACL,CAAC,EAjNS,QAAQ,KAAR,QAAQ,QAiNjB;AGjND,IAAU,QAAQ,CAUjB;AAVD,WAAU,QAAQ;IAQd;QAAA;QACA,CAAC;QADY,iBAAiB;YAD7B,SAAA,UAAU,CAAC,iBAAiB,CAAC,4BAA4B,CAAC;WAC9C,iBAAiB,CAC7B;QAAD,wBAAC;KAAA,AADD,IACC;IADY,0BAAiB,oBAC7B,CAAA;AACL,CAAC,EAVS,QAAQ,KAAR,QAAQ,QAUjB;AEVD,IAAU,QAAQ,CA4ajB;AA5aD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,OAAO;YADnB,SAAA,UAAU,CAAC,iBAAiB,CAAC,kBAAkB,CAAC;WACpC,OAAO,CACnB;QAAD,cAAC;KAAA,AADD,IACC;IADY,gBAAO,UACnB,CAAA;IAOD;QAA+C,mCAAyB;QAMpE,yBAAY,OAAkB;YAA9B,YACI,kBAAM,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC,SAOtE;YALG,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAI,CAAC,UAAU,CAAC,CAAC;YAEzC,KAAI,CAAC,aAAa,EAAE,CAAC;YACrB,KAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,KAAI,CAAC,WAAW,EAAE,CAAC;;QACvB,CAAC;4BAdQ,eAAe;QAgBxB,sBAAY,4CAAe;iBAA3B;gBACI,IAAI,SAAS,GAAI,EAAU,CAAC,aAAa,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EACvE,QAAQ,CAAC,cAAc,EAAE,IAAI,CAA8B,CAAC;gBAChE,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;YACnF,CAAC;;;WAAA;QAED,sBAAY,yCAAY;iBAAxB;gBACI,OAAO,CAAC,CAAC,MAAM,CAAC,iBAAiB;oBAC5B,EAAU,CAAC,aAAa,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,SAAA,mBAAmB,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3G,CAAC;;;WAAA;QAEc,0BAAU,GAAzB,UAA0B,OAAe,EAAE,IAAY;YACnD,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,OAAO,IAAI,CAAC;aACf;YAED,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBAC5B,OAAO,IAAI,CAAC;aACf;YAED,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC/B,OAAO,IAAI,CAAC;YAEhB,OAAO,CAAC,CAAC;QACb,CAAC;QAEc,6BAAa,GAA5B,UAA6B,GAA2B,EAAE,WAAmB;YACzE,IAAI,IAAY,CAAC;YACjB,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9E,IAAI;gBACA,IAAI,UAAU,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC/D,IAAI,GAAG,iBAAe,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAC1D,IAAI,IAAI,IAAI,IAAI;oBACZ,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAExB,IAAI,GAAG,iBAAe,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,IAAI,IAAI,IAAI;oBACZ,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;gBAErB,IAAI,GAAG,iBAAe,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACxD,IAAI,IAAI,IAAI,IAAI;oBACZ,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;gBAEtB,IAAI,GAAG,iBAAe,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;gBAC3D,IAAI,IAAI,IAAI,IAAI;oBACZ,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;aAC5B;oBACO;gBACJ,MAAM,CAAC,MAAM,EAAE,CAAC;aACnB;QACL,CAAC;QAAA,CAAC;QAEK,iCAAO,GAAd;YACI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBAC5C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;aACjD;YACD,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;YACxC,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAES,oCAAU,GAApB;YAAA,iBA8CC;YA7CG,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC1C,OAAO;YAEX,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,OAAO,EAAE,EAAd,CAAc,CAAC,CAAC;YAErE,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,SAAA,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAE/C,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,UAAA,CAAC;oBACzC,IAAI,KAAI,CAAC,OAAO,IAAI,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;wBAC7C,KAAI,CAAC,gBAAgB,EAAE,CAAC;qBAC3B;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC9D;iBACI,IAAK,EAAU,CAAC,aAAa,CAAC,IAAI,EAAE,SAAA,gBAAgB,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzE,SAAA,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC7C,SAAA,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAClD;YAED,IAAK,EAAU,CAAC,aAAa,CAAC,IAAI,EAAE,SAAA,oBAAoB,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxE,SAAA,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACpD;YAED,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;gBAC/C,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBAE/C,IAAI,KAAI,CAAC,YAAY,EAAE;oBACnB,KAAI,CAAC,gBAAgB,EAAE,CAAC;iBAC3B;gBAED,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE;gBAChD,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,CAAC,aAAa,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;QACP,CAAC;QAES,qCAAW,GAArB;YACI,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,OAAO;aACV;YAED,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACvD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC5B,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;aAChC;YAED,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC,OAAO,GAAG,IAAI,SAAA,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;QAES,2CAAiB,GAA3B;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,6CAAmB,GAA7B;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,uCAAa,GAAvB;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;aACjE;QACL,CAAC;QAES,yCAAe,GAAzB;YACI,IAAI,CAAC,SAAS,IAAK,IAAI,CAAC,SAAiB,CAAC,QAAQ,EAAE,CAAC;QACzD,CAAC;QAES,sCAAY,GAAtB;YACI,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QAEM,oCAAU,GAAjB,UAAkB,OAAiB;YAAnC,iBAsBC;YArBG,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACpD,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;oBACnC,2CAA2C;oBAC3C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;wBAC5C,KAAI,CAAC,YAAY,EAAE,CAAC;oBACxB,CAAC,CAAC,CAAC;oBACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE;wBAC7C,KAAI,CAAC,aAAa,EAAE,CAAC;oBACzB,CAAC,CAAC,CAAC;iBACN;gBAED,iBAAe,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;iBACI;gBACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;oBAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAEtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aAC/B;QACL,CAAC;QAEa,yBAAS,GAAvB,UAAwB,OAAe,EAAE,UAAkB;YACvD,IAAI,SAAS,GAAG,CAAC,CAAC,mBAAmB,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,MAAM;gBACjB,SAAS,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC;YAErC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;YAE5C,IAAI,SAAS,CAAC,MAAM,EAAE;gBAClB,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC7B,SAAS,CAAC,QAAQ,EAAE;qBACf,GAAG,CAAC,OAAO,CAAC;qBACZ,GAAG,CAAC,eAAe,CAAC;qBACpB,QAAQ,CAAC,4BAA4B,GAAG,UAAU,CAAC,CAAC;gBAEzD,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC;oBACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aACnC;YAED,CAAC,CAAC,gDAAgD,CAAC;iBAC9C,GAAG,CAAC,OAAO,CAAC;iBACZ,QAAQ,CAAC,4BAA4B,GAAG,UAAU,CAAC,CAAC;YAEzD,OAAO;iBACF,WAAW,CAAC,QAAQ,CAAC;iBACrB,WAAW,CAAC,cAAc,CAAC;iBAC3B,QAAQ,CAAC,SAAS,CAAC;iBACnB,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QAEa,0BAAU,GAAxB,UAAyB,OAAe,EAAE,CAAqB;YAC3D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC1D,OAAO;YAEX,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAQ,CAAC,CAAC;YAC7B,KAAa,CAAC,IAAI,GAAG,kBAAkB,CAAC;YACzC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,KAAK,CAAC,kBAAkB,EAAE;gBAC1B,OAAO;YAEX,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACzE,IAAI,KAAK,GAAG,eAAe,GAAG,UAAU,CAAC;YACzC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YAC9D,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC,CAAC,yBAAyB,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAEtD,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAQ,CAAC,CAAC;YACzB,CAAS,CAAC,IAAI,GAAG,YAAY,CAAC;YAC9B,CAAS,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAES,sCAAY,GAAtB;YACI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC3C,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QAES,iCAAO,GAAjB;YACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC;QAES,uCAAa,GAAvB;YAAA,iBAgBC;YAfG,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE7B,oBAAoB;YACpB,IAAK,CAAS,CAAC,IAAI,EAAE;gBACjB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;oBACtD,CAAC,CAAC,EAAE,CAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;aACN;YAED,MAAM,CAAC,UAAU,CAAC;gBACd,IAAI,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC;gBAC3B,KAAI,CAAC,OAAO,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACpC,CAAC,EAAE,CAAC,CAAC,CAAC;QACV,CAAC;QAES,qCAAW,GAArB;YACI,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,iBAAM,WAAW,WAAE,CAAC;gBAEpB,IAAI,IAAI,CAAC,YAAY;oBACjB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC5C;QACL,CAAC;QAES,0CAAgB,GAA1B;YACI,IAAI,GAAG,GAA2B,EAAE,CAAC;YACrC,IAAI,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACnD,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;YAC9B,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;YAChB,iBAAe,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAChD,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7C,GAAG,CAAC,SAAS,GAAI,EAAU,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9F,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;YACjB,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC;YACtF,OAAO,GAAG,CAAC;QACf,CAAC;QAES,wCAAc,GAAxB;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAEM,qCAAW,GAAlB;YACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBACrC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC3E,iBAAe,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC5C;QACL,CAAC;QAED,sBAAW,wCAAW;iBAAtB;gBACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;oBAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAElD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,CAAC;iBA4BD,UAAuB,KAAa;gBAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;gBAExC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;qBAC7C,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;oBACvC,IAAI,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;wBAC9B,IAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,IAAI,CAAC,OAAO,EAAE,CAAC;qBAClB;iBAEJ;YACL,CAAC;;;WAzCA;QAEO,yCAAe,GAAvB;YAAA,iBAwBC;YAvBG,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YAChE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAElD,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBACxB,EAAE,CAAC,MAAM,EAAE,CAAC;aACf;iBACI;gBACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE;oBAClD,EAAE,GAAG,CAAC,CAAC,2EAA2E,CAAC;yBAC9E,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAChC;gBACD,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEhD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;oBAClC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,MAAM,EAAE;wBAC9C,CAAC,CAAC,sDAAsD,CAAC;6BACpD,SAAS,CAAC,EAAE,CAAC;6BACb,KAAK,CAAC,UAAA,CAAC;4BACJ,iBAAe,CAAC,UAAU,CAAC,KAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAChD,CAAC,CAAC,CAAC;qBACV;iBACJ;aACJ;QACL,CAAC;QAiBM,yCAAe,GAAtB,UAAuB,KAAa;YAChC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAC7B,CAAC;QAES,kCAAQ,GAAlB;YAAA,iBAOC;YANG,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,OAAO;aACV;YACD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAM,OAAA,KAAI,CAAC,OAAO,EAAE,EAAd,CAAc,CAAC,CAAC;QACzD,CAAC;QAES,0CAAgB,GAA1B;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;gBAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,EAAE;oBACP,IAAI,GAAG,EAAE,CAAC;oBACV,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBACnD,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;oBACnD,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBACpC,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBAC9B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;oBACnB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;oBAC1C,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;oBACzC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;iBAC5C;gBACD,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACnC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACjI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACpC;iBACI;gBACD,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC5C,IAAI,CAAC,EAAE;oBACH,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC/C,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;oBAC/C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;oBAC1I,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBACrC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;oBACtC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;iBAC7C;aACJ;QACL,CAAC;;QA/ZQ,eAAe;YAD3B,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;WACzC,eAAe,CAga3B;QAAD,sBAAC;KAAA,AAhaD,CAA+C,SAAA,eAAe,GAga7D;IAhaY,wBAAe,kBAga3B,CAAA;AACL,CAAC,EA5aS,QAAQ,KAAR,QAAQ,QA4ajB;AC5aD,IAAU,QAAQ,CA6LjB;AA7LD,WAAU,QAAQ;IAGd;QAAqD,kCAAyB;QAI1E,wBAAY,GAAc;YAA1B,YACI,kBAAM,GAAG,CAAC,SAMb;YAJG,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,KAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,KAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B;;QACL,CAAC;QAED,gCAAO,GAAP;YACI,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC5B;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;YAED,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAES,8CAAqB,GAA/B;YAAA,iBAcC;YAbG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,KAAK,GAAG,KAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;oBACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;iBAC5B;gBACD,OAAO,KAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,UAAA,SAAS;oBACpD,KAAI,CAAC,YAAY,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAChE,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;wBAC1D,KAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;qBACvE;oBACD,OAAO,KAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAES,yCAAgB,GAA1B;YACI,IAAI,GAAG,GAAG,iBAAM,gBAAgB,WAAE,CAAC;YACnC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;YAChB,OAAO,GAAG,CAAC;QACf,CAAC;QAES,yCAAgB,GAA1B;YAAA,iBAQC;YAPG,OAAO,CAAC;oBACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;oBAChC,KAAK,EAAE,cAAM,OAAA,KAAI,CAAC,OAAO,EAAE,EAAd,CAAc;iBAC9B,EAAE;oBACC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;oBACpC,KAAK,EAAE,cAAM,OAAA,KAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB;iBAClC,CAAC,CAAC;QACP,CAAC;QAES,gCAAO,GAAjB;YACI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC5B,OAAO;aACV;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5B,CAAC;QAES,yCAAgB,GAA1B;YACI,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAES,oCAAW,GAArB;YACI,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAES,yCAAgB,GAA1B;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACnB,OAAO;aACV;YACD,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC1D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;aACvE;QACL,CAAC;QAES,mCAAU,GAApB;YACI,IAAI,UAAU,GAAI,EAAU,CAAC,aAAa,CACrC,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YACxE,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;gBACxB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;aAC9B;iBACI;gBACD,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1E,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,EAAE,IAAI,CAAC,EAAE;oBACT,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;iBACjC;gBACD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;oBAC5B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC1C;qBACI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;oBAChC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC1C;gBACD,OAAO,IAAI,CAAC;aACf;QACL,CAAC;QAES,+CAAsB,GAAhC;YACI,OAAO;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBAC9B,IAAI,EAAE,CAAC;gBACP,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG;aACtD,CAAC;QACN,CAAC;QAES,oDAA2B,GAArC;YAAA,iBASC;YARG,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,UAAA,aAAa;gBAClD,OAAO;oBACH,QAAQ,EAAE,KAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;oBAC7B,aAAa,EAAE,KAAK;oBACpB,eAAe,EAAE,QAAQ,GAAG,KAAI,CAAC,UAAU,EAAE,GAAG,GAAG;iBACtD,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC;QAES,yCAAgB,GAA1B;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAES,8CAAqB,GAA/B;YAAA,iBAKC;YAJG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC;QAES,sCAAa,GAAvB;YACI,IAAI,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAClC;YACD,OAAO,MAAe,CAAC;QAC3B,CAAC;QAES,wCAAe,GAAzB;YAAA,iBAIC;YAHG,OAAO,iBAAM,eAAe,WAAE;iBACzB,IAAI,CAAC,cAAM,OAAA,KAAI,CAAC,qBAAqB,EAAE,EAA5B,CAA4B,CAAC;iBACxC,IAAI,CAAC,cAAM,OAAA,KAAI,CAAC,iBAAiB,EAAE,EAAxB,CAAwB,CAAC,CAAC;QAC9C,CAAC;QAES,0CAAiB,GAA3B;YACI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QAES,mCAAU,GAApB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAES,mCAAU,GAApB,UAAqB,KAAY;YAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,MAAM,EAAE,CAAQ,CAAC;QAC1D,CAAC;QAES,qCAAY,GAAtB;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAES,qCAAY,GAAtB,UAAuB,KAAU;YAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;QAES,2CAAkB,GAA5B;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;QAES,oCAAW,GAArB;QACA,CAAC;QAtLQ,cAAc;YAD1B,SAAA,UAAU,CAAC,aAAa,CAAC,yBAAyB,CAAC;WACvC,cAAc,CAyL1B;QAAD,qBAAC;KAAA,AAzLD,CAAqD,SAAA,eAAe,GAyLnE;IAzLY,uBAAc,iBAyL1B,CAAA;AACL,CAAC,EA7LS,QAAQ,KAAR,QAAQ,QA6LjB;AC7LD,IAAU,QAAQ,CAoDjB;AApDD,WAAU,QAAQ;IAGd;QAAkC,gCAAoB;QAIlD;YAAA,YACI,iBAAO,SAMV;YAJG,KAAI,CAAC,WAAW,GAAG,IAAI,SAAA,WAAW,CAAC,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC7D,KAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC3C,KAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC7C,KAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;;QACnD,CAAC;QAED,sCAAe,GAAf;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;QAES,kCAAW,GAArB;YACI,OAAO,2BAA2B,CAAC;QACvC,CAAC;QAES,uCAAgB,GAA1B;YAAA,iBAyBC;YAxBG,IAAI,GAAG,GAAG,iBAAM,gBAAgB,WAAE,CAAC;YAEnC,GAAG,CAAC,OAAO,GAAG;gBACV;oBACI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;oBAChC,KAAK,EAAE;wBACH,KAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;wBAC1B,IAAI,KAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE;4BAClC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;4BACzE,OAAO;yBACV;wBAED,KAAI,CAAC,WAAW,EAAE,CAAC;oBACvB,CAAC;iBACJ;gBACD;oBACI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;oBACpC,KAAK,EAAE,cAAM,OAAA,KAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB;iBAClC;aACJ,CAAC;YAEF,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAEvD,OAAO,GAAG,CAAC;QACf,CAAC;QA9CQ,YAAY;YADxB,SAAA,UAAU,CAAC,aAAa,CAAC,uBAAuB,CAAC;WACrC,YAAY,CA+CxB;QAAD,mBAAC;KAAA,AA/CD,CAAkC,SAAA,eAAe,GA+ChD;IA/CY,qBAAY,eA+CxB,CAAA;AAEL,CAAC,EApDS,QAAQ,KAAR,QAAQ,QAoDjB;ACpDD,IAAU,QAAQ,CAuajB;AAvaD,WAAU,QAAQ;IASd;QAAoC,kCAA6B;QAE7D,wBAAY,SAAiB,EAAE,OAA+B;YAA9D,YACI,kBAAM,SAAS,EAAE,OAAO,CAAC,SAW5B;YATG,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE1D,IAAI,OAAO,GAAG,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxB,KAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aACpB;YAED,KAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;;QACrF,CAAC;2BAdQ,cAAc;QAgBhB,qCAAY,GAAnB;YACI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpC,CAAC;QAEM,4BAAG,GAAV,UAAkD,GAAmC;YAArF,iBAkGC;YAhGG,IAAI,GAAG,IAAI,IAAI,EAAE;gBACb,MAAM,IAAK,EAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;aACtD;YAED,IAAI,GAAG,CAAC,SAAS,EAAE;gBACf,IAAI,CAAC,YAAY,EAAE,CAAC;aACvB;YAED,IAAI,IAAI,GAAG,CAAC,CAAC,+EAA+E,CAAC;iBACxF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;iBACtB,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAE3C,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACtB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClE,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;iBACrB;aACJ;YAED,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YAE5C,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,EAAE;gBACzB,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;aACtD;YAED,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE;gBACvB,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;aAClD;YAED,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE;gBACvB,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;aAClD;YAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAChC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACtC;YAED,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO,EAAE,UAAA,CAAC;oBACN,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;wBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;qBACnD;oBACD,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;oBAC3B,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBACxB,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE;wBACrB,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;qBAClB;gBACL,CAAC;gBACD,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;aACjB,CAAC,CAAC;YAEH,IAAI,aAAa,GAAG,UAAC,OAA6B;gBAE9C,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oBAChC,OAAO;iBACV;gBAED,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;gBACtD,IAAI,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAClD,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACjE,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE;oBACrB,IAAI,IAAI,GAAG;wBACP,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,OAAO,EAAE,OAAO;wBAChB,cAAc,EAAE,OAAO,CAAC,cAAc;wBACtC,KAAK,EAAE,KAAK;wBACZ,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,IAAI;qBAChB,CAAC;oBACF,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClB,WAAW,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;wBACf,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;qBAC7C;iBACJ;qBACI;oBACD,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;oBAC1C,WAAW,CAAC,WAAW,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;iBAC1D;YACL,CAAC,CAAC;YAEF,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,UAAC,EAAqB;gBACpD,4EAA4E;gBAC5E,MAAM,CAAC,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,QAAQ,IAAI,KAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAlC,CAAkC,EAAE,CAAC,CAAC,CAAC;YACnE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,UAAA,CAAC;gBAC9C,KAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QAEM,qCAAY,GAAnB,UAAoB,KAAa,EAAE,KAAc;YAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAc,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAwB,CAAC;QACnF,CAAC;QAEa,wBAAS,GAAvB,UAAwB,KAAa,EAAE,KAAc;YACjD,IAAI,GAAG,GAAwB,IAAI,CAAC;YACpC,OAAuD;gBACnD,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,QAAQ,CAAC,UAAU;gBACzB,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,UAAU,EAAE;oBACjB,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;wBACzB,IAAI,EAAE,QAAQ,CAAC,UAAU;wBACzB,OAAO,EAAE,UAAU,EAAE;4BACjB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;wBACvB,CAAC;wBACD,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEH,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;wBAC1B,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC;oBAEH,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,EAAE,UAAU,IAAI;oBACnB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACnD,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC3C,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;wBACpD,OAAO,GAAG,KAAK,CAAC;wBAChB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;wBAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBAC/B;oBACD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;wBAC5C,OAAO,GAAG,KAAK,CAAC;wBAChB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;wBAC5D,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBACvB;oBACD,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC;oBACjC,IAAI,OAAO,EAAE;wBACT,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EACvE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;qBAChD;oBACD,IAAI,OAAO,EAAE;wBACT,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EACvE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;qBAC9D;gBACL,CAAC;gBACD,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;oBACvB,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;oBAClD,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;wBAC5C,OAAO,IAAI,CAAC;qBACf;oBACD,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;oBAC5B,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;oBAC5B,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;wBAC9C,OAAO,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;qBAClG;yBACI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;wBAC3B,OAAO,KAAK,CAAC;qBAChB;yBACI;wBACD,OAAO,KAAK,CAAC;qBAChB;gBACL,CAAC;gBACD,SAAS,EAAE,UAAU,EAAE;oBACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnF,CAAC;gBACD,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK;oBAC1B,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC1D,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACxB;oBAED,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;aACJ,CAAC;QACN,CAAC;QAEM,yCAAgB,GAAvB,UAAwB,KAAa,EAAE,KAAc;YACjD,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAc,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAA4B,CAAC;QAC3F,CAAC;QAEa,4BAAa,GAA3B,UAA4B,KAAa,EAAE,KAAc;YACrD,IAAI,GAAG,GAA4B,IAAI,CAAC;YAExC,OAA2D;gBACvD,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,UAAU,EAAE;oBACjB,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;wBACzB,IAAI,EAAE,QAAQ,CAAC,cAAc;wBAC7B,OAAO,EAAE,UAAU,EAAE;4BACjB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;wBACvB,CAAC;wBACD,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEH,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;wBAC1B,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAChC,CAAC,CAAC,CAAC;oBAEH,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACvE,CAAC;gBACD,IAAI,EAAE,UAAU,CAAC;oBACb,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;wBAChD,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBACvC,CAAC,CAAC,CAAC;gBACP,CAAC;gBACD,OAAO,EAAE,UAAU,IAAI;oBACnB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACnD,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC3C,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;wBACpD,OAAO,GAAG,KAAK,CAAC;wBAChB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;wBAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBAC/B;oBACD,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;wBAC5C,OAAO,GAAG,KAAK,CAAC;wBAChB,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;wBAC5D,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;qBACvB;oBACD,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,OAAO,CAAC;oBACjC,IAAI,OAAO,EAAE;wBACT,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EACvE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;qBAChD;oBACD,IAAI,OAAO,EAAE;wBACT,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EACvE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;qBACxC;gBACL,CAAC;gBACD,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;oBACvB,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;oBAClD,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;wBAC5C,OAAO,IAAI,CAAC;qBACf;oBACD,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;oBAC5B,IAAI,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;oBAC5B,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;wBAC9C,OAAO,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC;qBAClG;yBACI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE;wBAC3B,OAAO,KAAK,CAAC;qBAChB;yBACI;wBACD,OAAO,KAAK,CAAC;qBAChB;gBACL,CAAC;gBACD,SAAS,EAAE,UAAU,EAAE;oBACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnF,CAAC;gBACD,SAAS,EAAE,UAAU,EAAE,EAAE,KAAK;oBAC1B,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC1D,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;qBACxB;oBACD,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjD,CAAC;aACJ,CAAC;QACN,CAAC;QAEM,mCAAU,GAAjB,UAAkB,KAAa,EAAE,KAAc,EAAE,GAAY,EAAE,EAAW;YACtE,OAAO,IAAI,CAAC,GAAG,CAAC,gBAAc,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;QAEa,sBAAO,GAArB,UAAsB,KAAa,EAAE,KAAc,EAAE,GAAY,EAAE,EAAW;YAC1E,IAAI,GAAG,GAAwB,EAAE,CAAC;YAClC,IAAI,KAAK,GAAG,EAAE,CAAC;YAEf,IAAI,QAAQ,GAAG,GAAG,CAAC;YACnB,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;aAChE;YACD,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;YAE5B,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,SAAS,IAAI,IAAI,EAAE;gBACnB,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;aAClE;YAED,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YAE7B,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;YAElB,OAAO;gBACH,KAAK,EAAE,KAAK;gBACZ,IAAI,EAAE,QAAQ,CAAC,YAAY;gBAC3B,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,GAAG;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACnB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;wBAC5F,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpC,CAAC;aACJ,CAAC;QACN,CAAC;QAEa,wCAAyB,GAAvC,UAAwC,IAAkB;YACtD,IAAI,KAAK,GAAQ,EAAE,CAAC;YAEpB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACnB,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,KAAK,GAAG,IAAI,CAAC;iBAChB;aACJ;YAED,IAAI,aAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;YACjG,IAAI,aAAa,KAAK,QAAQ,CAAC,aAAa,EAAE;gBAC1C,KAAK,GAAG,gBAAc,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACjD;iBACI,IAAI,aAAa,KAAK,QAAQ,CAAC,iBAAiB,EAAE;gBACnD,KAAK,GAAG,gBAAc,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACrD;iBACI,IAAI,aAAa,KAAK,QAAQ,CAAC,gBAAgB,EAAE;gBAClD,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;gBACnC,IAAI,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC7B,IAAI,QAAQ,IAAI,IAAI,EAAE;oBAClB,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;iBAC5B;gBACD,IAAI,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC/B,IAAI,SAAS,IAAI,IAAI,EAAE;oBACnB,SAAS,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;iBAC9B;gBACD,KAAK,GAAG,gBAAc,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aACpE;iBACI;gBACD,IAAI,SAAS,GAAG,IAAK,aAAqB,EAAgB,CAAC;gBAC3D,IAAI,SAAS,IAAK,EAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE;oBAChF,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACtE,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC1B,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5D,SAAiB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBAC1C,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;iBACtE;qBACI;oBACD,OAAO,IAAI,CAAC;iBACf;aACJ;YAED,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBAC7B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;aAC1B;YAED,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC;YAC1C,OAAO,KAAK,CAAC;QACjB,CAAC;QAMD,gCAAO,GAAP;YACI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAEM,iCAAQ,GAAf,UAAgB,OAA6B;YACzC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxD,CAAC;QAES,2CAAkB,GAA5B,UAA6B,MAA+C;YACxE,IAAI,CAAC,cAAc,GAAI,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACnF,CAAC;QAES,8CAAqB,GAA/B,UAAgC,MAA+C;YAC3E,IAAI,CAAC,cAAc,GAAI,EAAU,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAClF,CAAC;QAES,6CAAoB,GAA9B;QACA,CAAC;QAEM,6BAAI,GAAX,UAAqB,IAAsC,EAAE,KAAa;YACtE,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC;QAEM,gCAAO,GAAd,UAAwB,IAAsC,EAAE,KAAa;YACzE,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,MAAM;gBACV,OAAO,IAAI,CAAC;YAEhB,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;;QA5ZQ,cAAc;YAF1B,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,yBAAyB,CAAC;YAC5D,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;WACzB,cAAc,CA6Z1B;QAAD,qBAAC;KAAA,AA7ZD,CAAoC,SAAA,MAAM,GA6ZzC;IA7ZY,uBAAc,iBA6Z1B,CAAA;AACL,CAAC,EAvaS,QAAQ,KAAR,QAAQ,QAuajB;ACvaD,IAAU,QAAQ,CAw0CjB;AAx0CD,WAAU,QAAQ;IASd;QAAA;QACA,CAAC;QADY,SAAS;YADrB,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;WAC/C,SAAS,CACrB;QAAD,gBAAC;KAAA,AADD,IACC;IADY,kBAAS,YACrB,CAAA;IAID;QAA+C,4BAAgB;QA0B3D,kBAAY,SAAiB,EAAE,OAAkB;YAAjD,YACI,kBAAM,SAAS,EAAE,OAAO,CAAC,SA8C5B;YA/DS,uBAAiB,GAAW,CAAC,CAAC;YAmBpC,IAAI,IAAI,GAAG,KAAI,CAAC;YAEhB,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAI,EAAU,CAAC,WAAW,CAAE,EAAU,CAAC,eAAe,CAAC,KAAI,CAAC,CAAC,CAAC,CAAC;YACzF,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,KAAI,CAAC,UAAU,EAAE;gBACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,QAAQ,CAAC,KAAI,CAAC,eAAe,EAAE,CAAC,CAAC;YAEtC,IAAI,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;YAChC,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,KAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;aAC/B;YAED,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,oBAAoB,EAAE,CAAC;YAClD,KAAI,CAAC,IAAI,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;YAE9B,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,eAAe,EAAE,CAAC;YAExC,IAAI,KAAI,CAAC,eAAe,EAAE,EAAE;gBACxB,KAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;YAED,IAAI,KAAI,CAAC,QAAQ,EAAE,EAAE;gBACjB,KAAI,CAAC,WAAW,EAAE,CAAC;aACtB;YACD,KAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,KAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,KAAI,CAAC,uBAAuB,EAAE,CAAC;aAClC;YAED,KAAI,CAAC,kBAAkB,EAAE,CAAC;YAE1B,KAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,KAAI,CAAC,eAAe,EAAE,CAAC;YAEvB,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,KAAI,CAAC,eAAe,GAAG,KAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACrD,KAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACjC,MAAM,CAAC,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,eAAe,EAAE,EAAtB,CAAsB,EAAE,CAAC,CAAC,CAAC;aACtD;;QACL,CAAC;QAES,wBAAK,GAAf,UAAuB,QAAwC;YAC3D,OAAQ,EAAU,CAAC,aAAa,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;QAES,yBAAM,GAAhB;YACI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI;gBAC3D,OAAO;YAEX,IAAI,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAClE,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC;YACtF,IAAI,gBAAgB,GAAG,gBAAgB,IAAI,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;YAEnE,IAAI,gBAAgB,EAAE;gBAClB,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM;oBACzD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBAE1C,IAAI,CAAC,cAAc,EAAE;oBAEjB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;yBACpC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAc;wBAC5C,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM;4BAClD,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;oBAChC,CAAC,CAAC,CAAC;oBAEP,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnD;aACJ;iBACI;gBACD,IAAI,cAAc,EAAE;oBAChB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBACtE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;iBACpD;gBAED,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;aAC3C;YAED,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAClC,CAAC;QAES,kCAAe,GAAzB;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,0CAAuB,GAAjC;QACA,CAAC;QAES,uCAAoB,GAA9B;YAEI,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI;gBAC5B,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAEhC,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QAES,qCAAkB,GAA5B,UAA6B,OAAyC;YAAtE,iBAoBC;YAlBG,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBAChD,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE;gBAC5E,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBACjE,IAAI,IAAI,CAAC,OAAO,EAAE;oBACd,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC7D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBACvD;qBACI;oBACD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;iBACtG;gBAED,IAAI,CAAC,eAAe,GAAG,IAAI,SAAA,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE;oBAC5D,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,UAAC,MAAqC,IAAK,OAAA,KAAI,CAAC,aAAa,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,GAAG,MAAM,CAAC,KAAK,EAAlB,CAAkB,CAAC,EAA7C,CAA6C;oBAClG,QAAQ,EAAE,IAAI,CAAC,UAAU,GAAG,eAAe;iBAC9C,CAAC,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAzB,CAAyB,CAAC;aACpE;QACL,CAAC;QAES,kCAAe,GAAzB;YACI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;gBACrC,OAAO,CAAC,CAAC,UAAU;oBACf,CAAC,CAAC,UAAU,CAAC,WAAW,KAAK,IAAI;oBACjC,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI;wBAChC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,SAAA,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAAC,UAAU,CAAC,EAAtD,CAAsD,CAAC;iBAC9D,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,IAAI,IAAI,EAAT,CAAS,CAAC,CAAC;QAChC,CAAC;QAES,kCAAe,GAAzB,UAAmC,IAAsC,EAAE,KAAa;YACpF,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI;gBAC5B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAElD,OAAO,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,eAAe,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9E,CAAC;QAES,qCAAkB,GAA5B,UAAsC,IAAsC,EAAE,KAAa;YACvF,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI;gBAC5B,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAErD,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,eAAe,GAAG,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,EAAE,CAAC,MAAM;gBACV,OAAO,IAAI,CAAC;YAEhB,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QAES,6CAA0B,GAApC;YACI,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC5C,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,EAAE;gBAC/C,QAAQ,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aAC5F;QACL,CAAC;QAES,uCAAoB,GAA9B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,yCAAsB,GAAhC;YACI,QAAQ,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACzG,CAAC;QAEM,0BAAO,GAAd;YACI,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACvB;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;YAED,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;YAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAES,kCAAe,GAAzB,UAA0B,IAAW,EAAE,KAAa;YAChD,IAAI,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACjD,IAAI,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACnD,IAAI,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE;gBACvE,OAAO,IAAI,CAAC;aACf;YAED,IAAI,eAAe,EAAE;gBACjB,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;gBAClC,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;oBAC7B,IAAI,KAAK,GAAG,CAAC,EAAE;wBACX,OAAO,SAAS,CAAC;qBACpB;yBACI,IAAI,KAAK,KAAK,CAAC,EAAE;wBAClB,OAAO,UAAU,CAAC;qBACrB;iBACJ;qBACI,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;oBACnC,IAAI,KAAK,KAAK,KAAK,EAAE;wBACjB,OAAO,SAAS,CAAC;qBACpB;iBACJ;aACJ;iBACI;gBACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;aACpD;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,kCAAe,GAAzB,UAA0B,IAAW,EAAE,KAAa;YAChD,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE;gBAC5B,OAAO,IAAI,MAAM,EAAE,CAAC;aACvB;YACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QACrC,CAAC;QAES,qCAAkB,GAA5B,UAA6B,OAAuB;YAChD,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;YACvE,OAAO,OAAO,CAAC;QACnB,CAAC;QAES,kCAAe,GAAzB;YACI,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBAC5B,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE;oBAC5D,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC3B,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;oBAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;iBACxB;aACJ;iBACI,IAAI,IAAI,CAAC,IAAI,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;aACxB;QACL,CAAC;QAES,kCAAe,GAAzB,UAA0B,MAAoB;YAC1C,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI;gBAC7B,MAAM,CAAC,UAAU,CAAC,aAAa,KAAK,IAAI;gBACxC,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI;oBACrC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;QAES,sCAAmB,GAA7B;YAAA,iBAcC;YAZG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,WAAW,CAC7C,IAAI,CAAC,UAAU;iBACV,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAvB,CAAuB,CAAC;iBACpC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,EAAZ,CAAY,CAAC,CAAC,CAAC,CAAC;YAElC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,UAAC,CAAoB,EAAE,CAAM;gBAChE,IAAI,KAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE;oBAC7B,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;oBAC3B,KAAI,CAAC,IAAI,IAAI,CAAC,KAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;oBACxC,KAAI,CAAC,OAAO,EAAE,CAAC;iBAClB;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAES,kCAAe,GAAzB;YAAA,iBAoBC;YAnBG,OAAO,iBAAM,eAAe,WAAE;iBACzB,IAAI,CAAiB,cAAM,OAAA,KAAI,CAAC,eAAe,EAAE,EAAtB,CAAsB,CAAC;iBAClD,IAAI,CAAC,UAAA,OAAO;gBACT,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC9B,KAAI,CAAC,kBAAkB,CAAC,KAAI,CAAC,UAAU,CAAC,CAAC;gBACzC,KAAI,CAAC,SAAS,IAAI,KAAI,CAAC,mBAAmB,EAAE,CAAC;gBAE7C,IAAI,cAAc,GAAG,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;oBACpD,OAAO,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC;gBAChC,CAAC,CAAC,CAAC;gBAEH,IAAI,KAAI,CAAC,SAAS,EAAE;oBAChB,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;iBAC7C;gBACD,KAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,KAAI,CAAC,eAAe,GAAG,KAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBACrD,KAAI,CAAC,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACjC,KAAI,CAAC,eAAe,EAAE,CAAC;YAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAES,kCAAe,GAAzB;YAEI,IAAI,cAA8B,CAAC;YAEnC,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBACtB,cAAc,GAAG,EAAE,CAAC;aACvB;iBACI;gBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;oBACxE,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;gBAC/B,CAAC,CAAC,CAAC;aACN;YAED,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAW,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;YAC/F,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC;gBACvC,oBAAoB,EAAE,IAAI;aAC7B,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,IAAI,CAAC,mBAAmB,EAAE,CAAC;aAC9B;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,sCAAmB,GAA7B;YACI,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAErC,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACzD;YAED,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;gBAC/B,IAAI,CAAC,GAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,EAAE;oBAC3C,CAAC,CAAC,QAAQ,GAAI,EAAU,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;oBAClE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;iBACrB;qBACI;oBACD,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACf,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;iBACpB;gBACD,OAAO,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,yBAAM,GAAN,UAAO,GAAW;YACd,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,2BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;QAC1C,CAAC;QAED,2BAAQ,GAAR;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC;QAED,2BAAQ,GAAR,UAAS,KAAc;YACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;QAES,oCAAiB,GAA3B;YAAA,iBAkDC;YAjDG,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,eAAe,GAAG,UAAC,CAAS,EAAE,CAAM;gBACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACzB,IAAI;oBACA,IAAI,MAAM,GAAG,EAAE,CAAC;oBAChB,IAAI,GAAQ,CAAC;oBACb,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE;wBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC5C,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;4BACtB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;4BAChB,IAAI,GAAG,IAAI,IAAI,EAAE;gCACb,GAAG,GAAG,EAAE,CAAC;6BACZ;4BACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;yBACzD;qBACJ;yBACI;wBACD,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;wBACpB,IAAI,GAAG,IAAI,IAAI,EAAE;4BACb,GAAG,GAAG,EAAE,CAAC;yBACZ;wBACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;qBACzD;oBAED,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;iBAC7B;wBACO;oBACJ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;iBAC9B;gBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAEtD,IAAI,CAAC,gBAAgB,GAAG,UAAC,EAAqB,EAAE,EAAO;gBACnD,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAA;YAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAExD,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,UAAC,EAAqB,EAAE,EAAO;gBACvE,OAAO,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAC,EAAqB,EAAE,EAAO;gBACrE,OAAO,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;QACP,CAAC;QAES,sCAAmB,GAA7B;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,6BAA6B,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;QAES,6BAAU,GAApB;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,2BAAQ,GAAlB,UAAmB,UAAe;YAC9B,MAAM,IAAK,EAAU,CAAC,uBAAuB,EAAE,CAAC;QACpD,CAAC;QAES,iCAAc,GAAxB,UAAyB,QAAgB,EAAE,UAAe;YACtD,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;gBACjC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO;aACV;YAED,MAAM,IAAK,EAAU,CAAC,uBAAuB,EAAE,CAAC;QACpD,CAAC;QAES,0BAAO,GAAjB,UAAkB,CAAoB,EAAE,GAAW,EAAE,IAAY;YAC7D,IAAI,CAAC,CAAC,kBAAkB,EAAE,EAAE;gBACxB,OAAO;aACV;YAED,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;gBAChC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;aAChC;YAED,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;gBAC/B,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;aACjH;QACL,CAAC;QAES,kCAAe,GAAzB,UAA0B,CAAM,EAAE,IAAa;YAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAES,mCAAgB,GAA1B;YACI,IAAI,IAAI,GAAG,IAAI,CAAC;YAEhB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5C,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,UAAU,IAAI;gBAC/B,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,CAAC,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,KAAK;gBACrC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,UAAU,QAAQ,EAAE,KAAK;gBAC/C,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC,CAAA;QACL,CAAC;QAES,oCAAiB,GAA3B,UAA4B,QAA6B;YACrD,OAAO,QAAQ,CAAC;QACpB,CAAC;QAES,+BAAY,GAAtB,UAAuB,IAAW;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,oCAAiB,GAA3B,UAA4B,OAAmC;YAC3D,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1C,KAAmB,UAAO,EAAP,mBAAO,EAAP,qBAAO,EAAP,IAAO,EAAE;gBAAvB,IAAI,MAAM,gBAAA;gBACX,IAAI,MAAM,CAAC,KAAK,EAAE;oBACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;iBAChC;gBAED,IAAI,MAAM,CAAC,gBAAgB,EAAE;oBACzB,KAAc,UAAuB,EAAvB,KAAA,MAAM,CAAC,gBAAgB,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;wBAAlC,IAAI,CAAC,SAAA;wBACN,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;qBACrB;iBACJ;aACJ;QACL,CAAC;QAES,uCAAoB,GAA9B;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,kBAAkB,EAAE,CAAC;gBAC/D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBACtC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;iBACxC;aACJ;QACL,CAAC;QAES,8BAAW,GAArB,UAAsB,KAAa,EAAE,KAAU;YAC3C,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAES,6CAA0B,GAApC;YACI,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,KAAgB,UAAoB,EAApB,KAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAApB,cAAoB,EAApB,IAAoB,EAAE;gBAAjC,IAAI,GAAG,SAAA;gBACR,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACnB;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5C,CAAC;QAES,+BAAY,GAAtB;YACI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;gBAC3C,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,8BAAW,GAArB;QACA,CAAC;QAES,uCAAoB,GAA9B;YACI,OAAO,CAAC,CAAC,oCAAoC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1E,CAAC;QAES,6BAAU,GAApB;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAQ,GAAG,CAAC,CAAC;QAC5C,CAAC;QAES,mCAAgB,GAA1B;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBAEhB,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;oBACxD,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC;gBAC5C,CAAC,CAAC,CAAC;gBAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;wBACxB,OAAQ,EAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;oBAC9E,CAAC,CAAC,CAAC;oBAEH,IAAI,IAAI,GAAG,EAAE,CAAC;oBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBAC/D;oBAED,OAAO,IAAI,CAAC;iBACf;aACJ;YAED,OAAO,EAAE,CAAC;QACd,CAAC;QAES,2BAAQ,GAAlB;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,kCAAe,GAAzB;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,CAAC;QAES,sCAAmB,GAA7B;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,kCAAe,GAAzB;YACI,IAAI,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtD,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnC,CAAC;QAES,kCAAe,GAAzB;YACI,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,EAAE;gBACf,kBAAkB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;aAC3C,CAAC;QACN,CAAC;QAES,8BAAW,GAArB;YACI,IAAI,QAAQ,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvD,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAChD,CAAC;QAES,iCAAc,GAAxB;YAAA,iBAoBC;YAnBG,IAAI,GAAG,GAA4B,EAAE,CAAC;YACtC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAErC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAClB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;aACvB;iBACI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBACjD,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACnE;iBACI;gBACD,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;aACzB;YAED,GAAG,CAAC,eAAe,GAAG,UAAC,IAAI,EAAE,KAAK;gBAC9B,OAAO,KAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7C,CAAC,CAAC;YAEF,OAAO,GAAG,CAAC;QACf,CAAC;QAES,gCAAa,GAAvB,UAAwB,OAAqB;YACzC,IAAI,UAAU,GAAG,CAAC,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9E,IAAI,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;QAED,2BAAQ,GAAR;YACI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAChB,OAAO,IAAI,CAAC;aACf;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC;QAED,2BAAQ,GAAR,UAAS,KAAa;YAClB,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,EAAE;gBAC3B,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,IAAI,IAAI,CAAC,QAAQ,EAAE;wBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;qBACxB;iBACJ;qBACI;oBACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAChB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,8DAA8D,CAAC;6BAC5E,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAChC;oBACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxC;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;QACL,CAAC;QAES,8BAAW,GAArB;YACI,OAAO,MAAM,CAAC;QAClB,CAAC;QAES,2BAAQ,GAAlB,UAAmB,QAAiB,EAAE,OAAgB,EAAE,IAA8C,EAClG,QAAkD,EAAE,MAAsB;YAAtB,uBAAA,EAAA,aAAsB;YAE1E,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;aACjC;YAED,IAAI,OAAO,IAAI,IAAI,EAAE;gBACjB,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;aAClC;YAED,OAAO,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QACxF,CAAC;QAES,gCAAa,GAAvB;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YACpD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;aACxB;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,wCAAqB,GAA/B;YAAA,iBASC;YARG,OAAO,OAAO,CAAC,OAAO,EAAE;iBACnB,IAAI,CAAiB;gBAClB,IAAI,UAAU,GAAG,KAAI,CAAC,aAAa,EAAE,CAAC;gBACtC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;oBAC9B,OAAO,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;iBACxC;gBACD,OAAO,OAAO,CAAC,OAAO,CAAiB,EAAE,CAAC,CAAC;YAC/C,CAAC,EAAE,IAAI,CAAC,CAAC;QACjB,CAAC;QAES,mCAAgB,GAA1B;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAEpD,IAAI,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE;gBAC9B,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;aACnC;YAED,OAAO,EAAE,CAAC;QACd,CAAC;QAES,6BAAU,GAApB;YACI,IAAI,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAC3D,CAAC;QAES,8CAA2B,GAArC,UAAsC,aAA6B;YAC/D,IAAI,OAAO,GAAG,QAAQ,CAAC,0BAA0B,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE;oBACxB,IAAI,SAAS,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;oBACrC,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChF,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAC5D,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EACzD,EAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,UAAS,GAA2B;wBAC5E,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE;4BAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;yBAChC;wBACD,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACnC,CAAC,CAAC,EACD,EAAU,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,UAAS,IAA4B;wBACjE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oBAEf,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;wBACxC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC;wBACxD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;qBACtD;iBACJ;aACJ;YACD,OAAO,OAAO,CAAC;QACnB,CAAC;QAES,kCAAe,GAAzB;YAAA,iBAIC;YAHG,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,UAAA,aAAa;gBAClD,OAAO,KAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;YAC3D,CAAC,EAAE,IAAI,CAAC,CAAC;QACb,CAAC;QAES,kCAAe,GAAzB;YACI,IAAI,GAAG,GAAsB,EAAE,CAAC;YAChC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;YACxB,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;YAC3B,GAAG,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACjC,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC5D,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACnD,OAAO,GAAG,CAAC;QACf,CAAC;QAES,+BAAY,GAAtB;YACI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,CAAC;QAES,iCAAc,GAAxB;YACI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/B,CAAC;QAES,iCAAc,GAAxB;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,0BAAO,GAAd;YACI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;gBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO;aACV;YACD,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;gBACpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,OAAO;aACV;YACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAES,kCAAe,GAAzB;YACI,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;gBAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;QACL,CAAC;QAES,kCAAe,GAAzB;YACI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QAEM,gCAAa,GAApB,UAAqB,KAAc;YAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE;gBAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBAChC;gBAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;aAC9B;QACL,CAAC;QAID,sBAAW,8BAAQ;iBAAnB;gBACI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,CAAC;iBAED,UAAoB,KAAc;gBAC9B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;;;WAJA;QAMM,+BAAY,GAAnB;YACI,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5B,CAAC;QAEM,+BAAY,GAAnB,UAAoB,KAAc;YAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE;gBAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;gBACzB,IAAI,CAAC,eAAe,EAAE,CAAC;aAC1B;QACL,CAAC;QAES,kCAAe,GAAzB;YACI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACnD,CAAC;QAES,uCAAoB,GAA9B;YACI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;gBAChC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnE,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE;oBAC/E,IAAI,CAAC,iBAAiB,GAAG,KAAK,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;iBACjE;aACJ;YAED,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAClC,CAAC;QAES,qCAAkB,GAA5B;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,wBAAwB,CAAC,CAAC;YAEhD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAChB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAEzB,OAAO,EAAE,CAAC;QACd,CAAC;QAES,gCAAa,GAAvB;YACI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;gBACzB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,mBAAmB,CAAC,CAAC;gBAE3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;iBACnC;qBACI;oBACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;iBAC1B;aACJ;YAED,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;QAES,uCAAoB,GAA9B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,sCAAmB,GAA7B;YACI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;gBAC/B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,yBAAyB,CAAC,CAAC;gBAEjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBACnB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;iBACzC;qBACI;oBACD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;iBAC9B;aACJ;YACD,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;QAES,sCAAmB,GAA7B;YACI,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5E,CAAC;QAES,+BAAY,GAAtB;YACI,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAClC,CAAC;QAES,sCAAmB,GAA7B;YACI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAES,qCAAkB,GAA5B;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC,YAAY,EAAE,CAAC;QAC/C,CAAC;QAES,gCAAa,GAAvB,UAAwB,MAAkC;YACtD,IAAI,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE;gBACnC,IAAI,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;gBAClD,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,OAAO,KAAK,CAAC;iBAChB;aACJ;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,iCAAc,GAAxB,UAAgE,GAAmC;YAC/F,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAES,qCAAkB,GAA5B,UAA6B,KAAa,EAAE,KAAc;YACtD,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;QAES,uCAAoB,GAA9B,UAA+B,KAAa,EAAE,KAAc;YACxD,OAAO,SAAA,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QAES,yCAAsB,GAAhC,UAAiC,KAAa,EAAE,KAAc;YAC1D,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;QAES,2CAAwB,GAAlC,UAAmC,KAAa,EAAE,KAAc;YAC5D,OAAO,SAAA,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QAES,mCAAgB,GAA1B,UAA2B,KAAa,EAAE,KAAc,EAAE,GAAY,EAAE,EAAW;YAC/E,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC;QAES,qCAAkB,GAA5B,UAA6B,KAAa,EAAE,KAAc,EAAE,GAAY,EAAE,EAAW;YACjF,OAAO,SAAA,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACzD,CAAC;QAES,uCAAoB,GAA9B;YACI,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;gBAC9B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACnD;QACL,CAAC;QAES,oCAAiB,GAA3B,UAA4B,CAAoB;YAC5C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAES,wCAAqB,GAA/B;YACI,OAAO,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvD,CAAC;QAES,oCAAiB,GAA3B;YACI,IAAI,GAAG,GAAG,eAAe,CAAC;YAC1B,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;gBACxB,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;aACpF;YAED,GAAG,IAAK,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,OAAO,GAAG,CAAC;QACf,CAAC;QAES,uCAAoB,GAA9B;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,gCAAa,GAAvB,UAAwB,MAAoB;YACxC,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;YAC7B,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,OAAO,IAAI,CAAC;aACf;YAED,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC1B,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;gBAC7B,OAAO,IAAI,CAAC;aACf;YAED,OAAO,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9D,CAAC;QAES,uCAAoB,GAA9B;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3C,IAAI,OAAO,IAAI,IAAI;gBACf,OAAO,IAAI,CAAC;YAEhB,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YACnE,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;gBAChE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5B,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,kCAAe,GAAzB,UAA0B,QAAgC,EAAE,KAA4B;YAAxF,iBA4KC;YA3KG,IAAI,CAAC,IAAI,CAAC,SAAS;gBACf,OAAO;YAEX,IAAI,QAAQ,IAAI,IAAI,EAAE;gBAClB,QAAQ,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACvC,IAAI,QAAQ,IAAI,IAAI;oBAChB,OAAO;aACd;YAED,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,OAAO,GAA+B,IAAI,CAAC;YAC/C,IAAI,aAAa,GAAG,UAAS,EAAkB;gBAC3C,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBACtC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;oBAChB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACrB;YACL,CAAC,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI;gBACA,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC7C,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI,EAAE;oBAC1B,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,EAAE;wBAClC,IAAI,OAAO,GAAG,EAAE,CAAC;wBACjB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC/B,IAAI,UAAU,GAAG,EAAE,CAAC;wBACpB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;4BACpD,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;4BAC9B,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,EAAE;gCACpC,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCAC3B,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;oCAC5B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;oCACtB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oCACxB,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iCACxB;6BACJ;yBACJ;wBACD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;4BACnD,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;4BAC9B,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;gCACxB,EAAE,CAAC,OAAO,GAAG,KAAK,CAAC;gCACnB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;6BACvB;yBACJ;wBACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;wBAC7B,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE;4BACzC,OAAO,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;wBAC/B,CAAC,CAAC,CAAC;qBACN;oBACD,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,EAAE;wBAC9B,aAAa,CAAC,OAAO,CAAC,CAAC;wBACvB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;4BACpD,IAAI,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;4BAC/B,IAAI,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE;gCACrD,IAAI,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gCAC7B,IAAI,OAAO,IAAI,IAAI,EAAE;oCACjB,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;iCAC5B;6BACJ;yBACJ;qBACJ;oBAED,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE;wBAC7B,aAAa,CAAC,OAAO,CAAC,CAAC;wBACvB,IAAI,IAAI,GAAG,EAAE,CAAC;wBACd,IAAI,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;4BAClD,OAAO,EAAE,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wBACzD,CAAC,CAAC,CAAC;wBAEH,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;4BAC3B,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC3B,CAAC,CAAC,CAAC;wBAEH,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;4BAC/C,IAAI,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;4BAC1B,IAAI,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;4BAC7B,IAAI,OAAO,IAAI,IAAI,EAAE;gCACjB,IAAI,CAAC,IAAI,CAAC;oCACN,QAAQ,EAAE,EAAE,CAAC,EAAE;oCACf,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;iCACvB,CAAC,CAAC;6BACN;yBACJ;wBACD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;4BACpC,OAAO,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACjE,CAAC,CAAC,CAAC;wBACH,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;qBACvC;oBACD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBACnC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;iBAC/B;gBAED,IAAI,QAAQ,CAAC,WAAW,IAAI,IAAI;oBAC5B,KAAK,CAAC,WAAW,KAAK,KAAK;oBAC3B,IAAI,CAAC,SAAS,IAAI,IAAI;oBACtB,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE;oBACnC,EAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;oBACzD,EAAU,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;oBACxF,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;iBAC7C;gBAED,IAAI,QAAQ,CAAC,cAAc,IAAI,IAAI;oBAC/B,KAAK,CAAC,cAAc,KAAK,KAAK,EAAE;oBAChC,IAAI,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;oBACxE,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,KAAK,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;wBACxE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;qBAC9C;iBACJ;gBAED,IAAI,QAAQ,CAAC,YAAY,IAAI,IAAI;oBAC7B,KAAK,CAAC,YAAY,KAAK,KAAK;oBAC5B,IAAI,CAAC,eAAe,IAAI,IAAI;oBAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;oBACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;wBACtD,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAEjC,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;4BACxB,OAAO;yBACV;wBAED,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,KAAI,CAAC,UAAU,GAAG,eAAe,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,SAAA,MAAM,CAAC,CAAC;wBACrF,IAAI,MAAM,IAAI,IAAI,EAAE;4BAChB,OAAO;yBACV;wBAED,IAAI,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;wBACzC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBACzC,IAAI,SAAS,IAAI,IAAI,EAAE;4BACnB,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;yBAC5B;6BACI;4BACD,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;yBAChD;oBACL,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI,IAAI,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,EAAE;oBACvG,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;oBACvE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpB,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;wBAC/D,IAAI,QAAQ,IAAI,IAAI,EAAE;4BAClB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;4BACzB,IAAI;gCACA,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gCAC3C,IAAI;oCACA,IAAI,QAAQ,CAAC,gBAAgB,IAAI,IAAI,EAAE;wCACnC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;qCACjD;oCACD,IAAI,QAAQ,CAAC,eAAe,IAAI,IAAI;wCAChC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;wCACjF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;qCAClD;iCACJ;wCACO;oCACJ,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;oCAC9C,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;iCACrD;6BACJ;oCACO;gCACJ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;6BAC9B;yBACJ;qBACJ;iBACJ;aACJ;oBACO;gBACJ,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;aACzB;QACL,CAAC;QAES,kCAAe,GAAzB,UAA0B,KAA4B;YAClD,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE;gBACV,OAAO;aACV;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClE,CAAC;QAES,qCAAkB,GAA5B,UAA6B,KAA4B;YAAzD,iBA4FC;YA3FG,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC7C,IAAI,QAAQ,GAA0B,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE;gBACjG,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;gBACtB,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBAClD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBACtC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;oBACvC,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC7B,IAAI,CAAC,GAAwB;wBACzB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;qBAClB,CAAC;oBAEF,IAAI,KAAK,CAAC,gBAAgB,KAAK,KAAK,EAAE;wBAClC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;qBACpB;oBACD,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,EAAE;wBAC9B,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;qBAC5B;oBAED,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE;wBAC7B,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAG,EAAU,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,UAAS,CAAmB;4BAChG,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3C,CAAC,CAAC,CAAC,CAAC;wBAEJ,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnG;oBACD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC5B;aACJ;YAED,IAAI,KAAK,CAAC,cAAc,KAAK,KAAK,EAAE;gBAChC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;aAC9F;YAED,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE;gBACjG,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;aACzE;YAED,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE;gBAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,KAAK,EAAE,CAAC;gBACvE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;oBAC/D,IAAI,QAAQ,IAAI,IAAI,EAAE;wBAClB,QAAQ,CAAC,gBAAgB,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;wBACjD,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;qBACrD;iBACJ;aACJ;YAED,IAAI,KAAK,CAAC,YAAY,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnG,QAAQ,CAAC,YAAY,GAAG,EAAE,CAAC;gBAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;oBACtD,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACjC,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;wBACxB,OAAO;qBACV;oBAED,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,KAAI,CAAC,UAAU,GAAG,eAAe,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,SAAA,MAAM,CAAC,CAAC;oBACrF,IAAI,MAAM,IAAI,IAAI,EAAE;wBAChB,OAAO;qBACV;oBAED,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACzC,IAAI,KAAK,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC5F,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;oBACrC,IAAI,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE;wBAExE,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBAChD,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;wBAE1D,IAAI,WAAW,CAAC;wBAChB,IAAI,cAAc,IAAI,IAAI,EAAE;4BACxB,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;yBACrD;6BACI;4BACD,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;yBACnF;wBAED,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE;4BAC/B,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;gCAC5C,QAAQ,CAAC,eAAe,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;gCACpG,QAAQ,CAAC,eAAe,IAAI,WAAW,CAAC;6BAC3C;iCACI;gCACD,QAAQ,CAAC,eAAe,GAAG,WAAW,CAAC;6BAC1C;yBACJ;qBACJ;gBACL,CAAC,CAAC,CAAC;aACN;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,6BAAU,GAAV;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,0BAAO,GAAP;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAED,0BAAO,GAAP;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;QAED,iCAAc,GAAd;YACI,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QACxE,CAAC;QAxzCQ,QAAQ;YAFpB,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,SAAA,SAAS,CAAC,CAAC;YAC9E,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;WACzB,QAAQ,CAyzCpB;QAAD,eAAC;KAAA,AAzzCD,CAA+C,SAAA,MAAM,GAyzCpD;IAzzCY,iBAAQ,WAyzCpB,CAAA;AACL,CAAC,EAx0CS,QAAQ,KAAR,QAAQ,QAw0CjB;ACx0CD,IAAU,QAAQ,CAiVjB;AAjVD,WAAU,QAAQ;IAGd;QAAiD,8BAAyB;QAEtE,oBAAY,SAAiB,EAAE,OAAkB;YAAjD,YACI,kBAAM,SAAS,EAAE,OAAO,CAAC,SA+B5B;YA7BG,KAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;iBACjC,EAAE,CAAC,cAAc,GAAG,KAAI,CAAC,UAAU,EAAE,UAAC,CAAoB,EAAE,GAAQ;gBACjE,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO;oBACb,OAAO;gBAEX,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;oBACzB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;oBACnB,KAAI,CAAC,cAAc,EAAE,CAAC;oBACtB,OAAO;iBACV;gBAED,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE;oBAC/C,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;oBACnB,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxB,OAAO;iBACV;gBAED,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE;oBAC9C,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;oBACnB,KAAI,CAAC,cAAc,CAAE,EAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC9D,OAAO;iBACV;gBAED,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE;oBAC/C,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;oBACnB,KAAI,CAAC,cAAc,CAAE,EAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBACrE;YACL,CAAC,CAAC,CAAC;;QACX,CAAC;QAES,6BAAQ,GAAlB;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,4CAAuB,GAAjC;YACI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YAClC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClC,CAAC;QAES,oCAAe,GAAzB;YACI,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC;QAES,uCAAkB,GAA5B;YACI,IAAI,MAAM,GAAG,iBAAM,kBAAkB,WAAE,CAAC;YAExC,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;gBACzB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;aAC/B;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAIS,kCAAa,GAAvB;YACI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;gBACvB,OAAO,IAAI,CAAC,UAAU,CAAC;YAE3B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,mBAAmB,CAAC,CAAC;YAE3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACnB,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC5C;YAED,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAE1E,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,EAAE;gBACT,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;gBAC1B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC1C;iBACI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE;gBAClC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC1C;YAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAEvB,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;QAIS,mCAAc,GAAxB;YACI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;gBACxB,OAAO,IAAI,CAAC,WAAW,CAAC;YAE5B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;YAClE,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;gBACvC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;aAC1E;iBACI;gBACD,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,cAAc,CAAC,CAAC;gBAC9E,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;oBACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;aAC/C;YAED,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;QAIS,gCAAW,GAArB;YACI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;gBACrB,OAAO,IAAI,CAAC,QAAQ,CAAC;YAEzB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,iBAAiB,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;gBAClB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aACjE;iBACI;gBACD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,gBAAgB,CAAC,CAAC;gBAC7E,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;oBACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;aAC5C;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAES,wCAAmB,GAA7B;YACI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACjF,CAAC;QAES,+BAAU,GAApB;YAAA,iBAiBC;YAfG,IAAI,OAAO,GAAiB,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE;gBACjC,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE;oBACL,KAAI,CAAC,cAAc,EAAE,CAAC;gBAC1B,CAAC;gBACD,QAAQ,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,mBAAmB,EAAE,IAAI,KAAI,CAAC,QAAQ,EAA5C,CAA4C;aAC9D,CAAC,CAAC;YAEJ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAW,CAAC,CAAC,CAAC;YAExE,OAAO,OAAO,CAAC;QACnB,CAAC;QAES,qCAAgB,GAA1B,UAA2B,MAAgB;YAA3C,iBASC;YARG,OAAO;gBACH,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACpE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnE,QAAQ,EAAE,gBAAgB;gBAC1B,OAAO,EAAE;oBACL,KAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;aACJ,CAAC;QACN,CAAC;QAES,mCAAc,GAAxB;YACI,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAChC,CAAC;QAES,6BAAQ,GAAlB,UAAmB,UAAe;YAAlC,iBAeC;YAdG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAA,GAAG;gBAC3C,IAAI,MAAM,GAAI,EAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;gBAChE,IAAI,MAAM,IAAI,IAAI,EAAE;oBAChB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;wBACpB,MAAM,CAAC,UAAU,CAAC,KAAI,CAAC,kBAAkB,CAAC,CAAC;oBAC/C,CAAC,CAAC,CAAC;oBAEH,OAAO;iBACV;gBAED,MAAM,IAAK,EAAU,CAAC,yBAAyB,CAC3C,CAAC,CAAC,MAAM,CAAC,oCAAoC,EACxC,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACP,CAAC;QAES,mCAAc,GAAxB,UAAyB,QAAgB,EAAE,UAAe;YAA1D,iBAmBC;YAjBG,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;gBACjC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO;aACV;YAED,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,UAAA,GAAG;gBACjC,IAAI,MAAM,GAAI,EAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;gBAChE,IAAI,MAAM,IAAI,IAAI,EAAE;oBAChB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;wBACpB,OAAA,MAAM,CAAC,UAAU,CAAC,KAAI,CAAC,kBAAkB,CAAC;oBAA1C,CAA0C,CAAC,CAAC;oBAChD,OAAO;iBACV;gBAED,MAAM,IAAK,EAAU,CAAC,yBAAyB,CAC3C,CAAC,CAAC,MAAM,CAAC,oCAAoC,EACxC,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACP,CAAC;QAIS,+BAAU,GAApB;YACI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBACpB,OAAO,IAAI,CAAC,OAAO,CAAC;YAExB,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,gBAAgB,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAChB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;gBAE7B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAEhE,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAES,mCAAc,GAAxB;YACI,IAAI,GAAG,GAAG,iBAAM,cAAc,WAAE,CAAC;YACjC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,CAAC;YACpE,OAAO,GAAG,CAAC;QACf,CAAC;QAES,gCAAW,GAArB;YACI,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC;QAES,gCAAW,GAArB,UAAsB,QAAgB,EAAE,MAAmB;YAA3D,iBAcC;YAbG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;gBAC1C,IAAI,IAAI,GAAG,EAAE,CAAC;gBAEd,IAAI,QAAQ,KAAK,KAAI,CAAC,WAAW,EAAE;oBAC/B,IAAI,GAAG,QAAQ,GAAG,GAAG,CAAC;gBAE1B,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,IAAK,MAAc,CAAC,QAAQ,IAAI,IAAI,CAAC;oBACtD,IAAI,IAAI,OAAO,GAAI,MAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;;oBAEtD,IAAI,IAAI,KAAK,CAAC;gBAElB,OAAO,IAAI,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC;QAES,wCAAmB,GAA7B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,wCAAmB,GAA7B;YACI,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClD,OAAO,gBAAgB,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACjG,CAAC;QAES,2CAAsB,GAAhC,UAAiC,MAAmB;YAChD,IAAI,IAAI,CAAC,QAAQ;gBACb,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;QAES,+BAAU,GAApB,UAAqB,MAAmB;YAAxC,iBAOC;YANG,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,UAAC,CAAC,EAAE,GAAG;gBAC3D,KAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/B,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;QAES,qCAAgB,GAA1B,UAA2B,QAAgB,EAAE,MAAmB;YAAhE,iBAYC;YAXG,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;gBACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxB,OAAO;aACV;YAED,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,UAAC,CAAC,EAAE,GAAG;gBAC3D,KAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/B,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAES,uCAAkB,GAA5B,UAA6B,QAAgB,EAAE,QAAqC;YAApF,iBAYC;YAXG,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBAChC,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;gBAC3C,IAAI,EAAE,UAAA,CAAC;oBACH,KAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACnC,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;aACJ,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QAES,qCAAgB,GAA1B;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,wCAAmB,GAA7B,UAA8B,QAAgB;YAC1C,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE;gBAC/B,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAEnC,OAAO,EAAE,CAAC;QACd,CAAC;QAES,qCAAgB,GAA1B,UAA2B,QAAgB;YAEvC,IAAI,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;gBACjC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;aAC/B;YAED,OAAO,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAQ,CAAC;QAC5D,CAAC;QAIS,kCAAa,GAAvB;YAEI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;gBACvB,OAAO,IAAI,CAAC,UAAU,CAAC;YAE3B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,mBAAmB,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;gBAEhC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAE5E,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;QA5UQ,UAAU;YADtB,SAAA,UAAU,CAAC,aAAa,CAAC,qBAAqB,CAAC;WACnC,UAAU,CA6UtB;QAAD,iBAAC;KAAA,AA7UD,CAAiD,SAAA,QAAQ,GA6UxD;IA7UY,mBAAU,aA6UtB,CAAA;AACL,CAAC,EAjVS,QAAQ,KAAR,QAAQ,QAiVjB;ACjVD,IAAU,QAAQ,CAkqBjB;AAlqBD,WAAU,QAAQ;IAId;QAAiF,mCAAyB;QAKtG,yBAAY,GAAW,EAAE,GAAc;YAAvC,YACI,kBAAM,GAAG,EAAE,GAAG,CAAC,SAIlB;YAFG,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAClC,KAAI,CAAC,WAAW,EAAE,CAAC;;QACvB,CAAC;QAES,uCAAa,GAAvB;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,sCAAY,GAAtB;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,qCAAW,GAArB;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACnB,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;iBAC5B;gBACD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBACjC,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrC,IAAI,MAAM,IAAI,IAAI,EAAE;wBAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC9B;iBACJ;aACJ;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACnF,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAED,sCAAY,GAAZ,UAAa,QAAsB,EAAE,MAAW;YAC5C,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;gBAEnD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,CAAC;QAED,sCAAY,GAAZ,UAAa,MAAW,EAAE,QAAsB;YAC5C,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAES,oCAAU,GAApB;YAAA,iBAwBC;YAvBG,IAAI,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;gBAChC,OAAO,IAAI,CAAC;aACf;YAED,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,OAAO,GAAiB,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,MAAM,CAAC;gBACnD,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,UAAU,CAAC;gBACV,OAAO,CAAC,CAAC,EAAE,CAAC;YAChB,CAAC,EAAE,UAAU,EAAE;gBACX,OAAO,EAAE,CAAC,UAAU,CAAC;YACzB,CAAC,EAAE,UAAC,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE;oBACrB,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;oBAClB,KAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;iBAChC;YACL,CAAC,EAAE,IAAI,EAAE;gBACL,KAAI,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC,CAAC,CAAC,CAAC;YAEJ,OAAO,OAAO,CAAC;QACnB,CAAC;QAES,6CAAmB,GAA7B,UAA8B,IAAW;QACzC,CAAC;QAES,0CAAgB,GAA1B;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,oCAAoC,CAAC,EAAE,YAAY,CAAC,CAAC;QACxF,CAAC;QAES,+CAAqB,GAA/B;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,yCAAe,GAAzB;YACI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC5E,IAAI,MAAM,GAAG,iBAAM,eAAe,WAAE,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC3C,MAAM,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC;QAClB,CAAC;QAES,sCAAY,GAAtB,UAAuB,IAAW;YAC9B,IAAI,CAAC,iBAAM,YAAY,YAAC,IAAI,CAAC,EAAE;gBAC3B,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,OAAO,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC;gBAC1D,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,EAAE;oBACpB,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;oBACnB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;oBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACnC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACjB,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;4BACd,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;yBACvB;qBACJ;iBACJ;gBAED,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACP,CAAC;QAES,4CAAkB,GAA5B;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,2CAAiB,GAA3B,UAA4B,QAA6B;YACrD,QAAQ,GAAG,iBAAM,iBAAiB,YAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;gBAC9D,OAAO,CAAC,CAAC,EAAE,CAAC;YAChB,CAAC,EAAE,UAAU,EAAE;gBACX,OAAO,EAAE,CAAC,QAAQ,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;YAC9B,OAAO,QAAQ,CAAC;QACpB,CAAC;QAES,iCAAO,GAAjB,UAAkB,CAAoB,EAAE,GAAW,EAAE,IAAY;YAC7D,iBAAM,OAAO,YAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAE5B,IAAI,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE;gBACzB,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;oBACrE,OAAO,CAAC,CAAC,EAAE,CAAC;gBAChB,CAAC,CAAC,CAAC;aACN;YAED,IAAI,CAAC,CAAC,kBAAkB,EAAE,EAAE;gBACxB,OAAO;aACV;YAED,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;gBAEnB,IAAI,IAAI,CAAC,SAAS;oBACd,OAAO;gBAEX,IAAI,gBAAgB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAChF,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,CAAC,gBAAgB,CAAC;gBACvD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACxB,IAAI;oBACA,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,gBAAgB,EAAE;wBACvC,IAAI,CAAC,UAAU,GAAG,CAAC,gBAAgB,CAAC;wBACpC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;wBACpC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;qBAClC;oBACD,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC;oBAC7E,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,IAAI,CAAC,WAAW,EAAE,CAAC;iBACtB;wBACO;oBACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;iBACzB;gBACD,IAAI,UAAU,EAAE;oBACZ,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;iBACzC;aACJ;QACL,CAAC;QAES,yCAAe,GAAzB;YACI,QAAQ,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;gBACvD,OAAO,CAAC,CAAC,UAAU,CAAC;YACxB,CAAC,CAAC,CAAC;QACP,CAAC;QAES,qCAAW,GAArB;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC9C,IAAI,CAAC,UAAU,EAAE;gBACb,OAAO;aACV;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI;gBACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrD,IAAI,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;wBAC/C,IAAI,MAAM,KAAK,IAAI,CAAC,wBAAwB,EAAE;4BAC1C,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC;4BACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;yBAClC;wBACD,SAAS;qBACZ;oBACD,IAAI,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;oBACpD,IAAI,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;oBAChE,IAAI,WAAW,KAAK,IAAI,CAAC,wBAAwB,IAAI,QAAQ,KAAK,IAAI,CAAC,UAAU,EAAE;wBAC/E,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,KAAK,QAAQ,CAAC;wBAClD,IAAI,CAAC,wBAAwB,GAAG,WAAW,CAAC;wBAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;wBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;wBAC/B,IAAI,cAAc,EAAE;4BAChB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;yBAClC;qBACJ;iBACJ;aACJ;oBACO;gBACJ,IAAI,CAAC,SAAS,EAAE,CAAC;aACpB;QACL,CAAC;QAES,gDAAsB,GAAhC,UAAiC,IAAW;YACxC,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,+CAAqB,GAA/B,UAAgC,IAAW,EAAE,QAAiB;YAC1D,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;oBAC7B,MAAM,GAAG,IAAI,CAAC;oBACd,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC;oBAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAY,CAAC,CAAC;oBAC3C,IAAI,CAAC,mBAAmB,CAAC,GAAY,CAAC,CAAC;iBAC1C;gBACD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBACzB,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAY,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC;iBACzE;aACJ;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAES,0CAAgB,GAA1B;YACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;oBACjB,OAAO,KAAK,CAAC;iBAChB;aACJ;YAED,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;QAES,gDAAsB,GAAhC,UAAiC,IAAW;YACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;wBACjB,OAAO,KAAK,CAAC;qBAChB;oBAED,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,GAAY,CAAC,EAAE;wBAC5C,OAAO,KAAK,CAAC;qBAChB;iBACJ;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,sCAAY,GAAtB;YACI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;QAES,gDAAsB,GAAhC,UAAiC,IAAW;YACxC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,GAAG,CAAC,UAAU,EAAE;wBAChB,OAAO,IAAI,CAAC;qBACf;oBACD,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAY,CAAC,EAAE;wBAC3C,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YACD,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,oCAAU,GAApB;YAAA,iBA6BC;YA5BG,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC;oBACjF,OAAO,IAAI,CAAC,IAAI,CAAC;gBACrB,CAAC,EAAE,UAAU,CAAC;oBACV,OAAO,CAAC,CAAC,EAAE,CAAC;gBAChB,CAAC,EAAE,UAAA,GAAG;oBACF,IAAI,GAAG,GAAG,WAAW,CAAC;oBACtB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;oBACpB,IAAI,IAAI,CAAC,YAAY,EAAE;wBACnB,OAAO,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;qBAChC;oBACD,IAAI,UAAU,GAAG,KAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC9C,IAAI,IAAI,CAAC,UAAU,EAAE;wBACjB,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;4BAC9C,GAAG,IAAI,UAAU,CAAC;yBACrB;6BACI;4BACD,GAAG,IAAI,UAAU,CAAC;yBACrB;qBACJ;oBACD,IAAI,KAAI,CAAC,SAAS;wBACd,GAAG,IAAI,WAAW,CAAC;oBACvB,OAAO,eAAe,GAAG,GAAG,GAAG,WAAW,GAAG,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACvE,CAAC,CAAC;aACL,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACnB,CAAC;QAES,qCAAW,GAArB,UAAsB,GAA2B;YAC7C,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QAES,yCAAe,GAAzB;YACI,IAAI,GAAG,GAAG,iBAAM,eAAe,WAAE,CAAC;YAClC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC;YAC3B,OAAO,GAAG,CAAC;QACf,CAAC;QAES,mCAAS,GAAnB;YACI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;gBACxB,OAAO;aACV;YACD,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;gBACxC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;aAC1B;YACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBACrB,IAAI,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE;oBAChC,OAAO,CAAC,CAAC,CAAC;iBACb;gBACD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;oBAChC,OAAO,CAAC,CAAC;iBACZ;gBACD,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,KAAK,CAAC,EAAE;oBACT,OAAO,CAAC,CAAC;iBACZ;gBACD,OAAQ,EAAU,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QAES,wCAAc,GAAxB;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAIM,sCAAY,GAAnB;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAEM,sCAAY,GAAnB,UAAoB,KAAc;YAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE;gBAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;aACvB;QACL,CAAC;QAEO,mCAAS,GAAjB;YACI,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE;oBACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBAC1B;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,sBAAW,kCAAK;iBAAhB;gBACI,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,CAAC;iBAqCD,UAAiB,CAAW;gBACxB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;;;WAvCA;QAEO,mCAAS,GAAjB,UAAkB,KAAwB;YAEtC,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE;oBAC1B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;yBACnB,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAf,CAAe,CAAC;yBACzB,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,IAAI,IAAI,EAAT,CAAS,CAAC,CAAC;iBAC/B;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;iBAC7B;aACJ;YAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI;gBACA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;oBACtC,IAAI,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;oBACrB,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC/B,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE;wBAC5B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;wBACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;qBACvC;iBACJ;gBACD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,EAAE,CAAC;aACpB;oBACO;gBACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;aACzB;QACL,CAAC;QA1aQ,eAAe;YAF3B,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,0BAA0B,EAAE,CAAC,SAAA,aAAa,EAAE,SAAA,aAAa,EAAE,SAAA,SAAS,CAAC,CAAC;YACzG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;WACzB,eAAe,CA+a3B;QAAD,sBAAC;KAAA,AA/aD,CAAiF,SAAA,QAAQ,GA+axF;IA/aY,wBAAe,kBA+a3B,CAAA;IAgBD;QAAoD,qCAAwE;QAKxH,2BAAY,GAAW,EAAE,OAAiC;YAA1D,YACI,kBAAM,GAAG,EAAE,OAAO,CAAC,SAOtB;YALG,KAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,KAAI,CAAC,cAAc,CAAC,KAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC9C,KAAI,CAAC,WAAW,EAAE,CAAC;YACnB,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,GAAG,KAAI,CAAC,YAAY,EAAE,EAAE,KAAI,CAAC,UAAU,EACtE,cAAM,OAAA,KAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;;QAClC,CAAC;QAES,uCAAW,GAArB;YACI,IAAI,IAAI,CAAC,iBAAiB;gBACtB,iBAAM,WAAW,WAAE,CAAC;QAC5B,CAAC;QAES,wCAAY,GAAtB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAClC,CAAC;QAES,sCAAU,GAApB;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,iBAAM,UAAU,WAAE,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;QAES,mDAAuB,GAAjC;YAAA,iBAOC;YANG,iBAAM,uBAAuB,WAAE,CAAC;YAEhC,QAAQ,CAAC,SAAS,CAAC,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,UAAC,KAAK,EAAE,IAAI;gBAC3E,KAAI,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACzE,KAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACP,CAAC;QAES,4CAAgB,GAA1B;YACI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa;gBAC3B,OAAO,IAAI,CAAC;YAEhB,OAAO,iBAAM,gBAAgB,WAAE,CAAC;QACpC,CAAC;QAES,wCAAY,GAAtB,UAAuB,KAAc;YAEjC,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAElC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;gBAE3B,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE;oBAC3C,OAAO,EAAE,CAAC;iBACb;gBAED,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAElC,OAAO,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC;gBACjB,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACP,CAAC;QAES,uCAAW,GAArB,UAAsB,KAAc;YAChC,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAEjC,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,EAAE;gBAC3B,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC;gBACjB,IAAI,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACP,CAAC;QAES,0CAAc,GAAxB,UAAyB,MAAuB;YAC5C,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,CAAC;QAES,wCAAY,GAAtB;YACI,IAAI,MAAM,GAAG,CAAC,CAAC,SAAS,CAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACxD,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,CAA+B;gBACpD,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;gBACnD,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;gBACvD,MAAM,EAAE,IAAI;aACf,CAAA,EAJwB,CAIxB,CAAC,CAAC;QACP,CAAC;QAES,wCAAY,GAAtB,UAAuB,IAA0B;YAC7C,OAAO,iBAAM,YAAY,YAAC,IAAI,CAAC;gBAC3B,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC7B,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;yBACxC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAC;QAES,0CAAc,GAAxB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACrC,CAAC;QAES,2CAAe,GAAzB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACpC,CAAC;QAED,sBAAI,0CAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBAkCD,UAAgB,KAAa;gBACzB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;;;WApCA;QAES,+CAAmB,GAA7B,UAA8B,MAA4B;YACtD,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAIS,0CAAc,GAAxB,UAAyB,KAAa;YAAtC,iBAiBC;YAfG,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBACxB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;oBAC1B,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC3B;gBACD,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;gBAChC,OAAO;aACV;YAED,IAAI,CAAC,WAAW,GAAG,IAAI,QAAQ,CAAC,kBAAkB,CAAc,SAAA,MAAM,EAAE,IAAI,EAAE,UAAA,CAAC;gBAC3E,KAAI,CAAC,gBAAgB,CAAC,KAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;QACrC,CAAC;QAES,2CAAe,GAAzB,UAA0B,KAAa;YACnC,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAMS,4CAAgB,GAA1B;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3E,CAAC;QAED,sBAAI,2CAAY;iBAAhB;gBACI,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,CAAC;iBAMD,UAAiB,KAAa;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;;;WARA;QAES,4CAAgB,GAA1B,UAA2B,KAAa;YACpC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;QACtC,CAAC;QAMS,4CAAgB,GAA1B;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QACrC,CAAC;QAED,sBAAI,2CAAY;iBAAhB;gBACI,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,CAAC;iBAUD,UAAiB,KAAU;gBACvB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;;;WAZA;QAES,4CAAgB,GAA1B,UAA2B,KAAU;YACjC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE;gBACrC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;gBAClC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAMS,2CAAe,GAAzB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACpC,CAAC;QAED,sBAAI,0CAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBAMD,UAAgB,KAAa;gBACzB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;;;WARA;QAES,2CAAe,GAAzB,UAA0B,KAAa;YACnC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;QACrC,CAAC;QAMS,2CAAe,GAAzB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACpC,CAAC;QAED,sBAAI,0CAAW;iBAAf;gBACI,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;iBAUD,UAAgB,KAAU;gBACtB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;;;WAZA;QAES,2CAAe,GAAzB,UAA0B,KAAU;YAChC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,EAAE;gBACpC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;gBACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAzNQ,iBAAiB;YAD7B,SAAA,UAAU,CAAC,cAAc,CAAC,4BAA4B,CAAC;WAC3C,iBAAiB,CA8N7B;QAAD,wBAAC;KAAA,AA9ND,CAAoD,eAAe,GA8NlE;IA9NY,0BAAiB,oBA8N7B,CAAA;AACL,CAAC,EAlqBS,QAAQ,KAAR,QAAQ,QAkqBjB;AClqBD,IAAU,QAAQ,CAoFjB;AApFD,WAAU,QAAQ;IACd;QAA8C,kCAAyB;QACnE,wBAAY,SAAiB,EAAE,OAAkB;YAAjD,YACI,kBAAM,SAAS,EAAE,OAAO,CAAC,SAK5B;YAHG,KAAI,CAAC,aAAa,EAAE,CAAC;YACrB,KAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,KAAI,CAAC,WAAW,EAAE,CAAC;;QACvB,CAAC;QAED,gCAAO,GAAP;YACI,IAAI,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;aACpB;YAEV,IAAI,IAAI,CAAC,OAAO,EAAE;gBACL,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACvB;YAEV,IAAI,IAAI,CAAC,SAAS,EAAE;gBACP,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;YAED,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAQS,gCAAO,GAAjB;YACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACP,CAAC;QAES,0CAAiB,GAA3B;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,4CAAmB,GAA7B;YACI,OAAO,EAAE,CAAC;QACd,CAAC;QAES,iCAAQ,GAAlB;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,OAAO;aACV;YACD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;QAES,oCAAW,GAArB;YACI,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,OAAO;aACV;YACD,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,OAAO,GAAG,IAAI,SAAA,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;QAES,sCAAa,GAAvB;YACI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;aACjE;QACL,CAAC;QAES,wCAAe,GAAzB;YACI,IAAI,IAAI,CAAC,SAAS,EAAE;gBACf,IAAI,CAAC,SAAiB,CAAC,QAAQ,EAAE,CAAC;aACtC;QACL,CAAC;QAES,qCAAY,GAAtB;YACI,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAC7D,CAAC;QACL,qBAAC;IAAD,CAAC,AAlFD,CAA8C,SAAA,eAAe,GAkF5D;IAlFY,uBAAc,iBAkF1B,CAAA;AACL,CAAC,EApFS,QAAQ,KAAR,QAAQ,QAoFjB;ACpFD,IAAU,QAAQ,CA0JjB;AA1JD,WAAU,QAAQ;IAGd;QAAoD,iCAAwB;QAKxE,uBAAY,SAAiB,EAAE,OAAkB;YAAjD,YACI,kBAAM,SAAS,EAAE,OAAO,CAAC,SAM5B;YAJG,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,KAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,KAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B;;QACL,CAAC;QAED,+BAAO,GAAP;YACI,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC5B;YACD,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACzB;YACD,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAES,wCAAgB,GAA1B;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACnB,OAAO;aACV;YACD,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBACzD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;aACvE;QACL,CAAC;QAES,6CAAqB,GAA/B;YAAA,iBAcC;YAbG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,KAAK,GAAG,KAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;oBACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;iBAC5B;gBACD,OAAO,KAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,UAAA,SAAS;oBACpD,KAAI,CAAC,YAAY,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAChE,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;wBACzD,KAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;qBACvE;oBACD,OAAO,KAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC1C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAES,yCAAiB,GAA3B;YACI,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;aACxC;QACL,CAAC;QAES,uCAAe,GAAzB;YAAA,iBAIC;YAHG,OAAO,iBAAM,eAAe,WAAE;iBACzB,IAAI,CAAC,cAAM,OAAA,KAAI,CAAC,qBAAqB,EAAE,EAA5B,CAA4B,CAAC;iBACxC,IAAI,CAAC,cAAM,OAAA,KAAI,CAAC,iBAAiB,EAAE,EAAxB,CAAwB,CAAC,CAAC;QAC9C,CAAC;QAES,kCAAU,GAApB;YACI,IAAI,UAAU,GAAI,EAAU,CAAC,aAAa,CACrC,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;YAExE,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;gBACxB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;aAC9B;YACD,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1E,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,EAAE;gBACT,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;aACjC;YACD,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAC3B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC1C;iBACI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAChC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aAC1C;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,8CAAsB,GAAhC;YACI,OAAO;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBAC9B,IAAI,EAAE,CAAC;gBACP,aAAa,EAAE,KAAK;gBACpB,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG;aACtD,CAAC;QACN,CAAC;QAES,mDAA2B,GAArC;YAAA,iBAUC;YATG,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,UAAA,aAAa;gBAClD,OAAO;oBACH,QAAQ,EAAE,KAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,aAAa;oBACpB,IAAI,EAAE,CAAC;oBACP,aAAa,EAAE,KAAK;oBACpB,eAAe,EAAE,QAAQ,GAAG,KAAI,CAAC,UAAU,EAAE,GAAG,GAAG;iBACtD,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC;QAES,wCAAgB,GAA1B;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAES,6CAAqB,GAA/B;YAAA,iBAKC;YAJG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC;QAES,qCAAa,GAAvB;YACI,IAAI,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAClC;YACD,OAAO,MAAe,CAAC;QAC3B,CAAC;QAES,kCAAU,GAApB;YACI,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAES,oCAAY,GAAtB;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAES,kCAAU,GAApB,UAAqB,KAAY;YAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QAES,oCAAY,GAAtB,UAAuB,KAAU;YAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;QAES,0CAAkB,GAA5B;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;QAnJQ,aAAa;YADzB,SAAA,UAAU,CAAC,aAAa,CAAC,wBAAwB,CAAC;WACtC,aAAa,CAsJzB;QAAD,oBAAC;KAAA,AAtJD,CAAoD,SAAA,cAAc,GAsJjE;IAtJY,sBAAa,gBAsJzB,CAAA;AACL,CAAC,EA1JS,QAAQ,KAAR,QAAQ,QA0JjB;AC1JD,IAAU,QAAQ,CA6pCjB;AA7pCD,WAAU,QAAQ;IAGd;QAAA;QACA,CAAC;QADY,WAAW;YADvB,SAAA,UAAU,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;WACxC,WAAW,CACvB;QAAD,kBAAC;KAAA,AADD,IACC;IADY,oBAAW,cACvB,CAAA;IAOD;QAAmD,gCAAyB;QAqBxE,sBAAY,GAAc;YAA1B,YACI,kBAAM,GAAG,CAAC,SAMb;YAJG,IAAI,CAAC,KAAI,CAAC,aAAa,EAAE,EAAE;gBACvB,KAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,KAAI,CAAC,oBAAoB,EAAE,CAAC;aAC/B;;QACL,CAAC;QAES,sCAAe,GAAzB;YAAA,iBAIC;YAHG,OAAO,iBAAM,eAAe,WAAE;iBACzB,IAAI,CAAC,cAAM,OAAA,KAAI,CAAC,qBAAqB,EAAE,EAA5B,CAA4B,CAAC;iBACxC,IAAI,CAAC,cAAM,OAAA,KAAI,CAAC,yBAAyB,EAAE,EAAhC,CAAgC,CAAC,CAAC;QACtD,CAAC;QAED,8BAAO,GAAP;YAEI,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;aAC5B;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;aAChC;YAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAEpB,iBAAM,OAAO,WAAE,CAAC;QACpB,CAAC;QAES,iCAAU,GAApB;YACI,OAAO,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;QAES,iCAAU,GAApB,UAAqB,MAAW;YAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QACzC,CAAC;QAES,mCAAY,GAAtB;YACI,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAES,mCAAY,GAAtB,UAAuB,KAAU;YAC7B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC1B,CAAC;QAES,8CAAuB,GAAjC;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChF,CAAC;QAES,qCAAc,GAAxB;YACI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;gBACpB,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;aAC7F;iBACI;gBACD,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;oBACjF,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBACtG,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3D,OAAO,CAAC,CAAC,MAAM,CAAC,WAAW,EACvB,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;aACvF;QACL,CAAC;QAES,kCAAW,GAArB;YACI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,CAAC;QAES,kCAAW,GAArB;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,iCAAU,GAApB;YACI,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9D,CAAC;QAES,gCAAS,GAAnB;YACI,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE;gBAC7B,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACpD,IAAI,iBAAiB,EAAE;gBACnB,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,CAAC,CAAC;aACjD;YAED,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAC1D,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,KAAK,CAAC;aAChB;YAED,OAAO,KAAK,GAAG,CAAC,CAAC;QACrB,CAAC;QAES,4BAAK,GAAf;YACI,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC;QACvC,CAAC;QAES,qCAAc,GAAxB;YACI,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5C,CAAC;QAES,uCAAgB,GAA1B,UAA2B,QAA4C;YACnE,OAAO,EAAE,CAAC;QACd,CAAC;QAES,oCAAa,GAAvB,UAAwB,OAAuC,EAAE,QAA4C;YACzG,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAES,+BAAQ,GAAlB,UAAmB,QAA4C;YAA/D,iBA2BC;YA1BG,IAAI,IAAI,GAAG,IAAI,CAAC;YAEhB,IAAI,OAAO,GAAkB;gBACzB,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;aAChC,CAAC;YAEF,IAAI,WAAW,GAAqC;gBAChD,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS;gBACtC,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,UAAA,QAAQ;oBACf,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAC/B,IAAI,QAAQ,IAAI,IAAI,EAAE;wBAClB,QAAQ,CAAC,QAAQ,CAAC,CAAC;qBACtB;oBACD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;4BACzC,QAAQ,EAAE,OAAO,CAAC,QAAQ;4BAC1B,MAAM,EAAE,KAAI,CAAC,MAAM;4BACnB,IAAI,EAAE,QAAQ;yBACjB,CAAC,CAAC,CAAC;gBACR,CAAC;aACJ,CAAC;YAEF,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAEtD,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAES,sCAAe,GAAzB,UAA0B,QAAwB;QAClD,CAAC;QAES,4BAAK,GAAf,UAAuB,QAAwC;YAC3D,OAAQ,EAAU,CAAC,aAAa,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxF,CAAC;QAIS,oCAAa,GAAvB;YAEI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;gBACvB,OAAO,IAAI,CAAC,UAAU,CAAC;YAE3B,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,mBAAmB,CAAC,CAAC;YAErD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEvD,0BAA0B;YAC1B,IAAI,IAAI,GAAI,EAAU,CAAC,eAAe,CAAE,EAAU,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1E,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC;gBACP,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAElC,+DAA+D;YAC/D,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;gBACzD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBACtC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC9B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE3C,OAAO,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC;QAIS,iCAAU,GAApB;YACI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBACpB,OAAO,IAAI,CAAC,OAAO,CAAC;YAExB,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,gBAAgB,CAAC,CAAC;YAE9C,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAEhD,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACjD,CAAC;QAIS,2CAAoB,GAA9B;YACI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI;gBAC9B,OAAO,IAAI,CAAC,iBAAiB,CAAC;YAElC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC;YAEnE,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBAC7E,IAAI,CAAC,iBAAiB,GAAG,KAAK,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;YAElE,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAClC,CAAC;QAES,yCAAkB,GAA5B;YACI,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,wBAAwB,CAAC,CAAC;YAEtD,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBACtB,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAE/B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC;QAIS,wCAAiB,GAA3B;YACI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI;gBAC3B,OAAO,IAAI,CAAC,cAAc,CAAC;YAE/B,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,iBAAiB,CAAC,CAAC;YAE/C,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;gBACxB,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBAC1C,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;aACnF;iBACI;gBACD,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,gBAAgB,CAAC,CAAC;gBACtE,IAAI,EAAE,IAAI,IAAI;oBACV,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC9B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;aAC5B;YAED,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;QAIS,sCAAe,GAAzB;YACI,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI;gBACzB,OAAO,IAAI,CAAC,YAAY,CAAC;YAE7B,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,qBAAqB,CAAC,CAAC;YAEnD,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBACtB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;gBAExC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;YAE/B,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;QAIS,oCAAa,GAAvB;YACI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;gBACvB,OAAO,IAAI,CAAC,UAAU,CAAC;YAE3B,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,mBAAmB,CAAC,CAAC;YACjD,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;gBAEtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAE3B,OAAO,IAAI,CAAC,UAAU,CAAC;QAC3B,CAAC;QAIS,0CAAmB,GAA7B;YACI,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI;gBAC7B,OAAO,IAAI,CAAC,gBAAgB,CAAC;YAEjC,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,yBAAyB,CAAC,CAAA;YACtD,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBACtB,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;gBAE5C,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;YAEvC,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;QAES,2CAAoB,GAA9B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAIS,iCAAU,GAApB;YACI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBACpB,OAAO,IAAI,CAAC,OAAO,CAAC;YAExB,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAA,gBAAgB,CAAC,CAAC;YAC9C,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBACtB,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;gBAEnC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAEhE,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;QAED,2BAAI,GAAJ,UAAK,UAAe,EAAE,IAAgB,EAAE,IAAgC;YAAxE,iBAuCC;YArCG,IAAI,MAAM,GAAG;gBAET,IAAI,UAAU,IAAI,IAAI,EAAE;oBACpB,KAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;oBACtB,IAAI,IAAI,IAAI,EAAE,CAAC;oBACf,OAAO;iBACV;gBAED,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrC,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,EAAE;oBACpD,IAAI,QAAQ,GAAG,UAAU,CAAC;oBAE1B,KAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,QAAQ;wBACtC,IAAI,IAAI;4BACJ,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBACnC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAET,OAAO;iBACV;gBAED,IAAI,MAAM,GAAG,UAAU,IAAI,IAAI,MAAM,EAAE,CAAC;gBACxC,KAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACtC,IAAI,IAAI,IAAI,EAAE,CAAC;YACnB,CAAC,CAAC;YAEF,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,MAAM,EAAE,CAAC;gBACT,OAAO;aACV;YAED,IAAI;gBACA,MAAM,EAAE,CAAC;aACZ;YACD,OAAO,GAAG,EAAE;gBACR,IAAI,EAAE,GAAI,EAAE,CAAC,SAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,EAAE,CAAC,CAAC;aACZ;QACL,CAAC;QAED,2CAAoB,GAApB,UAAqB,OAAiB;YAClC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,8CAAuB,GAAvB,UAAwB,MAAa,EAAE,OAAiB;YACpD,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAES,mCAAY,GAAtB,UAAuB,IAAS;YAC5B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACzC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC;QAES,iCAAU,GAApB,UAAqB,MAAa;YAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAEnC,IAAI,OAAO,IAAI,IAAI;gBACf,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAEvC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAExB,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;mCACnB,CAAC,eAAwB,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAClC;QACL,CAAC;QAES,uCAAgB,GAA1B,UAA2B,MAAa;YACpC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACtC,CAAC;QAES,sCAAe,GAAzB;YACI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;QAEM,4CAAqB,GAA5B,UAA6B,QAAa,EAAE,OAAiB;YAA7D,iBAQC;YAPG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAClB,UAAA,QAAQ,IAAI,OAAA,MAAM,CAAC,UAAU,CAAC,cAAM,OAAA,KAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAxB,CAAwB,EAAE,CAAC,CAAC,EAApD,CAAoD,EAChE;gBACI,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;oBAC9B,KAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;iBACzB;YACL,CAAC,CAAC,CAAC;QACX,CAAC;QAES,oCAAa,GAAvB,UAAwB,IAA6B;QACrD,CAAC;QAES,yCAAkB,GAA5B,UAA6B,EAAO,EAAE,QAAqD;YACvF,OAAO,EAAE,CAAC;QACd,CAAC;QAES,yCAAkB,GAA5B,UAA6B,EAAO;YAChC,IAAI,OAAO,GAAoB,EAAE,CAAC;YAClC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC;QACnB,CAAC;QAES,iCAAU,GAApB;YACI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,+BAAQ,GAAR,UAAS,EAAO,EAAE,QAAsD,EAAE,IAAiB;YAA3F,iBAmBC;YAlBG,IAAI,WAAW,GAA8C;gBACzD,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW;gBACxC,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBACpC,SAAS,EAAE,UAAA,QAAQ;oBACf,KAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC5B,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,CAAC;gBACD,SAAS,EAAE;oBACP,IAAI,KAAI,CAAC,SAAS,IAAI,IAAI,EAAE;wBACxB,CAAC,CAAC,qBAAqB,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC;qBAC3C;gBACL,CAAC;aACJ,CAAC;YAEF,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACxD,IAAI,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACtD,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvD,CAAC;QAES,sCAAe,GAAzB,UAA0B,OAAgD,EAAE,QAAqD,EAAE,IAAgB;YAC/I,IAAI,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAES,2CAAoB,GAA9B;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACnB,OAAO;aACV;YACD,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAES,gDAAyB,GAAnC;YAAA,iBAYC;YAXG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAE1B,IAAI,KAAK,GAAG,KAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;oBACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;iBAC5B;gBAED,OAAO,KAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,UAAA,SAAS;oBACpD,KAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAES,iDAA0B,GAApC,UAAqC,SAA8B;YAC/D,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAEtC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,WAAW,KAAK,IAAI,EAAtB,CAAsB,CAAC;gBACpD,OAAO;YAEX,IAAI,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;iBACzB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,kBAAkB,CAAC;iBAC9C,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE/B,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;YAErD,IAAI,KAAK,GAAmB,EAAE,CAAC;YAC/B,KAAkB,UAAe,EAAf,KAAA,SAAS,CAAC,KAAK,EAAf,cAAe,EAAf,IAAe,EAAE;gBAA9B,IAAI,KAAK,SAAA;gBACV,IAAI,KAAK,GAAG,IAAI,CAAC;gBAEjB,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE;oBAC5B,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACrB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAEjB,IAAI,KAAK,IAAI,IAAI;wBACb,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAE5B,KAAiB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;wBAAnB,IAAI,IAAI,cAAA;wBACT,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;wBAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;wBACtC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACrB,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;wBACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;wBACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;wBACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;wBACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;wBACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;wBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACpB;iBACJ;aACJ;YAED,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxF,YAAY,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAChD,CAAC;QAES,yCAAkB,GAA5B;YACI,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1F,CAAC;QAES,mDAA4B,GAAtC;YACI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC5B,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC/C,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvE,CAAC;QAES,8CAAuB,GAAjC;YACI,IAAI,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;gBACnD,OAAO;aACV;YAED,IAAI,IAAI,CAAC,4BAA4B,EAAE,EAAE;gBACrC,IAAI,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC/C,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;gBACtC,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC;aAC5C;YAED,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;gBAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;QACL,CAAC;QAES,mCAAY,GAAtB;YACI,IAAI,QAAQ,CAAC,YAAY,CAAC,mBAAmB,IAAI,IAAI;gBACjD,OAAO,QAAQ,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC;YAE7D,OAAO,EAAE,CAAC;QACd,CAAC;QAED,0EAA0E;QAClE,+BAAQ,GAAhB;YAEI,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,KAAK,GAAI,EAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACpD,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBACnC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC1C,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAM;oBAC9D,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC,CAAC;aACP;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,uCAAgB,GAA1B;YAAA,iBAyCC;YAxCG,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;gBACpD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,gCAAgC,EAAE,CAAC;gBACxC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC7D,OAAO;aACV;YAED,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,EAAE;gBACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACvD,IAAI,CAAC,gCAAgC,EAAE,CAAC;gBACxC,OAAO;aACV;YAED,IAAI,GAAG,GAA0B;gBAC7B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW;gBACxC,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACL,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE;oBAC7B,eAAe,EAAE,SAAS;oBAC1B,cAAc,EAAE,CAAC,eAAe,CAAC;iBACpC;gBACD,SAAS,EAAE,UAAA,QAAQ;oBACf,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,EAAE,EAAE,KAAI,CAAC,UAAU,EAAE,CAAC,CAAC;oBACrD,IAAI,QAAQ,CAAC,aAAa,EAAE;wBACxB,KAAqB,UAAmC,EAAnC,KAAA,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAnC,cAAmC,EAAnC,IAAmC,EAAE;4BAArD,IAAI,QAAQ,SAAA;4BACb,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;4BAC9C,KAAgB,UAAmB,EAAnB,KAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;gCAAhC,IAAI,GAAG,SAAA;gCACR,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;6BAC5C;yBACJ;qBACJ;oBAED,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjC,KAAI,CAAC,gCAAgC,EAAE,CAAC;oBACxC,KAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;oBACrC,KAAI,CAAC,qBAAqB,GAAG,KAAI,CAAC,wBAAwB,EAAE,CAAC;gBACjE,CAAC;aACJ,CAAC;YAEF,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAES,uDAAgC,GAA1C;YAAA,iBAmBC;YAlBG,IAAI,WAAW,GAAG,EAAE,CAAC;YAErB,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAC,IAAI,EAAE,MAAM;gBAC9C,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;oBAC3D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;oBACpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC9C;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAC,KAAK,EAAE,OAAO;gBAChD,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE;oBAC1C,IAAI,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACnD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBACjC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;qBACjE;iBACJ;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAES,+CAAwB,GAAlC;YACI,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAElC,KAAc,UAAkB,EAAlB,KAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAlB,cAAkB,EAAlB,IAAkB,EAAE;gBAA7B,IAAI,CAAC,SAAA;gBACN,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;oBACpB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;iBACnB;aACJ;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,8CAAuB,GAAjC;YACI,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,EAAE;gBACvC,OAAO,IAAI,CAAC;aACf;YAED,IAAI,MAAM,GAAsB,EAAE,CAAC;YACnC,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE5B,KAAiB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EAAE;gBAAnB,IAAI,IAAI,cAAA;gBACT,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,MAAM,GAAQ,EAAE,CAAC;gBAErB,IAAI,OAAO,IAAI,IAAI,EAAE;oBACjB,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;iBACzC;gBAED,IAAI,MAAM,GAAG,QAAQ,GAAG,GAAG,CAAC;gBAE5B,KAAc,UAA0C,EAA1C,KAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAA1C,cAA0C,EAA1C,IAA0C,EAAE;oBAArD,IAAI,CAAC,SAAA;oBACN,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;wBACvB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;iBAC1E;gBAED,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;aAC7B;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAES,uCAAgB,GAA1B;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACnB,OAAO;aACV;YACD,IAAI,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAC1D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;aACvE;QACL,CAAC;QAES,4CAAqB,GAA/B;YAAA,iBAkBC;YAhBG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAE1B,IAAI,KAAK,GAAG,KAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;oBACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;iBAC5B;gBAED,OAAO,KAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,UAAA,SAAS;oBACpD,KAAI,CAAC,YAAY,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAEhE,IAAI,KAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;wBACxD,KAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBAExE,OAAO,KAAI,CAAC,YAAY,CAAC,IAAI,EAAS,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAES,uCAAgB,GAA1B;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAES,6CAAsB,GAAhC;YACI,OAAO;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBAC9B,IAAI,gBAAyB;gBAC7B,eAAe,EAAE,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG;gBACnD,aAAa,EAAE,IAAI;aACtB,CAAC;QACN,CAAC;QAES,kDAA2B,GAArC;YAAA,iBAYC;YAVG,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,UAAA,aAAa;gBAClD,OAA4B;oBACxB,QAAQ,EAAE,KAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,aAAa;oBACpB,IAAI,EAAE,CAAC;oBACP,eAAe,EAAE,QAAQ,GAAG,KAAI,CAAC,UAAU,EAAE,GAAG,GAAG;oBACnD,aAAa,EAAE,IAAI;iBACtB,CAAC;YACN,CAAC,CAAC,CAAC;QAEP,CAAC;QAES,4CAAqB,GAA/B;YAAA,iBAKC;YAJG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;gBAC1B,IAAI,OAAO,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACP,CAAC;QAES,yCAAkB,GAA5B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,qCAAc,GAAxB,UAAyB,QAA0C;YAAnE,iBAiCC;YA/BG,IAAI,GAAG,GAAmC,EAAE,CAAC;YAE7C,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAEjF,GAAG,CAAC,SAAS,GAAG,UAAA,QAAQ;oBACpB,KAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAE7B,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAE/B,IAAI,GAAG,GAAG,CAAC,KAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAEpD,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;oBAC1D,IAAI,GAAG,GAAQ,KAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,KAAI,CAAC,YAAY,EAAE,CAAC,CAAC;wBACpD,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAElD,IAAI,GAAG,GAAG;wBACN,IAAI,EAAE,GAAG;wBACT,MAAM,EAAE,GAAG;wBACX,QAAQ,EAAE,GAAG;qBAChB,CAAC;oBAEF,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvD,CAAC,CAAC;YAEF,GAAG,CAAC,SAAS,GAAG;gBACZ,KAAI,CAAC,SAAS,IAAI,CAAC,CAAC,qBAAqB,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,CAAC,CAAC;YAEF,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAEpC,OAAO,GAAG,CAAC;QACf,CAAC;QAES,oCAAa,GAAvB;YAEI,IAAI,MAAM,GAAU,IAAI,MAAM,EAAS,CAAC;YAExC,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAClC;YAED,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACnB,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE;oBAC5C,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;iBACzC;aACJ;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAES,qCAAc,GAAxB;YAEI,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,IAAI,GAAG,GAAuB,EAAE,CAAC;YACjC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YAEpB,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;gBACnB,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,IAAI,OAAO,IAAI,IAAI,EAAE;oBACjB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;iBACtC;aACJ;YAED,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,EAAE;gBACvC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;aACtD;YAED,OAAO,GAAG,CAAC;QACf,CAAC;QAES,oCAAa,GAAvB,UAAwB,QAAsB;QAC9C,CAAC;QAES,yCAAkB,GAA5B,UAA6B,QAA0C;YACnE,IAAI,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QAES,2BAAI,GAAd,UAAe,QAA2C;YAA1D,iBAIC;YAHG,OAAO,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EACrD,cAAM,OAAA,KAAI,CAAC,kBAAkB,EAAE,EAAzB,CAAyB,EAC/B,cAAM,OAAA,KAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAjC,CAAiC,CAAC,CAAC;QACjD,CAAC;QAES,kCAAW,GAArB,UAAsB,OAAqC,EACvD,QAA0C;YAC1C,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAES,kCAAW,GAArB;YAEI,iBAAM,WAAW,WAAE,CAAC;YAEpB,IAAI,CAAC,IAAI,CAAC,OAAO;gBACb,OAAO;YAEX,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;YAC3E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAC7D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;YACpE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QAC7E,CAAC;QAES,6CAAsB,GAAhC,UAAiC,QAAsB;YACnD,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAClF,CAAC;QAES,wCAAiB,GAA3B;YAAA,iBAoHC;YAnHG,IAAI,IAAI,GAAiB,EAAE,CAAC;YAE5B,IAAI,CAAC,IAAI,CAAC;gBACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC;gBACjD,QAAQ,EAAE,uBAAuB;gBACjC,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE;oBACL,KAAI,CAAC,IAAI,CAAC,UAAA,QAAQ;wBACd,KAAI,CAAC,WAAW,EAAE,CAAC;oBACvB,CAAC,CAAC,CAAC;gBACP,CAAC;gBACD,OAAO,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE,EAAvC,CAAuC;gBACtD,QAAQ,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,iBAAiB,EAAE,IAAI,KAAI,CAAC,QAAQ,EAA1C,CAA0C;aAC7D,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC;gBACN,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC;gBACxD,QAAQ,EAAE,sBAAsB;gBAChC,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE;oBACL,KAAI,CAAC,IAAI,CAAC,UAAA,SAAS;wBAEf,IAAI,KAAI,CAAC,UAAU,EAAE,EAAE;4BACnB,IAAI,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;4BAC7B,IAAI,GAAG,IAAI,IAAI,EAAE;gCACb,GAAG,GAAG,KAAI,CAAC,YAAY,EAAE,CAAC;6BAC7B;4BACD,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;yBACtB;6BACI;4BACD,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;yBACrC;wBAED,KAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;oBAC3C,CAAC,CAAC,CAAC;gBACP,CAAC;gBACD,OAAO,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE,EAAvC,CAAuC;gBACtD,QAAQ,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,iBAAiB,EAAE,IAAI,KAAI,CAAC,QAAQ,EAA1C,CAA0C;aAC7D,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC;gBACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC;gBACnD,QAAQ,EAAE,eAAe;gBACzB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE;oBACL,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,EAAE;wBAC1D,KAAI,CAAC,QAAQ,CAAC,cAAM,OAAA,KAAI,CAAC,WAAW,EAAE,EAAlB,CAAkB,CAAC,CAAC;oBAC5C,CAAC,CAAC,CAAC;gBACP,CAAC;gBACD,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE,EAA5D,CAA4D;gBAC3E,QAAQ,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,mBAAmB,EAAE,IAAI,KAAI,CAAC,QAAQ,EAA5C,CAA4C;aAC/D,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC;gBACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC;gBACrD,QAAQ,EAAE,oBAAoB;gBAC9B,OAAO,EAAE;oBACL,IAAI,KAAI,CAAC,SAAS,EAAE,EAAE;wBAClB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,EAAE;4BAC5D,KAAI,CAAC,QAAQ,CAAC,cAAM,OAAA,KAAI,CAAC,QAAQ,CAAC,KAAI,CAAC,YAAY,EAAE,CAAC,EAAlC,CAAkC,CAAC,CAAC;wBAC5D,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC;gBACD,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,UAAU,EAAE,IAAI,KAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE,EAA3D,CAA2D;gBAC1E,QAAQ,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,mBAAmB,EAAE,IAAI,KAAI,CAAC,QAAQ,EAA5C,CAA4C;aAC/D,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;gBACpB,IAAI,CAAC,IAAI,CAAC;oBACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC;oBACjD,QAAQ,EAAE,aAAa;oBACvB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE;wBACL,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE;4BAClB,OAAO;wBAEX,KAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,KAAI,CAAC,eAAe,EAAE,CAAC;wBACvB,KAAI,CAAC,WAAW,EAAE,CAAC;oBACvB,CAAC;oBACD,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,UAAU,EAAE,EAAjB,CAAiB;oBAChC,QAAQ,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,iBAAiB,EAAE,IAAI,KAAI,CAAC,QAAQ,EAA1C,CAA0C;iBAC7D,CAAC,CAAC;aACN;YAED,IAAI,CAAC,IAAI,CAAC;gBACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC;gBACzD,QAAQ,EAAE,qBAAqB;gBAC/B,OAAO,EAAE,cAAM,OAAA,KAAI,CAAC,uBAAuB,EAAE,EAA9B,CAA8B;aAChD,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC;gBACN,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC;gBAClD,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE;oBAEL,IAAI,CAAC,KAAI,CAAC,UAAU,EAAE,EAAE;wBACpB,OAAO;qBACV;oBAED,IAAI,WAAW,GAAG,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBAE1C,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;wBACnB,IAAI,EAAG,EAAU,CAAC,eAAe,CAAC,KAAI,CAAC;wBACvC,IAAI,EAAE,UAAA,CAAC,IAAI,OAAA,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAChD,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI,CAAC,OAAO,CAAC,EAAE,KAAI,EAAE,IAAI,CAAC;6BAC7D,uBAAuB,CAAC,WAAW,EAAE,IAAI,CAAC,EAFpC,CAEoC;qBAClD,CAAC,CAAC;gBACP,CAAC;gBACD,OAAO,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK;gBACpB,QAAQ,EAAE,cAAM,OAAA,CAAC,KAAI,CAAC,mBAAmB,EAAE,IAAI,KAAI,CAAC,QAAQ,EAA5C,CAA4C;aAC/D,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,uCAAgB,GAA1B;YAEI,IAAI,KAAK,GAAU,IAAI,MAAM,EAAS,CAAC;YACvC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAE3C,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;gBAC3B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;aACzB;YAED,IAAI,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/C,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;gBACjC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC;aAC/B;YAED,IAAI,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACjD,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;gBAClC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC;aAChC;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QAES,sCAAe,GAAzB;YAEI,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;YAEpE,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACnD,IAAI,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACjD,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAE7B,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAE/B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;gBACnB,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;aAChF;YAED,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE;gBAC3B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;aACzD;YAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,EAAE;gBAC/B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;aAC5D;YAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE;gBACjC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;gBAC9D,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;qBACxC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;oBAC9B,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;oBAClD,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC;aAChE;YAED,IAAI,kBAAkB,EAAE;gBAEpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;oBACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC;yBACjC,GAAG,CAAC,sBAAsB,CAAC;yBAC3B,QAAQ,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEjD,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;gBAE1D,OAAO;aACV;YAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC;iBACzC,WAAW,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;YAE/C,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB;iBACzC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;gBACnF,oCAAoC,CAAC,CAAC,CAAC,CAAC;YAEpD,IAAI,CAAC,iBAAiB,IAAI,QAAQ,IAAI,QAAQ;gBAC1C,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3E,CAAC;QAES,yCAAkB,GAA5B,UAA6B,QAA+C;YACxE,OAAO,EAAE,CAAA;QACb,CAAC;QAES,sCAAe,GAAzB,UAA0B,OAAyC,EAAE,QAA8C;YAC/G,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAES,+BAAQ,GAAlB,UAAmB,QAA+C;YAAlE,iBAoBC;YAnBG,IAAI,WAAW,GAAuC,EAAE,CAAC;YACzD,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC;YAEtD,IAAI,OAAO,GAAoB,EAAE,CAAC;YAClC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAEvC,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;YAC9B,WAAW,CAAC,SAAS,GAAG,UAAA,QAAQ;gBAC5B,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC/B,KAAI,CAAC,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;wBACzC,QAAQ,EAAE,KAAI,CAAC,YAAY,EAAE;wBAC7B,MAAM,EAAE,KAAI,CAAC,MAAM;wBACnB,IAAI,EAAE,UAAU;qBACnB,CAAC,CAAC,CAAC;YACR,CAAC,CAAC;YAEF,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACpD,IAAI,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACtD,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QAID,sBAAW,kCAAQ;iBAAnB;gBACI,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,CAAC;iBAED,UAAoB,KAAc;gBAC9B,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;;;WAJA;QAMM,mCAAY,GAAnB;YACI,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5B,CAAC;QAEM,mCAAY,GAAnB,UAAoB,KAAc;YAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE;gBAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;gBACzB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,WAAW,EAAE,CAAC;aACtB;QACL,CAAC;QAES,0CAAmB,GAA7B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,0CAAmB,GAA7B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,0CAAmB,GAA7B;YACI,OAAO,IAAI,CAAC;QAChB,CAAC;QAES,0CAAmB,GAA7B;YACI,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClD,OAAO,gBAAgB,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACvF,CAAC;QAES,0CAAmB,GAA7B;YACI,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClD,OAAO,gBAAgB,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACvF,CAAC;QAES,0CAAmB,GAA7B;YACI,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClD,OAAO,gBAAgB,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QACvF,CAAC;QAES,wCAAiB,GAA3B;YACI,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAClF,CAAC;QAIS,iCAAU,GAApB;YACI,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACxE,CAAC;QAES,kCAAW,GAArB;YACI,OAAO,KAAK,CAAC;QACjB,CAAC;QAhpCQ,YAAY;YADxB,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,uBAAuB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAA,SAAS,CAAC,CAAC;WACpF,YAAY,CAipCxB;QAAD,mBAAC;KAAA,AAjpCD,CAAmD,SAAA,eAAe,GAipCjE;IAjpCY,qBAAY,eAipCxB,CAAA;AACL,CAAC,EA7pCS,QAAQ,KAAR,QAAQ,QA6pCjB;AC7pCD,IAAU,QAAQ,CA+LjB;AA/LD,WAAU,QAAQ;IACd,IAAiB,SAAS,CA6LzB;IA7LD,WAAiB,SAAS;QAMtB;YAAkC,gCAAoC;YAClE,sBAAY,GAAwB;gBAApC,YACI,kBAAM,GAAG,CAAC,SAKb;gBAHG,IAAI,GAAG,CAAC,SAAS,EAAE;oBACf,KAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;iBAClC;;YACL,CAAC;YAMS,yCAAkB,GAA5B;gBACI,IAAI,IAAI,CAAC,YAAY,EAAE;oBACnB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACrD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;iBAC5B;gBACD,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;oBACtE,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI;oBACnB,KAAK,EAAE,IAAI,CAAC,aAAa;iBAC5B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAED,iCAAU,GAAV,UAAW,SAAiB;gBAA5B,iBAmBC;gBAlBG,CAAC,CAAC,WAAW,CAAC;oBACV,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE;oBAC7D,SAAS,EAAE,UAAC,QAAgC;wBACxC,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;wBAC3D,KAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;wBAC/C,KAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC;wBAClC,KAAI,CAAC,kBAAkB,EAAE,CAAC;wBAC1B,IAAI,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC;wBACnC,IAAI,GAAG,IAAI,IAAI,EAAE;4BACb,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;yBACtB;wBACD,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC5B,KAAI,CAAC,OAAO,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;wBACnF,KAAI,CAAC,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;wBAChF,KAAI,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;wBACjF,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;iBACJ,CAAC,CAAC;YACP,CAAC;YAED,oCAAa,GAAb,UAAc,WAAmB,EAAE,UAAkB;gBACjD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;oBACtB,OAAO;iBACV;gBACD,IAAI,UAAU,GAAG,IAAI,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACnC,CAAC,CAAC,aAAa,CAAC;oBACZ,OAAO,EAAE,gBAAgB;oBACzB,OAAO,EAAE;wBACL,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,QAAQ,EAAE,SAAS;wBACnB,UAAU,EAAE,UAAU;wBACtB,UAAU,EAAE,UAAU;qBACzB,EAAE,MAAM,EAAE,WAAW;iBACzB,CAAC,CAAC;YAEP,CAAC;YAES,wCAAiB,GAA3B;gBAAA,iBAuBC;gBAtBG,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE;wBAC1D,KAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACvC,CAAC;iBACJ,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE;wBAClD,KAAI,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAClC,CAAC;iBACJ,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE;wBACrD,KAAI,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBACnC,CAAC;iBACJ,CAAC,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,EAAE,OAAO,EAAE;wBACpD,KAAI,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBACnC,CAAC;iBACJ,CAAC,CAAC;gBACH,OAAO,OAAO,CAAC;YACnB,CAAC;YAvFQ,YAAY;gBADxB,SAAA,UAAU,CAAC,aAAa,CAAC,iCAAiC,CAAC;eAC/C,YAAY,CAwFxB;YAAD,mBAAC;SAAA,AAxFD,CAAkC,SAAA,eAAe,GAwFhD;QAxFY,sBAAY,eAwFxB,CAAA;QAUD;YAAgC,8BAAoB;YAChD,oBAAY,GAAW;gBAAvB,YACI,kBAAM,GAAG,CAAC,SAWb;gBATG,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAvB,CAAuB,CAAC,CAAC;gBACxD,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,UAAC,CAAC,IAAK,OAAA,KAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAArB,CAAqB,CAAC,CAAC;gBAClD,IAAI,IAAI,GAAG,KAAI,CAAC;gBAChB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE;oBAClD,QAAQ,EAAE,UAAU,KAAK,EAAE,IAAI,EAAE,IAAI;wBACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;oBACf,CAAC;iBACJ,CAAC,CAAC;;YACP,CAAC;YAES,qCAAgB,GAA1B,UAA2B,IAAY;gBACnC,IAAI,MAAM,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAClE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,IAAI,IAAI,IAAI,EAAE;oBACd,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBACtC,OAAO;iBACV;gBACD,IAAI,KAAK,GAAI,EAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;oBAC3D,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;iBACjF;gBACD,IAAI,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAChD,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;oBAC5B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACb,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBACjF,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;wBACzC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;4BACzC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;4BACxB,MAAM;yBACT;qBACJ;gBACL,CAAC,CAAC,CAAC;gBACH,IAAI,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAClD,IAAI,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC9D,IAAI,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvC,WAAW,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACzC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChB,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;oBACxB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC7B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;iBAC/B;YACL,CAAC;YAES,kCAAa,GAAvB,UAAwB,CAAoB;gBACxC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;oBACzB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3B,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBAC3B,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;iBACzC;qBACI;oBACD,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACxB,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC/B,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;wBACzG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;qBAC9D;iBACJ;YACL,CAAC;YAES,oCAAe,GAAzB,UAA0B,CAAoB;gBAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;YAvEQ,UAAU;gBADtB,SAAA,UAAU,CAAC,aAAa,CAAC,+BAA+B,CAAC;eAC7C,UAAU,CAwEtB;YAAD,iBAAC;SAAA,AAxED,CAAgC,QAAQ,CAAC,MAAM,GAwE9C;QAxEY,oBAAU,aAwEtB,CAAA;IAaL,CAAC,EA7LgB,SAAS,GAAT,kBAAS,KAAT,kBAAS,QA6LzB;AACL,CAAC,EA/LS,QAAQ,KAAR,QAAQ,QA+LjB;AC9LD,IAAU,QAAQ,CAkRjB;AAlRD,WAAU,QAAQ;IAKd;QAAwC,sCAA6B;QAWjE;YAAA,YACI,iBAAO,SAkBV;YAhBG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,KAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC/C,QAAQ,EAAE,UAAC,GAAG,EAAE,GAAG,EAAE,IAAI;oBACrB,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBACxB,IAAI,GAAG,IAAI,IAAI;wBACX,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;oBAE1D,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;wBAC9B,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAC5C,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBACtD,CAAC,CAAC,CAAC;oBACH,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;aACJ,CAAC,CAAC;YAEH,KAAI,CAAC,SAAS,GAAG,KAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,KAAI,CAAC,QAAQ,GAAG,KAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;QAC5C,CAAC;QAEa,mCAAgB,GAA9B,UAA+B,IAAwB;YACnD,SAAS,OAAO;gBACZ,IAAI,MAAM,GAAG,IAAI,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBAC/C,MAAM,CAAC,UAAU,GAAI,IAAY,CAAC,UAAU,CAAC;gBAC7C,IAAK,IAAY,CAAC,eAAe,EAAE;oBAC/B,IAAI,eAAe,GAAI,IAAY,CAAC,eAAwC,CAAC;oBAC7E,IAAI,eAAe,CAAC,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM;wBACzD,MAAM,CAAC,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,EAAJ,CAAI,CAAC,CAAC;iBACtE;gBACD,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,EAAJ,CAAI,CAAC,CAAC;gBACnE,MAAM,CAAC,IAAI,GAAG;oBACT,IAAY,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;oBAC7C,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,KAAK,IAAI,EAAlB,CAAkB,CAAC,CAAC;oBAChE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAClC,IAAY,CAAC,eAAe,EAAE,CAAC;oBAChC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC;gBAEF,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,cAAM,OAAA,SAAS,EAAT,CAAS,CAAC,CAAC;gBAC/D,MAAM,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,cAAc,GAAI,IAAY,CAAC,UAAU,EAAE,UAAC,CAAC,EAAE,GAAG;gBAC9D,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,SAAS,EAAE;oBAC/C,OAAO,EAAE,CAAC;iBACb;YACL,CAAC,CAAC,CAAC;YAEH,OAAO;gBACH,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC;gBACjD,QAAQ,EAAE,sBAAsB;gBAChC,OAAO,EAAE,OAAO;aACnB,CAAA;QACL,CAAC;QAES,6CAAgB,GAA1B;YAAA,iBAuEC;YAtEG,IAAI,GAAG,GAAG,iBAAM,gBAAgB,WAAE,CAAC;YACnC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACxD,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;YAChB,GAAG,CAAC,OAAO,GAAG;gBACV;oBACI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,6CAA6C,CAAC;oBAC3D,KAAK,EAAE;wBACH,IAAI,OAAO,GAAyB,EAAE,CAAC;wBACvC,KAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;4BAC9D,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4BACd,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;wBACjC,CAAC,CAAC,CAAC;wBAEH,IAAI,IAAI,GAAW,IAAI,CAAC;wBACxB,KAAe,UAAmB,EAAnB,KAAA,KAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;4BAA/B,IAAI,EAAE,SAAA;4BACP,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;4BACrB,IAAI,CAAC,EAAE;gCACH,SAAS;4BAEb,IAAI,IAAI,IAAI,IAAI;gCACZ,EAAE,CAAC,SAAS,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC;;gCAE7B,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;4BAEzB,IAAI,GAAG,EAAE,CAAC;4BACV,IAAI,GAAG,GAAW,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACjC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;yBACvB;wBAED,KAAK,IAAI,GAAG,IAAI,OAAO;4BACnB,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC;wBAEzC,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,CAAC;iBACJ;gBACD;oBACI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;oBAChC,KAAK,EAAE;wBACH,IAAI,UAAU,GAAmB,EAAE,CAAC;wBAEpC,KAAgB,UAAe,EAAf,KAAA,KAAI,CAAC,UAAU,EAAf,cAAe,EAAf,IAAe;4BAA1B,IAAI,GAAG,SAAA;4BACR,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;yBAAA;wBAExB,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC;4BAC3D,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAC1B,IAAI,GAAG,GAAG,KAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;4BAC3B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;4BACnB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACrB,OAAO,EAAE,CAAC;wBACd,CAAC,CAAC,CAAC;wBAEH,KAAgB,UAAe,EAAf,KAAA,KAAI,CAAC,UAAU,EAAf,cAAe,EAAf,IAAe,EAAE;4BAA5B,IAAI,GAAG,SAAA;4BACR,IAAI,CAAC,GAAG,CAAC,OAAO;gCACZ,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBAC5B;wBAED,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;wBAC7B,KAAI,CAAC,IAAI,IAAI,KAAI,CAAC,IAAI,EAAE,CAAC;wBACzB,KAAI,CAAC,WAAW,EAAE,CAAA;oBACtB,CAAC;iBACJ;gBACD;oBACI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;oBACpC,KAAK,EAAE;wBACH,KAAI,CAAC,WAAW,EAAE,CAAA;oBACtB,CAAC;iBACJ;aACJ,CAAC;YAEF,OAAO,GAAG,CAAC;QACf,CAAC;QAEO,qCAAQ,GAAhB,UAAiB,GAAiB;YAC9B,IAAI,GAAG,CAAC,EAAE,IAAI,YAAY;gBACtB,OAAO,KAAK,CAAC;YAEjB,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,EAAE,CAAC;QAC7C,CAAC;QAEO,sCAAS,GAAjB,UAAkB,GAAiB;YAC/B,OAAO,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAClG,CAAC;QAEO,qCAAQ,GAAhB,UAAiB,GAAiB;YAC9B,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,OAAO,CAAC,CAAC,sBACL,GAAG,CAAC,EAAE,oBAAY,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,6DAEzD,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,aAChC,SAAS,CAAC,CAAC,CAAC,kCAA8B,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,kBAAU,CAAC,CAAC,CAAC,EAAE,oDACnE,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,mBACjF,CAAC,CAAC;QACA,CAAC;QAEO,6CAAgB,GAAxB;YACI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACxE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3E,CAAC;QAES,yCAAY,GAAtB;YAAA,iBA0EC;YAzEG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;YAEhD,IAAI,OAAO,GAA0B,EAAE,CAAC;YACxC,KAAe,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;gBAA/B,IAAI,EAAE,SAAA;gBACP,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;aACtB;YAED,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,KAAc,UAAe,EAAf,KAAA,IAAI,CAAC,UAAU,EAAf,cAAe,EAAf,IAAe,EAAE;gBAA1B,IAAI,GAAC,SAAA;gBACN,IAAI,CAAC,OAAO,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAC,CAAC;aAC1B;YAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI;gBAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEvD,IAAI,MAAM,GAAmB,EAAE,CAAC;YAEhC,KAAc,UAAe,EAAf,KAAA,IAAI,CAAC,UAAU,EAAf,cAAe,EAAf,IAAe,EAAE;gBAA1B,IAAI,GAAC,SAAA;gBACN,IAAI,CAAC,OAAO,CAAC,GAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAC,CAAC,UAAU;oBAChC,CAAC,GAAC,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI;wBAC7B,CAAC,GAAC,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,GAAC,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC3G,MAAM,CAAC,IAAI,CAAC,GAAC,CAAC,CAAC;iBAClB;aACJ;YAED,IAAI,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,oBAAoB,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAA1D,CAA0D,CAAC,CAAC;YAEtG,KAAe,UAAmB,EAAnB,KAAA,IAAI,CAAC,cAAc,EAAnB,cAAmB,EAAnB,IAAmB,EAAE;gBAA/B,IAAI,EAAE,SAAA;gBACP,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzB,IAAI,CAAC,CAAC;oBACF,SAAS;gBAEb,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC7C;YAED,KAAc,UAAa,EAAb,+BAAa,EAAb,2BAAa,EAAb,IAAa,EAAE;gBAAxB,IAAI,GAAC,sBAAA;gBACN,IAAI,CAAC,QAAQ,CAAC,GAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC5C;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAExB,IAAI,OAAO,QAAQ,KAAK,WAAW;gBAC/B,QAAQ,CAAC,MAAM,EAAE;gBAEjB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;oBAC/B,KAAK,EAAE,IAAI,CAAC,UAAU,GAAG,QAAQ;oBACjC,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,UAAA,GAAG;wBACT,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,QAAQ,CAAC,CAAC;wBACpC,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,CAAC;oBACD,MAAM,EAAE,UAAA,CAAC;wBACL,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;4BAClC,CAAC,CAAC,IAAI,IAAI,KAAI,CAAC,SAAS,CAAC,CAAC,CAAC;4BAC3B,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI;4BACf,OAAO,KAAK,CAAC;wBACjB,OAAO,IAAI,CAAC;oBAChB,CAAC;oBACD,KAAK,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,gBAAgB,EAAE,EAAvB,CAAuB;iBACxC,CAAC,CAAC;gBAEH,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBAC9B,KAAK,EAAE,IAAI,CAAC,UAAU,GAAG,QAAQ;oBACjC,IAAI,EAAE,KAAK;oBACX,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,UAAA,GAAG;wBACT,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC;wBACrC,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,CAAC;oBACD,KAAK,EAAE,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,gBAAgB,EAAE,EAAvB,CAAuB;iBACxC,CAAC,CAAC;aACN;QACL,CAAC;QAES,yCAAY,GAAtB;YACI,iBAAM,YAAY,WAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YACjD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;iBAC/D,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC;iBACjD,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YAEpB,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAES,wCAAW,GAArB;YACI,OAAO,+MAIgB,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,6IAInD,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC,2DAGhF,CAAC;QACA,CAAC;QA3QQ,kBAAkB;YAH9B,SAAA,UAAU,CAAC,aAAa,EAAE;YAC1B,SAAA,UAAU,CAAC,SAAS,EAAE;YACtB,SAAA,UAAU,CAAC,UAAU,EAAE;WACX,kBAAkB,CA4Q9B;QAAD,yBAAC;KAAA,AA5QD,CAAwC,QAAQ,CAAC,eAAe,GA4Q/D;IA5QY,2BAAkB,qBA4Q9B,CAAA;AACL,CAAC,EAlRS,QAAQ,KAAR,QAAQ,QAkRjB;ACnRD,IAAU,QAAQ,CA0HjB;AA1HD,WAAU,QAAQ;IAEd;;OAEG;IACH;QAKI,uBAAoB,OAAoC;YAApC,YAAO,GAAP,OAAO,CAA6B;YACpD,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YACtC,IAAI,UAAU,GAAI,EAAU,CAAC,aAAa,EAAE,CAAC;YAC7C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,UAAC,IAAW,IAAK,OAAC,IAAY,CAAC,UAAU,CAAC,EAAzB,CAAyB,CAAC;YAEpE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,UAAA,CAAC;gBAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;oBACtC,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;wBACb,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE;wBACd,SAAA,eAAe,CAAC,WAAW,CAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;qBAC3E;iBACJ;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,aAAa,GAAI,EAAU,CAAC,YAAY,CAAC;YAC5C,EAAU,CAAC,YAAY,GAAG,UAAU,IAAW;gBAC5C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;oBAClC,OAAO,KAAK,CAAC;gBAEjB,OAAO,SAAA,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAC1E,CAAC,CAAC;YAEF,IAAI,cAAc,GAAI,EAAU,CAAC,iBAAiB,CAAC;YAClD,EAAU,CAAC,iBAAiB,GAAG,UAAU,QAA6B;gBAEnE,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAClD,QAAQ,CAAC,QAAQ,GAAG,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBACnG,SAAA,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EACpE,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC;gBACrE,OAAO,QAAQ,CAAC;YACpB,CAAC,CAAC;YAEF,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,EAA9B,CAA8B,CAAC,CAAC;gBAC/G,IAAI,GAAG,EAAE;oBACL,GAAG,CAAC,MAAM,GAAG,SAAA,eAAe,CAAC,UAAU,CAAC,cAAM,OAAA,EAAE,CAAC,IAAI,EAAP,CAAO,EAAE,KAAK,EACxD,GAAG,CAAC,MAAM,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAvB,CAAuB,CAAC,CAAC,CAAC;oBACpD,GAAG,CAAC,SAAS,GAAG,SAAA,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;iBAC9D;aACJ;QACL,CAAC;QAED;;WAEG;QACH,iCAAS,GAAT;YACI,SAAA,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EACtD,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAC,CAAS,CAAC,UAAU,IAAI,IAAI,EAA7B,CAA6B,CAAC,CAAC,CAAC;YAE9E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,CAAC;QAED,mCAAW,GAAX;YACI,SAAA,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,CAAC;QAED,iCAAS,GAAT;YACI,SAAA,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,CAAC;QAED;;;;;;WAMG;QACI,+BAAiB,GAAxB,UAAgC,KAAc,EAAE,KAA2B,EAAE,WAAiC;YAC1G,IAAI,MAAM,GAAY,EAAE,CAAC;YAEzB,IAAI,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAClD,IAAI,OAAO,GAAG,EAAE,CAAC;YAEjB,SAAS,YAAY,CAAC,WAAgB;gBAClC,IAAI,OAAO,CAAC,WAAW,CAAC;oBACpB,OAAO;gBAEX,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;gBAC5B,KAAkB,UAA+B,EAA/B,MAAC,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAA/B,cAA+B,EAA/B,IAA+B,EAAE;oBAA9C,IAAI,KAAK,SAAA;oBACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC9B;YACL,CAAC;YAED,KAAiB,UAAK,EAAL,eAAK,EAAL,mBAAK,EAAL,IAAK,EACtB;gBADK,IAAI,IAAI,cAAA;gBAET,IAAI,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,QAAQ,IAAI,IAAI;oBAChB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;oBAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClB,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC7B;aACJ;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QACL,oBAAC;IAAD,CAAC,AAzGD,IAyGC;IAzGY,sBAAa,gBAyGzB,CAAA;AAYL,CAAC,EA1HS,QAAQ,KAAR,QAAQ,QA0HjB;AClHD,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,IAAK,CAAC,CAAC,EAAE,CAAC,MAAc,CAAC,UAAU,EAAE;IAChD,IAAI,GAAG,GAAI,CAAC,CAAC,EAAE,CAAC,MAAc,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC,CAAC,EAAU,CAAC,GAAG,GAAG,GAAG,CAAC;CAC3B;AAED,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,UAAU,KAAS;IAAT,sBAAA,EAAA,SAAS;IACrC,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC,CAAA;AAED,CAAC,CAAC,EAAE,CAAC,aAAa,GAAG,UAAU,KAAS;IAAT,sBAAA,EAAA,SAAS;IACpC,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAA;AAED,CAAC,CAAC,EAAE,CAAC,eAAe,GAAG,UAAU,KAAS,EAAE,KAAS;IAApB,sBAAA,EAAA,SAAS;IAAE,sBAAA,EAAA,SAAS;IACjD,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAChF,CAAC,CAAA;AAED,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,UAAU,KAAa;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAA;AAED,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,UAAU,KAAa;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC,CAAA;AE/BD,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,IAAK,CAAC,CAAC,EAAE,CAAC,MAAc,CAAC,UAAU,EAAE;IAChD,IAAI,GAAG,GAAI,CAAC,CAAC,EAAE,CAAC,MAAc,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC,CAAC,EAAU,CAAC,GAAG,GAAG,GAAG,CAAC;CAC3B;ACED,cAAc;AACd,CAAC,UAAU,CAAe;IAE1B,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE;QACtB,OAAO,EAAE;YACL,IAAI,EAAE,IAAI;YACV,eAAe,EAAE,IAAI;YACrB,kBAAkB,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;SAC3C;QAED,OAAO,EAAE;YACL,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAEf,IAAI,CAAC,CAAC;gBACF,MAAM,4CAA4C,CAAC;YAEvD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;iBACzC,IAAI,CACD,2BAA2B;gBACvB,4BAA4B;gBACxB,wFAAwF;gBACxF,uFAAuF;gBAC1F,kEAAkE;gBAC9D,uCAAuC,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;gBACvE,4EAA4E;gBAC5E,gDAAgD;gBACpD,kEAAkE;gBAC/D,uFAAuF;gBACvF,uFAAuF;gBAC3F,kEAAkE;gBAC9D,yFAAyF;gBAC7F,wCAAwC;gBACxC,2EAA2E,CAAC,CAAC;YAEzF,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC;YACxE,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;YACpF,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE;gBAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;YAE9G,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;gBAC9B,IAAI,GAAW,EAAE,GAAG,GAAG,EAAE,CAAC;gBAC1B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;oBACrD,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC;wBACzC,GAAG,GAAG,qBAAqB,CAAC;;wBAAM,GAAG,GAAG,EAAE,CAAC;oBAC/C,GAAG,IAAI,iBAAiB,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC;iBAChI;gBAAA,CAAC;gBACF,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,oEAAoE,GAAG,GAAG,GAAG,iDAAiD,CAAC,CAAC;gBACxK,CAAC,CAAC,sBAAsB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAC1C;oBACI,IAAI,CAAC,CAAC,mBAAmB;wBACrB,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBAClC;wBACD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;wBACX,CAAC,CAAC,gBAAgB,CAAC;4BACf,IAAI,EAAE,CAAC;4BACP,WAAW,EAAE,CAAC,IAAI,CAAC,KAAK;yBAC3B,CAAC,CAAC;qBACN;gBACL,CAAC,CACJ,CAAC;aACL;YAED,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC;gBAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;YACxB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,EAAE;YACL,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,WAAW,EAAE,UAAU,KAAa;YAEhC,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAE7B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;gBACrB,OAAO,IAAI,CAAC;YAEhB,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAChC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAExG,IAAI,IAAY,CAAC;YAEjB,QAAQ,KAAK,EAAE;gBACX,KAAK,OAAO;oBAAE,IAAI,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAC9B,KAAK,MAAM;oBAAE,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;wBAAE,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;gBACtE,KAAK,MAAM;oBAAE,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK;wBAAE,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAC1E,KAAK,MAAM;oBAAE,IAAI,GAAG,KAAK,CAAC;oBAAC,MAAM;gBACjC,KAAK,OAAO;oBACR,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;oBACnE,IAAI,KAAK,CAAC,EAAE,CAAC;wBACT,EAAE,GAAG,CAAC,CAAC;yBACN,IAAI,EAAE,GAAG,CAAC;wBACX,EAAE,GAAG,CAAC,CAAC;yBACN,IAAI,EAAE,GAAG,KAAK;wBACf,EAAE,GAAG,KAAK,CAAC;oBAEf,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAE7C,IAAI,GAAG,EAAE,CAAC;oBACV,MAAM;aACb;YAED,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;gBACjB,OAAO,KAAK,CAAC;YAEjB,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY;gBACzB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;iBAC/B;gBACD,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACzC;QACL,CAAC;QAED,YAAY,EAAE;YAEV,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAChC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAExG,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAY,CAAC,CAAC;YAEtD,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YAChD,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE;gBACpB,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;YAEzB,IAAI,IAAY,CAAC;YAEjB,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;aACjD;iBACI,IAAI,IAAI,CAAC,KAAK,EAAE;gBACjB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;aACrB;iBACI,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE;gBAC1B,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBAC3C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAO,EAAE,CAAC,CAAC;gBACvC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAO,EAAE,CAAC,CAAC;gBACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aACnD;;gBAEG,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAEhD,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,UAAU,EAAE,UAAU,GAAW,EAAE,KAAU;YACzC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzD,CAAC;KACJ,CAAC,CAAC;AAEH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AA8YX,IAAU,KAAK,CAEd;AAFD,WAAU,KAAK;IAAC,IAAA,IAAI,CAEnB;IAFe,WAAA,IAAI;QAChB,IAAI,yBAA8B,CAAC;IACvC,CAAC,EAFe,IAAI,GAAJ,UAAI,KAAJ,UAAI,QAEnB;AAAD,CAAC,EAFS,KAAK,KAAL,KAAK,QAEd;AAED,WAAU,KAAK;IACX;QACI,oBAAY,OAAY;YACpB,IAAI,IAAI,GAAG,IAAI,CAAC;YAEhB,IAAI,QAAQ,GAAG;gBACX,yBAAyB,EAAO,IAAI;gBACpC,aAAa,EAAE,KAAK;aACvB,CAAA;YAED,IAAI,UAAkB,CAAC;YACvB,IAAI,KAAK,GAAU,EAAE,CAAC;YACtB,IAAI,IAAI,GAAU,EAAE,CAAC;YACrB,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,QAAQ,GAAQ,IAAI,CAAC;YACzB,IAAI,MAAM,GAAQ,IAAI,CAAC;YACvB,IAAI,OAAO,GAAQ,IAAI,CAAC;YACxB,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,IAAI,aAAqB,CAAC;YAC1B,IAAI,YAAiB,CAAC;YACtB,IAAI,YAAY,GAAQ,EAAE,CAAC;YAC3B,IAAI,gBAAgB,GAAQ,EAAE,CAAC;YAC/B,IAAI,UAAe,CAAC;YACpB,IAAI,aAAa,GAAQ,EAAE,CAAC;YAC5B,IAAI,cAAmB,CAAC;YACxB,IAAI,yBAA8B,CAAC;YACnC,IAAI,WAAW,GAAU,EAAE,CAAC;YAE5B,IAAI,oBAAoB,GAAG;gBACvB,MAAM,EAAO,IAAI;gBACjB,SAAS,EAAO,IAAI;gBACpB,QAAQ,EAAE,UAAU,CAAM,EAAE,CAAM;oBAC9B,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7B,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/B,CAAC;gBACN,CAAC;gBACD,gBAAgB,EAAS,EAAE;gBAC3B,cAAc,EAAE,KAAK;gBACrB,kBAAkB,EAAE,KAAK;gBACzB,oBAAoB,EAAE,KAAK;gBAC3B,SAAS,EAAE,KAAK;gBAChB,gBAAgB,EAAE,IAAI;gBACtB,qBAAqB,EAAE,KAAK;aAC/B,CAAC;YACF,IAAI,cAAc,GAAQ,EAAE,CAAC;YAC7B,IAAI,aAAa,GAAU,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAU,EAAE,CAAC;YACvB,IAAI,oBAAoB,GAAU,EAAE,CAAC;YACrC,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAE9B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,IAAI,iBAAiB,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;YACpC,IAAI,aAAa,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;YAChC,IAAI,mBAAmB,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;YAEtC,IAAI,OAAO,GAAQ,KAAK,CAAC;YACzB,IAAI,YAAY,GAAW,IAAI,CAAC;YAChC,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,IAAI,WAAmB,CAAC;YACxB,IAAI,QAAgB,CAAC;YACrB,IAAI,UAAU,GAAW,IAAI,CAAC;YAC9B,IAAI,aAAa,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;YAChC,IAAI,aAAa,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;YAChC,IAAI,YAAY,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;YAC/B,IAAI,WAAW,GAAG,IAAI,MAAA,KAAK,EAAE,CAAC;YAC9B,IAAI,IAAS,CAAC;YAEd,SAAS,WAAW;gBAChB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,SAAS;gBACd,OAAO,EAAE,CAAC;gBACV,IAAI,OAAO,IAAI,CAAC;oBACZ,OAAO,EAAE,CAAC;YAClB,CAAC;YAED,SAAS,eAAe,CAAC,KAAU;gBAC/B,YAAY,GAAG,KAAK,CAAC;YACzB,CAAC;YAED,SAAS,aAAa,CAAC,IAAS;gBAC5B,UAAU,GAAG,IAAI,CAAC;YACtB,CAAC;YAED,SAAS,aAAa,CAAC,aAAsB;gBACzC,aAAa,GAAG,aAAa,IAAI,CAAC,CAAC;gBACnC,IAAI,EAAO,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACtD,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBAC1B,IAAI,EAAE,KAAK,SAAS,EAAE;wBAClB,IAAI,GAAG,GAAG,6CAA6C;4BACnD,UAAU,GAAG,+BAA+B,GAAG,CAAC,GAAG,IAAI;4BACvD,yBAAyB,CAAC;wBAE9B,GAAG,IAAU,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjC,MAAM,GAAG,CAAC;qBACb;oBACD,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;iBACnB;YACL,CAAC;YAED,SAAS,kBAAkB;gBACvB,IAAI,EAAO,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1C,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBAC1B,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;wBACvC,IAAI,GAAG,GAAG,6CAA6C;4BACnD,UAAU,GAAG,+BAA+B,GAAG,CAAC,GAAG,IAAI,CAAC;wBAE5D,IAAI,EAAE,IAAI,SAAS;4BACf,GAAG,IAAI,yBAAyB,CAAC;;4BAEjC,GAAG,IAAI,+BAA+B,GAAG,EAAE,GAAG,KAAK,CAAC;wBAExD,GAAG,IAAU,CAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjC,MAAM,GAAG,CAAC;qBACb;iBACJ;YACL,CAAC;YAED,SAAS,QAAQ;gBACb,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,SAAS,QAAQ,CAAC,IAAW;gBACzB,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC;gBAC7B,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,GAAG,IAAI,CAAC;gBAChB,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC3B,aAAa,EAAE,CAAC;gBAChB,kBAAkB,EAAE,CAAC;gBAErB,IAAI,OAAO,EAAE;oBACT,MAAM,CAAC,KAAK,CAAC,CAAC;iBACjB;qBACI;oBACD,OAAO,EAAE,CAAC;iBACb;gBAED,aAAa,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;YAED,SAAS,gBAAgB,CAAC,IAAS;gBAC/B,IAAI,SAAS,GAAG,KAAK,CAAC;gBAEtB,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS;oBAC7B,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,EAAE;oBACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;oBACpC,SAAS,GAAG,IAAI,CAAC;iBACpB;gBAED,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE;oBACxB,IAAI,OAAe,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,WAAW;wBACjB,OAAO,GAAG,CAAC,CAAC;yBACX,IAAI,UAAU,IAAI,IAAI;wBACvB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;;wBAEpB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEhF,IAAI,OAAO,GAAG,CAAC;wBACX,OAAO,GAAG,CAAC,CAAC;oBAEhB,IAAI,OAAO,IAAI,IAAI,EAAE;wBACjB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;wBAC1B,SAAS,GAAG,IAAI,CAAC;qBACpB;iBACJ;gBAED,IAAI,SAAS;oBACT,QAAQ,EAAE,CAAC;YACnB,CAAC;YAED,SAAS,aAAa;gBAClB,OAAO;oBACH,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,IAAI,EAAE,IAAI;oBACV,UAAU,EAAE,UAAU;oBACtB,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,YAAY;oBACnB,QAAQ,EAAE,IAAI;iBACjB,CAAC;YACN,CAAC;YAED,SAAS,IAAI,CAAC,QAAa,EAAE,SAAkB;gBAC3C,OAAO,GAAG,SAAS,CAAC;gBACpB,YAAY,GAAG,QAAQ,CAAC;gBACxB,aAAa,GAAG,IAAI,CAAC;gBACrB,IAAI,SAAS,KAAK,KAAK,EAAE;oBACrB,KAAK,CAAC,OAAO,EAAE,CAAC;iBACnB;gBACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrB,IAAI,SAAS,KAAK,KAAK,EAAE;oBACrB,KAAK,CAAC,OAAO,EAAE,CAAC;iBACnB;gBACD,OAAO,GAAG,EAAE,CAAC;gBACb,aAAa,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;YACd,CAAC;YAED;;;;eAIG;YACH,SAAS,QAAQ,CAAC,KAAU,EAAE,SAAkB;gBAC5C,OAAO,GAAG,SAAS,CAAC;gBACpB,aAAa,GAAG,KAAK,CAAC;gBACtB,YAAY,GAAG,IAAI,CAAC;gBACpB,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC5C,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,CAAC,CAAC;gBACF,8DAA8D;gBAC9D,iFAAiF;gBACjF,IAAI,SAAS,KAAK,KAAK,EAAE;oBACrB,KAAK,CAAC,OAAO,EAAE,CAAC;iBACnB;gBACD,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;gBACxC,IAAI,SAAS,KAAK,KAAK,EAAE;oBACrB,KAAK,CAAC,OAAO,EAAE,CAAC;iBACnB;gBACD,OAAO,GAAG,EAAE,CAAC;gBACb,aAAa,EAAE,CAAC;gBAChB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,MAAM;gBACX,IAAI,YAAY,EAAE;oBACd,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;iBAC/B;qBAAM,IAAI,aAAa,EAAE;oBACtB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;iBACpC;YACL,CAAC;YAED,SAAS,SAAS,CAAC,QAAa;gBAC5B,MAAM,GAAG,QAAQ,CAAC;gBAClB,IAAI,OAAO,CAAC,aAAa,EAAE;oBACvB,cAAc,GAAG,aAAa,EAAE,CAAC;oBACjC,yBAAyB,GAAG,wBAAwB,EAAE,CAAC;iBAC1D;gBACD,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,WAAW;gBAChB,OAAO,aAAa,CAAC;YACzB,CAAC;YAED,SAAS,iBAAiB,CAAC,OAAY;gBACnC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;gBACxB,cAAc,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;gBACvD,cAAc,CAAC,oBAAoB,GAAG,EAAE,CAAC;gBACzC,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC3B,IAAI,GAAG,GAAG,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC;gBAC5C,OAAO,GAAG,EAAE,EAAE;oBACV,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;iBACtG;gBACD,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;YAED,SAAS,cAAc;gBACnB,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,EAAE,CAAC;gBAEpD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE;oBACpC,cAAc,CAAC,WAAW,GAAG,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC9D,cAAc,CAAC,oBAAoB,GAAG,cAAc,CAAC,oBAAoB,IAAI,EAAE,CAAC;oBAChF,IAAI,GAAQ,EAAE,GAAG,GAAG,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC;oBAEtD,OAAO,GAAG,EAAE,EAAE;wBACV,GAAG,GAAG,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;wBACtC,GAAG,CAAC,IAAI,EAAE,CAAC;wBACX,cAAc,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBAC1D,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;qBAC1C;oBACD,cAAc,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC5C;gBAED,OAAO,cAAc,CAAC,MAAM,CAAC;YACjC,CAAC;YAED,SAAS,WAAW,CAAC,YAAiB;gBAClC,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE;oBACpC,OAAO,CAAC,yBAAyB,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;iBAClF;gBAED,MAAM,GAAG,EAAE,CAAC;gBACZ,oBAAoB,GAAG,EAAE,CAAC;gBAC1B,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;gBAClC,aAAa,GAAG,CAAC,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAEhF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvF,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,IAAI,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC;oBACpE,EAAE,CAAC,WAAW,GAAG,OAAO,EAAE,CAAC,MAAM,KAAK,UAAU,CAAC;oBAEjD,gCAAgC;oBAChC,EAAE,CAAC,oBAAoB,GAAG,EAAE,CAAC;oBAC7B,IAAI,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;oBAChC,OAAO,GAAG,EAAE,EAAE;wBACV,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;qBAC9E;oBAED,oBAAoB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;iBAChC;gBAED,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,YAAY,CAAC,CAAS;gBAC3B,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAED,SAAS,UAAU,CAAC,EAAO;gBACvB,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;YAED,SAAS,mBAAmB;gBACxB,IAAI,CAAC,QAAQ,EAAE;oBACX,QAAQ,GAAG,EAAE,CAAC;oBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;qBACrC;iBACJ;YACL,CAAC;YAED,SAAS,UAAU,CAAC,EAAO;gBACvB,mBAAmB,EAAE,CAAC;gBACtB,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;YAED,SAAS,WAAW,CAAC,EAAO;gBACxB,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;YAED,SAAS,YAAY,CAAC,OAAc;gBAChC,IAAI,IAAI,GAAU,EAAE,CAAC;gBACrB,mBAAmB,EAAE,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,GAAG,IAAI,IAAI,EAAE;wBACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;qBAC3B;iBACJ;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,SAAS,YAAY,CAAC,QAAe;gBACjC,IAAI,GAAG,GAAU,EAAE,CAAC;gBACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC7C,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;wBAC3B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;qBACnD;iBACJ;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;YAED,SAAS,UAAU,CAAC,EAAO,EAAE,IAAS;gBAClC,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE;oBACtD,MAAM,4BAA4B,CAAC;iBACtC;gBACD,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,OAAO,EAAE;oBACV,OAAO,GAAG,EAAE,CAAC;iBAChB;gBACD,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACnB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,UAAU,CAAC,YAAoB,EAAE,IAAS;gBAC/C,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACpC,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC5B,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,OAAO,CAAC,IAAS;gBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAChC,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,UAAU,CAAC,EAAO;gBACvB,IAAI,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;gBACtB,IAAI,GAAG,KAAK,SAAS,EAAE;oBACnB,MAAM,YAAY,CAAC;iBACtB;gBACD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;gBACnB,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACrB,aAAa,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,OAAO;gBACZ,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,SAAS,SAAS;gBACd,OAAO,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC;YAED,SAAS,OAAO,CAAC,CAAS;gBACtB,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAEnB,+EAA+E;gBAC/E,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;oBACjE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnC,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE;wBACtB,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC7B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;qBAC/D;iBACJ;gBACD,qDAAqD;qBAChD,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACtD,eAAe,CAAC,IAAI,CAAC,CAAC;iBACzB;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,SAAS,eAAe,CAAC,CAAS;gBAC9B,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,KAAK,SAAS,EAAE;oBACpB,OAAO,IAAI,CAAC;iBACf;gBAED,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,OAAO,EAAE;oBACd,OAAO,OAAO,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;iBACtE;gBAED,4BAA4B;gBAC5B,IAAI,IAAI,CAAC,aAAa,EAAE;oBACpB,OAAO,OAAO,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;iBACvE;gBAED,OAAO,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YACjF,CAAC;YAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,QAAiB;gBAC7D,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAC3C,oBAAoB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBAC7B,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC;qBACzC;iBACJ;qBAAM;oBACH,oBAAoB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBACjC,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC;iBAC7C;gBACD,OAAO,EAAE,CAAC;YACd,CAAC;YAED;;eAEG;YACH,SAAS,iBAAiB,CAAC,KAAa;gBACpC,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC;YAED;;eAEG;YACH,SAAS,eAAe,CAAC,KAAa;gBAClC,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;YAED,SAAS,0BAA0B,CAAC,IAAS;gBACzC,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC7D,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;iBACjF;qBAAM;oBACH,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;iBAChF;YACL,CAAC;YAED,SAAS,mBAAmB,CAAC,IAAS,EAAE,QAAa;gBACjD,IAAI,IAAI,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;gBAC5C,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC;gBACpG,OAAO,EAAE,CAAC;YACd,CAAC;YAED;;;;;eAKG;YACH,SAAS,aAAa,CAAC,OAAc;gBACjC,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjD,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;YAED;;;;;eAKG;YACH,SAAS,WAAW,CAAC,OAAc;gBAC/B,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjD,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;YAED,SAAS,SAAS;gBACd,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,SAAS,gBAAgB,CAAC,WAAgB,EAAE,GAAQ,EAAE,KAAa,EAAE,WAAgB,EAAE,MAAa;gBAChG,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAE7B,IAAI,CAAC,KAAK,EAAE;oBACR,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAO,CAAC;oBAC/B,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;oBAClB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBACpB,KAAK,CAAC,WAAW,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;oBAC3F,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;oBAC9B,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;iBAC5B;gBAED,OAAO,KAAK,CAAC;YACjB,CAAC;YAED,SAAS,aAAa,CAAC,IAAW,EAAE,WAAiB;gBACjD,IAAI,KAAU,CAAC;gBACf,IAAI,GAAQ,CAAC;gBACb,IAAI,MAAM,GAAU,EAAE,CAAC;gBACvB,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAM,CAAC;gBACX,IAAI,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAW,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAChE,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAC7B,KAAK,GAAG,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;iBAC1E;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACzC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACZ,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBACnD,KAAK,GAAG,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;oBAEvE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;iBACjC;gBAED,IAAI,KAAK,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACpC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBAClB,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;qBACnD;iBACJ;gBAED,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAE3C,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,SAAS,eAAe,CAAC,MAAW;gBAChC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBACzB,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,WAAW,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;gBACxD,IAAI,GAAQ,EAAE,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC;gBAE1C,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,oBAAoB,EAAE;oBACzC,6CAA6C;oBAC7C,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;oBAC5B,OAAO,CAAC,EAAE,EAAE;wBACR,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE;4BACrC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;yBAC3C;qBACJ;iBACJ;gBAED,OAAO,GAAG,EAAE,EAAE;oBACV,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBAC1B,GAAG,CAAC,IAAI,EAAE,CAAC;oBACX,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,oBAAoB,EAAE;wBACzC,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;qBACxD;yBAAM;wBACH,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;qBACtD;oBACD,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;iBAC3B;gBACD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC9B,CAAC;YAED,SAAS,cAAc,CAAC,KAAU;gBAC9B,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpC,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAW,CAAC;gBAC9C,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACrB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;gBACtB,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;oBAC3B,eAAe,CAAC,MAAM,CAAC,CAAC;iBAC3B;YACL,CAAC;YAED,SAAS,SAAS,CAAC,MAAa,EAAE,KAAc;gBAC5C,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;gBACnB,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,cAAc,GAAG,EAAE,CAAC,SAAS,CAAC;gBAClC,IAAI,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAChD,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAM,CAAC;gBAChC,OAAO,GAAG,EAAE,EAAE;oBACV,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAEhB,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;wBACvC,SAAS;qBACZ;oBAED,4FAA4F;oBAC5F,IAAI,CAAC,CAAC,MAAM,EAAE;wBACV,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;qBAClC;oBAED,IAAI,EAAE,CAAC,WAAW,CAAC,MAAM,IAAI,CACzB,EAAE,CAAC,cAAc,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;wBACtE,cAAc,CAAC,CAAC,CAAC,CAAC;qBACrB;oBAED,CAAC,CAAC,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;oBAC5D,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;iBACtD;YACL,CAAC;YAED,SAAS,kBAAkB,CAAC,MAAa,EAAE,KAAc;gBACrD,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;gBACnB,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,WAAW,GAAU,EAAE,EAAE,IAAW,EAAE,EAAE,GAAG,CAAC,EAAE,CAAM,CAAC;gBACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC3C,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACd,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAEtB,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE;wBACd,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;wBACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4BAC3C,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;yBAC/B;qBACJ;oBAED,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,kBAAkB,CAAC,EAAE;wBAC5E,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;qBAChC;iBACJ;gBACD,OAAO,WAAW,CAAC;YACvB,CAAC;YAED,SAAS,eAAe,CAAC,EAAO;gBAC5B,IAAI,OAAO,GAAG,0CAA0C,CAAC;gBACzD,IAAI,OAAO,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3C,OAAO;oBACH,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;oBAC7B,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;iBACnB,CAAC;YACN,CAAC;YAED,SAAS,sBAAsB,CAAC,UAAe;gBAC3C,IAAI,eAAe,GAAG,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC7D,IAAI,EAAE,GAAQ,IAAI,QAAQ,CACtB,QAAQ,EACR,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,4CAA4C;oBACtF,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB;oBAC7C,eAAe,CAAC,IAAI;oBACpB,GAAG,CACN,CAAC;gBACF,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,GAAG,yBAAyB,CAAC;gBACrD,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,aAAa;gBAClB,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBAEzC,IAAI,UAAU,GAAG,UAAU,CAAC,IAAI;qBAC3B,OAAO,CAAC,2BAA2B,EAAE,2BAA2B,CAAC;qBACjE,OAAO,CAAC,0BAA0B,EAAE,qDAAqD,CAAC;qBAC1F,OAAO,CAAC,+BAA+B,EACxC,kEAAkE,CAAC,CAAC;gBAExE,kEAAkE;gBAClE,qDAAqD;gBACrD,IAAI,GAAG,GAAG;oBACN,+BAA+B;oBAC/B,8BAA8B;oBAC9B,8BAA8B;oBAC9B,aAAa;oBACb,0DAA0D;oBAC1D,uBAAuB;oBACvB,YAAY;oBACZ,IAAI;oBACJ,kBAAkB;oBAClB,KAAK;iBACR,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACX,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gBAC9C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEtD,IAAI,EAAE,GAAQ,IAAI,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;gBAChD,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,GAAG,gBAAgB,CAAC;gBAC5C,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,wBAAwB;gBAC7B,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBAEzC,IAAI,UAAU,GAAG,UAAU,CAAC,IAAI;qBAC3B,OAAO,CAAC,2BAA2B,EAAE,2BAA2B,CAAC;qBACjE,OAAO,CAAC,0BAA0B,EAAE,uEAAuE,CAAC;qBAC5G,OAAO,CAAC,+BAA+B,EACxC,iFAAiF,CAAC,CAAC;gBAEvF,kEAAkE;gBAClE,qDAAqD;gBACrD,IAAI,GAAG,GAAG;oBACN,uCAAuC;oBACvC,8BAA8B;oBAC9B,8BAA8B;oBAC9B,aAAa;oBACb,0DAA0D;oBAC1D,uBAAuB;oBACvB,oBAAoB;oBACpB,4BAA4B;oBAC5B,sBAAsB;oBACtB,IAAI;oBACJ,YAAY;oBACZ,IAAI;oBACJ,kBAAkB;oBAClB,KAAK;iBACR,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACX,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gBAC9C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEtD,IAAI,EAAE,GAAQ,IAAI,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;gBACvD,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,GAAG,2BAA2B,CAAC;gBACvD,OAAO,EAAE,CAAC;YACd,CAAC;YAED,SAAS,gBAAgB,CAAC,KAAY,EAAE,IAAS;gBAC7C,IAAI,MAAM,GAAU,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;gBAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;wBACxB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;qBAC5B;iBACJ;gBAED,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,SAAS,2BAA2B,CAAC,KAAY,EAAE,IAAS,EAAE,KAAU;gBACpE,IAAI,MAAM,GAAU,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,IAAS,CAAC;gBAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAChB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;wBACV,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;qBACxB;yBAAM,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;wBAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;wBACrB,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;qBACnB;iBACJ;gBAED,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,SAAS,wBAAwB,CAAC,KAAY;gBAC1C,IAAI,MAAM,EAAE;oBACR,IAAI,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC;oBAC5E,IAAI,sBAAsB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,2BAA2B,CAAC;oBAE7G,IAAI,YAAY,CAAC,iBAAiB,EAAE;wBAChC,aAAa,GAAG,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;qBAC1D;yBAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE;wBACvC,aAAa,GAAG,sBAAsB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;qBAC1E;yBAAM,IAAI,CAAC,YAAY,CAAC,iBAAiB,EAAE;wBACxC,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;qBAClD;iBACJ;qBAAM;oBACH,gEAAgE;oBAChE,iEAAiE;oBACjE,gBAAgB;oBAChB,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;iBAClC;gBAED,uBAAuB;gBACvB,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YACpE,CAAC;YAED,SAAS,WAAW,CAAC,IAAW,EAAE,OAAc;gBAC5C,IAAI,IAAS,EAAE,CAAM,EAAE,eAAwB,EAAE,IAAI,GAAU,EAAE,CAAC;gBAClE,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;gBAElC,IAAI,YAAY,IAAI,YAAY,CAAC,iBAAiB,EAAE;oBAChD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EACb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC,CAAC;iBACjE;gBAED,IAAI,YAAY,IAAI,YAAY,CAAC,gBAAgB,EAAE;oBAC/C,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EACxB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;iBACnD;gBAED,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC9C,IAAI,CAAC,IAAI,EAAE,EAAE;wBACT,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;qBACzB;yBAAM;wBACH,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wBAClB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBAEZ,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;4BACpF,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;4BAC1B,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;+BAC7B,CAAC,eAAe;gCACf,8DAA8D;gCAC9D,6CAA6C;gCAC7C,kEAAkE;gCAClE,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;+BACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;+BACjC,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAC3C;4BACE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;yBACzB;qBACJ;iBACJ;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,SAAS,MAAM,CAAC,MAAa;gBACzB,QAAQ,GAAG,IAAI,CAAC;gBAEhB,IAAI,YAAY,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,iBAAiB;oBACpE,YAAY,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,iBAAiB,EAAE;oBACtE,WAAW,GAAG,EAAE,CAAC;iBACpB;gBAED,IAAI,aAAa,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;gBACrD,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;gBACpC,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;gBAEjC,cAAc,CAAC,MAAM,GAAG,EAAE,CAAC;gBAE3B,MAAM,GAAG,EAAE,CAAC;gBACZ,IAAI,aAAa,CAAC,MAAM,EAAE;oBACtB,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;oBAChC,IAAI,MAAM,CAAC,MAAM,EAAE;wBACf,SAAS,CAAC,MAAM,CAAC,CAAC;wBAClB,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;qBACxC;iBACJ;gBAED,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAEtC,IAAI,GAAG,OAAO,CAAC;gBAEf,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,SAAS,OAAO;gBACZ,IAAI,OAAO,EAAE;oBACT,OAAO;iBACV;gBAED,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9B,IAAI,eAAe,GAAG,SAAS,CAAC;gBAEhC,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,gDAAgD;gBAE1E,OAAO,GAAG,IAAI,CAAC;gBACf,gBAAgB,GAAG,YAAY,CAAC;gBAChC,YAAY,GAAG,EAAE,CAAC;gBAElB,IAAI,eAAe,KAAK,SAAS,EAAE;oBAC/B,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC3D;gBACD,IAAI,WAAW,KAAK,IAAI,CAAC,MAAM,EAAE;oBAC7B,iBAAiB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;iBACzG;gBACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACjB,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;iBACpE;YACL,CAAC;YAED;;;;;;;;;;;;;;;;;;eAkBG;YACH,SAAS,iBAAiB,CAAC,IAAS,EAAE,cAAuB,EAAE,+BAAwC;gBACnG,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,IAAI,SAAc,CAAC;gBACnB,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC/D,IAAI,uBAAuB,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAEhD,SAAS,iBAAiB,CAAC,MAAa;oBACpC,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;wBAC9C,OAAO;qBACV;oBAED,cAAc,GAAG,MAAM,CAAC;oBAExB,uBAAuB,CAAC,MAAM,CAAC;wBAC3B,MAAM,EAAE,IAAI;wBACZ,KAAK,EAAE,cAAc;wBACrB,UAAU,EAAE,IAAI;qBACnB,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC;gBAED,SAAS,MAAM;oBACX,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,SAAS,GAAG,IAAI,CAAC;wBACjB,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;wBACrD,IAAI,CAAC,cAAc,EAAE;4BACjB,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;yBACtD;wBACD,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;wBACnC,SAAS,GAAG,KAAK,CAAC;qBACrB;gBACL,CAAC;gBAED,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,CAAM,EAAE,IAAS;oBAC5D,IAAI,SAAS,EAAE;wBAAE,OAAO;qBAAE;oBAC1B,IAAI,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;oBAClE,IAAI,CAAC,+BAA+B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE;wBACpE,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;qBACxC;yBAAM;wBACH,gCAAgC;wBAChC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnG,8BAA8B;wBAC9B,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;qBACzD;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAEzC,OAAO,uBAAuB,CAAC;YACnC,CAAC;YAED,SAAS,qBAAqB,CAAC,IAAgB,EAAE,GAAW;gBACxD,IAAI,QAAa,CAAC;gBAClB,IAAI,SAAc,CAAC;gBAEnB,uEAAuE;gBACvE,mCAAmC;gBACnC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE/C,SAAS,kBAAkB,CAAC,IAAS;oBACjC,QAAQ,GAAG,EAAE,CAAC;oBACd,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;wBAClB,IAAI,EAAE,GAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;wBACpC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;qBAC5B;gBACL,CAAC;gBAED,SAAS,MAAM;oBACX,IAAI,QAAQ,EAAE;wBACV,SAAS,GAAG,IAAI,CAAC;wBACjB,mBAAmB,EAAE,CAAC;wBACtB,IAAI,OAAO,GAAG,EAAE,CAAC;wBACjB,KAAK,IAAI,EAAE,IAAI,QAAQ,EAAE;4BACrB,IAAI,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;4BACvB,IAAI,GAAG,IAAI,SAAS,EAAE;gCAClB,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;6BAC/B;yBACJ;wBACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;wBACpC,SAAS,GAAG,KAAK,CAAC;qBACrB;gBACL,CAAC;gBAED,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,IAAI;oBACnD,IAAI,SAAS,EAAE;wBAAE,OAAO;qBAAE;oBAC1B,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;wBAAE,OAAO;qBAAE;oBAChC,IAAI,IAAI,CAAC,IAAI,EAAE;wBACX,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACjC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;YAED,SAAS,OAAO,CAAC,IAAS;gBAEtB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI;oBAC1B,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;gBAElD,YAAY,GAAG,IAAI,CAAC;gBACpB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3B,OAAO,GAAG,KAAK,CAAC;gBAEhB,IAAI,CAAC,IAAI,EAAE;oBACP,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC7B,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;oBAC5C,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,OAAO,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAEpC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC/C,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;;oBAEd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE3E,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACjB,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBAE7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAExB,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YAChD,CAAC;YAED,SAAS,QAAQ;gBACb,IAAI,aAAa,GAAG,CAAC,EAAE;oBACnB,aAAa,EAAE,CAAC;oBAChB,OAAO;iBACV;gBAED,aAAa,GAAG,CAAC,CAAC;gBAElB,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAE3B,IAAI,IAAI,CAAC,QAAQ,EAAE;oBACf,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,EAAE,KAAK,KAAK;wBACZ,OAAO,KAAK,CAAC;iBACpB;gBAED,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAE3B,IAAI,CAAC,IAAI,CAAC,GAAG;oBACT,OAAO,KAAK,CAAC;gBAEjB,oBAAoB;gBAEpB,IAAI,CAAC,IAAI,CAAC,UAAU;oBAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;gBAExB,IAAI,OAAO,GAAyB,EAAE,CAAC;gBAEvC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;gBACpD,IAAI,IAAI;oBACJ,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;gBACxB,IAAI,IAAI,CAAC,WAAW;oBAChB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;gBAEpC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;oBACnC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;wBACtB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;yBAC1B;wBACD,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBAChC;iBACJ;gBAED,IAAI,IAAI,CAAC,MAAM,EAAE;oBACb,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC5C;gBAED,IAAI,EAAE,GAAG,QAAQ,CAAC;gBAElB,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,IAAI,WAAW,GAAG;oBACd,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,IAAI,CAAC,MAAM;oBACjB,WAAW,EAAE,WAAW;oBACxB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,UAAU,QAAkC;wBACjD,OAAO,GAAG,KAAK,CAAC;wBAChB,IAAI,QAAQ,CAAC,KAAK;4BACd,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;4BAE7D,OAAO,CAAC,QAAQ,CAAC,CAAC;wBACtB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC;oBACD,KAAK,EAAE,UAAU,GAAQ,EAAE,MAAW,EAAE,EAAO;wBAC3C,OAAO,GAAG,KAAK,CAAC;wBAEhB,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;4BAC9F,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;4BACzC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;gCACpC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCACrD,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;gCAC5C,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gCAC1B,OAAO;6BACV;yBACJ;wBAED,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;wBAC5B,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;wBAC5C,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC9B,CAAC;oBACD,QAAQ,EAAE;wBACN,OAAO,GAAG,KAAK,CAAC;oBACpB,CAAC;iBACJ,CAAA;gBAED,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAC5C,IAAI,EAAE,KAAK,KAAK,EAAE;wBACd,OAAO,GAAG,KAAK,CAAC;wBAChB,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;wBAC5C,OAAO,KAAK,CAAC;qBAChB;iBACJ;gBAED,WAAW,CAAC,IAAI,GAAS,CAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAErD,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC5C,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAClC,CAAC;YAED,SAAS,YAAY;gBACjB,IAAI,aAAa,IAAI,CAAC;oBAClB,aAAa,GAAG,CAAC,CAAC;gBACtB,aAAa,EAAE,CAAC;YACpB,CAAC;YAED,SAAS,cAAc;gBACnB,IAAI,aAAa,GAAG,CAAC,EAAE;oBACnB,aAAa,EAAE,CAAC;oBAChB,IAAI,aAAa,IAAI,CAAC,IAAI,aAAa,GAAG,CAAC;wBACvC,QAAQ,EAAE,CAAC;iBAClB;YACL,CAAC;YAED,IAAI,GAAG;gBACH,UAAU;gBACV,aAAa,EAAE,WAAW;gBAC1B,WAAW,EAAE,SAAS;gBACtB,kBAAkB,EAAE,gBAAgB;gBACpC,eAAe,EAAE,aAAa;gBAC9B,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,QAAQ;gBACpB,UAAU,EAAE,QAAQ;gBACpB,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,QAAQ;gBACpB,QAAQ,EAAE,MAAM;gBAChB,mBAAmB,EAAE,iBAAiB;gBACtC,gBAAgB,EAAE,cAAc;gBAChC,aAAa,EAAE,WAAW;gBAC1B,aAAa,EAAE,WAAW;gBAC1B,mBAAmB,EAAE,iBAAiB;gBACtC,iBAAiB,EAAE,eAAe;gBAClC,eAAe,EAAE,aAAa;gBAC9B,aAAa,EAAE,WAAW;gBAC1B,WAAW,EAAE,SAAS;gBACtB,YAAY,EAAE,UAAU;gBACxB,YAAY,EAAE,UAAU;gBACxB,aAAa,EAAE,WAAW;gBAC1B,cAAc,EAAE,YAAY;gBAC5B,cAAc,EAAE,YAAY;gBAC5B,cAAc,EAAE,YAAY;gBAC5B,iBAAiB,EAAE,eAAe;gBAClC,eAAe,EAAE,aAAa;gBAC9B,SAAS,EAAE,OAAO;gBAClB,YAAY,EAAE,UAAU;gBACxB,YAAY,EAAE,UAAU;gBACxB,SAAS,EAAE,OAAO;gBAClB,YAAY,EAAE,UAAU;gBACxB,mBAAmB,EAAE,iBAAiB;gBACtC,uBAAuB,EAAE,qBAAqB;gBAE9C,WAAW,EAAE,SAAS;gBACtB,SAAS,EAAE,OAAO;gBAClB,iBAAiB,EAAE,eAAe;gBAElC,mBAAmB,EAAE,iBAAiB;gBACtC,eAAe,EAAE,aAAa;gBAC9B,qBAAqB,EAAE,mBAAmB;gBAE1C,SAAS,EAAE,OAAO;gBAClB,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,YAAY;gBAC5B,gBAAgB,EAAE,cAAc;gBAChC,eAAe,EAAE,aAAa;gBAC9B,cAAc,EAAE,YAAY;gBAC5B,eAAe,EAAE,aAAa;aACjC,CAAC;YAEF,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;YACrC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,CAAC;YACxD,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;YACtC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;YAEhC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;YACzC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;YAC5C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;YAC7C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;YACnD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC3E,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;YAE1B,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACjC,QAAQ,EAAE,CAAC;aACd;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QACL,iBAAC;IAAD,CAAC,AAvsCD,IAusCC;IAvsCY,gBAAU,aAusCtB,CAAA;AACL,CAAC,EAzsCS,KAAK,KAAL,KAAK,QAysCd;AAED,WAAU,KAAK;IAAC,IAAA,WAAW,CAoI1B;IApIe,WAAA,WAAW;QAEvB,SAAgB,GAAG,CAAC,KAAa;YAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YAEpB,IAAI,CAAC,IAAI,GAAG;gBACR,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAClB,CAAC,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,UAAU,IAAS;gBACjC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC1C,IAAI,CAAC,aAAa,EAAE,CAAC;oBACrB,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;iBAChC;YACL,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,UAAU,WAAgB;gBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBAClB,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC;iBACxB;gBACD,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;oBACzB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;iBACjE;YACL,CAAC,CAAC;QACN,CAAC;QA1Be,eAAG,MA0BlB,CAAA;QAED,SAAgB,WAAW,CAAC,KAAa,EAAE,aAAqB;YAC5D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;YAEpC,IAAI,CAAC,IAAI,GAAG;gBACR,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YAC1B,CAAC,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,UAAU,IAAS;gBACjC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;oBAChD,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;oBAC7C,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;iBAC1D;YACL,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,UAAU,WAAgB;gBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBAClB,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC;iBACxB;gBAED,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;oBAChC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;iBAChE;YACL,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,GAAG,UAAU,GAAQ;gBAC7B,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,CAAC,CAAC;QACN,CAAC;QA/Be,uBAAW,cA+B1B,CAAA;QAED,SAAgB,GAAG,CAAC,KAAa;YAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YAEpB,IAAI,CAAC,IAAI,GAAG;gBACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,UAAU,IAAS;gBACjC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC1C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;wBACtC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;qBACnB;iBACJ;YACL,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,UAAU,WAAgB;gBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBAClB,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC;iBACxB;gBACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC7C,CAAC,CAAA;QACL,CAAC;QAtBe,eAAG,MAsBlB,CAAA;QAED,SAAgB,GAAG,CAAC,KAAa;YAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YAEpB,IAAI,CAAC,IAAI,GAAG;gBACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,UAAU,IAAS;gBACjC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC1C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE;wBACtC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;qBACnB;iBACJ;YACL,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,UAAU,WAAgB;gBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBAClB,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC;iBACxB;gBACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC7C,CAAC,CAAA;QACL,CAAC;QAtBe,eAAG,MAsBlB,CAAA;QAED,SAAgB,GAAG,CAAC,KAAa;YAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YAEpB,IAAI,CAAC,IAAI,GAAG;gBACR,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACrB,CAAC,CAAC;YAEF,IAAI,CAAC,UAAU,GAAG,UAAU,IAAS;gBACjC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBAC1C,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;iBAChC;YACL,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,UAAU,WAAgB;gBACzC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;oBAClB,WAAW,CAAC,GAAG,GAAG,EAAE,CAAC;iBACxB;gBACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YAC7C,CAAC,CAAA;QACL,CAAC;QApBe,eAAG,MAoBlB,CAAA;IACL,CAAC,EApIe,WAAW,GAAX,iBAAW,KAAX,iBAAW,QAoI1B;AAAD,CAAC,EApIS,KAAK,KAAL,KAAK,QAoId;ACl4DD,IAAU,CAAC,CA4dV;AA5dD,WAAU,CAAC;IAEP,IAAI,YAAuD,CAAC;IAE5D,SAAS,iBAAiB,CAAC,OAAoB,EAAE,OAAe;QAC5D,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAS,EAAE,CAAM;YAEpD,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAEhC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAEF,SAAS,+BAA+B;QACpC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,EAAE;YAC9C,CAAC,CAAC,SAAiB,CAAC,SAAS,CAAC,gBAAgB,EAAE,UAAU,KAAU,EAAE,OAAY;gBAC/E,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACpC,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE;oBAC7B,OAAO,MAAM,CAAC;iBACjB;gBACD,IAAI,MAAM,GAAI,CAAS,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,EAAE;oBACT,OAAO,IAAI,CAAC;iBACf;gBACD,IAAI,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC;gBACrC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC3C,OAAO,IAAI,CAAC;iBACf;gBAED,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;gBACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1C,IAAI,OAAO,GAAI,EAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;oBAClE,IAAI,OAAO,EAAE;wBACT,IAAI,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;wBAC1B,IAAI,OAAO,IAAI,IAAI,EAAE;4BACjB,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;4BAC5C,OAAO,KAAK,CAAC;yBAChB;qBACJ;iBACJ;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC,EAAE,UAAU,CAAM,EAAE,CAAM;gBACvB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED,SAAS,8BAA8B;QACnC,+BAA+B,EAAE,CAAC;QAElC,IAAI,CAAC,GAAQ,CAAC,CAAC,SAAS,CAAC;QACzB,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;QAChB,YAAY,GAAG,CAAC,CAAC,SAAS,CAAC;QAC3B,CAAC,CAAC,SAAS,GAAG,iBAAiB,CAAC;QAEhC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,OAAO;YACnD,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/B,IAAI,CAAC;gBACD,OAAO,CAAC,CAAC;YAEb,IAAI,CAAC,GAAG,EAAA,SAAS,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC;gBACF,OAAO,KAAK,CAAC;YAEjB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,EAAE,UAAU,KAAK,EAAE,OAAO;YACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAA,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,OAAO;YAC3D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAA,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,OAAO;YACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAA,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,OAAO;YACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAA,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,OAAO;YACnD,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB;gBAC7B,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,sIAAsI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxL,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,OAAO;YAC3D,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,MAAM;gBACN,OAAO,MAAM,CAAC;YAClB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;gBAEzB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM;oBACP,OAAO,MAAM,CAAC;aACrB;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,OAAO;YACtD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAS,CAAC,CAAC,SAAU,CAAC,QAAQ,CAAC;QAEpC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,QAAQ,GAAG,UAAU,OAAY;YAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,IAAI,GAAG;YACL,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,SAAS,cAAc,CAAC,KAAU;gBAC9B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;oBACjB,OAAO;gBACX,IAAI,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBACvG,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACtG,CAAC;YACD,SAAS,QAAQ,CAAC,KAAU;gBACxB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACjB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE;oBAC5B,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBAC7B,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;iBACnC;YACL,CAAC;YACD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;iBACd,EAAE,CAAC,2CAA2C,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QACvF,CAAC,CAAC;QACF,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,YAAY,CAAC;QACnC,CAAC,CAAC,YAAY,GAAG;YACb,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY;gBAC1B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC;QAClC,CAAC,CAAC,WAAW,GAAG,UAAU,OAAY,EAAE,KAAc;YAClD,IAAI,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;YACvC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;gBACnF,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACpC;QACL,CAAC,CAAC;QACF,CAAC,CAAC,QAAQ,GAAG;YACT,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC,CAAC;QACF,MAAM,CAAC;YACH,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;gBAC3B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;gBACvC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBACzC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC;gBACzC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;gBACnC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBACjC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAC7B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC;gBACvC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBACtC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;aAChC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAEF,SAAgB,qBAAqB,CAAC,SAAc;QAChD,SAAS,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC;QACvC,SAAS,CAAC,QAAQ,CAAC,aAAa,GAAG;YAC/B,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;IACN,CAAC;IALe,uBAAqB,wBAKpC,CAAA;IAAA,CAAC;IAEF,SAAgB,eAAe,CAAC,OAA2C;QACvE,OAAO,CAAC,CAAC,MAAM,CAAC;YACZ,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,GAAG;YACT,UAAU,EAAE,OAAO;YACnB,cAAc,EAAE,UAAU,KAAU,EAAE,OAAY;gBAC9C,IAAI,KAAK,GAAQ,IAAI,CAAC;gBACtB,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpC,IAAI,EAAE,EAAE;oBACJ,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;oBACpB,IAAI,CAAC,KAAK,CAAC,MAAM;wBACb,KAAK,GAAG,IAAI,CAAC;;wBAEb,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;iBACxB;gBACD,IAAI,KAAK,IAAI,IAAI,EAAE;oBACf,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACrC,IAAI,KAAK,CAAC,MAAM,EAAE;wBACd,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClC,IAAI,KAAK,CAAC,MAAM;4BACZ,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;qBACxB;;wBAEG,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;iBAChC;gBACD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YACD,aAAa,EAAE;gBACX,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,cAAc,EAAE,UAAU,KAAU,EAAE,SAAqC;gBACvE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;gBAEvD,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAT,CAAS,CAAC,CAAC;qBACrC,OAAO,CAAC,qBAAqB,CAAC;qBAC9B,QAAQ,CAAC,iBAAiB,CAAC;qBAC3B,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC;oBACP,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEP,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,EAC9B;oBACI,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;oBACxC,IAAI,EAAE,EAAE;wBACJ,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;4BAC1B,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;4BACzC,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACjC,IAAI,QAAQ,EAAE;gCACV,CAAC,CAAC,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;6BAC5C;yBACJ;wBAED,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE;4BACd,CAAC,CAAC,EAAE,CAAC,OAAO,IAAK,CAAC,CAAC,EAAE,CAAS,CAAC,OAAO,CAAC;gCACnC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO;gCACrC,OAAO,EAAE,QAAQ;6BACpB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;4BAEnB,MAAM,CAAC,UAAU,CAAC;gCACd,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;4BAC7B,CAAC,EAAE,IAAI,CAAC,CAAC;yBACZ;qBACJ;iBACJ;YACL,CAAC;YACD,OAAO,EAAE,UAAU,KAAa;gBAC5B,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;SACJ,EAAE,OAAO,CAAC,CAAC;IAChB,CAAC;IAvEe,iBAAe,kBAuE9B,CAAA;IAAA,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC;QACjD,8BAA8B,EAAE,CAAC;SAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE;QACvB,MAAM,CAAC,UAAU,CAAC;YACd,IAAI,CAAC,CAAC,SAAS;gBACX,8BAA8B,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;KACN;IAED,SAAS,8BAA8B;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;QAChC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACjC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBACjC,OAAO,GAAG,IAAI,CAAC;aAClB;SACJ;QACD,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;YACrB,UAAU,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtD,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC1C,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YACpC,WAAW,EAAE,g0BAAg0B;YAC70B,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,MAAM;YACd,eAAe,EAAE,IAAI;YACrB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,IAAI;SACnB,CAAC,CAAC;IACP,CAAC;IAAA,CAAC;IAEF,IAAI,MAAM,CAAC,QAAQ,CAAC;QAChB,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;QAC9B,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE;QAClD,8BAA8B,EAAE,CAAC;KACpC;SACI;QACD,MAAM,CAAC,UAAU,CAAC;YACd,IAAI,CAAC,CAAC,UAAU;gBACZ,8BAA8B,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;KACN;IAED,SAAS,sBAAsB;QAC3B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,UAAU,KAAU;YAC1D,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;gBAC9C,OAAO,IAAI,CAAC;aACf;YACD,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC,MAAM,CAAC;QAChH,CAAC,CAAC;QAEF,CAAC,UAAU,IAAI;YACX,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG;gBACnC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;oBAC5C,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACvC,OAAO;iBACV;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC,CAAA;QACL,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAEzC,CAAC,UAAU,IAAI;YACX,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG;gBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC9F,CAAC,CAAA;QACL,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC;IAAA,CAAC;IAEF,IAAI,MAAM,CAAC,EAAE,EAAE;QACX,sBAAsB,EAAE,CAAC;KAC5B;SACI;QACD,MAAM,CAAC;YACH,IAAI,MAAM,CAAC,EAAE;gBACT,sBAAsB,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;KACN;IAEA,MAAc,CAAC,SAAS,GAAG,CAAC,UAAU,IAAI;QACvC,OAAO,UAAU,KAAY;YACzB,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACvB,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAI;oBACA,MAAM,GAAI,CAAS,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;wBACzB,iEAAiE;wBACjE,IAAI,MAAM,KAAK,KAAK;4BAChB,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC/C,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;wBACjC,OAAO,MAAM,CAAC,MAAM,CAAC;qBACxB;iBACJ;gBAAC,OAAO,CAAC,EAAE,GAAG;aAClB;YACD,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;IACN,CAAC,CAAC,CAAE,MAAc,CAAC,SAAS,CAAC,CAAC;IAE9B,SAAS,yBAAyB;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG;YAC9B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC,CAAC;IACN,CAAC;IAAA,CAAC;IAEF,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS;QAClB,yBAAyB,EAAE,CAAC;SAC3B;QACD,MAAM,CAAC,UAAU,CAAC;YACd,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS;gBAClB,yBAAyB,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;KACN;IAED,SAAS,iBAAiB;QACtB,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE;YACpB,KAAK,EAAE;gBACH,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,IAAI;iBACjB;gBACD,EAAE,EAAE;oBACA,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,KAAK;iBAClB;gBACD,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,KAAK;iBAClB;gBACD,WAAW,EAAE;oBACT,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,KAAK;iBAClB;gBACD,KAAK,EAAE;oBACH,QAAQ,EAAE,KAAK;iBAClB;gBACD,OAAO,EAAE;oBACL,QAAQ,EAAE,KAAK;iBAClB;gBACD,SAAS,EAAE;oBACP,QAAQ,EAAE,KAAK;iBAClB;aACJ;YACD,MAAM,EAAE,UAAU,aAAkB;gBAChC,IAAI,UAAU,GAAG,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5D,IAAI,WAAW,GAAI,EAAU,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBACzF,IAAI,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAW,CAAC;gBAC3F,IAAI,QAAQ,GAAQ,EAAE,CAAC;gBACvB,IAAI,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;iBACpC;gBAED,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI;oBACf,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBAE1B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;oBACjB,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAE9B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI;oBACxB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;gBAE5C,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;gBAChC,IAAI,WAAW,GAAQ,IAAI,CAAC;gBAE5B,IAAI,IAAI,GAAG,IAAI,CAAA;gBACf,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE;oBACpC,QAAQ,EAAE,QAAQ;iBACrB,CAAC,CAAC;gBAEH,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;gBAE9B,OAAO,EAAE,CAAC;YACd,CAAC;YACD,KAAK,EAAE;gBACH,KAAK,EAAE,UAAU,CAAM;oBACnB,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACnD,CAAC;aACJ;YACD,OAAO,EAAE;gBACL,IAAI,IAAI,GAAG,IAAI,CAAC;gBAEhB,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/D,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAE1B,IAAI,IAAI,CAAC,SAAS,EAAE;oBACf,QAAQ,CAAC,YAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC9E;gBAED,IAAI,IAAI,CAAC,OAAO;oBACZ,QAAQ,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAErE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;oBAClB,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE5D,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC3B,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE;wBACpC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC;;oBAEH,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;wBAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBACrE,CAAC,CAAC,CAAC;YACX,CAAC;YACD,SAAS,EAAE;gBACP,IAAI,IAAI,CAAC,OAAO,EAAE;oBACd,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;iBACvB;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC,EA5dS,CAAC,KAAD,CAAC,QA4dV;AC9dD,IAAU,QAAQ,CAajB;AAbD,WAAU,QAAQ;IAId;QAAuC,qCAA0C;QAC7E,2BAAY,MAAc,EAAE,GAAwB;mBAChD,kBAAM,MAAM,EAAE,GAAG,CAAC;QACtB,CAAC;QAED,wCAAY,GAAZ;YACI,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAM,YAAY,WAAE,CAAC,CAAC;QACpE,CAAC;QAPQ,iBAAiB;YAF7B,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,4BAA4B,EAC5D,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;WACxG,iBAAiB,CAQ7B;QAAD,wBAAC;KAAA,AARD,CAAuC,SAAA,gBAAgB,GAQtD;IARY,0BAAiB,oBAQ7B,CAAA;AACL,CAAC,EAbS,QAAQ,KAAR,QAAQ,QAajB;AAED,WAAU,QAAQ;IAEd;QAEI,4BAAoB,UAA4C,EACpD,MAA4B,EAC5B,YAAmC;YAF/C,iBASC;YATmB,eAAU,GAAV,UAAU,CAAkC;YACpD,WAAM,GAAN,MAAM,CAAsB;YAC5B,iBAAY,GAAZ,YAAY,CAAuB;YAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAI,MAAc,CAAC,UAAU,GAAG,KAAK,EAAE,UAAA,CAAC;gBACtE,KAAI,CAAC,MAAM,EAAE,CAAC;gBACd,KAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,KAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC7B,CAAC,CAAC,CAAC;QACP,CAAC;QAID,iCAAI,GAAJ;YAAA,iBAmBC;YAjBG,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC;aACf;YAED,IAAI,MAAM,GAAG,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;iBACxE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnC,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAI,IAAI,CAAC,MAAc,CAAC,UAAU,EAAE;oBAC7D,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC;aACjB;iBACL;gBACQ,CAAC,CAAC,WAAW,CAAC,8CAA8C,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC/F,OAAO,IAAI,CAAC;aACf;QACL,CAAC;QAED,mCAAM,GAAN;YAEI,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACjC,OAAO,IAAI,CAAC;aACf;YAEV,IAAI,MAAM,GAAG,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnG,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,GAAI,IAAI,CAAC,MAAc,CAAC,UAAU,CAAC,CAAC;aAChE;YAEV,OAAO,MAAM,CAAC;QACT,CAAC;QAED,yCAAY,GAAZ;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;QAED,yCAAY,GAAZ,UAAa,KAAa;YAEtB,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;gBAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,IAAI,EAAE,CAAC;aACf;QACL,CAAC;QA9DQ,kBAAkB;YAD9B,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,6BAA6B,CAAC;WACpD,kBAAkB,CA+D9B;QAAD,yBAAC;KAAA,AA/DD,IA+DC;IA/DY,2BAAkB,qBA+D9B,CAAA;AACL,CAAC,EAlES,QAAQ,KAAR,QAAQ,QAkEjB;AAED,WAAU,QAAQ;IAAC,IAAA,gBAAgB,CAgElC;IAhEkB,WAAA,gBAAgB;QAC/B,SAAgB,aAAa,CAAC,MAAc;YACxC,IAAI,OAAO,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;YACrE,OAAO,MAAM,CAAC;QAClB,CAAC;QAHe,8BAAa,gBAG5B,CAAA;QAED,SAAgB,eAAe,CAAC,MAAc,EAAE,CAAO,EAAE,CAAO,EAAE,EAAQ,EAAE,EAAQ;YAChF,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;YACxC,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;aACxC;YACD,IAAI,CAAC,IAAI,IAAI,EAAE;gBACX,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;aACpC;YACD,IAAI,EAAE,IAAI,IAAI,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;aACzC;YACD,IAAI,CAAC,IAAI,IAAI,EAAE;gBACX,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;aACrC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;QAhBe,gCAAe,kBAgB9B,CAAA;QAED,SAAgB,iBAAiB,CAAC,MAAc;YAC3C,MAAc,CAAC,YAAY,CAAC;gBACzB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,IAAI;gBACjB,QAAQ,EAAE,UAAU;gBACpB,KAAK,EAAE,EAAE,QAAQ,EAAE,yBAAyB,EAAE;aACjD,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QATe,kCAAiB,oBAShC,CAAA;QAED,SAAgB,kBAAkB,CAAC,MAAc;YAC7C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;gBAC9B,IAAI,CAAC,CAAC,KAAK,KAAK,EAAE,EAAE;oBAChB,OAAO;iBACV;gBACD,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC7C,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,UAAU;oBACtE,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;oBACnE,OAAO;iBACV;gBACD,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;oBAC5B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;iBACnC;gBACD,IAAI,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,IAAI,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACpD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC1B,OAAO,GAAG,aAAa,CAAC;qBAC3B;iBACJ;gBACD,IAAI,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;oBACzB,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QA5Be,mCAAkB,qBA4BjC,CAAA;IACL,CAAC,EAhEkB,gBAAgB,GAAhB,yBAAgB,KAAhB,yBAAgB,QAgElC;AAAD,CAAC,EAhES,QAAQ,KAAR,QAAQ,QAgEjB;AAED,WAAU,QAAQ;IAAC,IAAA,kBAAkB,CA0DpC;IA1DkB,WAAA,kBAAkB;QACjC,SAAS,MAAM,CAAC,QAAgB;YAE5B,IAAI,UAAU,GAAI,EAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,UAAU,IAAI,IAAI,IAAK,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;gBAClF,OAAO,UAAU,CAAC;aACrB;YAED,KAAe,UAAuB,EAAvB,KAAA,CAAC,CAAC,MAAM,CAAC,cAAc,EAAvB,cAAuB,EAAvB,IAAuB,EAAE;gBAAnC,IAAI,EAAE,SAAA;gBACP,UAAU,GAAI,EAAU,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC;gBACtD,IAAI,UAAU,IAAI,IAAI,IAAK,EAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;oBAClF,OAAO,UAAU,CAAC;iBACrB;aACJ;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,UAAU,GAAoC,EAAE,CAAC;QAErD,SAAgB,MAAM,CAAC,GAAW;YAC9B,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;gBACzB,IAAI,QAAQ,GAAG,GAAG,CAAC;gBACnB,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAElC,IAAI,UAAU,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE;oBAClD,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC;oBAC1B,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;iBACjC;gBAED,IAAI,UAAU,IAAI,IAAI,EAAE;oBACpB,OAAO,IAAI,CAAC;iBACf;gBAED,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;gBAC7B,OAAO,UAAU,CAAC;aACrB;YAED,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAnBe,yBAAM,SAmBrB,CAAA;QAED,SAAgB,GAAG,CAAC,GAAW;YAE3B,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAEvB,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,IAAI,OAAO,GAAG,GAAG,GAAG,gFAAgF;oBAChG,gGAAgG;oBAChG,qGAAqG;oBACrG,gGAAgG;oBAChG,gHAAgH,CAAC;gBAErH,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;gBAEjC,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;aACnC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;QAjBe,sBAAG,MAiBlB,CAAA;IACL,CAAC,EA1DkB,kBAAkB,GAAlB,2BAAkB,KAAlB,2BAAkB,QA0DpC;AAAD,CAAC,EA1DS,QAAQ,KAAR,QAAQ,QA0DjB","sourcesContent":["declare var Reflect: any;\r\nvar __decorate: any = (this && this.__decorate) || function (decorators: any, target: any, key: any, desc: any) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n};\r\n\r\nconst __skipExtends = {\r\n    \"__metadata\": true,\r\n    \"__typeName\": true,\r\n    \"__componentFactory\": true\r\n}\r\n\r\nvar __extends: any = (this && this.__extends) || function (d: any, b: any) {\r\n    for (var p in b) if (b.hasOwnProperty(p) && __skipExtends[p] !== true) d[p] = b[p];\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new (__ as any)());\r\n};\r\nvar __assign = (Object as any).assign || function (t: any) {\r\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n        s = arguments[i];\r\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n    }\r\n    return t;\r\n};\r\nvar __rest = function (s: any, e: any) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof (Object as any).getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p: string = (Object as any).getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n};\r\nvar __spreadArrays = function () {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};","declare class RSVP<TResult> {\r\n    constructor(constructor: (p1: (p1: any) => void, p2: any) => void);\r\n}\r\n\r\ndeclare module RSVP {\r\n    function on(handler: (e: any) => void): void;\r\n    function resolve(): PromiseLike<any>;\r\n}\r\n\r\n// Type definitions for RSVP 3.0.9\r\n// Project: github.com/tildeio/rsvp.js 3.0.9\r\n// Definitions by: Taylor Brown <https://github.com/Taytay>\r\n// Definitions: https://github.com/borisyankov/DefinitelyTyped\r\n\r\n// Some of this file was taken from the type definitions for es6-promise https://github.com/borisyankov/DefinitelyTyped/blob/master/es6-promise/es6-promise.d.ts\r\n// Credit for that file goes to: François de Campredon <https://github.com/fdecampredon/>\r\n\r\n// Some of this file was taken from the type definitions for Q : https://github.com/borisyankov/DefinitelyTyped/blob/master/q/Q.d.ts\r\n// Credit for that file goes to: Barrie Nemetchek <https://github.com/bnemetchek>, Andrew Gaspar <https://github.com/AndrewGaspar/>, John Reilly <https://github.com/johnnyreilly>\r\n\r\ndeclare module RSVP {\r\n\r\n    class Promise<R> implements PromiseLike<R> {\r\n        /**\r\n         * If you call resolve in the body of the callback passed to the constructor,\r\n         * your promise is fulfilled with result object passed to resolve.\r\n         * If you call reject your promise is rejected with the object passed to resolve.\r\n         * For consistency and debugging (eg stack traces), obj should be an instanceof Error.\r\n         * Any errors thrown in the constructor callback will be implicitly passed to reject().\r\n         */\r\n        constructor(callback: (resolve: (result?: R) => void, reject: (error: any) => void) => void, label?: string);\r\n\r\n        /**\r\n         * If you call resolve in the body of the callback passed to the constructor,\r\n         * your promise will be fulfilled/rejected with the outcome of thenable passed to resolve.\r\n         * If you call reject your promise is rejected with the object passed to resolve.\r\n         * For consistency and debugging (eg stack traces), obj should be an instanceof Error.\r\n         * Any errors thrown in the constructor callback will be implicitly passed to reject().\r\n         */\r\n        constructor(callback: (resolve: (thenable?: PromiseLike<R>) => void, reject: (error: any) => void) => void, label?: string);\r\n\r\n        /**\r\n         * onFulfilled is called when/if \"promise\" resolves. onRejected is called when/if \"promise\" rejects.\r\n         * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.\r\n         * Both callbacks have a single parameter , the fulfillment value or rejection reason.\r\n         * \"then\" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.\r\n         * If an error is thrown in the callback, the returned promise rejects with that error.\r\n         *\r\n         * @param onFulfilled called when/if \"promise\" resolves\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        then<U>(onFulfilled?: (value: R) => PromiseLike<U>, onRejected?: (error: any) => PromiseLike<U>): Promise<U>;\r\n\r\n        /**\r\n         * onFulfilled is called when/if \"promise\" resolves. onRejected is called when/if \"promise\" rejects.\r\n         * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.\r\n         * Both callbacks have a single parameter , the fulfillment value or rejection reason.\r\n         * \"then\" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.\r\n         * If an error is thrown in the callback, the returned promise rejects with that error.\r\n         *\r\n         * @param onFulfilled called when/if \"promise\" resolves\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        then<U>(onFulfilled?: (value: R) => PromiseLike<U>, onRejected?: (error: any) => U): Promise<U>;\r\n\r\n        /**\r\n         * onFulfilled is called when/if \"promise\" resolves. onRejected is called when/if \"promise\" rejects.\r\n         * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.\r\n         * Both callbacks have a single parameter , the fulfillment value or rejection reason.\r\n         * \"then\" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.\r\n         * If an error is thrown in the callback, the returned promise rejects with that error.\r\n         *\r\n         * @param onFulfilled called when/if \"promise\" resolves\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        then<U>(onFulfilled?: (value: R) => PromiseLike<U>, onRejected?: (error: any) => void): Promise<U>;\r\n\r\n        /**\r\n         * onFulfilled is called when/if \"promise\" resolves. onRejected is called when/if \"promise\" rejects.\r\n         * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.\r\n         * Both callbacks have a single parameter , the fulfillment value or rejection reason.\r\n         * \"then\" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.\r\n         * If an error is thrown in the callback, the returned promise rejects with that error.\r\n         *\r\n         * @param onFulfilled called when/if \"promise\" resolves\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        then<U>(onFulfilled?: (value: R) => U, onRejected?: (error: any) => PromiseLike<U>): Promise<U>;\r\n\r\n        /**\r\n         * onFulfilled is called when/if \"promise\" resolves. onRejected is called when/if \"promise\" rejects.\r\n         * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.\r\n         * Both callbacks have a single parameter , the fulfillment value or rejection reason.\r\n         * \"then\" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.\r\n         * If an error is thrown in the callback, the returned promise rejects with that error.\r\n         *\r\n         * @param onFulfilled called when/if \"promise\" resolves\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        then<U>(onFulfilled?: (value: R) => U, onRejected?: (error: any) => U): Promise<U>;\r\n\r\n        /**\r\n         * onFulfilled is called when/if \"promise\" resolves. onRejected is called when/if \"promise\" rejects.\r\n         * Both are optional, if either/both are omitted the next onFulfilled/onRejected in the chain is called.\r\n         * Both callbacks have a single parameter , the fulfillment value or rejection reason.\r\n         * \"then\" returns a new promise equivalent to the value you return from onFulfilled/onRejected after being passed through Promise.resolve.\r\n         * If an error is thrown in the callback, the returned promise rejects with that error.\r\n         *\r\n         * @param onFulfilled called when/if \"promise\" resolves\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        then<U>(onFulfilled?: (value: R) => U, onRejected?: (error: any) => void): Promise<U>;\r\n\r\n        /**\r\n         * Sugar for promise.then(undefined, onRejected)\r\n         *\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        catch<U>(onRejected?: (error: any) => PromiseLike<U>): Promise<U>;\r\n\r\n        /**\r\n         * Sugar for promise.then(undefined, onRejected)\r\n         *\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        catch<U>(onRejected?: (error: any) => U): Promise<U>;\r\n\r\n        /**\r\n         * Sugar for promise.then(undefined, onRejected)\r\n         *\r\n         * @param onRejected called when/if \"promise\" rejects\r\n         */\r\n        catch<U>(onRejected?: (error: any) => void): Promise<U>;\r\n\r\n        finally(finallyCallback: () => any): Promise<R>;\r\n\r\n        static all<T>(promises: PromiseLike<T>[]): Promise<T[]>;\r\n        static all<T>(promises: any[]): Promise<T[]>;\r\n        static race<R>(promises: Promise<R>[]): Promise<R>;\r\n\r\n        /**\r\n         @method resolve\r\n         @param {Any} value value that the returned promise will be resolved with\r\n         @param {String} label optional string for identifying the returned promise.\r\n         Useful for tooling.\r\n         @return {Promise} a promise that will become fulfilled with the given\r\n         `value`\r\n         */\r\n        static resolve<T>(object: PromiseLike<T>): Promise<T>;\r\n        static resolve<T>(object: T): Promise<T>;\r\n\r\n        /**\r\n         @method cast (Deprecated in favor of resolve\r\n         @param {Any} value value that the returned promise will be resolved with\r\n         @param {String} label optional string for identifying the returned promise.\r\n         Useful for tooling.\r\n         @return {Promise} a promise that will become fulfilled with the given\r\n         `value`\r\n         */\r\n        static cast<T>(object: PromiseLike<T>, label?: string): Promise<T>;\r\n        static cast<T>(object: T, label?: string): Promise<T>;\r\n\r\n        /**\r\n         `RSVP.Promise.reject` returns a promise rejected with the passed `reason`.\r\n         */\r\n        static reject(reason?: any): Promise<any>;\r\n    }\r\n\r\n    interface PromiseState<T> {\r\n        state: string /* \"fulfilled\", \"rejected\", \"pending\" */;\r\n        value?: T;\r\n        reason?: any;\r\n    }\r\n\r\n    interface InstrumentEvent {\r\n        guid: string;      // guid of promise. Must be globally unique, not just within the implementation\r\n        childGuid: string; // child of child promise (for chained via `then`)\r\n        eventName: string; // one of ['created', 'chained', 'fulfilled', 'rejected']\r\n        detail: any;    // fulfillment value or rejection reason, if applicable\r\n        label: string;     // label passed to promise's constructor\r\n        timeStamp: number; // milliseconds elapsed since 1 January 1970 00:00:00 UTC up until now\r\n    }\r\n\r\n    export function on(eventName: string, callback: (value: any) => void): void;\r\n    export function on(eventName: \"error\", errorHandler: (reason: any) => void): void;\r\n    export function on(eventName: \"created\", listener: (event: InstrumentEvent) => void): void;\r\n    export function on(eventName: \"chained\", listener: (event: InstrumentEvent) => void): void;\r\n    export function on(eventName: \"fulfilled\", listener: (event: InstrumentEvent) => void): void;\r\n    export function on(eventName: \"rejected\", listener: (event: InstrumentEvent) => void): void;\r\n\r\n    export function configure(configName: string, value: any): void;\r\n    export function configure(configName: \"instrument\", shouldInstrument: boolean): void;\r\n\r\n    /**\r\n     * configure('onerror', handler) is deprecated in favor of on('error', handler)\r\n     * @param configName\r\n     * @param errorHandler\r\n     */\r\n    export function configure(configName: \"onerror\", errorHandler: (reason: any) => void): void;\r\n\r\n    /**\r\n     * Make a promise that fulfills when every item in the array fulfills, and rejects if (and when) any item rejects.\r\n     * the array passed to all can be a mixture of promise-like objects and other objects.\r\n     * The fulfillment value is an array (in order) of fulfillment values. The rejection value is the first rejection value.\r\n     */\r\n    export function all<T>(promises: PromiseLike<T>[]): Promise<T[]>;\r\n    export function all<T>(promises: any[]): Promise<T[]>;\r\n\r\n    function race<R>(promises: Promise<R>[]): Promise<R>;\r\n\r\n    /**\r\n     `RSVP.Promise.reject` returns a promise rejected with the passed `reason`.\r\n     */\r\n    export function reject(reason?: any): Promise<any>;\r\n\r\n    /**\r\n     `RSVP.Promise.resolve` returns a promise that will become resolved with the\r\n     passed `value`.\r\n     */\r\n    export function resolve<T>(object: PromiseLike<T>): Promise<T>;\r\n    export function resolve<T>(object: T): Promise<T>;\r\n\r\n    /**\r\n     `RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event\r\n     loop in order to aid debugging.\r\n     Promises A+ specifies that any exceptions that occur with a promise must be\r\n     caught by the promises implementation and bubbled to the last handler. For\r\n     this reason, it is recommended that you always specify a second rejection\r\n     handler function to `then`. However, `RSVP.rethrow` will throw the exception\r\n     outside of the promise, so it bubbles up to your console if in the browser,\r\n     or domain/cause uncaught exception in Node. `rethrow` will also throw the\r\n     error again so the error can be handled by the promise per the spec.\r\n     */\r\n    export function rethrow(reason: any): void;\r\n}","/**\n * Represents the completion of an asynchronous operation\n */\n\r\ninterface PromiseConstructor {\r\n    /**\r\n     * Creates a new Promise.\r\n     * @param executor A callback used to initialize the promise. This callback is passed two arguments:\r\n     * a resolve callback used resolve the promise with a value or the result of another promise,\r\n     * and a reject callback used to reject the promise with a provided reason or error.\r\n     */\r\n    new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): PromiseLike<T>;\r\n\r\n    /**\r\n     * Creates a new rejected promise for the provided reason.\r\n     * @param reason The reason the promise was rejected.\r\n     * @returns A new rejected Promise.\r\n     */\r\n    reject(reason: any): PromiseLike<never>;\r\n\r\n    /**\r\n     * Creates a new rejected promise for the provided reason.\r\n     * @param reason The reason the promise was rejected.\r\n     * @returns A new rejected Promise.\r\n     */\r\n    reject<T>(reason: any): PromiseLike<T>;\r\n\r\n    /**\r\n     * Creates a new resolved promise for the provided value.\r\n     * @param value A promise.\r\n     * @returns A promise whose internal state matches the provided promise.\r\n     */\r\n    resolve<T>(value: T | PromiseLike<T>): PromiseLike<T>;\r\n\r\n    /**\r\n     * Creates a new resolved promise .\r\n     * @returns A resolved promise.\r\n     */\r\n    resolve(): PromiseLike<void>;\r\n}\r\n\r\ndeclare var Promise: PromiseConstructor;\r\n\r\nif (typeof Promise === \"undefined\") {\r\n    if (typeof (RSVP) !== \"undefined\") {\r\n        Promise = RSVP as any;\r\n    }\r\n    else if (typeof (jQuery) !== \"undefined\") {\r\n        Promise = $.Deferred as any;\r\n        (Promise as any).resolve = function (value?: any) {\r\n            return jQuery.Deferred().resolveWith(value);\r\n        }\r\n    }\r\n}","declare namespace Select2 {\r\n    namespace util {\r\n        function stripDiacritics(input: string): string;\r\n    }\r\n}\r\n\r\ninterface Select2QueryOptions {\r\n    element?: JQuery;\r\n    term?: string;\r\n    page?: number;\r\n    context?: any;\r\n    callback?: (p1: Select2Result) => void;\r\n}\r\n\r\ninterface Select2Result {\r\n    results: any;\r\n    more: boolean;\r\n    context?: any;\r\n}\r\n\r\ninterface Select2AjaxOptions {\r\n    transport?: any;\r\n    url?: any;\r\n    dataType?: string;\r\n    quietMillis?: number;\r\n    cache?: boolean;\r\n    jsonpCallback?: any;\r\n    data?: (p1: string, p2: number, p3: any) => any;\r\n    results?: (p1: any, p2: number, p3: any) => any;\r\n    params?: any;\r\n}\r\n\r\ninterface Select2Options {\r\n    width?: any;\r\n    minimumInputLength?: number;\r\n    maximumInputLength?: number;\r\n    minimumResultsForSearch?: number;\r\n    maximumSelectionSize?: any;\r\n    placeHolder?: string;\r\n    placeHolderOption?: any;\r\n    separator?: string;\r\n    allowClear?: boolean;\r\n    multiple?: boolean;\r\n    closeOnSelect?: boolean;\r\n    openOnEnter?: boolean;\r\n    id?: (p1: any) => string;\r\n    matcher?: (p1: string, p2: string, p3: JQuery) => boolean;\r\n    sortResults?: (p1: any, p2: JQuery, p3: any) => any;\r\n    formatSelection?: (p1: any, p2: JQuery, p3: (p1: string) => string) => string;\r\n    formatResult?: (p1: any, p2: JQuery, p3: any, p4: (p1: string) => string) => string;\r\n    formatResultCssClass?: (p1: any) => string;\r\n    formatNoMatches?: (p1: string) => string;\r\n    formatSearching?: () => string;\r\n    formatInputTooShort?: (p1: string, p2: number) => string;\r\n    formatSelectionTooBig?: (p1: string) => string;\r\n    createSearchChoice?: (p1: string) => any;\r\n    createSearchChoicePosition?: string;\r\n    initSelection?: (p1: JQuery, p2: (p1: any) => void) => void;\r\n    tokenizer?: (p1: string, p2: any, p3: (p1: any) => any, p4: any) => string;\r\n    tokenSeparators?: any;\r\n    query?: (p1: Select2QueryOptions) => void;\r\n    ajax?: Select2AjaxOptions;\r\n    data?: any;\r\n    tags?: any;\r\n    containerCss?: any;\r\n    containerCssClass?: any;\r\n    dropdownCss?: any;\r\n    dropdownCssClass?: any;\r\n    dropdownAutoWidth?: boolean;\r\n    adaptContainerCssClass?: (p1: string) => string;\r\n    adaptDropdownCssClass?: (p1: string) => string;\r\n    escapeMarkup?: (p1: string) => string;\r\n    selectOnBlur?: boolean;\r\n    loadMorePadding?: number;\r\n    nextSearchTerm?: (p1: any, p2: string) => string;\r\n}\r\n\r\ninterface Select2Data {\r\n    text?: string;\r\n}\r\n\r\ninterface JQuery {\r\n    select2(options: Select2Options): JQuery;\r\n    select2(cmd: 'focus' | 'open'): JQuery;\r\n    select2(cmd: 'destroy'): void;\r\n    select2(cmd: 'val'): any;\r\n    select2(cmd: 'val', value: string | string[]): JQuery;\r\n    select2(cmd: 'data'): Select2Data;\r\n}","// this class will go obsolete once all code is ported to TypeScript\r\n// prefer alternative methods under Q\r\ndeclare namespace ss {\r\n    interface AssemblyReg {\r\n        name: string;\r\n        __types: ClassReg[];\r\n    }\r\n\r\n    interface ClassReg {\r\n        __register: boolean;\r\n        __class: boolean;\r\n        __assembly: AssemblyReg;\r\n        __interfaces: any[];\r\n    }\r\n\r\n    let __assemblies: { [name: string]: AssemblyReg; };\r\n\r\n    class Exception {\r\n        constructor(msg: string);\r\n    }\r\n\r\n    class NotSupportedException extends Exception {\r\n        constructor(msg: string);\r\n    }\r\n}\r\n\r\n// fake assembly for typescript apps\r\n(ss as any).initAssembly({}, 'App', {});","interface JQueryStatic {\r\n    extend<T>(target: T, object1?: T, ...objectN: T[]): T;\r\n    toJSON(obj: any): string;\r\n}","declare interface JQBlockUIOptions {\r\n    useTimeout?: boolean;   \r\n}","namespace Serenity {\r\n    export interface ServiceError {\r\n        Code?: string;\r\n        Arguments?: string;\r\n        Message?: string;\r\n    }\r\n}","\r\ndeclare namespace Serenity {\r\n    interface ServiceResponse {\r\n        Error?: ServiceError;\r\n    }\r\n\r\n    interface ServiceRequest {\r\n    }\r\n\r\n    interface SaveRequest<TEntity> extends ServiceRequest {\r\n        EntityId?: any;\r\n        Entity?: TEntity;\r\n        Localizations?: any;\r\n    }\r\n\r\n    interface SaveRequestWithAttachment<TEntity> extends SaveRequest<TEntity> {\r\n        Attachments?: any[];\r\n    }\r\n\r\n    interface SaveResponse extends ServiceResponse {\r\n        EntityId?: any;\r\n    }\r\n\r\n    interface SaveWithLocalizationRequest<TEntity> extends SaveRequest<TEntity> {\r\n        Localizations?: { [key: string]: TEntity };\r\n    }\r\n\r\n    interface DeleteRequest extends ServiceRequest {\r\n        EntityId?: any;\r\n    }\r\n\r\n    interface DeleteResponse extends ServiceResponse {\r\n    }\r\n\r\n    interface UndeleteRequest extends ServiceRequest {\r\n        EntityId?: any;\r\n    }\r\n\r\n    interface UndeleteResponse extends ServiceResponse {\r\n    }\r\n\r\n    interface ListRequest extends ServiceRequest {\r\n        Skip?: number;\r\n        Take?: number;\r\n        Sort?: string[];\r\n        ContainsText?: string;\r\n        ContainsField?: string;\r\n        Criteria?: any[];\r\n        EqualityFilter?: any;\r\n        IncludeDeleted?: boolean;\r\n        ExcludeTotalCount?: boolean;\r\n        ColumnSelection?: ColumnSelection;\r\n        IncludeColumns?: string[];\r\n        ExcludeColumns?: string[];\r\n        DistinctFields?: string[];\r\n    }\r\n\r\n    interface ListResponse<TEntity> extends ServiceResponse {\r\n        Entities?: TEntity[];\r\n        Values?: any[];\r\n        TotalCount?: number;\r\n        Skip?: number;\r\n        Take?: number;\r\n    }\r\n\r\n    interface RetrieveRequest extends ServiceRequest {\r\n        EntityId?: any;\r\n        ColumnSelection?: RetrieveColumnSelection;\r\n        IncludeColumns?: string[];\r\n        ExcludeColumns?: string[];\r\n    }\r\n\r\n    interface RetrieveResponse<TEntity> extends ServiceResponse {\r\n        Entity?: TEntity;\r\n    }\r\n\r\n    interface RetrieveLocalizationRequest extends RetrieveRequest {\r\n    }\r\n\r\n    interface RetrieveLocalizationResponse<TEntity> extends ServiceResponse {\r\n        Entities?: { [key: string]: TEntity };\r\n    }\r\n}\r\n\r\n","\r\nnamespace Q {\r\n    export type Dictionary<TItem> = { [key: string]: TItem };\r\n    export type Grouping<TItem> = { [key: string]: TItem[] };\r\n\r\n    export function coalesce(a: any, b: any): any {\r\n        return (ss as any).coalesce(a, b);\r\n    }\r\n\r\n    export function isValue(a: any): boolean {\r\n        return (ss as any).isValue(a);\r\n    }\r\n\r\n    /**\r\n         * Tests if any of array elements matches given predicate\r\n         */\r\n    export function any<TItem>(array: TItem[], predicate: (x: TItem) => boolean): boolean {\r\n        for (let x of array)\r\n            if (predicate(x))\r\n                return true;\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Counts number of array elements that matches a given predicate\r\n     */\r\n    export function count<TItem>(array: TItem[], predicate: (x: TItem) => boolean): number {\r\n        let count = 0;\r\n        for (let x of array)\r\n            if (predicate(x))\r\n                count++;\r\n\r\n        return count;\r\n    }\r\n\r\n    /**\r\n     * Gets first element in an array that matches given predicate.\r\n     * Throws an error if no match is found.\r\n     */\r\n    export function first<TItem>(array: TItem[], predicate: (x: TItem) => boolean): TItem {\r\n        for (let x of array)\r\n            if (predicate(x))\r\n                return x;\r\n\r\n        throw new Error(\"first:No element satisfies the condition.!\");\r\n    }\r\n\r\n    /**\r\n     * Gets index of first element in an array that matches given predicate\r\n     */\r\n    export function indexOf<TItem>(array: TItem[], predicate: (x: TItem) => boolean): number {\r\n        for (var i = 0; i < array.length; i++)\r\n            if (predicate(array[i]))\r\n                return i;\r\n\r\n        return -1;\r\n    }\r\n\r\n    /**\r\n     * Inserts an item to the array at specified index\r\n     */\r\n    export function insert<TItem>(array: TItem[], index: number, item: TItem): void {\r\n        (ss as any).insert(array, index, item);\r\n    }\r\n\r\n    /**\r\n     * Determines if the object is an array\r\n     */\r\n    export function isArray(obj: any): boolean {\r\n        return (ss as any).isArray(obj);\r\n    }\r\n\r\n    /**\r\n    * Gets first element in an array that matches given predicate.\r\n    * Throws an error if no matches is found, or there are multiple matches.\r\n    */\r\n    export function single<TItem>(array: TItem[], predicate: (x: TItem) => boolean): TItem {\r\n        let match: any;\r\n        let found = false;\r\n        for (let x of array)\r\n            if (predicate(x)) {\r\n                if (found)\r\n                    throw new Error(\"single:sequence contains more than one element.\");\r\n\r\n                found = true;\r\n                match = x;\r\n            }\r\n\r\n        if (!found)\r\n            throw new Error(\"single:No element satisfies the condition.\");\r\n\r\n        return match;\r\n    }\r\n\r\n    /**\r\n     * Maps an array into a dictionary with keys determined by specified getKey() callback,\r\n     * and values that are arrays containing elements for a particular key.\r\n     */\r\n    export function toGrouping<TItem>(items: TItem[], getKey: (x: TItem) => any): Q.Grouping<TItem> {\r\n        let lookup: Grouping<TItem> = {};\r\n        for (let x of items) {\r\n            let key = getKey(x) || \"\";\r\n            let d = lookup[key];\r\n            if (!d) {\r\n                d = lookup[key] = [];\r\n            }\r\n\r\n            d.push(x);\r\n        }\r\n        return lookup;\r\n    }\r\n\r\n\r\n    export type Group<TItem> = {\r\n        order: number;\r\n        key: string;\r\n        items: TItem[];\r\n        start: number;\r\n    }\r\n\r\n    export type Groups<TItem> = {\r\n        byKey: Q.Dictionary<Group<TItem>>;\r\n        inOrder: Group<TItem>[];\r\n    };\r\n\r\n    /**\r\n     * Groups an array with keys determined by specified getKey() callback.\r\n     * Resulting object contains group objects in order and a dictionary to access by key.\r\n     */\r\n    export function groupBy<TItem>(items: TItem[], getKey: (x: TItem) => any): Q.Groups<TItem> {\r\n        let result: Groups<TItem> = {\r\n            byKey: Object.create(null),\r\n            inOrder: []\r\n        };\r\n\r\n        for (var index = 0; index < items.length; index++) {\r\n            var item = items[index];\r\n            let key = Q.coalesce(getKey(item), \"\");\r\n            var group = result.byKey[key];\r\n            if (group === undefined) {\r\n                group = {\r\n                    order: result.inOrder.length,\r\n                    key: key,\r\n                    items: [item],\r\n                    start: index\r\n                }\r\n                result.byKey[key] = group;\r\n                result.inOrder.push(group);\r\n            }\r\n            else {\r\n                group.items.push(item);\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * Gets first element in an array that matches given predicate.\r\n     * Returns null if no match is found.\r\n     */\r\n    export function tryFirst<TItem>(array: TItem[], predicate: (x: TItem) => boolean): TItem {\r\n        for (let x of array)\r\n            if (predicate(x))\r\n                return x;\r\n    }\r\n\r\n    export function endsWith(s: string, search: string): boolean {\r\n        return (ss as any).endsWithString(s, search);\r\n    }\r\n\r\n    export function isEmptyOrNull(s: string) {\r\n        return s == null || s.length === 0;\r\n    }\r\n\r\n    export function isTrimmedEmpty(s: string) {\r\n        return trimToNull(s) == null;\r\n    }\r\n\r\n    export function format(msg: string, ...prm: any[]): string {\r\n        return (ss as any).formatString(msg, ...prm);\r\n    }\r\n\r\n    export function padLeft(s: string, len: number, ch: string = ' ') {\r\n        while (s.length < len)\r\n            s = \"0\" + s;\r\n        return s;\r\n    }\r\n\r\n    export function startsWith(s: string, search: string): boolean {\r\n        return (ss as any).startsWithString(s, search);\r\n    }\r\n\r\n    export function toSingleLine(str: string) {\r\n        return Q.replaceAll(Q.replaceAll(trimToEmpty(str), '\\r\\n', ' '), '\\n', ' ').trim();\r\n    }\r\n\r\n    export function trim(s: string) {\r\n        return (s == null ? '' : s).replace(new RegExp('^\\\\s+|\\\\s+$', 'g'), '');\r\n    }\r\n\r\n    export function trimToEmpty(s: string) {\r\n        if (s == null || s.length === 0) {\r\n            return '';\r\n        }\r\n\r\n        return trim(s);\r\n    }\r\n\r\n    export function trimToNull(s: string) {\r\n        if (s == null || s.length === 0) {\r\n            return null;\r\n        }\r\n\r\n        s = trim(s);\r\n        if (s.length === 0) {\r\n            return null;\r\n        }\r\n        else {\r\n            return s;\r\n        }\r\n    }\r\n\r\n    let turkishOrder: {};\r\n\r\n    export function turkishLocaleCompare(a: string, b: string): number {\r\n        let alphabet = \"AaBbCcÇçFfGgĞğHhIıİiJjKkLlMmNnOoÖöPpRrSsŞşTtUuÜüVvYyZz\";\r\n        a = a || \"\";\r\n        b = b || \"\";\r\n        if (a == b)\r\n            return 0;\r\n        if (!turkishOrder) {\r\n            turkishOrder = {};\r\n            for (let z = 0; z < alphabet.length; z++) {\r\n                turkishOrder[alphabet.charAt(z)] = z + 1;\r\n            }\r\n        }\r\n        for (let i = 0, _len = Math.min(a.length, b.length); i < _len; i++) {\r\n            let x = a.charAt(i), y = b.charAt(i);\r\n            if (x === y)\r\n                continue;\r\n            let ix = turkishOrder[x], iy = turkishOrder[y];\r\n            if (ix != null && iy != null)\r\n                return ix < iy ? -1 : 1;\r\n            let c = x.localeCompare(y);\r\n            if (c == 0)\r\n                continue;\r\n            return c;\r\n        }\r\n        return a.localeCompare(b);\r\n    }\r\n\r\n    export function turkishLocaleToUpper(a: string): string {\r\n        if (!a)\r\n            return a;\r\n        return a.replace(/i/g, 'İ').replace(/ı/g, 'I').toUpperCase();\r\n    }\r\n\r\n    export function replaceAll(s: string, f: string, r: string): string {\r\n        return (ss as any).replaceAllString(s, f, r);\r\n    }\r\n\r\n    export function zeroPad(n: number, digits: number): string {\r\n        let s = n.toString();\r\n        while (s.length < digits)\r\n            s = \"0\" + s;\r\n        return s;\r\n    }\r\n\r\n    /**\r\n     * Returns a function, that, as long as it continues to be invoked, will not\r\n     * be triggered. The function will be called after it stops being called for\r\n     * N milliseconds. If `immediate` is passed, trigger the function on the\r\n     * leading edge, instead of the trailing. The function also has a property 'clear'\r\n     * that is a function which will clear the timer to prevent previously scheduled executions.\r\n     *\r\n     * @source underscore.js\r\n     */\r\n    export function debounce(func: Function, wait?: number, immediate?: boolean) {\r\n        var timeout: number, args: IArguments, context: any, timestamp: number, result: any;\r\n        if (null == wait) wait = 100;\r\n\r\n        function later() {\r\n            var last = Date.now() - timestamp;\r\n\r\n            if (last < wait && last >= 0) {\r\n                timeout = setTimeout(later, wait - last);\r\n            } else {\r\n                timeout = null;\r\n                if (!immediate) {\r\n                    result = func.apply(context, args);\r\n                    context = args = null;\r\n                }\r\n            }\r\n        };\r\n\r\n        var debounced = function () {\r\n            context = this;\r\n            args = arguments;\r\n            timestamp = Date.now();\r\n            var callNow = immediate && !timeout;\r\n            if (!timeout) timeout = setTimeout(later, wait);\r\n            if (callNow) {\r\n                result = func.apply(context, args);\r\n                context = args = null;\r\n            }\r\n\r\n            return result;\r\n        };\r\n\r\n        (debounced as any).clear = function () {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n        };\r\n\r\n        (debounced as any).flush = function () {\r\n            if (timeout) {\r\n                result = func.apply(context, args);\r\n                context = args = null;\r\n\r\n                clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n        };\r\n\r\n        return debounced;\r\n    };\r\n\r\n    // derived from https://github.com/mistic100/jQuery.extendext/blob/master/jQuery.extendext.js\r\n    export function deepClone<TItem>(arg1: TItem, ...args: TItem[]): TItem {\r\n        let options: any,\r\n            name: string,\r\n            src: any,\r\n            copy: any,\r\n            copyIsArray: boolean,\r\n            clone: any,\r\n            target = arguments[0] || {},\r\n            i = 1,\r\n            length = arguments.length;\r\n\r\n        // Handle case when target is a string or something (possible in deep copy)\r\n        if (typeof target !== \"object\" && !$.isFunction(target)) {\r\n            target = {};\r\n        }\r\n        if (i === length) {\r\n            target = {};\r\n            i = 0;\r\n        }\r\n        for (; i < length; i++) {\r\n            // Only deal with non-null/undefined values\r\n            if ((options = arguments[i]) !== null) {\r\n                // Special operations for arrays\r\n                if ($.isArray(options)) {\r\n                    target = $.extend(true, [], options);\r\n                }\r\n                else {\r\n                    // Extend the base object\r\n                    for (name in options) {\r\n                        src = target[name];\r\n                        copy = options[name];\r\n                        // Prevent never-ending loop\r\n                        if (target === copy) {\r\n                            continue;\r\n                        }\r\n                        // Recurse if we're merging plain objects or arrays\r\n                        if (copy && ($.isPlainObject(copy) ||\r\n                            (copyIsArray = $.isArray(copy)))) {\r\n                            if (copyIsArray) {\r\n                                copyIsArray = false;\r\n                                clone = src && $.isArray(src) ? src : [];\r\n                            }\r\n                            else {\r\n                                clone = src && $.isPlainObject(src) ? src : {};\r\n                            }\r\n                            // Never move original objects, clone them\r\n                            target[name] = deepClone(clone, copy);\r\n                        }\r\n                        else if (copy !== undefined) {\r\n                            target[name] = copy;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        // Return the modified object\r\n        return target;\r\n    }\r\n}","\r\nnamespace Q {\r\n    export namespace Culture {\r\n        export let decimalSeparator = '.';\r\n        export let dateSeparator = '/';\r\n        export let dateOrder = 'dmy';\r\n        export let dateFormat = 'dd/MM/yyyy';\r\n        export let dateTimeFormat = 'dd/MM/yyyy HH:mm:ss';\r\n\r\n        export function get_groupSeparator(): string {\r\n            return ((decimalSeparator === ',') ? '.' : ',');\r\n        };\r\n\r\n        var s = Q.trimToNull($('script#ScriptCulture').html());\r\n        if (s != null) {\r\n            var sc = $.parseJSON(s);\r\n            if (sc.DecimalSeparator != null)\r\n                decimalSeparator = sc.DecimalSeparator;\r\n            if (sc.DateSeparator != null)\r\n                dateSeparator = sc.DateSeparator;\r\n            if (sc.DateOrder != null)\r\n                dateOrder = sc.DateOrder;\r\n            if (sc.DateFormat != null)\r\n                dateFormat = sc.DateFormat;\r\n            if (sc.DateTimeFormat != null)\r\n                dateTimeFormat = sc.DateTimeFormat;\r\n        }\r\n    }\r\n\r\n    export function formatNumber(n: number, fmt: string, dec?: string, grp?: string): string {\r\n        let neg = '-';\r\n        if (isNaN(n)) {\r\n            return null;\r\n        }\r\n\r\n        dec = dec || Culture.decimalSeparator;\r\n        grp = grp || Culture.get_groupSeparator();\r\n\r\n        let r = \"\";\r\n        if (fmt.indexOf(\".\") > -1) {\r\n            let dp = dec;\r\n            let df = fmt.substring(fmt.lastIndexOf(\".\") + 1);\r\n            n = roundNumber(n, df.length);\r\n            let dv = n % 1;\r\n            let ds = new String(dv.toFixed(df.length));\r\n            ds = ds.substring(ds.lastIndexOf(\".\") + 1);\r\n            for (let i = 0; i < df.length; i++) {\r\n                if (df.charAt(i) == '#' && ds.charAt(i) != '0') {\r\n                    dp += ds.charAt(i);\r\n                    continue;\r\n                }\r\n                else if (df.charAt(i) == '#' && ds.charAt(i) == '0') {\r\n                    let notParsed = ds.substring(i);\r\n                    if (notParsed.match('[1-9]')) {\r\n                        dp += ds.charAt(i);\r\n                        continue;\r\n                    }\r\n                    else\r\n                        break;\r\n                }\r\n                else if (df.charAt(i) == \"0\")\r\n                    dp += ds.charAt(i);\r\n                else\r\n                    dp += df.charAt(i);\r\n            }\r\n            r += dp;\r\n        }\r\n        else\r\n            n = Math.round(n);\r\n\r\n        let ones = Math.floor(n);\r\n        if (n < 0)\r\n            ones = Math.ceil(n);\r\n        let of = \"\";\r\n        if (fmt.indexOf(\".\") == -1)\r\n            of = fmt;\r\n        else\r\n            of = fmt.substring(0, fmt.indexOf(\".\"));\r\n\r\n        let op = \"\";\r\n        if (!(ones == 0 && of.substr(of.length - 1) == '#')) {\r\n            // find how many digits are in the group\r\n            let oneText = new String(Math.abs(ones));\r\n            let gl = 9999;\r\n            if (of.lastIndexOf(\",\") != -1)\r\n                gl = of.length - of.lastIndexOf(\",\") - 1;\r\n            let gc = 0;\r\n            for (let i = oneText.length - 1; i > -1; i--) {\r\n                op = oneText.charAt(i) + op;\r\n                gc++;\r\n                if (gc == gl && i != 0) {\r\n                    op = grp + op;\r\n                    gc = 0;\r\n                }\r\n            }\r\n\r\n            // account for any pre-data padding\r\n            if (of.length > op.length) {\r\n                let padStart = of.indexOf('0');\r\n                if (padStart != -1) {\r\n                    let padLen = of.length - padStart;\r\n                    // pad to left with 0's or group char\r\n                    let pos = of.length - op.length - 1;\r\n                    while (op.length < padLen) {\r\n                        let pc = of.charAt(pos);\r\n                        // replace with real group char if needed\r\n                        if (pc == ',')\r\n                            pc = grp;\r\n                        op = pc + op;\r\n                        pos--;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (!op && of.indexOf('0', of.length - 1) !== -1)\r\n            op = '0';\r\n\r\n        r = op + r;\r\n        if (n < 0)\r\n            r = neg + r;\r\n\r\n        if (r.lastIndexOf(dec) == r.length - 1) {\r\n            r = r.substring(0, r.length - 1);\r\n        }\r\n\r\n        return r;\r\n    }\r\n\r\n    export function parseInteger(s: string): number {\r\n        s = trim(s.toString());\r\n        let ts = Culture.get_groupSeparator();\r\n        if (s && s.length && s.indexOf(ts) > 0) {\r\n            s = s.replace(new RegExp(\"(\\\\b\\\\d{1,3})\\\\\" + ts + \"(?=\\\\d{3}(\\\\D|$))\", \"g\"), '$1');\r\n        }\r\n        if (!(/^[-\\+]?\\d+$/.test(s)))\r\n            return NaN;\r\n        return parseInt(s, 10);\r\n    }\r\n\r\n    export function parseDecimal(s: string): number {\r\n        if (s == null)\r\n            return null;\r\n\r\n        s = trim(s.toString());\r\n        if (s.length == 0)\r\n            return null;\r\n\r\n        let ts = Culture.get_groupSeparator();\r\n\r\n        if (s && s.length && s.indexOf(ts) > 0) {\r\n            s = s.replace(new RegExp(\"(\\\\b\\\\d{1,3})\\\\\" + ts + \"(?=\\\\d{3}(\\\\D|$))\", \"g\"), '$1');\r\n        }\r\n\r\n        if (!(new RegExp(\"^\\\\s*([-\\\\+])?(\\\\d*)\\\\\" + Culture.decimalSeparator + \"?(\\\\d*)\\\\s*$\").test(s)))\r\n            return NaN;\r\n\r\n        return parseFloat(s.toString().replace(Culture.decimalSeparator, '.'));\r\n    }\r\n\r\n    function roundNumber(n: number, dec?: number): number {\r\n        let power = Math.pow(10, dec || 0);\r\n        let value = (Math.round(n * power) / power).toString();\r\n        // ensure the decimal places are there\r\n        if (dec > 0) {\r\n            let dp = value.indexOf(\".\");\r\n            if (dp == -1) {\r\n                value += '.';\r\n                dp = 0;\r\n            }\r\n            else {\r\n                dp = value.length - (dp + 1);\r\n            }\r\n            while (dp < dec) {\r\n                value += '0';\r\n                dp++;\r\n            }\r\n        }\r\n        return parseFloat(value);\r\n    }\r\n\r\n    export function toId(id: any): any {\r\n        if (id == null)\r\n            return null;\r\n        if (typeof id == \"number\")\r\n            return id;\r\n        id = $.trim(id);\r\n        if (id == null || !id.length)\r\n            return null;\r\n        if (id.length >= 15 || !(/^-?\\d+$/.test(id)))\r\n            return id;\r\n        let v = parseInt(id, 10);\r\n        if (isNaN(v))\r\n            return id;\r\n        return v;\r\n    }\r\n\r\n    export function formatDate(d: Date | string, format?: string) {\r\n        if (!d) {\r\n            return '';\r\n        }\r\n\r\n        let date: Date;\r\n        if (typeof d == \"string\") {\r\n            var res = Q.parseDate(d);\r\n            if (!res)\r\n                return d;\r\n            date = res as Date;\r\n        }\r\n        else\r\n            date = d;\r\n\r\n        if (format == null || format == \"d\") {\r\n            format = Culture.dateFormat;\r\n        }\r\n        else {\r\n            switch (format) {\r\n                case \"g\": format = Culture.dateTimeFormat.replace(\":ss\", \"\"); break;\r\n                case \"G\": format = Culture.dateTimeFormat; break;\r\n                case \"s\": format = \"yyyy-MM-ddTHH:mm:ss\"; break;\r\n                case \"u\": return Q.formatISODateTimeUTC(date);\r\n            }\r\n        }\r\n\r\n        let pad = function (i: number) {\r\n            return Q.zeroPad(i, 2);\r\n        };\r\n\r\n        return format.replace(new RegExp('dd?|MM?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|fff|zz?z?|\\\\/', 'g'),\r\n            function (fmt): any {\r\n                switch (fmt) {\r\n                    case '/': return Culture.dateSeparator;\r\n                    case 'hh': return pad(((date.getHours() < 13) ? date.getHours() : (date.getHours() - 12)));\r\n                    case 'h': return ((date.getHours() < 13) ? date.getHours() : (date.getHours() - 12));\r\n                    case 'HH': return pad(date.getHours());\r\n                    case 'H': return date.getHours();\r\n                    case 'mm': return pad(date.getMinutes());\r\n                    case 'm': return date.getMinutes();\r\n                    case 'ss': return pad(date.getSeconds());\r\n                    case 's': return date.getSeconds();\r\n                    case 'yyyy': return date.getFullYear();\r\n                    case 'yy': return date.getFullYear().toString().substr(2, 4);\r\n                    case 'dd': return pad(date.getDate());\r\n                    case 'd': return date.getDate().toString();\r\n                    case 'MM': return pad(date.getMonth() + 1);\r\n                    case 'M': return date.getMonth() + 1;\r\n                    case 't': return ((date.getHours() < 12) ? 'A' : 'P');\r\n                    case 'tt': return ((date.getHours() < 12) ? 'AM' : 'PM');\r\n                    case 'fff': return Q.zeroPad(date.getMilliseconds(), 3);\r\n                    case 'zzz':\r\n                    case 'zz':\r\n                    case 'z': return '';\r\n                    default: return fmt;\r\n                }\r\n            }\r\n        );\r\n    }\r\n\r\n    export function formatDayHourAndMin(n: number): string {\r\n        if (n === 0)\r\n            return '0';\r\n        else if (!n)\r\n            return '';\r\n        let days = Math.floor(n / 24 / 60);\r\n        let txt = \"\";\r\n        if (days > 0) {\r\n            txt += days.toString();\r\n        }\r\n        let mins = zeroPad(Math.floor((n % (24 * 60)) / (60)), 2) + ':' + zeroPad(n % 60, 2);\r\n        if (mins != '00:00') {\r\n            if (days > 0)\r\n                txt += \".\";\r\n            txt += mins;\r\n        }\r\n        return txt;\r\n    }\r\n\r\n    export function formatISODateTimeUTC(d: Date): string {\r\n        if (d == null)\r\n            return \"\";\r\n        let zeropad = function (num: number) { return ((num < 10) ? '0' : '') + num; };\r\n        let str = d.getUTCFullYear() + \"-\" +\r\n            zeropad(d.getUTCMonth() + 1) + \"-\" +\r\n            zeropad(d.getUTCDate()) + \"T\" +\r\n            zeropad(d.getUTCHours()) + \":\" +\r\n            zeropad(d.getUTCMinutes());\r\n        let secs = Number(d.getUTCSeconds() + \".\" +\r\n            ((d.getUTCMilliseconds() < 100) ? '0' : '') +\r\n            zeropad(d.getUTCMilliseconds()));\r\n        str += \":\" + zeropad(secs) + \"Z\";\r\n        return str;\r\n    }\r\n\r\n    let isoRegexp = /(\\d{4,})(?:-(\\d{1,2})(?:-(\\d{1,2})(?:[T ](\\d{1,2}):(\\d{1,2})(?::(\\d{1,2})(?:\\.(\\d+))?)?(?:(Z)|([+-])(\\d{1,2})(?::(\\d{1,2}))?)?)?)?)?/;\r\n\r\n    export function parseISODateTime(s: string): Date {\r\n        if (!s || !s.length)\r\n            return null;\r\n\r\n        s = s + \"\";\r\n        if (typeof (s) != \"string\" || s.length === 0) {\r\n            return null;\r\n        }\r\n\r\n        let res = s.match(isoRegexp);\r\n        if (typeof (res) == \"undefined\" || res === null) {\r\n            return null;\r\n        }\r\n\r\n        let year: number, month: number, day: number, hour: number, min: number, sec: number, msec: number;\r\n        year = parseInt(res[1], 10);\r\n\r\n        if (typeof (res[2]) == \"undefined\" || res[2] === '') {\r\n            return new Date(year);\r\n        }\r\n\r\n        month = parseInt(res[2], 10) - 1;\r\n        day = parseInt(res[3], 10);\r\n        if (typeof (res[4]) == \"undefined\" || res[4] === '') {\r\n            return new Date(year, month, day);\r\n        }\r\n\r\n        hour = parseInt(res[4], 10);\r\n        min = parseInt(res[5], 10);\r\n        sec = (typeof (res[6]) != \"undefined\" && res[6] !== '') ? parseInt(res[6], 10) : 0;\r\n\r\n        if (typeof (res[7]) != \"undefined\" && res[7] !== '') {\r\n            msec = Math.round(1000.0 * parseFloat(\"0.\" + res[7]));\r\n        }\r\n        else {\r\n            msec = 0;\r\n        }\r\n\r\n        if ((typeof (res[8]) == \"undefined\" || res[8] === '') && (typeof (res[9]) == \"undefined\" || res[9] === '')) {\r\n            return new Date(year, month, day, hour, min, sec, msec);\r\n        }\r\n\r\n        let ofs: number;\r\n        if (typeof (res[9]) != \"undefined\" && res[9] !== '') {\r\n            ofs = parseInt(res[10], 10) * 3600000;\r\n            if (typeof (res[11]) != \"undefined\" && res[11] !== '') {\r\n                ofs += parseInt(res[11], 10) * 60000;\r\n            }\r\n            if (res[9] == \"-\") {\r\n                ofs = -ofs;\r\n            }\r\n        }\r\n        else {\r\n            ofs = 0;\r\n        }\r\n        return new Date(Date.UTC(year, month, day, hour, min, sec, msec) - ofs);\r\n    }\r\n\r\n    export function parseHourAndMin(value: string) {\r\n        let v = trim(value);\r\n        if (v.length < 4 || v.length > 5)\r\n            return NaN;\r\n        let h: number, m: number;\r\n        if (v.charAt(1) == ':') {\r\n            h = parseInteger(v.substr(0, 1));\r\n            m = parseInteger(v.substr(2, 2));\r\n        }\r\n        else {\r\n            if (v.charAt(2) != ':')\r\n                return NaN;\r\n            h = parseInteger(v.substr(0, 2));\r\n            m = parseInteger(v.substr(3, 2));\r\n        }\r\n        if (isNaN(h) || isNaN(m) || h < 0 || h > 23 || m < 0 || m > 59)\r\n            return NaN;\r\n        return h * 60 + m;\r\n    }\r\n\r\n    export function parseDayHourAndMin(s: string): number {\r\n        let days: number;\r\n        let v = trim(s);\r\n        if (!v)\r\n            return NaN;\r\n        let p = v.split('.');\r\n        if (p.length == 0 || p.length > 2)\r\n            return NaN;\r\n        if (p.length == 1) {\r\n            days = parseInteger(p[0]);\r\n            if (!isNaN(days))\r\n                return days * 24 * 60;\r\n            return parseHourAndMin(p[0]);\r\n        }\r\n        else {\r\n            days = parseInteger(p[0]);\r\n            let hm = parseHourAndMin(p[1]);\r\n            if (isNaN(days) || isNaN(hm))\r\n                return NaN;\r\n            return days * 24 * 60 + hm;\r\n        }\r\n    }\r\n\r\n    export function parseDate(s: string, dateOrder?: string): any {\r\n        if (!s || !s.length)\r\n            return null;\r\n\r\n        if (s.length >= 10 && s.charAt(4) === '-' && s.charAt(7) === '-' &&\r\n            (s.length === 10 || (s.length > 10 && s.charAt(10) === 'T'))) {\r\n            var res = Q.parseISODateTime(s);\r\n            if (res == null)\r\n                return false;\r\n            return res;\r\n        }\r\n\r\n        let dateVal: any;\r\n        let dArray: any;\r\n        let d: number, m: number, y: number;\r\n        dArray = splitDateString(s);\r\n        if (!dArray)\r\n            return false;\r\n\r\n        if (dArray.length == 3) {\r\n            dateOrder = dateOrder || Culture.dateOrder;\r\n            switch (dateOrder) {\r\n                case \"dmy\":\r\n                    d = parseInt(dArray[0], 10);\r\n                    m = parseInt(dArray[1], 10) - 1;\r\n                    y = parseInt(dArray[2], 10);\r\n                    break;\r\n                case \"ymd\":\r\n                    d = parseInt(dArray[2], 10);\r\n                    m = parseInt(dArray[1], 10) - 1;\r\n                    y = parseInt(dArray[0], 10);\r\n                    break;\r\n                case \"mdy\":\r\n                default:\r\n                    d = parseInt(dArray[1], 10);\r\n                    m = parseInt(dArray[0], 10) - 1;\r\n                    y = parseInt(dArray[2], 10);\r\n                    break;\r\n            }\r\n\r\n            if (isNaN(d) || isNaN(m) || isNaN(y) || d < 1 || d > 31 || m < 0 || m > 11 || y > 9999 || y < 0)\r\n                return false;\r\n\r\n            if (y < 100) {\r\n                let fullYear = new Date().getFullYear();\r\n                let shortYearCutoff = (fullYear % 100) + 10;\r\n                y += fullYear - fullYear % 100 + (y <= shortYearCutoff ? 0 : -100);\r\n            }\r\n            try {\r\n                dateVal = new Date(y, m, d);\r\n                if (isNaN(dateVal.getFullYear()))\r\n                    return false;\r\n            }\r\n            catch (e) {\r\n                return false;\r\n            }\r\n        }\r\n        else if (dArray.length == 1) {\r\n            try {\r\n                dateVal = new Date(dArray[0]);\r\n                if (isNaN(dateVal.getFullYear()))\r\n                    return false;\r\n            }\r\n            catch (e) {\r\n                return false;\r\n            }\r\n        }\r\n        return dateVal;\r\n    }\r\n\r\n    export function splitDateString(s: string): string[] {\r\n        s = trim(s);\r\n        if (!s.length)\r\n            return;\r\n        if (s.indexOf(\"/\") >= 0)\r\n            return s.split(\"/\");\r\n        else if (s.indexOf(\".\") >= 0)\r\n            return s.split(\".\");\r\n        else if (s.indexOf(\"-\") >= 0)\r\n            return s.split(\"-\");\r\n        else if (s.indexOf(\"\\\\\") >= 0)\r\n            return s.split(\"\\\\\");\r\n        else\r\n            return [s];\r\n    }\r\n}","\r\nnamespace Q {\r\n\r\n    export function text(key: string): string {\r\n        let t = LT.$table[key];\r\n        if (t == null) {\r\n            t = key || '';\r\n        }\r\n        return t;\r\n    }\r\n\r\n    export function dbText(prefix: string): ((key: string) => string) {\r\n        return function (key: string) {\r\n            return text(\"Db.\" + prefix + \".\" + key);\r\n        }\r\n    }\r\n\r\n    export function prefixedText(prefix: string) {\r\n\r\n        return function (text: string, key: string | ((p?: string) => string)) {\r\n\r\n            if (text != null && !Q.startsWith(text, '`')) {\r\n                var local = Q.tryGetText(text);\r\n                if (local != null) {\r\n                    return local;\r\n                }\r\n            }\r\n\r\n            if (text != null && Q.startsWith(text, '`')) {\r\n                text = text.substr(1);\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(prefix)) {\r\n                var textKey = typeof (key) == \"function\" ? key(prefix) : (prefix + key);\r\n                var localText = Q.tryGetText(textKey);\r\n                if (localText != null) {\r\n                    return localText;\r\n                }\r\n            }\r\n\r\n            return text;\r\n        }\r\n    }\r\n\r\n    export function tryGetText(key: string): string {\r\n        return LT.$table[key];\r\n    }\r\n\r\n    export function dbTryText(prefix: string): ((key: string) => string) {\r\n        return function (key: string) {\r\n            return text(\"Db.\" + prefix + \".\" + key);\r\n        }\r\n    }\r\n\r\n    export function proxyTexts(o: Object, p: string, t: Object): Object {\r\n        if (typeof window != 'undefined' && window['Proxy']) {\r\n            return new window['Proxy'](o, {\r\n                get: (x: Object, y: string) => {\r\n                    var tv = t[y];\r\n                    if (tv == null)\r\n                        return;\r\n                    if (typeof tv == 'number')\r\n                        return Q.text(p + y);\r\n                    else {\r\n                        var z = o[y];\r\n                        if (z != null)\r\n                            return z;\r\n                        o[y] = z = proxyTexts({}, p + y + '.', tv);\r\n                        return z;\r\n                    }\r\n                },\r\n                ownKeys: (x: Object) => Object.keys(t)\r\n            });\r\n        }\r\n        else {\r\n            for (var k of Object.keys(t)) {\r\n                if (typeof t[k] == 'number')\r\n                    Object.defineProperty(o, k, {\r\n                        get: () => Q.text(p + k)\r\n                    });\r\n                else\r\n                    o[k] = proxyTexts({}, p + k + '.', t[k]);\r\n            }\r\n            return o;\r\n        }\r\n    }\r\n\r\n    export class LT {\r\n        static $table: { [key: string]: string } = {};\r\n        static empty: LT = new LT('');\r\n\r\n        constructor(private key: string) {\r\n        }\r\n\r\n        static add(obj: any, pre?: string) {\r\n            if (!obj) {\r\n                return;\r\n            }\r\n            pre = pre || '';\r\n            for (let k of Object.keys(obj)) {\r\n                let actual = pre + k;\r\n                let o = obj[k];\r\n                if (typeof (o) === 'object') {\r\n                    LT.add(o, actual + '.');\r\n                }\r\n                else {\r\n                    LT.$table[actual] = o;\r\n                }\r\n            }\r\n        }\r\n\r\n        get() {\r\n            var t = LT.$table[this.key];\r\n            if (t == null) {\r\n                t = this.key || '';\r\n            }\r\n            return t;\r\n        }\r\n\r\n        toString() {\r\n            var t = LT.$table[this.key];\r\n            if (t == null) {\r\n                t = this.key || '';\r\n            }\r\n            return t;\r\n        }\r\n\r\n        static initializeTextClass = function (type: any, prefix: string) {\r\n            var $t1 = Object.keys(type).slice();\r\n            for (var $t2 = 0; $t2 < $t1.length; $t2++) {\r\n                var member = $t1[$t2];\r\n                var value = type[member];\r\n                if (value instanceof LT) {\r\n                    var lt = value;\r\n                    var key = prefix + member;\r\n                    LT.$table[key] = lt.key;\r\n                    type[member] = new LT(key);\r\n                }\r\n            }\r\n        }\r\n\r\n        static getDefault = function (key: string, defaultText: string) {\r\n            var t = LT.$table[key];\r\n            if (t == null) {\r\n                t = defaultText;\r\n                if (t == null) {\r\n                    t = key || '';\r\n                }\r\n            }\r\n            return t;\r\n        }\r\n    }\r\n}","namespace Q {\r\n\r\n    export interface LookupOptions<TItem> {\r\n        idField?: string;\r\n        parentIdField?: string;\r\n        textField?: string;\r\n        textFormatter?(item: TItem): string;\r\n    }\r\n\r\n    export class Lookup<TItem> {\r\n        public items: TItem[] = [];\r\n        public itemById: { [key: string]: TItem } = {};\r\n        public idField: string;\r\n        public parentIdField: string;\r\n        public textField: string;\r\n        public textFormatter: (item: TItem) => string;\r\n\r\n        constructor(options: LookupOptions<TItem>, items?: TItem[]) {\r\n            options = options || {};\r\n            this.textFormatter = options.textFormatter;\r\n            this.idField = options.idField;\r\n            this.parentIdField = options.parentIdField;\r\n            this.textField = options.textField;\r\n            this.textFormatter = options.textFormatter;\r\n\r\n            if (items != null)\r\n                this.update(items);\r\n        }\r\n\r\n        update(value: TItem[]) {\r\n            this.items = [];\r\n            this.itemById = {};\r\n            if (value) {\r\n                for (var k of value)\r\n                    this.items.push(k);\r\n            }\r\n            var idField = this.idField;\r\n            if (!Q.isEmptyOrNull(idField)) {\r\n                for (var r of this.items) {\r\n                    var v = r[idField];\r\n                    if (v != null) {\r\n                        this.itemById[v] = r;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        protected get_idField() {\r\n            return this.idField;\r\n        }\r\n\r\n        protected get_parentIdField() {\r\n            return this.parentIdField;\r\n        }\r\n\r\n        protected get_textField() {\r\n            return this.textField;\r\n        }\r\n\r\n        protected get_textFormatter() {\r\n            return this.textFormatter;\r\n        }\r\n\r\n        protected get_itemById() {\r\n            return this.itemById;\r\n        }\r\n\r\n        protected get_items() {\r\n            return this.items;\r\n        }\r\n    }\r\n}","\r\nnamespace Q {\r\n    let blockUICount: number = 0;\r\n\r\n    function blockUIWithCheck(opt: JQBlockUIOptions) {\r\n        if (blockUICount > 0) {\r\n            blockUICount++;\r\n            return;\r\n        }\r\n\r\n        $.blockUI(opt);\r\n        blockUICount++;\r\n    }\r\n\r\n    /**\r\n     * Uses jQuery BlockUI plugin to block access to whole page (default) or \r\n     * a part of it, by using a transparent overlay covering the whole area.\r\n     * @param options Parameters for the BlockUI plugin\r\n     * @remarks If options are not specified, this function blocks \r\n     * whole page with a transparent overlay. Default z-order of the overlay\r\n     * div is 2000, so a higher z-order shouldn't be used in page.\r\n     */\r\n    export function blockUI(options: JQBlockUIOptions) {\r\n        options = $.extend<JQBlockUIOptions>({\r\n            baseZ: 2000,\r\n            message: '',\r\n            overlayCSS: {\r\n                opacity: '0.0',\r\n                zIndex: 2000,\r\n                cursor: 'wait'\r\n            }, fadeOut: 0\r\n        }, options);\r\n\r\n        if (options.useTimeout) {\r\n            window.setTimeout(function () {\r\n                blockUIWithCheck(options);\r\n            }, 0);\r\n        }\r\n        else {\r\n            blockUIWithCheck(options);\r\n        }\r\n    }\r\n\r\n    export function blockUndo() {\r\n        if (blockUICount > 1) {\r\n            blockUICount--;\r\n            return;\r\n        }\r\n\r\n        blockUICount--;\r\n        $.unblockUI({ fadeOut: 0 });\r\n    }\r\n}","namespace Q {\r\n\r\n    export function addOption(select: JQuery, key: string, text: string) {\r\n        $('<option/>').val(key).text(text).appendTo(select);\r\n    }\r\n\r\n    export function addEmptyOption(select: JQuery) {\r\n        addOption(select, '', text(\"Controls.SelectEditor.EmptyItemText\"));\r\n    }\r\n\r\n    export function clearOptions(select: JQuery) {\r\n        select.html('');\r\n    }\r\n\r\n    export function findElementWithRelativeId(element: JQuery, relativeId: string) {\r\n        let elementId = element.attr('id');\r\n        if (isEmptyOrNull(elementId)) {\r\n            return $('#' + relativeId);\r\n        }\r\n\r\n        let result = $('#' + elementId + relativeId);\r\n        if (result.length > 0) {\r\n            return result;\r\n        }\r\n\r\n        result = $('#' + elementId + '_' + relativeId);\r\n\r\n        if (result.length > 0) {\r\n            return result;\r\n        }\r\n\r\n        while (true) {\r\n            let idx = elementId.lastIndexOf('_');\r\n            if (idx <= 0) {\r\n                return $('#' + relativeId);\r\n            }\r\n\r\n            elementId = elementId.substr(0, idx);\r\n            result = $('#' + elementId + '_' + relativeId);\r\n\r\n            if (result.length > 0) {\r\n                return result;\r\n            }\r\n        }\r\n    }\r\n\r\n    function attrEncoder(a: string): string {\r\n        switch (a) {\r\n            case '&': return '&amp;';\r\n            case '>': return '&gt;';\r\n            case '<': return '&lt;';\r\n            case '\\'': return '&apos;'\r\n            case '\\\"': return '&quot;'\r\n        }\r\n        return a;\r\n    }\r\n\r\n    const attrRegex = /[><&'\"]/g;\r\n\r\n    /**\r\n     * Html attribute encodes a string (encodes quotes in addition to &, > and <)\r\n     * @param s String to be HTML attribute encoded\r\n     */\r\n    export function attrEncode(s: any): string {\r\n        let text = (s == null ? '' : s.toString());\r\n        if (attrRegex.test(text)) {\r\n            return text.replace(attrRegex, attrEncoder);\r\n        }\r\n        return text;\r\n    }\r\n\r\n    function htmlEncoder(a: string): string {\r\n        switch (a) {\r\n            case '&': return '&amp;';\r\n            case '>': return '&gt;';\r\n            case '<': return '&lt;';\r\n        }\r\n        return a;\r\n    }\r\n\r\n    /**\r\n     * Html encodes a string\r\n     * @param s String to be HTML encoded\r\n     */\r\n    export function htmlEncode(s: any): string {\r\n        let text = (s == null ? '' : s.toString());\r\n        if ((new RegExp('[><&]', 'g')).test(text)) {\r\n            return text.replace(new RegExp('[><&]', 'g'), htmlEncoder);\r\n        }\r\n        return text;\r\n    }\r\n\r\n    export function jsRender(markup: string, data?: any) {\r\n        if (!markup || markup.indexOf('{{') < 0) {\r\n            return markup;\r\n        }\r\n\r\n        if (!($ as any).templates || !($ as any).views) {\r\n            throw new ss.Exception('Please make sure that jsrender.js is included in the page!');\r\n        }\r\n\r\n        data = data || {};\r\n        var template = ($ as any).templates(markup);\r\n        ($ as any).views.converters({\r\n            text: Q.text\r\n        }, template);\r\n\r\n        return template.render(data);\r\n    }\r\n\r\n    export function log(m: any) {\r\n        (<any>window).console && (<any>window).console.log(m);\r\n    }\r\n\r\n    export function newBodyDiv(): JQuery {\r\n        return $('<div/>').appendTo(document.body);\r\n    }\r\n\r\n    export function outerHtml(element: JQuery) {\r\n        return $('<i/>').append(element.eq(0).clone()).html();\r\n    }\r\n}\r\n","\r\nnamespace Q {\r\n    export interface CommonDialogOptions extends JQueryUI.DialogOptions {\r\n        onOpen?: () => void;\r\n        onClose?: () => void;\r\n        htmlEncode?: boolean;\r\n        dialogClass?: string;\r\n        title?: string;\r\n    }\r\n\r\n    export interface AlertOptions extends CommonDialogOptions {\r\n        okButton?: string;\r\n    }\r\n\r\n    export function alert(message: string, options?: AlertOptions) {\r\n        let dialog: JQuery;\r\n        options = <Q.AlertOptions>$.extend({\r\n            htmlEncode: true,\r\n            okButton: text('Dialogs.OkButton'),\r\n            title: text('Dialogs.AlertTitle'),\r\n            onClose: null,\r\n            onOpen: null,\r\n            autoOpen: false,\r\n            dialogClass: 's-MessageDialog s-AlertDialog',\r\n            modal: true,\r\n            width: '40%',\r\n            maxWidth: '450',\r\n            minWidth: '180',\r\n            resizable: false,\r\n            open: function () {\r\n                if (options.onOpen)\r\n                    options.onOpen.call(this);\r\n            },\r\n            close: function () {\r\n                dialog.dialog('destroy');\r\n                if (options.onClose)\r\n                    options.onClose();\r\n            }\r\n        }, options);\r\n\r\n        if (options.htmlEncode)\r\n            message = htmlEncode(message);\r\n        if (!options.buttons) {\r\n            let buttons: any[] = [];\r\n            buttons.push({\r\n                text: options.okButton,\r\n                click: function () {\r\n                    dialog.dialog('close');\r\n                }\r\n            });\r\n            options.buttons = buttons;\r\n        }\r\n        dialog = $('<div><div class=\"message\"><\\/div><\\/div>')\r\n            .dialog(options)\r\n            .children('.message')\r\n            .html(message)\r\n            .parent()\r\n            .dialog('open');\r\n    }\r\n\r\n    export interface ConfirmOptions extends CommonDialogOptions {\r\n        yesButton?: string;\r\n        noButton?: string;\r\n        cancelButton?: string;\r\n        onCancel?: () => void;\r\n        onNo?: () => void;\r\n    }\r\n\r\n    export function confirm(message: string, onYes: () => void, options?: ConfirmOptions): void {\r\n        let dialog: JQuery;\r\n        options = $.extend({\r\n            htmlEncode: true,\r\n            yesButton: text('Dialogs.YesButton'),\r\n            noButton: text('Dialogs.NoButton'),\r\n            title: text('Dialogs.ConfirmationTitle'),\r\n            onNo: null,\r\n            onCancel: null,\r\n            onClose: null,\r\n            autoOpen: false,\r\n            modal: true,\r\n            dialogClass: 's-MessageDialog s-ConfirmDialog',\r\n            width: '40%',\r\n            maxWidth: '450',\r\n            minWidth: '180',\r\n            resizable: false,\r\n            open: function () {\r\n                if (options.onOpen)\r\n                    options.onOpen.call(this);\r\n            },\r\n            close: function () {\r\n                dialog.dialog('destroy');\r\n                if (!clicked && options.onCancel)\r\n                    options.onCancel();\r\n            },\r\n            overlay: {\r\n                opacity: 0.77,\r\n                background: \"black\"\r\n            }\r\n        }, options);\r\n        if (options.htmlEncode)\r\n            message = htmlEncode(message);\r\n        let clicked = false;\r\n        if (!options.buttons) {\r\n            let buttons: any[] = [];\r\n            buttons.push({\r\n                text: options.yesButton,\r\n                click: function () {\r\n                    clicked = true;\r\n                    dialog.dialog('close');\r\n                    if (onYes)\r\n                        onYes();\r\n                }\r\n            });\r\n            if (options.noButton)\r\n                buttons.push({\r\n                    text: options.noButton,\r\n                    click: function () {\r\n                        clicked = true;\r\n                        dialog.dialog('close');\r\n                        if (options.onNo)\r\n                            options.onNo();\r\n                        else if (options.onCancel)\r\n                            options.onCancel();\r\n                    }\r\n                });\r\n            options.buttons = buttons;\r\n        }\r\n        dialog = $('<div><div class=\"message\"><\\/div><\\/div>')\r\n            .dialog(options)\r\n            .children('.message')\r\n            .html(message)\r\n            .parent()\r\n            .dialog('open');\r\n    }\r\n\r\n    export interface IFrameDialogOptions {\r\n        html?: string;\r\n    }\r\n\r\n    export function iframeDialog(options: IFrameDialogOptions) {\r\n        let doc: any;\r\n        let e = $('<div style=\"overflow: hidden\"><iframe></iframe></div>');\r\n        let settings: IFrameDialogOptions = $.extend(<JQueryUI.DialogOptions>{\r\n            autoOpen: true,\r\n            modal: true,\r\n            width: '60%',\r\n            height: '400',\r\n            title: text('Dialogs.AlertTitle'),\r\n            open: function () {\r\n                doc = (<HTMLIFrameElement>(e.find('iframe').css({\r\n                    border: 'none',\r\n                    width: '100%',\r\n                    height: '100%'\r\n                })[0])).contentDocument;\r\n                doc.open();\r\n                doc.write(settings.html);\r\n                doc.close();\r\n            },\r\n            close: function () {\r\n                doc.open();\r\n                doc.write('');\r\n                doc.close();\r\n                e.dialog('destroy').html('');\r\n            }\r\n        }, options);\r\n        e.dialog(settings as any);\r\n    }\r\n\r\n    export function information(message: string, onOk: () => void, options?: Q.ConfirmOptions) {\r\n        confirm(message, onOk, $.extend<Q.ConfirmOptions>(\r\n            {\r\n                title: text(\"Dialogs.InformationTitle\"),\r\n                dialogClass: \"s-MessageDialog s-InformationDialog\",\r\n                yesButton: text(\"Dialogs.OkButton\"),\r\n                noButton: null,\r\n            }, options));\r\n    }\r\n\r\n    export function warning(message: string, options?: Q.AlertOptions) {\r\n        alert(message, $.extend<Q.AlertOptions>(\r\n            {\r\n                title: text(\"Dialogs.WarningTitle\"),\r\n                dialogClass: \"s-MessageDialog s-WarningDialog\"\r\n            }, options));\r\n    }\r\n}\r\n","\r\nnamespace Q {\r\n    export let defaultNotifyOptions: ToastrOptions = {\r\n        timeOut: 3000,\r\n        showDuration: 250,\r\n        hideDuration: 500,\r\n        extendedTimeOut: 500,\r\n        positionClass: 'toast-top-full-width'\r\n    }\r\n\r\n    function getToastrOptions(options: ToastrOptions) {\r\n        options = $.extend<ToastrOptions>({}, defaultNotifyOptions, options);\r\n        positionToastContainer(true);\r\n        return options;\r\n    }\r\n\r\n    export function notifyWarning(message: string, title?: string, options?: ToastrOptions): void {\r\n        toastr.warning(message, title, getToastrOptions(options));\r\n    }\r\n\r\n    export function notifySuccess(message: string, title?: string, options?: ToastrOptions): void {\r\n        toastr.success(message, title, getToastrOptions(options));\r\n    }\r\n\r\n    export function notifyInfo(message: string, title?: string, options?: ToastrOptions): void {\r\n        toastr.info(message, title, getToastrOptions(options));\r\n    }\r\n\r\n    export function notifyError(message: string, title?: string, options?: ToastrOptions): void {\r\n        toastr.error(message, title, getToastrOptions(options));\r\n    }\r\n\r\n    export function positionToastContainer(create: boolean) {\r\n        if (typeof toastr === 'undefined') {\r\n            return;\r\n        }\r\n\r\n        var dialog = $(window.document.body).children('.ui-dialog:visible').last();\r\n        var container = toastr.getContainer(null, create);\r\n        if (container.length === 0) {\r\n            return;\r\n        }\r\n        if (dialog.length > 0) {\r\n            var position = dialog.position();\r\n            container.addClass('positioned-toast toast-top-full-width');\r\n            container.css({ position: 'absolute', top: position.top + 28 + 'px', left: position.left + 6 + 'px', width: dialog.width() - 12 + 'px' });\r\n        }\r\n        else {\r\n            container.addClass('toast-top-full-width');\r\n            if (container.hasClass('positioned-toast')) {\r\n                container.removeClass('positioned-toast');\r\n                container.css({ position: '', top: '', left: '', width: '' });\r\n            }\r\n        }\r\n    }\r\n}\r\n","\r\nnamespace Q {\r\n\r\n    export namespace ErrorHandling {\r\n\r\n        export function showServiceError(error: Serenity.ServiceError) {\r\n            let msg: any;\r\n            if (error == null) {\r\n                msg = '??ERROR??';\r\n            }\r\n            else {\r\n                msg = error.Message;\r\n                if (msg == null) {\r\n                    msg = error.Code;\r\n                }\r\n            }\r\n\r\n            Q.alert(msg);\r\n        }\r\n\r\n        export function runtimeErrorHandler(message: string, filename?: string,\r\n            lineno?: number, colno?: number, error?: Error) {\r\n            try {\r\n                var host = (window.location.host || \"\").toLowerCase();\r\n                if (host.indexOf(\"localhost\") < 0 &&\r\n                    host.indexOf(\"127.0.0.1\") < 0)\r\n                    return;\r\n\r\n                if (!window['toastr'])\r\n                    return;\r\n\r\n                var errorInfo = JSON.stringify(error || {});\r\n\r\n                message =\r\n                    '<p></p><p>Message: ' + Q.htmlEncode(message) +\r\n                    '</p><p>File: ' + Q.htmlEncode(filename) +\r\n                    ', Line: ' + lineno + ', Column: ' + colno +\r\n                    (errorInfo != \"{}\" ? '</p><p>Error: ' : \"\") + '</p>';\r\n\r\n                window.setTimeout(function () {\r\n                    try {\r\n                        Q.notifyError(message, \"SCRIPT ERROR! See browser console (F12) for details.\", {\r\n                            escapeHtml: false,\r\n                            timeOut: 15000\r\n                        });\r\n                    }\r\n                    catch {\r\n                    }\r\n                });\r\n            }\r\n            catch {\r\n            }\r\n        }\r\n    }\r\n}","namespace Q {\r\n    export namespace Config {\r\n        /**\r\n         * This is the root path of your application. If your application resides under http://localhost/mysite/,\r\n         * your root path is \"mysite/\". This variable is automatically initialized by reading from a <link> element\r\n         * with ID \"ApplicationPath\" from current page, which is usually located in your _LayoutHead.cshtml file\r\n         */\r\n        export let applicationPath = '/';\r\n\r\n        var pathLink = $('link#ApplicationPath');\r\n        if (pathLink.length > 0) {\r\n            applicationPath = pathLink.attr('href');\r\n        }\r\n\r\n        /**\r\n         * Email validation by default only allows ASCII characters. Set this to true if you want to allow unicode.\r\n         */\r\n        export let emailAllowOnlyAscii = true;\r\n\r\n        /**\r\n         * Set this to true, to enable responsive dialogs by default, without having to add Serenity.Decorators.responsive()\"\r\n         * on dialog classes manually. It's false by default for backward compability.\r\n         */\r\n        export let responsiveDialogs = false;\r\n\r\n        /**\r\n         * This is the list of root namespaces that may be searched for types. For example, if you specify an editor type\r\n         * of \"MyEditor\", first a class with name \"MyEditor\" will be searched, if not found, search will be followed by\r\n         * \"Serenity.MyEditor\" and \"MyApp.MyEditor\" if you added \"MyApp\" to the list of root namespaces.\r\n         *\r\n         * You should usually add your application root namespace to this list in ScriptInitialization.ts file.\r\n         */\r\n        export let rootNamespaces = ['Serenity'];\r\n\r\n        /**\r\n         * This is an optional method for handling when user is not logged in. If a users session is expired \r\n         * and when a NotAuthorized response is received from a service call, Serenity will call this handler, so\r\n         * you may intercept it and notify user about this situation and ask if she wants to login again...\r\n         */\r\n        export let notLoggedInHandler: Function = null;\r\n    }\r\n}","\r\nnamespace Q {\r\n\r\n    export function getCookie(name: string) {\r\n        if ($.cookie)\r\n            return $.cookie(name);\r\n\r\n        name += '=';\r\n        for (var ca = document.cookie.split(/;\\s*/), i = ca.length - 1; i >= 0; i--)\r\n            if (!ca[i].indexOf(name))\r\n                return ca[i].replace(name, '');\r\n    }\r\n\r\n    $.ajaxSetup({\r\n        beforeSend: function (xhr) {\r\n            var token = Q.getCookie('CSRF-TOKEN');\r\n            if (token)\r\n                xhr.setRequestHeader('X-CSRF-TOKEN', token);\r\n        }\r\n    });\r\n\r\n    export interface ServiceOptions<TResponse extends Serenity.ServiceResponse> extends JQueryAjaxSettings {\r\n        request?: any;\r\n        service?: string;\r\n        blockUI?: boolean;\r\n        onError?(response: TResponse): void;\r\n        onSuccess?(response: TResponse): void;\r\n        onCleanup?(): void;\r\n    }\r\n\r\n    export function serviceCall<TResponse>(options: Q.ServiceOptions<TResponse>) {\r\n        let handleError = function (response: any) {\r\n            if (Config.notLoggedInHandler != null &&\r\n                response &&\r\n                response.Error &&\r\n                response.Error.Code == 'NotLoggedIn' &&\r\n                Config.notLoggedInHandler(options, response)) {\r\n                return;\r\n            }\r\n\r\n            if (options.onError != null) {\r\n                options.onError(response);\r\n                return;\r\n            }\r\n\r\n            ErrorHandling.showServiceError(response.Error);\r\n        };\r\n\r\n        var url = options.service;\r\n        if (url && url.length && url.charAt(0) != '~' && url.charAt(0) != '/' && url.indexOf('://') < 0)\r\n            url = resolveUrl(\"~/services/\") + url;\r\n\r\n        options = $.extend<Q.ServiceOptions<TResponse>>({\r\n            dataType: 'json',\r\n            contentType: 'application/json',\r\n            type: 'POST',\r\n            cache: false,\r\n            blockUI: true,\r\n            url: url,\r\n            data: $.toJSON(options.request),\r\n            success: function (data, textStatus, request) {\r\n                try {\r\n                    if (!data.Error && options.onSuccess) {\r\n                        options.onSuccess(data);\r\n                    }\r\n                }\r\n                finally {\r\n                    if (options.blockUI) {\r\n                        blockUndo();\r\n                    }\r\n                    options.onCleanup && options.onCleanup();\r\n                }\r\n            },\r\n            error: function (xhr, status, ev) {\r\n                try {\r\n                    if (xhr.status === 403) {\r\n                        var l: any = null;\r\n                        try {\r\n                            l = xhr.getResponseHeader('Location');\r\n                        }\r\n                        catch ($t1) {\r\n                            l = null;\r\n                        }\r\n                        if (l) {\r\n                            window.top.location.href = l;\r\n                            return;\r\n                        }\r\n                    }\r\n                    if ((xhr.getResponseHeader('content-type') || '')\r\n                        .toLowerCase().indexOf('application/json') >= 0) {\r\n                        var json = $.parseJSON(xhr.responseText);\r\n                        if (json && json.Error) {\r\n                            handleError(json);\r\n                            return;\r\n                        }\r\n                    }\r\n                    var html = xhr.responseText;\r\n                    if (!html) {\r\n                        if (!xhr.status)\r\n                            Q.alert(\"An unknown AJAX connection error occurred! Check browser console for details.\");\r\n                        else if (xhr.status == 500)\r\n                            Q.alert(\"HTTP 500: Connection refused! Check browser console for details.\");\r\n                        else\r\n                            Q.alert(\"HTTP \" + xhr.status + ' error! Check browser console for details.');\r\n                    }\r\n                    else\r\n                        iframeDialog({ html: html });\r\n                }\r\n                finally {\r\n                    if (options.blockUI) {\r\n                        blockUndo();\r\n                    }\r\n                    options.onCleanup && options.onCleanup();\r\n                }\r\n            }\r\n        }, options);\r\n\r\n        if (options.blockUI) {\r\n            blockUI(null);\r\n        }\r\n\r\n        return $.ajax(options);\r\n    }\r\n\r\n    export function serviceRequest<TResponse>(service: string, request?: any,\r\n        onSuccess?: (response: TResponse) => void, options?: Q.ServiceOptions<TResponse>) {\r\n        return serviceCall($.extend<Q.ServiceOptions<TResponse>>({\r\n            service: service,\r\n            request: request,\r\n            onSuccess: onSuccess\r\n        }, options));\r\n    }\r\n\r\n    export function setEquality(request: Serenity.ListRequest, field: string, value: any) {\r\n        if (request.EqualityFilter == null) {\r\n            request.EqualityFilter = {};\r\n        }\r\n        request.EqualityFilter[field] = value;\r\n    }\r\n\r\n    export interface PostToServiceOptions {\r\n        url?: string;\r\n        service?: string;\r\n        target?: string;\r\n        request: any;\r\n    }\r\n\r\n    export interface PostToUrlOptions {\r\n        url?: string;\r\n        target?: string;\r\n        params: any;\r\n    }\r\n\r\n    export function parseQueryString(s?: string): {} {\r\n        let qs: string;\r\n        if (s === undefined)\r\n            qs = location.search.substring(1, location.search.length);\r\n        else\r\n            qs = s || '';\r\n        let result = {};\r\n        let parts = qs.split('&');\r\n        for (let i = 0; i < parts.length; i++) {\r\n            let pair = parts[i].split('=');\r\n            let name = decodeURIComponent(pair[0]);\r\n            result[name] = (pair.length >= 2 ? decodeURIComponent(pair[1]) : name);\r\n        }\r\n        return result;\r\n    }\r\n\r\n    export function postToService(options: Q.PostToServiceOptions) {\r\n        let form = $('<form/>')\r\n            .attr('method', 'POST')\r\n            .attr('action', options.url ? (resolveUrl(options.url)) : resolveUrl('~/services/' + options.service))\r\n            .appendTo(document.body);\r\n        if (options.target)\r\n            form.attr('target', options.target);\r\n        let div = $('<div/>').appendTo(form);\r\n        $('<input/>').attr('type', 'hidden').attr('name', 'request')\r\n            .val($['toJSON'](options.request))\r\n            .appendTo(div);\r\n        var csrfToken = Q.getCookie('CSRF-TOKEN');\r\n        if (csrfToken) {\r\n            $('<input/>').attr('type', 'hidden').attr('name', '__RequestVerificationToken')\r\n                .appendTo(div).val(csrfToken);\r\n        }\r\n        $('<input/>').attr('type', 'submit')\r\n            .appendTo(div);\r\n        form.submit();\r\n        window.setTimeout(function () { form.remove(); }, 0);\r\n    }\r\n\r\n    export function postToUrl(options: Q.PostToUrlOptions) {\r\n        let form = $('<form/>')\r\n            .attr('method', 'POST')\r\n            .attr('action', resolveUrl(options.url))\r\n            .appendTo(document.body);\r\n        if (options.target)\r\n            form.attr('target', options.target);\r\n        let div = $('<div/>').appendTo(form);\r\n        if (options.params != null) {\r\n            for (let k in options.params) {\r\n                $('<input/>').attr('type', 'hidden').attr('name', k)\r\n                    .val(options.params[k])\r\n                    .appendTo(div);\r\n            }\r\n        }\r\n        var csrfToken = Q.getCookie('CSRF-TOKEN');\r\n        if (csrfToken) {\r\n            $('<input/>').attr('type', 'hidden').attr('name', '__RequestVerificationToken')\r\n                .appendTo(div).val(csrfToken);\r\n        }\r\n        $('<input/>').attr('type', 'submit')\r\n            .appendTo(div);\r\n        form.submit();\r\n        window.setTimeout(function () { form.remove(); }, 0);\r\n    }\r\n\r\n    export function resolveUrl(url: string) {\r\n        if (url && url.substr(0, 2) === '~/') {\r\n            return Config.applicationPath + url.substr(2);\r\n        }\r\n\r\n        return url;\r\n    }\r\n}\r\n\r\nnamespace Serenity {\r\n    export type ServiceOptions<TResponse extends ServiceResponse> = Q.ServiceOptions<TResponse>;\r\n}","\r\nnamespace Q {\r\n\r\n    export namespace LayoutTimer {\r\n\r\n        var timeout: number;\r\n        var regs: (() => void)[] = [];\r\n        var regByKey: Q.Dictionary<number> = {};\r\n\r\n        function startTimer() {\r\n            if (timeout == null && regs.length) {\r\n                timeout = window.setTimeout(onTimeout, 100);\r\n            }\r\n        }\r\n\r\n        function clearTimer() {\r\n            if (timeout != null) {\r\n                window.clearTimeout(timeout);\r\n                timeout = null;\r\n            }\r\n        }\r\n\r\n        function onTimeout() {\r\n            for (var reg of regs) {\r\n                try {\r\n                    reg();\r\n                }\r\n                catch (e) {\r\n                    console.log(e);\r\n                }\r\n            }\r\n\r\n            clearTimer();\r\n            startTimer();\r\n        }\r\n\r\n        export function on(key: string, handler: () => void): () => void {\r\n            if (handler == null)\r\n                throw \"Layout handler can't be null!\";\r\n\r\n            if (regByKey[key] !== undefined)\r\n                throw \"There is already a registered layout handler with key: \" + key;\r\n\r\n            if (key != null)\r\n                regByKey[key] = regs.length;\r\n\r\n            regs.push(handler);\r\n\r\n            startTimer();\r\n\r\n            return handler;\r\n        }\r\n\r\n        export function onSizeChange(key: string, element: HTMLElement, handler: () => void): () => void {\r\n            var oldWidth = element.offsetWidth;\r\n            var oldHeight = element.offsetHeight;\r\n\r\n            on(key, () => {\r\n                var offsetWidth = element.offsetWidth;\r\n                var offsetHeight = element.offsetHeight;\r\n                if (offsetWidth !== oldWidth ||\r\n                    offsetHeight !== oldHeight) {\r\n                    oldWidth = offsetWidth;\r\n                    oldHeight = offsetHeight;\r\n                    handler();\r\n                }\r\n            });\r\n\r\n            return handler;\r\n        }\r\n\r\n        export function onWidthChange(key: string, element: HTMLElement, handler: () => void): () => void {\r\n            var oldWidth = element.offsetWidth;\r\n\r\n            on(key, () => {\r\n                var offsetWidth = element.offsetWidth;\r\n                if (offsetWidth !== oldWidth) {\r\n                    oldWidth = offsetWidth;\r\n                    handler();\r\n                }\r\n            });\r\n\r\n            return handler;\r\n        }\r\n\r\n        export function onHeightChange(key: string, element: HTMLElement, handler: () => void): () => void {\r\n            var oldHeight = element.offsetHeight;\r\n\r\n            on(key, () => {\r\n                var offsetHeight = element.offsetHeight;\r\n                if (offsetHeight !== oldHeight) {\r\n                    oldHeight = offsetHeight;\r\n                    handler();\r\n                }\r\n            });\r\n\r\n            return handler;\r\n        }\r\n\r\n        export function off(key: string, handler?: () => void): void {\r\n            if (key != null) {\r\n                var index = regByKey[key];\r\n                if (index !== undefined) {\r\n                    delete regByKey[key];\r\n                    if (handler == null || handler === regs[index]) {\r\n                        regs.splice(index, 1);\r\n                        !regs.length && this.clearTimer();\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (handler != null) {\r\n                for (var l = regs.length - 1; l >= 0; l++) {\r\n                    if (regs[l] === handler) {\r\n                        regs.splice(l, 1);\r\n                        !regs.length && this.clearTimer();\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","namespace Q {\r\n\r\n    export function autoFullHeight(element: JQuery) {\r\n        element.css('height', '100%');\r\n        triggerLayoutOnShow(element);\r\n    }\r\n\r\n    export function initFullHeightGridPage(gridDiv: JQuery) {\r\n        $('body').addClass('full-height-page');\r\n        gridDiv.addClass('responsive-height');\r\n\r\n        let layout = function () {\r\n            let inPageContent = gridDiv.parent().hasClass('page-content') ||\r\n                gridDiv.parent().is('section.content');\r\n\r\n            if (inPageContent) {\r\n                gridDiv.css('height', '1px').css('overflow', 'hidden');\r\n            }\r\n\r\n            layoutFillHeight(gridDiv);\r\n\r\n            if (inPageContent) {\r\n                gridDiv.css('overflow', '');\r\n            }\r\n\r\n            gridDiv.triggerHandler('layout');\r\n        };\r\n\r\n        if ($('body').hasClass('has-layout-event')) {\r\n            $('body').bind('layout', layout);\r\n        }\r\n        else if ((window as any).Metronic) {\r\n            (window as any).Metronic.addResizeHandler(layout);\r\n        }\r\n        else {\r\n            $(window).resize(layout);\r\n        }\r\n\r\n        layout();\r\n\r\n        gridDiv.one('remove', () => {\r\n            $(window).off('layout', layout);\r\n            $('body').off('layout', layout);\r\n        });\r\n\r\n        // ugly, but to it is to make old pages work without having to add this\r\n        Q.Router.resolve();\r\n    }\r\n\r\n    export function layoutFillHeightValue(element: JQuery) {\r\n        let h = 0;\r\n        element.parent().children().not(element).each(function (i, e) {\r\n            let q = $(e);\r\n            if (q.is(':visible')) {\r\n                h += q.outerHeight(true);\r\n            }\r\n        });\r\n        h = element.parent().height() - h;\r\n        if (element.css('box-sizing') !== 'border-box') {\r\n            h = h - (element.outerHeight(true) - element.height());\r\n        }\r\n        return h;\r\n    }\r\n\r\n    export function layoutFillHeight(element: JQuery) {\r\n        let h = layoutFillHeightValue(element);\r\n        let n = Math.round(h) + 'px';\r\n        if (element.css('height') != n) {\r\n            element.css('height', n);\r\n        }\r\n    }\r\n\r\n    export function setMobileDeviceMode() {\r\n        let isMobile = navigator.userAgent.indexOf('Mobi') >= 0 ||\r\n            window.matchMedia('(max-width: 767px)').matches;\r\n\r\n        let body = $(document.body);\r\n        if (body.hasClass('mobile-device')) {\r\n            if (!isMobile) {\r\n                body.removeClass('mobile-device');\r\n            }\r\n        }\r\n        else if (isMobile) {\r\n            body.addClass('mobile-device');\r\n        }\r\n    }\r\n\r\n    export function triggerLayoutOnShow(element: JQuery) {\r\n        Serenity.LazyLoadHelper.executeEverytimeWhenShown(element, function () {\r\n            element.triggerHandler('layout');\r\n        }, true);\r\n    }\r\n\r\n    export function centerDialog(el: JQuery) {\r\n        if (!el.hasClass(\"ui-dialog\"))\r\n            el = el.closest(\".ui-dialog\");\r\n\r\n        el.position({ at: 'center center', of: window });\r\n        let pos = el.position();\r\n        if (pos.left < 0)\r\n            el.css(\"left\", \"0px\");\r\n        if (pos.top < 0)\r\n            el.css(\"top\", \"0px\");\r\n    }\r\n}","\r\nnamespace Q {\r\n\r\n    export namespace ScriptData {\r\n        let registered: { [key: string]: any } = {};\r\n        let loadedData: { [key: string]: any } = {};\r\n\r\n        export function bindToChange(name: string, regClass: string, onChange: () => void) {\r\n            ($(document.body) as any).bind('scriptdatachange.' + regClass, function (e: any, s: string) {\r\n                if (s == name) {\r\n                    onChange();\r\n                }\r\n            });\r\n        }\r\n\r\n        export function triggerChange(name: string) {\r\n            $(document.body).triggerHandler('scriptdatachange', [name]);\r\n        }\r\n\r\n        export function unbindFromChange(regClass: string) {\r\n            $(document.body).unbind('scriptdatachange.' + regClass);\r\n        }\r\n\r\n        function loadOptions(name: string, async: boolean): JQueryAjaxSettings {\r\n            return {\r\n                async: async,\r\n                cache: true,\r\n                type: 'GET',\r\n                url: Q.resolveUrl('~/DynJS.axd/') + name + '.js?' + registered[name],\r\n                data: null,\r\n                dataType: 'text',\r\n                converters: {\r\n                    \"text script\": function (text: string) {\r\n                        return text;\r\n                    }\r\n                },\r\n                success: function (data, textStatus, jqXHR) {\r\n                    $.globalEval(data);\r\n                },\r\n                error: function (xhr, textStatus, errorThrown) {\r\n                    var isLookup = Q.startsWith(name, \"Lookup.\");\r\n                    if (xhr.status == 403 && isLookup) {\r\n                        Q.notifyError('<p>Access denied while trying to load the lookup: \"<b>' +\r\n                            name.substr(7) + '</b>\". Please check if current user has required permissions for this lookup.</p> ' +\r\n                            '<p><em>Lookups use the ReadPermission of their row by default. You may override that for the lookup ' +\r\n                            'like [LookupScript(\"Some.Lookup\", Permission = \"?\")] to grant all ' +\r\n                            'authenticated users to read it (or use \"*\" for public).</em></p>' + \r\n                            '<p><em>Note that this might be a security risk if the lookup contains sensitive data, ' +\r\n                            'so it could be better to set a separate permission for lookups, like \"MyModule:Lookups\".</em></p>', null, {\r\n                                timeOut: 10000,\r\n                                escapeHtml: false\r\n                            });\r\n                        return;\r\n                    }\r\n\r\n                    Q.notifyError(\"An error occurred while trying to load \" +\r\n                        (isLookup ? ' the lookup: \"' + name.substr(7) :\r\n                            ' dynamic script: \"' + name) +\r\n                        '\"!. Please check the error message displayed in the dialog below for more info.');\r\n\r\n                    var html = xhr.responseText;\r\n                    if (!html) {\r\n                        if (!xhr.status)\r\n                            Q.alert(\"An unknown connection error occurred! Check browser console for details.\");\r\n                        else if (xhr.status == 500)\r\n                            Q.alert(\"HTTP 500: Connection refused! Check browser console for details.\");\r\n                        else\r\n                            Q.alert(\"HTTP \" + xhr.status + ' error! Check browser console for details.');\r\n                    }\r\n                    else\r\n                        Q.iframeDialog({ html: html });\r\n                }\r\n            }\r\n        }\r\n\r\n        function loadScriptAsync(name: string) {\r\n            return Promise.resolve().then(function () {\r\n                Q.blockUI(null);\r\n                return Promise.resolve(\r\n                    $.ajax(loadOptions(name, false))\r\n                        .always(function () {\r\n                            Q.blockUndo();\r\n                        }));\r\n            }, null);\r\n        }\r\n\r\n        function loadScriptData(name: string) {\r\n            if (registered[name] == null) {\r\n                throw new Error(Q.format('Script data {0} is not found in registered script list!', name));\r\n            }\r\n\r\n            $.ajax(loadOptions(name, false));\r\n        }\r\n\r\n        function loadScriptDataAsync(name: string): PromiseLike<any> {\r\n            return Promise.resolve().then(function () {\r\n                if (registered[name] == null) {\r\n                    throw new Error(Q.format('Script data {0} is not found in registered script list!', name));\r\n                }\r\n\r\n                return loadScriptAsync(name);\r\n            }, null);\r\n        }\r\n\r\n        export function ensure(name: string) {\r\n            var data = loadedData[name];\r\n            if (data == null) {\r\n                loadScriptData(name);\r\n            }\r\n\r\n            data = loadedData[name];\r\n\r\n            if (data == null)\r\n                throw new Error(Q.format(\"Can't load script data: {0}!\", name));\r\n\r\n            return data;\r\n        }\r\n\r\n        export function ensureAsync(name: string): PromiseLike<any> {\r\n            return Promise.resolve().then(function () {\r\n                var data = loadedData[name];\r\n                if (data != null) {\r\n                    return Promise.resolve(data);\r\n                }\r\n\r\n                return loadScriptDataAsync(name).then(function () {\r\n                    data = loadedData[name];\r\n                    if (data == null) {\r\n                        throw new Error(Q.format(\"Can't load script data: {0}!\", name));\r\n                    }\r\n                    return data;\r\n                }, null);\r\n            }, null);\r\n        }\r\n\r\n        export function reload(name: string) {\r\n            if (registered[name] == null) {\r\n                throw new Error(Q.format('Script data {0} is not found in registered script list!', name));\r\n            }\r\n            registered[name] = (new Date()).getTime().toString();\r\n            loadScriptData(name);\r\n            var data = loadedData[name];\r\n            return data;\r\n        }\r\n\r\n        export function reloadAsync(name: string) {\r\n            return Promise.resolve().then(function () {\r\n                if (registered[name] == null) {\r\n                    throw new Error(Q.format('Script data {0} is not found in registered script list!', name));\r\n                }\r\n                registered[name] = (new Date()).getTime().toString();\r\n                return loadScriptDataAsync(name).then(function () {\r\n                    return loadedData[name];\r\n                }, null);\r\n            }, null);\r\n        }\r\n\r\n        export function canLoad(name: string) {\r\n            return (loadedData[name] != null || registered[name] != null);\r\n        }\r\n\r\n        export function setRegisteredScripts(scripts: any[]) {\r\n            registered = {};\r\n            var t = new Date().getTime();\r\n            for (var k in scripts) {\r\n                registered[k] = scripts[k] || t;\r\n            }\r\n        }\r\n\r\n        export function set(name: string, value: any) {\r\n            loadedData[name] = value;\r\n            triggerChange(name);\r\n        }\r\n    }\r\n\r\n    export function getRemoteData(key: string) {\r\n        return ScriptData.ensure('RemoteData.' + key);\r\n    }\r\n\r\n    export function getRemoteDataAsync(key: string) {\r\n        return ScriptData.ensureAsync('RemoteData.' + key);\r\n    }\r\n\r\n    export function getLookup<TItem>(key: string): Lookup<TItem> {\r\n        var name = 'Lookup.' + key;\r\n        if (!ScriptData.canLoad(name)) {\r\n            var message = 'No lookup with key \"' + key + '\" is registered. Please make sure you have a' +\r\n                ' [LookupScript(\"' + key + '\")] attribute in server side code on top of a row / custom lookup and ' +\r\n                ' its key is exactly the same.';\r\n            Q.notifyError(message);\r\n            throw new Error(message);\r\n        }\r\n        return ScriptData.ensure('Lookup.' + key);\r\n    }\r\n\r\n    export function getLookupAsync<TItem>(key: string): PromiseLike<Lookup<TItem>> {\r\n        return ScriptData.ensureAsync('Lookup.' + key);\r\n    }\r\n\r\n    export function reloadLookup(key: string) {\r\n        ScriptData.reload('Lookup.' + key);\r\n    }\r\n\r\n    export function reloadLookupAsync(key: string) {\r\n        return ScriptData.reloadAsync('Lookup.' + key);\r\n    }\r\n\r\n    export function getColumns(key: string): Serenity.PropertyItem[] {\r\n        return ScriptData.ensure('Columns.' + key);\r\n    }\r\n\r\n    export function getColumnsAsync(key: string): PromiseLike<Serenity.PropertyItem[]> {\r\n        return ScriptData.ensureAsync('Columns.' + key);\r\n    }\r\n\r\n    export function getForm(key: string): Serenity.PropertyItem[] {\r\n        return ScriptData.ensure('Form.' + key);\r\n    }\r\n\r\n    export function getFormAsync(key: string): PromiseLike<Serenity.PropertyItem[]> {\r\n        return ScriptData.ensureAsync('Form.' + key);\r\n    }\r\n\r\n    export function getTemplate(key: string): string {\r\n        return ScriptData.ensure('Template.' + key);\r\n    }\r\n\r\n    export function getTemplateAsync(key: string): PromiseLike<string> {\r\n        return ScriptData.ensureAsync('Template.' + key);\r\n    }\r\n\r\n    export function canLoadScriptData(name: string): boolean {\r\n        return ScriptData.canLoad(name);\r\n    }\r\n}\r\n","\r\nnamespace Q {\r\n\r\n    export function initFormType(typ: Function, nameWidgetPairs: any[]) {\r\n        for (var i = 0; i < nameWidgetPairs.length - 1; i += 2) {\r\n            (function (name: string, widget: any) {\r\n                Object.defineProperty(typ.prototype, name, {\r\n                    get: function () {\r\n                        return this.w(name, widget);\r\n                    },\r\n                    enumerable: true,\r\n                    configurable: true\r\n                });\r\n            })(nameWidgetPairs[i], nameWidgetPairs[i + 1]);\r\n        }\r\n    }\r\n\r\n    export function prop(type: any, name: string, getter?: string, setter?: string) {\r\n        getter = getter || \"get_\" + name;\r\n        setter = setter || \"set_\" + name;\r\n\r\n        Object.defineProperty(type.prototype, name, {\r\n            get: function () {\r\n                return this[getter]();\r\n            },\r\n            set: function (value) {\r\n                return this[setter](value);\r\n            },\r\n            configurable: true,\r\n            enumerable: true\r\n        });\r\n    }\r\n\r\n    export function typeByFullName(fullName: string, global?: any): any {\r\n        if (!fullName)\r\n            return null;\r\n\r\n        var parts = fullName.split('.');\r\n        var root = global || window;\r\n        for (var i = 0; i < parts.length; i++) {\r\n            root = root[parts[i]];\r\n            if (root == null)\r\n                return null;\r\n        }\r\n\r\n        if (typeof root != \"function\")\r\n            return null;\r\n\r\n        return root;\r\n    }\r\n\r\n    function enumerateTypes(global: any, namespaces: string[], callback: (type: any, fullName: string) => void): void {\r\n        function scan(root: any, fullName: string, depth: number) {\r\n            if (!root)\r\n                return;\r\n\r\n            if ($.isArray(root) ||\r\n                root instanceof Date)\r\n                return;\r\n\r\n            var t = typeof (root);\r\n\r\n            if (t == \"string\" ||\r\n                t == \"number\")\r\n                return;\r\n\r\n            if ($.isFunction(root) || (root.__enum && root.__register))\r\n                callback(root, fullName);\r\n\r\n            if (depth > 3)\r\n                return;\r\n\r\n            for (var k of Object.keys(root)) {\r\n                if (k.charAt(0) < 'A' || k.charAt(0) > 'Z')\r\n                    continue;\r\n\r\n                if (k.indexOf('$') >= 0)\r\n                    continue;\r\n\r\n                if (k == \"prototype\")\r\n                    continue;\r\n\r\n                scan(root[k], fullName + '.' + k, depth + 1);\r\n            }\r\n        }\r\n\r\n        for (var nsRoot of namespaces) {\r\n            if (nsRoot == null || !nsRoot.length) {\r\n                continue;\r\n            }\r\n\r\n            if (nsRoot.indexOf('.') >= 0) {\r\n                let g = global;\r\n                let parts = nsRoot.split('.');\r\n                for (var p of parts) {\r\n                    if (!p.length)\r\n                        continue;\r\n\r\n                    g = g[p];\r\n                    if (!g)\r\n                        continue;\r\n                }\r\n                scan(g, nsRoot, 0);\r\n            }\r\n\r\n            scan(global[nsRoot], nsRoot, 0);\r\n        }\r\n    }\r\n\r\n    //all browsers seem to show some unhandled exception message so don't enable this for now\r\n    //window.addEventListener('unhandledrejection', function (e: any) {\r\n    //    var error = e.reason || e;\r\n    //    log(e);\r\n    //    log((error.get_stack && error.get_stack()) || error.stack);\r\n    //});\r\n\r\n    //window.addEventListener('error', function (e: any) {\r\n    //    var error = (e.error | e) as any;\r\n    //    log(e);\r\n    //    log((error.get_stack && error.get_stack()) || error.stack);\r\n    //});\r\n\r\n    (function (global: any) {\r\n\r\n        // for backward compability, avoid!\r\n        global.Q$Externals = Q;\r\n        global.Q$Config = Q.Config;\r\n        global.Q$Culture = Q.Culture;\r\n        global.Q$Lookup = Q.Lookup;\r\n        global.Q$ScriptData = Q.ScriptData;\r\n        global.Q$LT = Q.LT;\r\n\r\n        function initializeTypes() {\r\n            enumerateTypes(global, Q.Config.rootNamespaces, function (obj, fullName) {\r\n                // probably Saltaralle class\r\n                if (obj.hasOwnProperty(\"__typeName\") &&\r\n                    !obj.__register)\r\n                    return;\r\n\r\n                if (!obj.__interfaces &&\r\n                    obj.prototype.format &&\r\n                    fullName.substr(-9) == \"Formatter\") {\r\n                    obj.__class = true;\r\n                    obj.__interfaces = [Serenity.ISlickFormatter]\r\n                }\r\n\r\n                if (!obj.__class) {\r\n                    var baseType = (ss as any).getBaseType(obj);\r\n                    if (baseType && baseType.__class)\r\n                        obj.__class = true;\r\n                }\r\n\r\n                if (obj.__class || obj.__enum || obj.__interface) {\r\n                    obj.__typeName = fullName;\r\n                    if (!obj.__assembly) {\r\n                        obj.__assembly = ss.__assemblies['App'];\r\n                    }\r\n                    obj.__assembly.__types[fullName] = obj;\r\n                }\r\n\r\n                delete obj.__register;\r\n            });\r\n        }\r\n\r\n        $(function () {\r\n            initializeTypes();\r\n\r\n            setMobileDeviceMode();\r\n            $(global).bind('resize', function () {\r\n                setMobileDeviceMode();\r\n            });\r\n        });\r\n    })(window || {});\r\n}","namespace Q {\r\n    export namespace Authorization {\r\n        export function hasPermission(permission: string) {\r\n            if (permission == null)\r\n                return false;\r\n\r\n            if (permission == \"*\")\r\n                return true;\r\n\r\n            if (permission == \"\" || permission == \"?\")\r\n                return isLoggedIn;\r\n\r\n            var ud = Authorization.userDefinition;\r\n            if (ud && ud.IsAdmin)\r\n                return true;\r\n\r\n            if (ud && ud.Permissions) {\r\n                var p = ud.Permissions;\r\n                if (p[permission])\r\n                    return true;\r\n\r\n                var orParts = permission.split('|');\r\n                for (var r of orParts) {\r\n                    if (!r)\r\n                        continue;\r\n\r\n                    var andParts = r.split('&');\r\n                    if (!andParts.length)\r\n                        continue;\r\n\r\n                    let fail = false;\r\n                    for (var n of andParts) {\r\n                        if (!p[n]) {\r\n                            fail = true;\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                    if (!fail)\r\n                        return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        export function validatePermission(permission: string) {\r\n            if (!hasPermission(permission)) {\r\n                Q.notifyError(Q.text(\"Authorization.AccessDenied\"));\r\n                throw new Error(Q.text(\"Authorization.AccessDenied\"));\r\n            }\r\n        }\r\n    }\r\n\r\n    export declare namespace Authorization {\r\n        export let isLoggedIn: boolean;\r\n        export let username: string;\r\n        export let userDefinition: Serenity.UserDefinition;\r\n    }\r\n\r\n    Object.defineProperty(Q.Authorization, \"userDefinition\", {\r\n        get: function () {\r\n            return Q.getRemoteData(\"UserData\");\r\n        }\r\n    });\r\n\r\n    Object.defineProperty(Q.Authorization, \"isLoggedIn\", {\r\n        get: function () {\r\n            var ud = Authorization.userDefinition;\r\n            return ud && !!ud.Username;\r\n        }\r\n    });\r\n\r\n    Object.defineProperty(Q.Authorization, \"username\", {\r\n        get: function () {\r\n            var ud = Authorization.userDefinition;\r\n            if (ud)\r\n                return ud.Username;\r\n\r\n            return null;\r\n        }\r\n    });\r\n}\r\n\r\nnamespace Serenity {\r\n    export interface UserDefinition {\r\n        Username?: string;\r\n        DisplayName?: string;\r\n        IsAdmin?: boolean;\r\n        Permissions?: { [key: string]: boolean };\r\n    }\r\n}","\r\nnamespace Q.Router {\r\n    let oldURL: string;\r\n    let resolving: number = 0;\r\n    let autoinc: number = 0;\r\n    let listenerTimeout: number;\r\n    let ignoreHash: number = 0;\r\n    let ignoreTime: number = 0;\r\n\r\n    export let enabled: boolean = true;\r\n\r\n    function isEqual(url1: string, url2: string) {\r\n        return url1 == url2 || url1 == url2 + '#' || url2 == url1 + '#';\r\n    }\r\n\r\n    export function navigate(hash: string, tryBack?: boolean, silent?: boolean) {\r\n        if (!enabled || resolving > 0)\r\n            return;\r\n\r\n        hash = hash || '';\r\n        hash = hash.replace(/^#/, '');\r\n        hash = (!hash ? \"\" : '#' + hash);\r\n        var newURL = window.location.href.replace(/#$/, '')\r\n            .replace(/#.*$/, '') + hash;\r\n        if (newURL != window.location.href) {\r\n            if (tryBack && oldURL != null && isEqual(oldURL, newURL)) {\r\n                if (silent)\r\n                    ignoreChange();\r\n\r\n                var prior = window.location.href;\r\n                oldURL = null;\r\n                window.history.back();\r\n                return;\r\n            }\r\n\r\n            if (silent)\r\n                ignoreChange();\r\n\r\n            oldURL = window.location.href;\r\n            window.location.hash = hash;\r\n        }\r\n    }\r\n\r\n    export function replace(hash: string, tryBack?: boolean) {\r\n        navigate(hash, tryBack, true);\r\n    }\r\n\r\n    export function replaceLast(hash: string, tryBack?: boolean) {\r\n        if (!enabled)\r\n            return;\r\n\r\n        var current = window.location.hash || '';\r\n        if (current.charAt(0) == '#')\r\n            current = current.substr(1, current.length - 1);\r\n\r\n        var parts = current.split('/+/');\r\n\r\n        if (parts.length > 1) {\r\n            if (hash && hash.length) {\r\n                parts[parts.length - 1] = hash;\r\n                hash = parts.join(\"/+/\");\r\n            }\r\n            else {\r\n                parts.splice(parts.length - 1, 1);\r\n                hash = parts.join(\"/+/\");\r\n            }\r\n        }\r\n        replace(hash, tryBack);\r\n    }\r\n\r\n    function visibleDialogs() {\r\n        return $('.ui-dialog-content:visible, .ui-dialog.panel-hidden>.ui-dialog-content, .s-Panel').toArray().sort((a, b) => {\r\n            return ($(a).data('qrouterorder') || 0) - ($(b).data('qrouterorder') || 0);\r\n        });\r\n    }\r\n\r\n    function dialogOpen(owner: JQuery, element: JQuery, hash: () => string) {\r\n        var route = [];\r\n        var isDialog = owner.hasClass(\".ui-dialog-content\") || owner.hasClass('.s-Panel');\r\n        var dialog = isDialog ? owner :\r\n            owner.closest('.ui-dialog-content, .s-Panel');\r\n        var value = hash();\r\n\r\n        var idPrefix: string;\r\n        if (dialog.length) {\r\n            var dialogs = visibleDialogs();\r\n            var index = dialogs.indexOf(dialog[0]);\r\n\r\n            for (var i = 0; i <= index; i++) {\r\n                var q = $(dialogs[i]).data(\"qroute\") as string;\r\n                if (q && q.length)\r\n                    route.push(q);\r\n            }\r\n\r\n            if (!isDialog) {\r\n                idPrefix = dialog.attr(\"id\");\r\n                if (idPrefix) {\r\n                    idPrefix += \"_\";\r\n                    var id = owner.attr(\"id\");\r\n                    if (id && Q.startsWith(id, idPrefix))\r\n                        value = id.substr(idPrefix.length) + '@' + value;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            var id = owner.attr(\"id\");\r\n            if (id && (!owner.hasClass(\"route-handler\") ||\r\n                $('.route-handler').first().attr(\"id\") != id))\r\n                value = id + \"@\" + value;\r\n        }\r\n\r\n        route.push(value);\r\n        element.data(\"qroute\", value);\r\n        replace(route.join(\"/+/\"));\r\n\r\n        element.bind(\"dialogclose.qrouter panelclose.qrouter\", e => {\r\n            element.data(\"qroute\", null);\r\n            element.unbind(\".qrouter\");\r\n            var prhash = element.data(\"qprhash\");\r\n            var tryBack = $(e.target).closest('.s-MessageDialog').length > 0 || (e && e.originalEvent &&\r\n                ((e.originalEvent.type == \"keydown\" && (e.originalEvent as any).keyCode == 27) ||\r\n                $(e.originalEvent.target).hasClass(\"ui-dialog-titlebar-close\") ||\r\n                $(e.originalEvent.target).hasClass(\"panel-titlebar-close\")));\r\n            if (prhash != null)\r\n                replace(prhash, tryBack);\r\n            else\r\n                replaceLast('', tryBack);\r\n        });\r\n    }\r\n\r\n    export function dialog(owner: JQuery, element: JQuery, hash: () => string) {\r\n        if (!enabled)\r\n            return;\r\n        \r\n        element.on(\"dialogopen.qrouter panelopen.qrouter\", e => {\r\n            dialogOpen(owner, element, hash);\r\n        });\r\n    }\r\n\r\n    export function resolve(hash?: string) {\r\n        if (!enabled)\r\n            return;\r\n\r\n        resolving++;\r\n        try {\r\n            hash = Q.coalesce(Q.coalesce(hash, window.location.hash), '');\r\n            if (hash.charAt(0) == '#')\r\n                hash = hash.substr(1, hash.length - 1);\r\n\r\n            var dialogs = visibleDialogs();\r\n            var newParts = hash.split(\"/+/\");\r\n            var oldParts = dialogs.map(el => $(el).data('qroute') as string);\r\n\r\n            var same = 0;\r\n            while (same < dialogs.length &&\r\n                same < newParts.length &&\r\n                oldParts[same] == newParts[same]) {\r\n                same++;\r\n            }\r\n\r\n            for (var i = same; i < dialogs.length; i++) {\r\n                var d = $(dialogs[i]);\r\n                if (d.hasClass('ui-dialog-content'))\r\n                    d.dialog('close');\r\n                else if (d.hasClass('s-Panel'))\r\n                    Serenity.TemplatedDialog.closePanel(d);\r\n            }\r\n\r\n            for (var i = same; i < newParts.length; i++) {\r\n                var route = newParts[i];\r\n                var routeParts = route.split('@');\r\n                var handler: JQuery;\r\n                if (routeParts.length == 2) {\r\n                    var dialog = i > 0 ? $(dialogs[i - 1]) : $([]);\r\n                    if (dialog.length) {\r\n                        var idPrefix = dialog.attr(\"id\");\r\n                        if (idPrefix) {\r\n                            handler = $('#' + idPrefix + \"_\" + routeParts[0]);\r\n                            if (handler.length) {\r\n                                route = routeParts[1];\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (!handler || !handler.length) {\r\n                        handler = $('#' + routeParts[0]);\r\n                        if (handler.length) {\r\n                            route = routeParts[1];\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (!handler || !handler.length) {\r\n                    handler = i > 0 ? $(dialogs[i - 1]) :\r\n                        $('.route-handler').first();\r\n                }\r\n\r\n                handler.triggerHandler(\"handleroute\", {\r\n                    handled: false,\r\n                    route: route,\r\n                    parts: newParts,\r\n                    index: i\r\n                });\r\n            }\r\n        }\r\n        finally {\r\n            resolving--;\r\n        }\r\n    }\r\n\r\n    function hashChange(e: any, o: string) {\r\n        if (ignoreHash > 0) {\r\n            if (new Date().getTime() - ignoreTime > 1000) {\r\n                ignoreHash = 0;\r\n            }\r\n            else {\r\n                ignoreHash--;\r\n                return;\r\n            }\r\n        }\r\n        resolve();\r\n    }\r\n\r\n    function ignoreChange() {\r\n        ignoreHash++;\r\n        ignoreTime = new Date().getTime();\r\n    }\r\n\r\n    window.addEventListener(\"hashchange\", hashChange as any, false);\r\n\r\n    let routerOrder = 1;\r\n\r\n    $(document).on(\"dialogopen panelopen\", \".ui-dialog-content, .s-Panel\", function (event, ui) {\r\n        if (!enabled)\r\n            return;\r\n\r\n        var dlg = $(event.target);\r\n        dlg.data(\"qrouterorder\", routerOrder++);\r\n\r\n        if (dlg.data(\"qroute\"))\r\n            return;\r\n\r\n        dlg.data(\"qprhash\", window.location.hash);\r\n        var owner = $(visibleDialogs).not(dlg).last();\r\n        if (!owner.length)\r\n            owner = $('html');\r\n\r\n        dialogOpen(owner, dlg, () => {\r\n            return \"!\" + (++autoinc).toString(36);\r\n        });\r\n    });\r\n}","\r\nnamespace Serenity {\r\n\r\n    export namespace Decorators {\r\n        function distinct(arr: any[]) {\r\n            return arr.filter((item, pos) => arr.indexOf(item) === pos);\r\n        }\r\n\r\n        function merge(arr1: any[], arr2: any[]) {\r\n            if (!arr1 || !arr2)\r\n                return (arr1 || arr2 || []).slice();\r\n\r\n            return distinct(arr1.concat(arr2));\r\n        }\r\n\r\n        function registerType(target: any, name: string, intf: any[]) {\r\n            if (name != null) {\r\n                target.__typeName = name;\r\n                target.__assembly = ss.__assemblies['App'];\r\n                target.__assembly.__types[name] = target;\r\n            }\r\n            else if (!target.__typeName)\r\n                target.__register = true;\r\n\r\n            if (intf)\r\n                target.__interfaces = merge(target.__interfaces, intf);\r\n        }\r\n\r\n        export function registerClass(nameOrIntf?: string | any[], intf2?: any[]) {\r\n            return function (target: Function) {\r\n                if (typeof nameOrIntf == \"string\")\r\n                    registerType(target, nameOrIntf, intf2);\r\n                else\r\n                    registerType(target, null, nameOrIntf);\r\n\r\n                (target as any).__class = true;\r\n            }\r\n        }\r\n\r\n        export function registerInterface(nameOrIntf?: string | any[], intf2?: any[]) {\r\n            return function (target: Function) {\r\n\r\n                if (typeof nameOrIntf == \"string\")\r\n                    registerType(target, nameOrIntf, intf2);\r\n                else\r\n                    registerType(target, null, nameOrIntf);\r\n\r\n                (target as any).__interface = true;\r\n                (target as any).isAssignableFrom = function (type: any) {\r\n                    return (ss as any).contains((ss as any).getInterfaces(type), this);\r\n                };\r\n            }\r\n        }\r\n\r\n        export function registerEditor(nameOrIntf?: string | any[], intf2?: any[]) {\r\n            return registerClass(nameOrIntf, intf2);\r\n        }\r\n    }\r\n}\r\n\r\nnamespace System.ComponentModel {\r\n\r\n    @Serenity.Decorators.registerClass('System.DisplayNameAttribute')\r\n    export class DisplayNameAttribute {\r\n        constructor(public displayName: string) {\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Serenity {\r\n\r\n    @Decorators.registerInterface('Serenity.ISlickFormatter')\r\n    export class ISlickFormatter {\r\n    }\r\n\r\n    function Attr(name: string) {\r\n        return Decorators.registerClass('Serenity.' + name + 'Attribute')\r\n    }\r\n\r\n    @Attr('Category')\r\n    export class CategoryAttribute {\r\n        constructor(public category: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('ColumnsKey')\r\n    export class ColumnsKeyAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n\r\n    @Attr('CssClass')\r\n    export class CssClassAttribute {\r\n        constructor(public cssClass: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('DefaultValue')\r\n    export class DefaultValueAttribute {\r\n        constructor(public value: any) {\r\n        }\r\n    }\r\n\r\n    @Attr('DialogType')\r\n    export class DialogTypeAttribute {\r\n        constructor(public value: WidgetDialogClass) {\r\n        }\r\n    }\r\n\r\n    @Attr('Editor')\r\n    export class EditorAttribute {\r\n        constructor() { }\r\n        key: string;\r\n    }\r\n\r\n    @Attr('EditorOption')\r\n    export class EditorOptionAttribute {\r\n        constructor(public key: string, public value: any) {\r\n        }\r\n    }\r\n\r\n    @Decorators.registerClass('Serenity.EditorTypeAttributeBase')\r\n    export class EditorTypeAttributeBase {\r\n        constructor(public editorType: string) {\r\n        }\r\n\r\n        public setParams(editorParams: any): void {\r\n        }\r\n    }\r\n\r\n    @Attr('EditorType')\r\n    export class EditorTypeAttribute extends EditorTypeAttributeBase {\r\n        constructor(editorType: string) {\r\n            super(editorType);\r\n        }\r\n    }\r\n\r\n    @Attr('Element')\r\n    export class ElementAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('EntityType')\r\n    export class EntityTypeAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('EnumKey')\r\n    export class EnumKeyAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('Flexify')\r\n    export class FlexifyAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('Filterable')\r\n    export class FilterableAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('FormKey')\r\n    export class FormKeyAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('GeneratedCode')\r\n    export class GeneratedCodeAttribute {\r\n        constructor(public origin?: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('Hidden')\r\n    export class HiddenAttribute {\r\n        constructor() {\r\n        }\r\n    }\r\n\r\n    @Attr('Hint')\r\n    export class HintAttribute {\r\n        constructor(public hint: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('IdProperty')\r\n    export class IdPropertyAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('Insertable')\r\n    export class InsertableAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('IsActiveProperty')\r\n    export class IsActivePropertyAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('ItemName')\r\n    export class ItemNameAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('LocalTextPrefix')\r\n    export class LocalTextPrefixAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('Maximizable')\r\n    export class MaximizableAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('MaxLength')\r\n    export class MaxLengthAttribute {\r\n        constructor(public maxLength: number) {\r\n        }\r\n    }\r\n\r\n    @Attr('NameProperty')\r\n    export class NamePropertyAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('OneWay')\r\n    export class OneWayAttribute {\r\n    }\r\n\r\n    @Attr('Option')\r\n    export class OptionAttribute {\r\n        constructor() {\r\n        }\r\n    }\r\n\r\n    @Attr('OptionsType')\r\n    export class OptionsTypeAttribute {\r\n        constructor(public value: Function) {\r\n        }\r\n    }\r\n\r\n    @Attr('Panel')\r\n    export class PanelAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('Placeholder')\r\n    export class PlaceholderAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('ReadOnly')\r\n    export class ReadOnlyAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('Required')\r\n    export class RequiredAttribute {\r\n        constructor(public isRequired = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('Resizable')\r\n    export class ResizableAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('Responsive')\r\n    export class ResponsiveAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n\r\n    @Attr('Service')\r\n    export class ServiceAttribute {\r\n        constructor(public value: string) {\r\n        }\r\n    }\r\n\r\n    @Attr('Updatable')\r\n    export class UpdatableAttribute {\r\n        constructor(public value = true) {\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Serenity.Decorators {\r\n\r\n    export function registerFormatter(nameOrIntf: string | any[] = [ISlickFormatter], intf2: any[] = [ISlickFormatter]) {\r\n        return registerClass(nameOrIntf, intf2);\r\n    }\r\n\r\n    export function addAttribute(type: any, attr: any) {\r\n        type.__metadata = type.__metadata || {};\r\n        type.__metadata.attr = type.__metadata.attr || [];\r\n        type.__metadata.attr.push(attr);\r\n    }\r\n\r\n    export function dialogType(value: WidgetDialogClass) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new DialogTypeAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function editor(key?: string) {\r\n        return function (target: Function) {\r\n            var attr = new EditorAttribute();\r\n            if (key !== undefined)\r\n                attr.key = key;\r\n            addAttribute(target, attr);\r\n        }\r\n    }\r\n\r\n    export function element(value: string) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new ElementAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function enumKey(value: string) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new EnumKeyAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function flexify(value = true) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new FlexifyAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function registerEnum(target: any, enumKey?: string, name?: string) {\r\n        if (!target.__enum) {\r\n            Object.defineProperty(target, '__enum', {\r\n                get: function () {\r\n                    return true;\r\n                }\r\n            });\r\n\r\n            target.prototype = target.prototype || {};\r\n            for (var k of Object.keys(target))\r\n                if (isNaN(Q.parseInteger(k)) && target[k] != null && !isNaN(Q.parseInteger(target[k])))\r\n                    target.prototype[k] = target[k];\r\n\r\n            if (name != null) {\r\n                target.__typeName = name;\r\n                target.__assembly = ss.__assemblies['App'];\r\n                target.__assembly.__types[name] = target;\r\n            }\r\n            else if (!target.__typeName)\r\n                target.__register = true;\r\n\r\n            if (enumKey)\r\n                addAttribute(target, new EnumKeyAttribute(enumKey));\r\n        }\r\n    }\r\n\r\n    export function registerEnumType(target: any, name?: string, enumKey?: string) {\r\n        registerEnum(target, Q.coalesce(enumKey, name), name);\r\n    }\r\n\r\n    export function filterable(value = true) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new FilterableAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function itemName(value: string) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new ItemNameAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function maximizable(value = true) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new MaximizableAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function option() {\r\n        return function (target: Object, propertyKey: string): void {\r\n\r\n            var isGetSet = Q.startsWith(propertyKey, 'get_') || Q.startsWith(propertyKey, 'set_');\r\n            var memberName = isGetSet ? propertyKey.substr(4) : propertyKey;\r\n\r\n            var type: any = target.constructor;\r\n            type.__metadata = type.__metadata || {};\r\n            type.__metadata.members = type.__metadata.members || [];\r\n            let member: any = undefined;\r\n            for (var m of type.__metadata.members) {\r\n                if (m.name == memberName) {\r\n                    member = m;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!member) {\r\n                member = {\r\n                    attr: [new Serenity.OptionAttribute()],\r\n                    name: memberName,\r\n                    returnType: Object\r\n                };\r\n\r\n                if (isGetSet) {\r\n                    member.type = 16;\r\n\r\n                    member.getter = {\r\n                        name: 'get_' + memberName,\r\n                        type: 8,\r\n                        sname: 'get_' + memberName,\r\n                        returnType: Object,\r\n                        params: []\r\n                    };\r\n\r\n                    member.setter = {\r\n                        name: 'set_' + memberName,\r\n                        type: 8,\r\n                        sname: 'set_' + memberName,\r\n                        returnType: Object,\r\n                        params: [Object]\r\n                    };\r\n                }\r\n                else {\r\n                    member.type = 4;\r\n                    member.sname = memberName;\r\n                }\r\n\r\n                type.__metadata.members.push(member);\r\n            }\r\n            else {\r\n                member.attr = member.attr || [];\r\n                member.attr.push(new OptionAttribute());\r\n            }\r\n        }\r\n    }\r\n\r\n    export function optionsType(value: Function) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new OptionsTypeAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function panel(value = true) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new PanelAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function resizable(value = true) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new ResizableAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function responsive(value = true) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new ResponsiveAttribute(value));\r\n        }\r\n    }\r\n\r\n    export function service(value: string) {\r\n        return function (target: Function) {\r\n            addAttribute(target, new ServiceAttribute(value));\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    export function Criteria(field: string): any[] {\r\n        return [field];\r\n    }\r\n\r\n    export namespace Criteria {\r\n        import C = Criteria;\r\n\r\n        export function isEmpty(c: any[]): boolean {\r\n            return c == null ||\r\n                c.length === 0 ||\r\n                (c.length === 1 &&\r\n                    typeof c[0] == \"string\" &&\r\n                    c[0].length === 0);\r\n        }\r\n\r\n        export function join(c1: any[], op: string, c2: any[]): any[] {\r\n            if (C.isEmpty(c1))\r\n                return c2;\r\n\r\n            if (C.isEmpty(c2))\r\n                return c1;\r\n\r\n            return [c1, op, c2];\r\n        }\r\n\r\n        export function paren(c: any[]): any[] {\r\n            return C.isEmpty(c) ? c : ['()', c];\r\n        }\r\n\r\n        export function and(c1: any[], c2: any[], ...rest: any[][]): any[] {\r\n            var result = join(c1, 'and', c2);\r\n            if (rest) {\r\n                for (let k of rest)\r\n                    result = join(result, 'and', k);\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        export function or(c1: any[], c2: any[], ...rest: any[][]): any[] {\r\n            var result = join(c1, 'or', c2);\r\n\r\n            if (rest) {\r\n                for (let k of rest)\r\n                    result = join(result, 'or', k);\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        export const enum Operator {\r\n            paren = \"()\",\r\n            not = \"not\",\r\n            isNull = \"is null\",\r\n            isNotNull = \"is not null\",\r\n            exists = \"exists\",\r\n            and = \"and\",\r\n            or = \"or\",\r\n            xor = \"xor\",\r\n            eq = \"=\",\r\n            ne = \"!=\",\r\n            gt = \">\",\r\n            ge = \">=\",\r\n            lt = \"<\",\r\n            le = \"<=\",\r\n            in = \"in\",\r\n            notIn = \"not in\",\r\n            like = \"like\",\r\n            notLike = \"not like\"\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    export interface QuickSearchField {\r\n        name: string;\r\n        title: string;\r\n    }\r\n\r\n    export interface GridRowSelectionMixinOptions {\r\n        selectable?: (item: any) => boolean;\r\n    }\r\n\r\n    @Decorators.registerClass('Serenity.GridRowSelectionMixin')\r\n    export class GridRowSelectionMixin {\r\n\r\n        private idField: string;\r\n        private include: Q.Dictionary<boolean>;\r\n        private grid: IDataGrid;\r\n        private options: GridRowSelectionMixinOptions;\r\n\r\n        constructor(grid: IDataGrid, options?: GridRowSelectionMixinOptions) {\r\n\r\n            this.include = {};\r\n            this.grid = grid;\r\n            this.idField = (grid.getView() as any).idField;\r\n            this.options = options || {};\r\n\r\n            grid.getGrid().onClick.subscribe((e, p) => {\r\n                if ($(e.target).hasClass('select-item')) {\r\n                    e.preventDefault();\r\n                    var item = grid.getView().getItem(p.row);\r\n                    var id = item[this.idField].toString();\r\n\r\n                    if (this.include[id]) {\r\n                        delete this.include[id];\r\n                    }\r\n                    else {\r\n                        this.include[id] = true;\r\n                    }\r\n\r\n                    for (var i = 0; i < (grid.getView() as any).getLength(); i++) {\r\n                        grid.getGrid().updateRow(i);\r\n                    }\r\n\r\n                    this.updateSelectAll();\r\n                }\r\n            });\r\n\r\n            grid.getGrid().onHeaderClick.subscribe((e1, u) => {\r\n                if (e1.isDefaultPrevented()) {\r\n                    return;\r\n                }\r\n                if ($(e1.target).hasClass('select-all-items')) {\r\n                    e1.preventDefault();\r\n                    var view = grid.getView();\r\n                    if (Object.keys(this.include).length > 0) {\r\n                        (ss as any).clearKeys(this.include);\r\n                    }\r\n                    else {\r\n                        var items = grid.getView().getItems();\r\n                        for (var x of items.filter(this.isSelectable.bind(this))) {\r\n                            var id1 = x[this.idField];\r\n                            this.include[id1] = true;\r\n                        }\r\n                    }\r\n                    this.updateSelectAll();\r\n                    grid.getView().setItems(grid.getView().getItems(), true);\r\n                }\r\n            });\r\n\r\n            (grid.getView() as any).onRowsChanged.subscribe(() => {\r\n                return this.updateSelectAll();\r\n            });\r\n        }\r\n\r\n        updateSelectAll(): void {\r\n            var selectAllButton = this.grid.getElement()\r\n                .find('.select-all-header .slick-column-name .select-all-items');\r\n\r\n            if (selectAllButton) {\r\n                var keys = Object.keys(this.include);\r\n                selectAllButton.toggleClass('checked',\r\n                    keys.length > 0 &&\r\n                    this.grid.getView().getItems().filter(\r\n                        this.isSelectable.bind(this)).length <= keys.length);\r\n            }\r\n        }\r\n\r\n        clear(): void {\r\n            (ss as any).clearKeys(this.include);\r\n            this.updateSelectAll();\r\n        }\r\n\r\n        resetCheckedAndRefresh(): void {\r\n            this.include = {};\r\n            this.updateSelectAll();\r\n            this.grid.getView().populate();\r\n        }\r\n\r\n        selectKeys(keys: string[]): void {\r\n            for (var k of keys) {\r\n                this.include[k] = true;\r\n            }\r\n\r\n            this.updateSelectAll();\r\n        }\r\n\r\n        getSelectedKeys(): string[] {\r\n            return Object.keys(this.include);\r\n        }\r\n\r\n        getSelectedAsInt32(): number[] {\r\n            return Object.keys(this.include).map(function (x) {\r\n                return parseInt(x, 10);\r\n            });\r\n        }\r\n\r\n        getSelectedAsInt64(): number[] {\r\n            return Object.keys(this.include).map(function (x) {\r\n                return parseInt(x, 10);\r\n            });\r\n        }\r\n\r\n        setSelectedKeys(keys: string[]): void {\r\n            this.clear();\r\n            for (var k of keys) {\r\n                this.include[k] = true;\r\n            }\r\n\r\n            this.updateSelectAll();\r\n        }\r\n\r\n        private isSelectable(item: any) {\r\n            return item && (\r\n                this.options.selectable == null ||\r\n                this.options.selectable(item));\r\n        }\r\n\r\n        static createSelectColumn(getMixin: () => GridRowSelectionMixin): Slick.Column {\r\n            return {\r\n                name: '<span class=\"select-all-items check-box no-float \"></span>',\r\n                toolTip: ' ',\r\n                field: '__select__',\r\n                width: 27,\r\n                minWidth: 27,\r\n                headerCssClass: 'select-all-header',\r\n                sortable: false,\r\n                format: function (ctx) {\r\n                    var item = ctx.item;\r\n                    var mixin = getMixin();\r\n                    if (!mixin || !mixin.isSelectable(item)) {\r\n                        return '';\r\n                    }\r\n                    var isChecked = mixin.include[ctx.item[mixin.idField]];\r\n                    return '<span class=\"select-item check-box no-float ' + (isChecked ? ' checked' : '') + '\"></span>';\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    export interface GridRadioSelectionMixinOptions {\r\n        selectable?: (item: any) => boolean;\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass('Serenity.GridRadioSelectionMixin')\r\n    export class GridRadioSelectionMixin {\r\n\r\n        private idField: string;\r\n        private include: Q.Dictionary<boolean>;\r\n        private grid: Serenity.IDataGrid;\r\n        private options: GridRadioSelectionMixinOptions;\r\n\r\n        constructor(grid: Serenity.IDataGrid, options?: GridRadioSelectionMixinOptions) {\r\n\r\n            this.include = {};\r\n            this.grid = grid;\r\n            this.idField = (grid.getView() as any).idField;\r\n            this.options = options || {};\r\n\r\n            grid.getGrid().onClick.subscribe((e, p) => {\r\n                if ($(e.target).hasClass('rad-select-item')) {\r\n                    e.preventDefault();\r\n                    var item = grid.getView().getItem(p.row);\r\n\r\n                    if (!this.isSelectable(item)) {\r\n                        return;\r\n                    }\r\n\r\n                    var id = item[this.idField].toString();\r\n\r\n                    if (this.include[id] == true) {\r\n                        (ss as any).clearKeys(this.include);\r\n                    }\r\n                    else {\r\n                        (ss as any).clearKeys(this.include);\r\n                        this.include[id] = true;\r\n                    }\r\n\r\n                    for (var i = 0; i < (grid.getView() as any).getLength(); i++) {\r\n                        grid.getGrid().updateRow(i);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        private isSelectable(item: any) {\r\n            return item && (\r\n                this.options.selectable == null ||\r\n                this.options.selectable(item));\r\n        }\r\n\r\n        clear(): void {\r\n            (ss as any).clearKeys(this.include);\r\n        }\r\n\r\n        resetCheckedAndRefresh(): void {\r\n            this.include = {};\r\n            this.grid.getView().populate();\r\n        }\r\n\r\n        getSelectedKey(): string {\r\n            var items = Object.keys(this.include);\r\n            if (items != null && items.length > 0) {\r\n                return items[0];\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        getSelectedAsInt32(): number {\r\n            var items = Object.keys(this.include).map(function (x) {\r\n                return parseInt(x, 10);\r\n            });\r\n\r\n            if (items != null && items.length > 0) {\r\n                return items[0];\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        getSelectedAsInt64(): number {\r\n            var items = Object.keys(this.include).map(function (x) {\r\n                return parseInt(x, 10);\r\n            });\r\n\r\n            if (items != null && items.length > 0) {\r\n                return items[0];\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        setSelectedKey(key: string): void {\r\n            this.clear();\r\n            this.include[key] = true;\r\n        }\r\n\r\n        static createSelectColumn(getMixin: () => Serenity.GridRadioSelectionMixin): Slick.Column {\r\n            return {\r\n                name: '',\r\n                toolTip: ' ',\r\n                field: '__select__',\r\n                width: 27,\r\n                minWidth: 27,\r\n                headerCssClass: '',\r\n                sortable: false,\r\n                formatter: function (row, cell, value, column, item) {\r\n                    var mixin = getMixin();\r\n                    if (!mixin || !mixin.isSelectable(item)) {\r\n                        return '';\r\n                    }\r\n\r\n                    var isChecked = mixin.include[item[mixin.idField]];\r\n                    return '<input type=\"radio\" name=\"radio-selection-group\" class=\"rad-select-item no-float\" style=\"cursor: pointer;width: 13px; height:13px;\" ' + (isChecked ? ' checked' : '') + ' /> ';\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    export namespace GridSelectAllButtonHelper {\r\n        export function update(grid: IDataGrid, getSelected: (p1: any) => boolean): void {\r\n            var toolbar = (grid as any).element.children('.s-Toolbar') as JQuery;\r\n            if (toolbar.length === 0) {\r\n                return;\r\n            }\r\n            var btn = toolbar.getWidget(Toolbar).findButton('select-all-button');\r\n            var items = grid.getView().getItems();\r\n            btn.toggleClass('checked', items.length > 0 && !items.some(function (x) {\r\n                return !getSelected(x);\r\n            }));\r\n        }\r\n\r\n        export function define(getGrid: () => IDataGrid, getId: (p1: any) => any,\r\n            getSelected: (p1: any) => boolean,\r\n            setSelected: (p1: any, p2: boolean) => void,\r\n            text?: string, onClick?: () => void): ToolButton {\r\n\r\n            if (text == null) {\r\n                text = Q.coalesce(Q.tryGetText('Controls.CheckTreeEditor.SelectAll'),\r\n                    'Select All');\r\n            }\r\n            return {\r\n                title: text,\r\n                cssClass: 'select-all-button',\r\n                onClick: function () {\r\n                    var grid = getGrid();\r\n                    var view = grid.getView();\r\n                    var btn = (grid as any).element.children('.s-Toolbar')\r\n                        .getWidget(Toolbar).findButton('select-all-button');\r\n                    var makeSelected = !btn.hasClass('checked');\r\n                    view.beginUpdate();\r\n                    try {\r\n                        for (var item of view.getItems()) {\r\n                            setSelected(item, makeSelected);\r\n                            view.updateItem(getId(item), item);\r\n                        }\r\n                        onClick && onClick();\r\n                    }\r\n                    finally {\r\n                        view.endUpdate();\r\n                    }\r\n\r\n                    btn.toggleClass('checked', makeSelected);\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    export namespace GridUtils {\r\n        export function addToggleButton(toolDiv: JQuery, cssClass: string,\r\n            callback: (p1: boolean) => void, hint: string, initial?: boolean): void {\r\n\r\n            var div = $('<div><a href=\"#\"></a></div>')\r\n                .addClass('s-ToggleButton').addClass(cssClass)\r\n                .prependTo(toolDiv);\r\n            div.children('a').click(function (e) {\r\n                e.preventDefault();\r\n                div.toggleClass('pressed');\r\n                var pressed = div.hasClass('pressed');\r\n                callback && callback(pressed);\r\n            }).attr('title', Q.coalesce(hint, ''));\r\n            if (initial) {\r\n                div.addClass('pressed');\r\n            }\r\n        }\r\n\r\n        export function addIncludeDeletedToggle(toolDiv: JQuery,\r\n            view: Slick.RemoteView<any>, hint?: string, initial?: boolean): void {\r\n\r\n            var includeDeleted = false;\r\n            var oldSubmit = view.onSubmit;\r\n            view.onSubmit = function (v) {\r\n                v.params.IncludeDeleted = includeDeleted;\r\n                if (oldSubmit != null) {\r\n                    return oldSubmit(v);\r\n                }\r\n                return true;\r\n            };\r\n\r\n            if (hint == null) \r\n                hint = Q.text('Controls.EntityGrid.IncludeDeletedToggle');\r\n            \r\n            addToggleButton(toolDiv, 's-IncludeDeletedToggle',\r\n                function (pressed) {\r\n                    includeDeleted = pressed;\r\n                    view.seekToPage = 1;\r\n                    view.populate();\r\n                }, hint, initial);\r\n            toolDiv.bind('remove', function () {\r\n                view.onSubmit = null;\r\n                oldSubmit = null;\r\n            });\r\n        }\r\n\r\n        export function addQuickSearchInput(toolDiv: JQuery,\r\n            view: Slick.RemoteView<any>, fields?: QuickSearchField[]): void {\r\n\r\n            var oldSubmit = view.onSubmit;\r\n            var searchText = '';\r\n            var searchField = '';\r\n            view.onSubmit = function (v) {\r\n                if (searchText != null && searchText.length > 0) {\r\n                    v.params.ContainsText = searchText;\r\n                }\r\n                else {\r\n                    delete v.params['ContainsText'];\r\n                }\r\n                if (searchField != null && searchField.length > 0) {\r\n                    v.params.ContainsField = searchField;\r\n                }\r\n                else {\r\n                    delete v.params['ContainsField'];\r\n                }\r\n\r\n                if (oldSubmit != null) \r\n                    return oldSubmit(v);\r\n                \r\n                return true;\r\n            };\r\n\r\n            var lastDoneEvent: any = null;\r\n            addQuickSearchInputCustom(toolDiv, (field, query, done) => {\r\n                searchText = query;\r\n                searchField = field;\r\n                view.seekToPage = 1;\r\n                lastDoneEvent = done;\r\n                view.populate();\r\n            }, fields);\r\n\r\n            view.onDataLoaded.subscribe(function (e, ui) {\r\n                if (lastDoneEvent != null) {\r\n                    lastDoneEvent(view.getLength() > 0);\r\n                    lastDoneEvent = null;\r\n                }\r\n            });\r\n        }\r\n\r\n        export function addQuickSearchInputCustom(container: JQuery,\r\n            onSearch: (p1: string, p2: string, done: (p3: boolean) => void) => void,\r\n            fields?: QuickSearchField[]) {\r\n\r\n            var div = $('<div><input type=\"text\"/></div>')\r\n                .addClass('s-QuickSearchBar').prependTo(container);\r\n\r\n            if (fields != null && fields.length > 0) {\r\n                div.addClass('has-quick-search-fields');\r\n            }\r\n\r\n            new QuickSearchInput(div.children(), {\r\n                fields: fields,\r\n                onSearch: onSearch as any\r\n            });\r\n        }\r\n\r\n        export function makeOrderable(grid: Slick.Grid,\r\n            handleMove: (p1: any, p2: number) => void): void {\r\n\r\n            var moveRowsPlugin = new Slick.RowMoveManager({ cancelEditOnDrag: true });\r\n            moveRowsPlugin.onBeforeMoveRows.subscribe(function (e, data) {\r\n                for (var i = 0; !!(i < data.rows.length); i++) {\r\n                    if (!!(data.rows[i] === data.insertBefore ||\r\n                        data.rows[i] === data.insertBefore - 1)) {\r\n                        e.stopPropagation();\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                return true;\r\n            });\r\n\r\n            moveRowsPlugin.onMoveRows.subscribe(function (e1, data1) {\r\n                handleMove(data1.rows, data1.insertBefore);\r\n                try {\r\n                    grid.setSelectedRows([]);\r\n                }\r\n                catch ($t1) {\r\n                }\r\n            });\r\n            grid.registerPlugin(moveRowsPlugin);\r\n        }\r\n\r\n        export function makeOrderableWithUpdateRequest(grid: DataGrid<any, any>,\r\n            getId: (p1: any) => number, getDisplayOrder: (p1: any) => any, service: string,\r\n            getUpdateRequest: (p1: number, p2: number) => SaveRequest<any>): void {\r\n\r\n            makeOrderable(grid.slickGrid, function (rows, insertBefore) {\r\n                if (rows.length === 0) {\r\n                    return;\r\n                }\r\n\r\n                var order: number;\r\n                var index = insertBefore;\r\n                if (index < 0) {\r\n                    order = 1;\r\n                }\r\n                else if (insertBefore >= grid.rowCount()) {\r\n                    order = Q.coalesce(getDisplayOrder(\r\n                        grid.itemAt(grid.rowCount() - 1)), 0);\r\n                    if (order === 0) {\r\n                        order = insertBefore + 1;\r\n                    }\r\n                    else {\r\n                        order = order + 1;\r\n                    }\r\n                }\r\n                else {\r\n                    order = Q.coalesce(getDisplayOrder(\r\n                        grid.itemAt(insertBefore)), 0);\r\n                    if (order === 0) {\r\n                        order = insertBefore + 1;\r\n                    }\r\n                }\r\n\r\n                var i = 0;\r\n                var next: any = null;\r\n                next = function () {\r\n                    Q.serviceCall({\r\n                        service: service,\r\n                        request: getUpdateRequest(getId(\r\n                            grid.itemAt(rows[i])), order++),\r\n                        onSuccess: function (response) {\r\n                            i++;\r\n                            if (i < rows.length) {\r\n                                next();\r\n                            }\r\n                            else {\r\n                                grid.view.populate();\r\n                            }\r\n                        }\r\n                    });\r\n                };\r\n                next();\r\n            });\r\n        }\r\n    }\r\n\r\n    export namespace PropertyItemSlickConverter {\r\n        export function toSlickColumns(items: PropertyItem[]): Slick.Column[] {\r\n            var result: Slick.Column[] = [];\r\n            if (items == null) {\r\n                return result;\r\n            }\r\n            for (var i = 0; i < items.length; i++) {\r\n                result.push(toSlickColumn(items[i]));\r\n            }\r\n            return result;\r\n        }\r\n\r\n        export function toSlickColumn(item: PropertyItem): Slick.Column {\r\n            var result: Slick.Column = {\r\n                field: item.name,\r\n                sourceItem: item,\r\n                cssClass: item.cssClass,\r\n                headerCssClass: item.headerCssClass,\r\n                sortable: item.sortable !== false,\r\n                sortOrder: Q.coalesce(item.sortOrder, 0),\r\n                width: item.width != null ? item.width : 80,\r\n                minWidth: Q.coalesce(item.minWidth, 30),\r\n                maxWidth: (item.maxWidth == null || item.maxWidth === 0) ? null : item.maxWidth,\r\n                resizable: item.resizable == null || !!item.resizable\r\n            };\r\n\r\n            result.visible = item.visible !== false && item.filterOnly !== true &&\r\n                (item.readPermission == null || Q.Authorization.hasPermission(item.readPermission));\r\n\r\n            var name = Q.tryGetText(item.title);\r\n            if (name == null)\r\n                name = item.title;\r\n            result.name = name;\r\n\r\n            if (item.alignment != null && item.alignment.length > 0) {\r\n                if (!Q.isEmptyOrNull(result.cssClass)) {\r\n                    result.cssClass += ' align-' + item.alignment;\r\n                }\r\n                else {\r\n                    result.cssClass = 'align-' + item.alignment;\r\n                }\r\n            }\r\n\r\n            if (item.formatterType != null && item.formatterType.length > 0) {\r\n\r\n                var formatter = (ss as any).cast((ss as any).createInstance(\r\n                    Serenity.FormatterTypeRegistry.get(item.formatterType)), Serenity.ISlickFormatter);\r\n\r\n                if (item.formatterParams != null) {\r\n                    ReflectionOptionsSetter.set(formatter, item.formatterParams);\r\n                }\r\n\r\n                var initializer = (ss as any).safeCast(formatter, Serenity.IInitializeColumn);\r\n                if (initializer != null) {\r\n                    initializer.initializeColumn(result);\r\n                }\r\n\r\n                result.format = (ctx) => formatter.format(ctx);\r\n            }\r\n\r\n            return result;\r\n        }\r\n    }\r\n\r\n    export namespace SlickFormatting {\r\n        export function getEnumText(enumKey: string, name: string): string {\r\n            return Serenity.EnumFormatter.getText(enumKey, name);\r\n        }\r\n\r\n        export function treeToggle<TItem>(getView: () => Slick.RemoteView<TItem>, getId: (x: TItem) => any,\r\n            formatter: Slick.Format): Slick.Format {\r\n            return function (ctx: Slick.FormatterContext) {\r\n                var text = formatter(ctx);\r\n                var view = getView();\r\n                var indent = Q.coalesce(ctx.item._indent, 0);\r\n                var spacer = '<span class=\"s-TreeIndent\" style=\"width:' + 15 * indent + 'px\"></span>';\r\n                var id = getId(ctx.item);\r\n                var idx = view.getIdxById(id);\r\n                var next = view.getItemByIdx(idx + 1);\r\n                if (next != null) {\r\n                    var nextIndent = Q.coalesce(next._indent, 0);\r\n                    if (nextIndent > indent) {\r\n                        if (!!!!ctx.item._collapsed) {\r\n                            return spacer + '<span class=\"s-TreeToggle s-TreeExpand\"></span>' + text;\r\n                        }\r\n                        else {\r\n                            return spacer + '<span class=\"s-TreeToggle s-TreeCollapse\"></span>' + text;\r\n                        }\r\n                    }\r\n                }\r\n                return spacer + '<span class=\"s-TreeToggle\"></span>' + text;\r\n            };\r\n        }\r\n\r\n        export function date(format?: string): Slick.Format {\r\n            if (format == null) {\r\n                format = Q.Culture.dateFormat;\r\n            }\r\n\r\n            return function (ctx: Slick.FormatterContext) {\r\n                return Q.htmlEncode(Serenity.DateFormatter.format(ctx.value, format));\r\n            };\r\n        }\r\n\r\n        export function dateTime(format?: string): Slick.Format {\r\n            if (format == null) {\r\n                format = Q.Culture.dateTimeFormat;\r\n            }\r\n            return function (ctx: Slick.FormatterContext) {\r\n                return Q.htmlEncode(Serenity.DateFormatter.format(ctx.value, format));\r\n            };\r\n        }\r\n\r\n        export function checkBox(): Slick.Format {\r\n            return function (ctx: Slick.FormatterContext) {\r\n                return '<span class=\"check-box no-float ' + (!!ctx.value ? ' checked' : '') + '\"></span>';\r\n            };\r\n        }\r\n\r\n        export function number(format: string): Slick.Format {\r\n            return function (ctx: Slick.FormatterContext) {\r\n                return Serenity.NumberFormatter.format(ctx.value, format);\r\n            };\r\n        }\r\n\r\n        export function getItemType(link: JQuery): string {\r\n            return link.data('item-type');\r\n        }\r\n\r\n        export function getItemId(link: JQuery): string {\r\n            var value = link.data('item-id');\r\n            return value == null ? null : value.toString();\r\n        }\r\n\r\n        export function itemLinkText(itemType: string, id: any, text: any,\r\n            extraClass: string, encode: boolean): string {\r\n            return '<a' + (id != null ? (' href=\"#' + Q.replaceAll(itemType, '.', '-') +\r\n                '/' + id + '\"') : '') + ' data-item-type=\"' +\r\n                Q.attrEncode(itemType) + '\"' + ' data-item-id=\"' +\r\n                Q.attrEncode(id) + '\"' + ' class=\"s-EditLink s-' +\r\n                Q.replaceAll(itemType, '.', '-') + 'Link' +\r\n                (Q.isEmptyOrNull(extraClass) ? '' : (' ' + extraClass)) + '\">' +\r\n                (encode ? Q.htmlEncode(Q.coalesce(text, '')) : Q.coalesce(text, '')) + '</a>';\r\n        }\r\n\r\n        export function itemLink(itemType: string, idField: string, getText: Slick.Format,\r\n            cssClass?: Slick.Format, encode?: boolean): Slick.Format {\r\n            return function (ctx: Slick.FormatterContext) {\r\n                return itemLinkText(itemType, ctx.item[idField],\r\n                    (getText == null ? ctx.value : getText(ctx)),\r\n                    (cssClass == null ? '' : cssClass(ctx)), encode);\r\n            };\r\n        }\r\n    }\r\n\r\n    export namespace SlickHelper {\r\n        export function setDefaults(columns: Slick.Column[], localTextPrefix?: string): any {\r\n            for (var col of columns) {\r\n                col.sortable = (col.sortable != null ? col.sortable : true);\r\n                var id = col.id;\r\n                if (id == null) {\r\n                    id = col.field;\r\n                }\r\n                col.id = id;\r\n\r\n                if (localTextPrefix != null && col.id != null &&\r\n                    (col.name == null || Q.startsWith(col.name, '~'))) {\r\n                    var key = (col.name != null ? col.name.substr(1) : col.id);\r\n                    col.name = Q.text(localTextPrefix + key);\r\n                }\r\n\r\n                if (col.formatter == null && col.format != null) {\r\n                    col.formatter = convertToFormatter(col.format);\r\n                }\r\n                else if (col.formatter == null) {\r\n                    col.formatter = function (row, cell, value, column, item) {\r\n                        return Q.htmlEncode(value);\r\n                    };\r\n                }\r\n            }\r\n\r\n            return columns;\r\n        }\r\n\r\n        export function convertToFormatter(format: Slick.Format): Slick.ColumnFormatter {\r\n            if (format == null) {\r\n                return null;\r\n            }\r\n            else {\r\n                return function (row: number, cell: number, value: any, column: Slick.Column, item: any) {\r\n                    return format({\r\n                        row: row,\r\n                        cell: cell,\r\n                        value: value,\r\n                        column: column,\r\n                        item: item\r\n                    });\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    export namespace SlickTreeHelper {\r\n        export function filterCustom<TItem>(item: TItem, getParent: (x: TItem) => any): boolean {\r\n            var parent = getParent(item);\r\n            var loop = 0;\r\n            while (parent != null) {\r\n                if (!!parent._collapsed) {\r\n                    return false;\r\n                }\r\n                parent = getParent(parent);\r\n                if (loop++ > 1000) {\r\n                    throw new (ss as any).InvalidOperationException(\r\n                        'Possible infinite loop, check parents has no circular reference!');\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n\r\n        export function filterById<TItem>(item: TItem, view: Slick.RemoteView<TItem>,\r\n            getParentId: (x: TItem) => any): boolean {\r\n            return filterCustom(item, function (x) {\r\n                var parentId = getParentId(x);\r\n                if (parentId == null) {\r\n                    return null;\r\n                }\r\n                return view.getItemById(parentId);\r\n            });\r\n        }\r\n\r\n        export function setCollapsed<TItem>(items: TItem[], collapsed: boolean): void {\r\n            if (items != null) {\r\n                for (var item of items) {\r\n                    (item as any)._collapsed = collapsed;\r\n                }\r\n            }\r\n        }\r\n\r\n        export function setCollapsedFlag<TItem>(item: TItem, collapsed: boolean): void {\r\n            (item as any)._collapsed = collapsed;\r\n        }\r\n\r\n        export function setIndents<TItem>(items: TItem[], getId: (x: TItem) => any,\r\n            getParentId: (x: TItem) => any, setCollapsed?: boolean): void {\r\n            var depth = 0;\r\n            var depths = {};\r\n            for (var line = 0; line < items.length; line++) {\r\n                var item = items[line];\r\n                if (line > 0) {\r\n                    var parentId = getParentId(item);\r\n                    if (parentId != null && parentId === getId(items[line - 1])) {\r\n                        depth += 1;\r\n                    }\r\n                    else if (parentId == null) {\r\n                        depth = 0;\r\n                    }\r\n                    else if (parentId !== getParentId(items[line - 1])) {\r\n                        if (depths[parentId] != null) {\r\n                            depth = depths[parentId] + 1;\r\n                        }\r\n                        else {\r\n                            depth = 0;\r\n                        }\r\n                    }\r\n                }\r\n                depths[getId(item)] = depth;\r\n                (item as any)._indent = depth;\r\n                if (setCollapsed != null) {\r\n                    (item as any)._collapsed = setCollapsed;\r\n                }\r\n            }\r\n        }\r\n\r\n        export function toggleClick<TItem>(e: JQueryEventObject, row: number, cell: number,\r\n            view: Slick.RemoteView<TItem>, getId: (x: TItem) => any): void {\r\n            var target = $(e.target);\r\n            if (!target.hasClass('s-TreeToggle')) {\r\n                return;\r\n            }\r\n            if (target.hasClass('s-TreeCollapse') || target.hasClass('s-TreeExpand')) {\r\n                var item = view.getItem(row);\r\n                if (item != null) {\r\n                    if (!!!item._collapsed) {\r\n                        item._collapsed = true;\r\n                    }\r\n                    else {\r\n                        item._collapsed = false;\r\n                    }\r\n                    view.updateItem(getId(item), item);\r\n                }\r\n                if (e.shiftKey) {\r\n                    view.beginUpdate();\r\n                    try {\r\n                        setCollapsed(view.getItems(), !!item._collapsed);\r\n                        view.setItems(view.getItems(), true);\r\n                    }\r\n                    finally {\r\n                        view.endUpdate();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n}","namespace Serenity {\r\n    export namespace LazyLoadHelper {\r\n        let autoIncrement = 0;\r\n\r\n        export function executeOnceWhenShown(element: JQuery, callback: Function) {\r\n            autoIncrement++;\r\n            var eventClass = 'ExecuteOnceWhenShown' + autoIncrement;\r\n            var executed = false;\r\n            if (element.is(':visible')) {\r\n                callback();\r\n            }\r\n            else {\r\n                var uiTabs = element.closest('.ui-tabs');\r\n                if (uiTabs.length > 0) {\r\n                    uiTabs.bind('tabsactivate.' + eventClass, function (e) {\r\n                        if (element.is(':visible')) {\r\n                            uiTabs.unbind('tabsactivate.' + eventClass);\r\n                            if (!executed) {\r\n                                executed = true;\r\n                                element.unbind('shown.' + eventClass);\r\n                                callback();\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n                var bsTabs = element.closest('.nav-tabs');\r\n                if (bsTabs.length > 0) {\r\n                    bsTabs.one('shown.bs.tab', e => {\r\n                        if (!executed && element.is(':visible')) {\r\n                            executed = true;\r\n                            callback();\r\n                        }\r\n                    });\r\n                }\r\n                var dialog: JQuery;\r\n                if (element.hasClass('ui-dialog')) {\r\n                    dialog = element.children('.ui-dialog-content');\r\n                }\r\n                else {\r\n                    dialog = element.closest('.ui-dialog-content, .s-TemplatedDialog');\r\n                }\r\n                if (dialog.length > 0) {\r\n                    dialog.bind('dialogopen.' + eventClass + ' panelopen.' + eventClass, function () {\r\n                        dialog.unbind('dialogopen.' + eventClass);\r\n                        dialog.unbind('panelopen.' + eventClass);\r\n                        if (element.is(':visible') && !executed) {\r\n                            executed = true;\r\n                            element.unbind('shown.' + eventClass);\r\n                            callback();\r\n                        }\r\n                    });\r\n                }\r\n                element.bind('shown.' + eventClass, function () {\r\n                    if (element.is(':visible')) {\r\n                        element.unbind('shown.' + eventClass);\r\n                        if (!executed) {\r\n                            executed = true;\r\n                            callback();\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        export function executeEverytimeWhenShown(element: JQuery, callback: Function, callNowIfVisible: boolean) {\r\n            autoIncrement++;\r\n            var eventClass = 'ExecuteEverytimeWhenShown' + autoIncrement;\r\n            var wasVisible = element.is(':visible');\r\n\r\n            if (wasVisible && callNowIfVisible) {\r\n                callback();\r\n            }\r\n\r\n            var check = function (e: any) {\r\n                if (element.is(':visible')) {\r\n                    if (!wasVisible) {\r\n                        wasVisible = true;\r\n                        callback();\r\n                    }\r\n                }\r\n                else {\r\n                    wasVisible = false;\r\n                }\r\n            };\r\n\r\n            var uiTabs = element.closest('.ui-tabs');\r\n            if (uiTabs.length > 0) {\r\n                uiTabs.bind('tabsactivate.' + eventClass, check);\r\n            }\r\n\r\n            var dialog = element.closest('.ui-dialog-content, .s-TemplatedDialog');\r\n            if (dialog.length > 0) {\r\n                dialog.bind('dialogopen.' + eventClass + ' panelopen.' + eventClass, check);\r\n            }\r\n\r\n            element.bind('shown.' + eventClass, check);\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n    export namespace SubDialogHelper {\r\n        export function bindToDataChange(dialog: any, owner: Serenity.Widget<any>,\r\n            dataChange: (p1: any, p2: DataChangeInfo) => void, useTimeout?: boolean): any {\r\n            var widgetName = (owner as any).widgetName;\r\n            dialog.element.bind('ondatachange.' + widgetName, function (e: JQueryEventObject, dci: any) {\r\n                if (useTimeout) {\r\n                    window.setTimeout(function () {\r\n                        dataChange(e, dci);\r\n                    }, 0);\r\n                }\r\n                else {\r\n                    dataChange(e, dci);\r\n                }\r\n            }).bind('remove.' + widgetName, function () {\r\n                dialog.element.unbind('ondatachange.' + widgetName);\r\n            });\r\n            return dialog;\r\n        }\r\n\r\n        export function triggerDataChange(dialog: Serenity.Widget<any>): any {\r\n            dialog.element.triggerHandler('ondatachange');\r\n            return dialog;\r\n        }\r\n\r\n        export function triggerDataChanged(element: JQuery): JQuery {\r\n            element.triggerHandler('ondatachange');\r\n            return element;\r\n        }\r\n\r\n        export function bubbleDataChange(dialog: any, owner: Serenity.Widget<any>, useTimeout?: boolean): any {\r\n            return bindToDataChange(dialog, owner, function (e, dci) {\r\n                owner.element.triggerHandler('ondatachange');\r\n            }, useTimeout);\r\n        }\r\n\r\n        export function cascade(cascadedDialog: any, ofElement: JQuery): any {\r\n            cascadedDialog.element.one('dialogopen', function (e: JQueryEventObject) {\r\n                cascadedDialog.element.dialog().dialog('option', 'position', cascadedDialogOffset(ofElement));\r\n            });\r\n            return cascadedDialog;\r\n        }\r\n\r\n        export function cascadedDialogOffset(element: JQuery): any {\r\n            return { my: 'left top', at: 'left+20 top+20', of: element[0] };\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n    export namespace TabsExtensions {\r\n        export function setDisabled(tabs: JQuery, tabKey: string, isDisabled: boolean) {\r\n            if (!tabs)\r\n                return;\r\n\r\n            var ibk = indexByKey(tabs);\r\n            if (!ibk)\r\n                return;\r\n\r\n            var index = ibk[tabKey];\r\n            if (index == null) {\r\n                return;\r\n            }\r\n\r\n            if (isDisabled && index === tabs.tabs('option', 'active')) {\r\n                tabs.tabs('option', 'active', 0);\r\n            }\r\n\r\n            tabs.tabs(isDisabled ? 'disable' : 'enable', index);\r\n        }\r\n\r\n        export function toggle(tabs: JQuery, tabKey: string, visible: boolean) {\r\n            if (!tabs)\r\n                return;\r\n\r\n            var ibk = indexByKey(tabs);\r\n            if (!ibk)\r\n                return;\r\n\r\n            var index = ibk[tabKey];\r\n            if (index == null) {\r\n                return;\r\n            }\r\n\r\n            if (!visible && index === tabs.tabs('option', 'active')) {\r\n                tabs.tabs('option', 'active', 0);\r\n            }\r\n\r\n            tabs.children('ul').children('li').eq(index).toggle(visible);\r\n        }\r\n\r\n        export function activeTabKey(tabs: JQuery) {\r\n            var href = tabs.children('ul')\r\n                .children('li')\r\n                .eq(tabs.tabs('option', 'active'))\r\n                .children('a')\r\n                .attr('href')\r\n                .toString();\r\n\r\n            var prefix = '_Tab';\r\n            var lastIndex = href.lastIndexOf(prefix);\r\n            if (lastIndex >= 0) {\r\n                href = href.substr(lastIndex + prefix.length);\r\n            }\r\n            return href;\r\n        }\r\n\r\n        export function indexByKey(tabs: JQuery): any {\r\n            var indexByKey = tabs.data('indexByKey');\r\n            if (!indexByKey) {\r\n                indexByKey = {};\r\n                tabs.children('ul').children('li').children('a').each(function (index, el) {\r\n                    var href = el.getAttribute('href').toString();\r\n                    var prefix = '_Tab';\r\n                    var lastIndex = href.lastIndexOf(prefix);\r\n                    if (lastIndex >= 0) {\r\n                        href = href.substr(lastIndex + prefix.length);\r\n                    }\r\n                    indexByKey[href] = index;\r\n                });\r\n                tabs.data('indexByKey', indexByKey);\r\n            }\r\n\r\n            return indexByKey;\r\n        }\r\n        \r\n        export function selectTab(tabs: JQuery, tabKey: string) {\r\n            var ibk = indexByKey(tabs);\r\n            if (!ibk)\r\n                return;\r\n            var index = ibk[tabKey];\r\n            if (index == null) {\r\n                return;\r\n            }\r\n            if (index !== tabs.tabs('option', 'active')) {\r\n                tabs.tabs('option', 'active', index);\r\n            }\r\n        }\r\n    }\r\n}\r\n","namespace Serenity {\r\n    export namespace UploadHelper {\r\n\r\n        export function addUploadInput(options: UploadInputOptions): JQuery {\r\n            options.container.addClass('fileinput-button');\r\n            var uploadInput = $('<input/>').attr('type', 'file')\r\n                .attr('name', options.inputName + '[]')\r\n                .attr('data-url', Q.resolveUrl('~/File/TemporaryUpload'))\r\n                .attr('multiple', 'multiple').appendTo(options.container);\r\n\r\n            if (options.allowMultiple) {\r\n                uploadInput.attr('multiple', 'multiple');\r\n            }\r\n\r\n            (uploadInput as any).fileupload({\r\n                dataType: 'json',\r\n                dropZone: options.zone,\r\n                pasteZone: options.zone,\r\n                done: function (e: JQueryEventObject, data: any) {\r\n                    var response = data.result;\r\n                    if (options.fileDone != null) {\r\n                        options.fileDone(response, data.files[0].name, data);\r\n                    }\r\n                },\r\n                start: function () {\r\n                    Q.blockUI(null);\r\n                    if (options.progress != null) {\r\n                        options.progress.show();\r\n                    }\r\n                },\r\n                stop: function () {\r\n                    Q.blockUndo();\r\n                    if (options.progress != null) {\r\n                        options.progress.hide();\r\n                    }\r\n                },\r\n                progress: function (e1: JQueryEventObject, data1: any) {\r\n                    if (options.progress != null) {\r\n                        var percent = data1.loaded / data1.total * 100;\r\n                        options.progress.children().css('width', percent.toString() + '%');\r\n                    }\r\n                }\r\n            });\r\n            return uploadInput;\r\n        }\r\n\r\n        export function checkImageConstraints(file: UploadResponse,\r\n            opt: ImageUploadEditorOptions): boolean {\r\n\r\n            if (!file.IsImage && !opt.allowNonImage) {\r\n                Q.alert(Q.text('Controls.ImageUpload.NotAnImageFile'));\r\n                return false;\r\n            }\r\n            if (opt.minSize > 0 && file.Size < opt.minSize) {\r\n                Q.alert(Q.format(Q.text('Controls.ImageUpload.UploadFileTooSmall'),\r\n                    UploadHelper.fileSizeDisplay(opt.minSize)));\r\n                return false;\r\n            }\r\n            if (opt.maxSize > 0 && file.Size > opt.maxSize) {\r\n                Q.alert(Q.format(Q.text('Controls.ImageUpload.UploadFileTooBig'),\r\n                    UploadHelper.fileSizeDisplay(opt.maxSize)));\r\n                return false;\r\n            }\r\n            if (!file.IsImage) {\r\n                return true;\r\n            }\r\n            if (opt.minWidth > 0 && file.Width < opt.minWidth) {\r\n                Q.alert(Q.format(Q.text('Controls.ImageUpload.MinWidth'), opt.minWidth));\r\n                return false;\r\n            }\r\n            if (opt.maxWidth > 0 && file.Width > opt.maxWidth) {\r\n                Q.alert(Q.format(Q.text('Controls.ImageUpload.MaxWidth'), opt.maxWidth));\r\n                return false;\r\n            }\r\n            if (opt.minHeight > 0 && file.Height < opt.minHeight) {\r\n                Q.alert(Q.format(Q.text('Controls.ImageUpload.MinHeight'), opt.minHeight));\r\n                return false;\r\n            }\r\n            if (opt.maxHeight > 0 && file.Height > opt.maxHeight) {\r\n                Q.alert(Q.format(Q.text('Controls.ImageUpload.MaxHeight'), opt.maxHeight));\r\n                return false;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        export function fileNameSizeDisplay(name: string, bytes: number): string {\r\n            return name + ' (' + fileSizeDisplay(bytes) + ')';\r\n        }\r\n\r\n        export function fileSizeDisplay(bytes: number): string {\r\n            var byteSize = (ss as any).round(bytes * 100 / 1024) * 0.01;\r\n            var suffix = 'KB';\r\n            if (byteSize >= 1024) {\r\n                byteSize = (ss as any).round(byteSize * 100 / 1024) * 0.01;\r\n                suffix = 'MB';\r\n            }\r\n            var sizeParts = byteSize.toString().split(String.fromCharCode(46));\r\n            var value;\r\n            if (sizeParts.length > 1) {\r\n                value = sizeParts[0] + '.' + sizeParts[1].substr(0, 2);\r\n            }\r\n            else {\r\n                value = sizeParts[0];\r\n            }\r\n            return value + ' ' + suffix;\r\n        }\r\n\r\n        export function hasImageExtension(filename: string): boolean {\r\n            if (Q.isEmptyOrNull(filename)) {\r\n                return false;\r\n            }\r\n            filename = filename.toLowerCase();\r\n            return Q.endsWith(filename, '.jpg') || Q.endsWith(filename, '.jpeg') ||\r\n                Q.endsWith(filename, '.gif') || Q.endsWith(filename, '.png');\r\n        }\r\n\r\n        export function thumbFileName(filename: string): string {\r\n            filename = Q.coalesce(filename, '');\r\n            var idx = filename.lastIndexOf('.');\r\n            if (idx >= 0) {\r\n                filename = filename.substr(0, idx);\r\n            }\r\n            return filename + '_t.jpg';\r\n        }\r\n\r\n        export function dbFileUrl(filename: string): string {\r\n            filename = Q.replaceAll(Q.coalesce(filename, ''), '\\\\', '/');\r\n            return Q.resolveUrl('~/upload/') + filename;\r\n        }\r\n\r\n        export function colorBox(link: JQuery, options: any): void {\r\n            (link as any).colorbox({\r\n                current: Q.text('Controls.ImageUpload.ColorboxCurrent'),\r\n                previous: Q.text('Controls.ImageUpload.ColorboxPrior'),\r\n                next: Q.text('Controls.ImageUpload.ColorboxNext'),\r\n                close: Q.text('Controls.ImageUpload.ColorboxClose')\r\n            });\r\n        }\r\n\r\n        export function populateFileSymbols(container: JQuery, items: UploadedFile[],\r\n            displayOriginalName?: boolean, urlPrefix?: string): void {\r\n\r\n            items = items || [];\r\n            container.html('');\r\n            for (var index = 0; index < items.length; index++) {\r\n                var item = items[index];\r\n                var li = $('<li/>').addClass('file-item').data('index', index);\r\n                var isImage = hasImageExtension(item.Filename);\r\n                if (isImage) {\r\n                    li.addClass('file-image');\r\n                }\r\n                else {\r\n                    li.addClass('file-binary');\r\n                }\r\n                var editLink = '#' + index;\r\n                var thumb = $('<a/>').addClass('thumb').appendTo(li);\r\n                var originalName = Q.coalesce(item.OriginalName, '');\r\n                var fileName = item.Filename;\r\n                if (urlPrefix != null && fileName != null &&\r\n                    !Q.startsWith(fileName, 'temporary/')) {\r\n                    fileName = urlPrefix + fileName;\r\n                }\r\n\r\n                thumb.attr('href', dbFileUrl(fileName));\r\n                thumb.attr('target', '_blank');\r\n                if (!Q.isEmptyOrNull(originalName)) {\r\n                    thumb.attr('title', originalName);\r\n                }\r\n\r\n                if (isImage) {\r\n                    thumb.css('backgroundImage', \"url('\" + dbFileUrl(\r\n                        thumbFileName(item.Filename)) + \"')\");\r\n                    colorBox(thumb, new Object());\r\n                }\r\n\r\n                if (displayOriginalName) {\r\n                    $('<div/>').addClass('filename').text(originalName)\r\n                        .attr('title', originalName).appendTo(li);\r\n                }\r\n\r\n                li.appendTo(container);\r\n            }\r\n        }\r\n    }\r\n\r\n    export interface UploadedFile {\r\n        Filename?: string;\r\n        OriginalName?: string;\r\n    }\r\n\r\n    export interface UploadInputOptions {\r\n        container?: JQuery;\r\n        zone?: JQuery;\r\n        progress?: JQuery;\r\n        inputName?: string;\r\n        allowMultiple?: boolean;\r\n        fileDone?: (p1: UploadResponse, p2: string, p3: any) => void;\r\n    }\r\n\r\n    export interface UploadResponse {\r\n        TemporaryFile: string;\r\n        Size: number;\r\n        IsImage: boolean;\r\n        Width: number;\r\n        Height: number;\r\n    }\r\n}\r\n","namespace Serenity {\r\n\r\n    @Decorators.registerInterface('Serenity.IAsyncInit')\r\n    export class IAsyncInit {\r\n    }\r\n\r\n    export interface WidgetClass<TOptions = object> {\r\n        new(element: JQuery, options?: TOptions): Widget<TOptions>;\r\n        element: JQuery;\r\n    }\r\n\r\n    export interface WidgetDialogClass<TOptions = object> {\r\n        new(options?: TOptions): Widget<TOptions> & IDialog;\r\n        element: JQuery;\r\n    }\r\n\r\n    export type AnyWidgetClass<TOptions = object> = WidgetClass<TOptions> | WidgetDialogClass<TOptions>;\r\n\r\n    if (typeof React === \"undefined\") {\r\n        if (window['preact'] != null) {\r\n            window['React'] = window['ReactDOM'] = window['preact'];\r\n            (React as any).Fragment = Q.coalesce((React as any).Fragment, \"x-fragment\");\r\n        }\r\n        else if (window['Nerv'] != null) {\r\n            window['React'] = window['ReactDOM'] = window['Nerv'];\r\n            (React as any).Fragment = Q.coalesce((React as any).Fragment, \"x-fragment\");\r\n        }\r\n        else {\r\n            window['React'] = {\r\n                Component: function () { } as any,\r\n                Fragment: \"x-fragment\" as any,\r\n                createElement: function () { return { _reactNotLoaded: true }; } as any\r\n            } as any\r\n            window['ReactDOM'] = {\r\n                render: function () { throw Error(\"To use React, it should be included before Serenity.CoreLib.js\"); }\r\n            }\r\n        }\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass()\r\n    export class Widget<TOptions> extends React.Component<TOptions, any> {\r\n        private static nextWidgetNumber = 0;\r\n        public element: JQuery;\r\n        protected options: TOptions;\r\n        protected widgetName: string;\r\n        protected uniqueName: string;\r\n        protected asyncPromise: PromiseLike<void>;\r\n\r\n        constructor(element: JQuery, options?: TOptions) {\r\n            super(options);\r\n\r\n            this.element = element;\r\n            this.options = options || ({} as TOptions);\r\n\r\n            this.widgetName = Widget.getWidgetName((ss as any).getInstanceType(this));\r\n            this.uniqueName = this.widgetName + (Widget.nextWidgetNumber++).toString();\r\n\r\n            if (element.data(this.widgetName)) {\r\n                throw new ss.Exception(Q.format(\"The element already has widget '{0}'!\", this.widgetName));\r\n            }\r\n\r\n            element.bind('remove.' + this.widgetName, e => {\r\n                if (e.bubbles || e.cancelable) {\r\n                    return;\r\n                }\r\n                this.destroy();\r\n            }).data(this.widgetName, this);\r\n\r\n            this.addCssClass();\r\n\r\n            if (this.isAsyncWidget()) {\r\n                window.setTimeout(() => {\r\n                    if (element && !this.asyncPromise) {\r\n                        this.asyncPromise = this.initializeAsync();\r\n                    }\r\n                }, 0);\r\n            }\r\n        }\r\n\r\n        public destroy(): void {\r\n            this.element.removeClass('s-' + (ss as any).getTypeName((ss as any).getInstanceType(this)));\r\n            this.element.unbind('.' + this.widgetName).unbind('.' + this.uniqueName).removeData(this.widgetName);\r\n            this.element = null;\r\n            this.asyncPromise = null;\r\n        }\r\n\r\n        protected addCssClass(): void {\r\n            this.element.addClass(this.getCssClass());\r\n        }\r\n\r\n        protected getCssClass(): string {\r\n            var type = (ss as any).getInstanceType(this);\r\n            var klass = 's-' + (ss as any).getTypeName(type);\r\n            var fullClass = Q.replaceAll((ss as any).getTypeFullName(type), '.', '-');\r\n\r\n            for (let k of Q.Config.rootNamespaces) {\r\n                if (Q.startsWith(fullClass, k + '-')) {\r\n                    fullClass = fullClass.substr(k.length + 1);\r\n                    break;\r\n                }\r\n            }\r\n\r\n            fullClass = 's-' + fullClass;\r\n            if (klass === fullClass) {\r\n                return klass;\r\n            }\r\n\r\n            return klass + ' ' + fullClass;\r\n        }\r\n\r\n        protected initializeAsync(): PromiseLike<void> {\r\n            return Promise.resolve();\r\n        }\r\n\r\n        protected isAsyncWidget(): boolean {\r\n            return (ss as any).isInstanceOfType(this, Serenity.IAsyncInit);\r\n        }\r\n\r\n        public static getWidgetName(type: Function): string {\r\n            return Q.replaceAll((ss as any).getTypeFullName(type), '.', '_');\r\n        }\r\n\r\n        public static elementFor<TWidget>(editorType: { new (...args: any[]): TWidget }): JQuery {\r\n            var elementAttr = (ss as any).getAttributes(editorType, Serenity.ElementAttribute, true);\r\n            var elementHtml = ((elementAttr.length > 0) ? elementAttr[0].value : '<input/>');\r\n            return $(elementHtml);\r\n        };\r\n\r\n        public static create<TWidget extends Widget<TOpt>, TOpt>(params: CreateWidgetParams<TWidget, TOpt>) {\r\n            let widget: TWidget;\r\n\r\n            if ((ss as any).isAssignableFrom(Serenity.IDialog, params.type)) {\r\n                widget = new (params.type as any)(params.options);\r\n                if (params.container)\r\n                    widget.element.appendTo(params.container);\r\n                params.element && params.element(widget.element);\r\n            }\r\n            else {\r\n                var e = Widget.elementFor(params.type);\r\n                if (params.container)\r\n                    e.appendTo(params.container);\r\n                params.element && params.element(e);\r\n                widget = new params.type(e, params.options);\r\n            }\r\n\r\n            if (widget.isAsyncWidget())\r\n                widget.init(params.init);\r\n            else {\r\n                widget.init(null);\r\n                params.init && params.init(widget);\r\n            }\r\n\r\n            return widget;\r\n        }\r\n\r\n        public init(action?: (widget: any) => void): this {\r\n            var promise = this.initialize();\r\n            if (action) {\r\n                promise.then(() => action(this));\r\n            }\r\n            return this;\r\n        }\r\n\r\n        public initialize(): PromiseLike<void> {\r\n            if (!this.isAsyncWidget()) {\r\n                return Promise.resolve();\r\n            }\r\n\r\n            if (!this.asyncPromise) {\r\n                this.asyncPromise = this.initializeAsync();\r\n            }\r\n\r\n            return this.asyncPromise;\r\n        }\r\n\r\n        private static __isWidgetType = true;\r\n        props: Readonly<{ children?: React.ReactNode }> & Readonly<TOptions> & WidgetComponentProps<this>;\r\n    }\r\n\r\n    export interface WidgetComponentProps<W extends Serenity.Widget<any>> {\n        id?: string;\n        name?: string;\n        className?: string;\n        maxLength?: number;\n        placeholder?: string;\n        setOptions?: any;\n        required?: boolean;\n        readOnly?: boolean;\n        oneWay?: boolean;\n        onChange?: (e: JQueryEventObject) => void;\n        onChangeSelect2?: (e: JQueryEventObject) => void;\n        value?: any;\n        defaultValue?: any;\n    }\r\n\r\n    export declare interface Widget<TOptions> {\r\n        addValidationRule(eventClass: string, rule: (p1: JQuery) => string): JQuery;\r\n        getGridField(): JQuery;\r\n        change(handler: (e: JQueryEventObject) => void): void;\r\n        changeSelect2(handler: (e: JQueryEventObject) => void): void;\r\n    }\r\n\r\n    Widget.prototype.addValidationRule = function (eventClass: string, rule: (p1: JQuery) => string): JQuery {\r\n        return VX.addValidationRule(this.element, eventClass, rule);\r\n    }\r\n}","\r\nnamespace Serenity {\r\n    export namespace ValidationHelper {\r\n        export function asyncSubmit(form: JQuery, validateBeforeSave: () => boolean, submitHandler: () => void): boolean {\r\n            var validator = form.validate();\r\n            var valSettings = validator.settings;\r\n            if ((valSettings as any).abortHandler) {\r\n                return false;\r\n            }\r\n            if (validateBeforeSave != null && validateBeforeSave() === false) {\r\n                return false;\r\n            }\r\n            valSettings['abortHandler'] = Q.validatorAbortHandler;\r\n            valSettings['submitHandler'] = function () {\r\n                if (submitHandler != null) {\r\n                    submitHandler();\r\n                }\r\n                return false;\r\n            };\r\n            form.trigger('submit');\r\n            return true;\r\n        }\r\n\r\n        export function submit(form: JQuery, validateBeforeSave: () => boolean, submitHandler: () => void): boolean {\r\n            var validator = form.validate();\r\n            var valSettings = validator.settings;\r\n            if ((valSettings as any).abortHandler != null) {\r\n                return false;\r\n            }\r\n            if (validateBeforeSave != null && validateBeforeSave() === false) {\r\n                return false;\r\n            }\r\n            if (!validator.form()) {\r\n                return false;\r\n            }\r\n            if (submitHandler != null) {\r\n                submitHandler();\r\n            }\r\n            return true;\r\n        }\r\n\r\n        export function getValidator(element: JQuery): JQueryValidation.Validator {\r\n            var form = element.closest('form');\r\n            if (form.length === 0) {\r\n                return null;\r\n            }\r\n            return form.data('validator');\r\n        }\r\n    }\r\n\r\n    export namespace VX {\r\n        export function addValidationRule(element: JQuery, eventClass: string, rule: (p1: JQuery) => string): JQuery {\r\n            if(element.length === 0) {\r\n                return element;\r\n            }\r\n            if (rule == null) {\r\n                throw new ss.Exception('rule is null!');\r\n            }\r\n            element.addClass('customValidate').bind('customValidate.' + eventClass, rule as any);\r\n            return element;\r\n        }\r\n\r\n        export function removeValidationRule(element: JQuery, eventClass: string): JQuery {\r\n            element.unbind('customValidate.' + eventClass);\r\n            return element;\r\n        }\r\n\r\n        export function validateElement(validator: JQueryValidation.Validator, widget: Serenity.Widget<any>): boolean {\r\n            return validator.element(widget.element[0] as any);\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerClass()\r\n    export class TemplatedWidget<TOptions> extends Widget<TOptions> {\r\n\r\n        protected idPrefix: string;\r\n        private static templateNames: Q.Dictionary<string> = {};\r\n\r\n        constructor(container: JQuery, options?: TOptions) {\r\n            super(container, options);\r\n\r\n            this.idPrefix = this.uniqueName + '_';\r\n\r\n            var widgetMarkup = this.getTemplate().replace(new RegExp('~_', 'g'), this.idPrefix);\r\n\r\n            // for compability with older templates based on JsRender\r\n            var end = 0;\r\n            while (true) {\r\n                var idx = widgetMarkup.indexOf('{{text:\"', end);\r\n                if (idx < 0)\r\n                    break;\r\n                var end = widgetMarkup.indexOf('\"}}', idx);\r\n                if (end < 0)\r\n                    break;\r\n                var key = widgetMarkup.substr(idx + 8, end - idx - 8);\r\n                var text = Q.text(key);\r\n                widgetMarkup = widgetMarkup.substr(0, idx) + text + widgetMarkup.substr(end + 3);\r\n                end = idx + text.length;\r\n            }\r\n\r\n            this.element.html(widgetMarkup);\r\n        }\r\n\r\n        protected byId(id: string): JQuery {\r\n            return $('#' + this.idPrefix + id);\r\n        }\r\n\r\n        private byID<TWidget>(id: string, type: { new (...args: any[]): TWidget }) {\r\n            return Serenity.WX.getWidget(this.byId(id), type);\r\n        }\r\n\r\n        private static noGeneric(s: string): string {\r\n            var dollar = s.indexOf('$');\r\n            if (dollar >= 0) {\r\n                return s.substr(0, dollar);\r\n            }\r\n            return s;\r\n        }\r\n\r\n        private getDefaultTemplateName(): string {\r\n            return TemplatedWidget.noGeneric((ss as any).getTypeName(\r\n                (ss as any).getInstanceType(this)));\r\n        }\r\n\r\n        protected getTemplateName(): string {\r\n\r\n            var type = (ss as any).getInstanceType(this);\r\n            var fullName = (ss as any).getTypeFullName(type);\r\n\r\n            var templateNames = TemplatedWidget.templateNames;\r\n\r\n            var cachedName = TemplatedWidget.templateNames[fullName];\r\n            if (cachedName != null) {\r\n                return cachedName;\r\n            }\r\n            \r\n            while (type && type !== Serenity.Widget) {\r\n                var name = TemplatedWidget.noGeneric((ss as any).getTypeFullName(type));\r\n\r\n                for (let k of Q.Config.rootNamespaces) {\r\n                    if (Q.startsWith(name, k + '.')) {\r\n                        name = name.substr(k.length + 1);\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                if (Q.canLoadScriptData('Template.' + name)) {\r\n                    templateNames[fullName] = name;\r\n                    return name;\r\n                }\r\n\r\n                name = Q.replaceAll(name, '.', '_');\r\n                if (Q.canLoadScriptData('Template.' + name) ||\r\n                    $('script#Template_' + name).length > 0) {\r\n                    templateNames[fullName] = name;\r\n                    return name;\r\n                }\r\n\r\n                name = TemplatedWidget.noGeneric((ss as any).getTypeName(type));\r\n                if (Q.canLoadScriptData('Template.' + name) ||\r\n                    $('script#Template_' + name).length > 0) {\r\n                    TemplatedWidget.templateNames[fullName] = name;\r\n                    return name;\r\n                }\r\n\r\n                type = (ss as any).getBaseType(type);\r\n            }\r\n\r\n            templateNames[fullName] = cachedName = this.getDefaultTemplateName();\r\n            return cachedName;\r\n        }\r\n\r\n        protected getFallbackTemplate(): string {\r\n            return null;\r\n        }\r\n\r\n        protected getTemplate(): string {\r\n            var templateName = this.getTemplateName();\r\n\r\n            var script = $('script#Template_' + templateName);\r\n            if (script.length > 0) {\r\n                return script.html();\r\n            }\r\n\r\n            let template: string;\r\n            if (!Q.canLoadScriptData('Template.' + templateName) &&\r\n                this.getDefaultTemplateName() == templateName) {\r\n                template = this.getFallbackTemplate();\r\n                if (template != null)\r\n                    return template;\r\n            }\r\n                \r\n            template = Q.getTemplate(templateName);\r\n\r\n            if (template == null) {\r\n                throw new Error(Q.format(\r\n                    \"Can't locate template for widget '{0}' with name '{1}'!\",\r\n                    (ss as any).getTypeName((ss as any).getInstanceType(this)), templateName));\r\n            }\r\n\r\n            return template;\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerInterface()\r\n    export class IBooleanValue {\r\n    }\r\n\r\n    export interface IBooleanValue {\r\n        get_value(): boolean;\r\n        set_value(value: boolean): void;\r\n    }\r\n\r\n}","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerInterface()\r\n    export class IDoubleValue {\r\n    }\r\n\r\n    export interface IDoubleValue {\r\n        get_value(): any;\r\n        set_value(value: any): void;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerInterface()\r\n    export class IGetEditValue {\r\n    }\r\n\r\n    export interface IGetEditValue {\r\n        getEditValue(property: PropertyItem, target: any): void;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerInterface()\r\n    export class ISetEditValue {\r\n    }\r\n\r\n    export interface ISetEditValue {\r\n        setEditValue(source: any, property: PropertyItem): void;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerInterface()\r\n    export class IStringValue {\r\n    }\r\n\r\n    export interface IStringValue {\r\n        get_value(): string;\r\n        set_value(value: string): void;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    export interface IReadOnly {\r\n        get_readOnly(): boolean;\r\n        set_readOnly(value: boolean): void;\r\n    }\r\n\r\n    @Serenity.Decorators.registerInterface('Serenity.IReadOnly')\r\n    export class IReadOnly {\r\n    }\r\n}","namespace Serenity {\r\n    export type Constructor<T> = new (...args: any[]) => T;\r\n\r\n    export interface PropertyItem {\r\n        name?: string;\r\n        title?: string;\r\n        hint?: string;\r\n        placeholder?: string;\r\n        editorType?: string | React.ComponentType<any>;\r\n        editorParams?: any;\r\n        category?: string;\r\n        collapsible?: boolean;\r\n        collapsed?: boolean;\r\n        tab?: string;\r\n        cssClass?: string;\r\n        headerCssClass?: string;\r\n        formCssClass?: string;\r\n        maxLength?: number;\r\n        required?: boolean;\r\n        insertable?: boolean;\r\n        insertPermission?: string;\r\n        hideOnInsert?: boolean;\r\n        updatable?: boolean;\r\n        updatePermission?: string;\r\n        hideOnUpdate?: boolean;\r\n        readOnly?: boolean;\r\n        readPermission?: string;\r\n        oneWay?: boolean;\r\n        defaultValue?: any;\r\n        localizable?: boolean;\r\n        visible?: boolean;\r\n        allowHide?: boolean;\r\n        formatterType?: string;\r\n        formatterParams?: any;\r\n        displayFormat?: string;\r\n        alignment?: string;\r\n        width?: number;\r\n        widthSet?: boolean;\r\n        minWidth?: number;\r\n        maxWidth?: number;\r\n        labelWidth?: string;\r\n        resizable?: boolean;\r\n        sortable?: boolean;\r\n        sortOrder?: number;\r\n        groupOrder?: number;\r\n        summaryType?: SummaryType;\r\n        editLink?: boolean;\r\n        editLinkItemType?: string;\r\n        editLinkIdField?: string;\r\n        editLinkCssClass?: string;\r\n        filteringType?: string;\r\n        filteringParams?: any;\r\n        filteringIdField?: string;\r\n        notFilterable?: boolean;\r\n        filterOnly?: boolean;\r\n        quickFilter?: boolean;\r\n        quickFilterParams?: any;\r\n        quickFilterSeparator?: boolean;\r\n        quickFilterCssClass?: string;\r\n    }\r\n\r\n    export enum SummaryType {\r\n        Disabled = -1,\r\n        None = 0,\r\n        Sum = 1,\r\n        Avg = 2,\r\n        Min = 3,\r\n        Max = 4\r\n    }\r\n\r\n    Serenity.Decorators.registerEnum(SummaryType, \"Serenity.SummaryType\")\r\n}","namespace Serenity {\r\n\r\n    import Option = Serenity.Decorators.option\r\n\r\n    @Decorators.registerEditor('Serenity.DateEditor', [IStringValue, IReadOnly])\r\n    @Decorators.element('<input type=\"text\"/>')\r\n    export class DateEditor extends Widget<any> implements IStringValue, IReadOnly {\r\n\r\n        private minValue: string;\r\n        private maxValue: string;\r\n        private minDate: string;\r\n        private maxDate: string;\r\n        private sqlMinMax: boolean;\r\n\r\n        constructor(input: JQuery) {\r\n            super(input);\r\n\r\n            input.addClass('dateQ');\r\n            input.datepicker({\r\n                showOn: 'button',\r\n                beforeShow: (inp, inst) => {\r\n                    return !input.hasClass('readonly') as any;\r\n                },\r\n                yearRange: Q.coalesce(this.yearRange, '-100:+50')\r\n            });\r\n\r\n            input.bind('keyup.' + this.uniqueName, e => {\r\n                if (e.which === 32 && !this.get_readOnly()) {\r\n                    if (this.get_valueAsDate() != (ss as any).today()) {\r\n                        this.set_valueAsDate((ss as any).today());\r\n                        this.element.trigger('change');\r\n                    }\r\n                }\r\n                else {\r\n                    Serenity.DateEditor.dateInputKeyup(e);\r\n                }\r\n            });\r\n\r\n            input.bind('change.' + this.uniqueName, Serenity.DateEditor.dateInputChange);\r\n\r\n            Serenity.VX.addValidationRule(input, this.uniqueName, e1 => {\r\n                var value = this.get_value();\r\n                if (Q.isEmptyOrNull(value)) {\r\n                    return null;\r\n                }\r\n\r\n                if (!Q.isEmptyOrNull(this.get_minValue()) && (ss as any).compareStrings(value, this.get_minValue()) < 0) {\r\n                    return Q.format(Q.text('Validation.MinDate'), Q.formatDate(this.get_minValue(), null));\r\n                }\r\n\r\n                if (!Q.isEmptyOrNull(this.get_maxValue()) && (ss as any).compareStrings(value, this.get_maxValue()) >= 0) {\r\n                    return Q.format(Q.text('Validation.MaxDate'), Q.formatDate(this.get_maxValue(), null));\r\n                }\r\n\r\n                return null;\r\n            });\r\n\r\n            this.set_sqlMinMax(true)\r\n        }\r\n\r\n        get_value(): string {\r\n            var value = this.element.val().trim();\r\n            if (value != null && value.length === 0) {\r\n                return null;\r\n            }\r\n\r\n\t\t\treturn Q.formatDate(value, 'yyyy-MM-dd');\r\n        }\r\n\r\n        get value(): string {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: string) {\r\n            if (value == null) {\r\n                this.element.val('');\r\n            }\r\n\t\t\telse if (value.toLowerCase() === 'today' || value.toLowerCase() === 'now') {\r\n                this.element.val(Q.formatDate((ss as any).today(), null));\r\n            }\r\n\t\t\telse {\r\n                this.element.val(Q.formatDate(value, null));\r\n            }\r\n        }\r\n\r\n        set value(v: string) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        private get_valueAsDate(): Date {\r\n            if (Q.isEmptyOrNull(this.get_value())) {\r\n                return null;\r\n            }\r\n\r\n\t\t\treturn Q.parseISODateTime(this.get_value());\r\n        }\r\n\r\n        get valueAsDate(): Date {\r\n            return this.get_valueAsDate();\r\n        }\r\n\r\n        private set_valueAsDate(value: Date): void {\r\n            if (value == null) {\r\n                this.set_value(null);\r\n            }\r\n\r\n\t\t\tthis.set_value(Q.formatDate(value, 'yyyy-MM-dd'));\r\n        }\r\n\r\n        set valueAsDate(v: Date) {\r\n            this.set_valueAsDate(v);\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return this.element.hasClass('readonly');\r\n        }\r\n\r\n        set_readOnly(value: boolean): void {\r\n\r\n            if (value !== this.get_readOnly()) {\r\n                if (value) {\r\n                    this.element.addClass('readonly').attr('readonly', 'readonly');\r\n                    this.element.nextAll('.ui-datepicker-trigger').css('opacity', '0.1');\r\n                }\r\n                else {\r\n                    this.element.removeClass('readonly').removeAttr('readonly');\r\n                    this.element.nextAll('.ui-datepicker-trigger').css('opacity', '1');\r\n                }\r\n            }\r\n        }\r\n\r\n        @Option()\r\n        public yearRange: string;\r\n\r\n        @Option()\r\n        get_minValue(): string {\r\n            return this.minValue;\r\n        }\r\n\r\n        set_minValue(value: string) {\r\n            this.minValue = value;\r\n        }\r\n\r\n        @Option()\r\n        get_maxValue(): string {\r\n            return this.maxValue;\r\n        }\r\n\r\n        set_maxValue(value: string): void {\r\n            this.maxValue = value;\r\n        }\r\n\r\n        get_minDate(): Date {\r\n            return Q.parseISODateTime(this.get_minValue());\r\n        }\r\n\r\n        set_minDate(value: Date): void {\r\n            this.set_minValue(Q.formatDate(value, 'yyyy-MM-dd'));\r\n        }\r\n\r\n        @Option()\r\n        get_maxDate(): Date {\r\n            return Q.parseISODateTime(this.get_maxValue());\r\n        }\r\n\r\n        set_maxDate(value: Date) {\r\n            this.set_maxValue(Q.formatDate(value, 'yyyy-MM-dd'));\r\n        }\r\n\r\n        @Option()\r\n        get_sqlMinMax(): boolean {\r\n            return this.get_minValue() === '1753-01-01' && this.get_maxValue() === '9999-12-31';\r\n        }\r\n\r\n        set_sqlMinMax(value: boolean) {\r\n            if (value) {\r\n                this.set_minValue('1753-01-01');\r\n                this.set_maxValue('9999-12-31');\r\n            }\r\n\t\t\telse {\r\n                this.set_minValue(null);\r\n                this.set_maxValue(null);\r\n            }\r\n        }\r\n\r\n        static dateInputChange = function (e: JQueryEventObject) {\r\n            if (Q.Culture.dateOrder !== 'dmy') {\r\n                return;\r\n            }\r\n            var input = $(e.target);\r\n            if (!input.is(':input')) {\r\n                return;\r\n            }\r\n            var val = Q.coalesce(input.val(), '');\r\n            var x = {};\r\n            if (val.length >= 6 && (ss as any).Int32.tryParse(val, x)) {\r\n                input.val(val.substr(0, 2) + Q.Culture.dateSeparator + val.substr(2, 2) + Q.Culture.dateSeparator + val.substr(4));\r\n            }\r\n            val = Q.coalesce(input.val(), '');\r\n            if (!!(val.length >= 5 && Q.parseDate(val) !== false)) {\r\n                var d = Q.parseDate(val);\r\n                input.val(Q.formatDate(d, null));\r\n            }\r\n        };\r\n\r\n        static dateInputKeyup(e: JQueryEventObject) {\r\n\r\n            if (Q.Culture.dateOrder !== 'dmy') {\r\n                return;\r\n            }\r\n\r\n            var input = $(e.target);\r\n            if (!input.is(':input')) {\r\n                return;\r\n            }\r\n\r\n            if (input.is('[readonly]') || input.is(':disabled')) {\r\n                return;\r\n            }\r\n\r\n            var val: string = Q.coalesce(input.val(), '');\r\n            if (!!(val.length === 0 || (input[0] as any).selectionEnd !== val.length)) {\r\n                return;\r\n            }\r\n\r\n            if (val.indexOf(Q.Culture.dateSeparator + Q.Culture.dateSeparator) !== -1) {\r\n                input.val(Q.replaceAll(val, Q.Culture.dateSeparator + Q.Culture.dateSeparator,\r\n                    Q.Culture.dateSeparator));\r\n                return;\r\n            }\r\n\r\n            function isNumeric(c: number): boolean {\r\n                return c >= 48 && c <= 57;\r\n            }\r\n\r\n            if (e.which === 47 || e.which === 111) {\r\n\r\n                if (val.length >= 2 && val.charAt(val.length - 1) === Q.Culture.dateSeparator &&\r\n                    val.charAt(val.length - 2) === Q.Culture.dateSeparator) {\r\n                    input.val(val.substr(0, val.length - 1));\r\n                    return;\r\n                }\r\n\r\n                if (val.charAt(val.length - 1) !== Q.Culture.dateSeparator) {\r\n                    return;\r\n                }\r\n\r\n                switch (val.length) {\r\n                    case 2: {\r\n                        if (isNumeric(val.charCodeAt(0))) {\r\n                            val = '0' + val;\r\n                            break;\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    case 4: {\r\n                        if (isNumeric(val.charCodeAt(0)) &&\r\n                            isNumeric(val.charCodeAt(2)) &&\r\n                            val.charAt(1) == Q.Culture.dateSeparator) {\r\n                            val = '0' + val.charAt(0) + Q.Culture.dateSeparator + '0' +\r\n                                val.charAt(2) + Q.Culture.dateSeparator;\r\n                            break;\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    case 5: {\r\n                        if (isNumeric(val.charCodeAt(0)) &&\r\n                            isNumeric(val.charCodeAt(2)) &&\r\n                            isNumeric(val.charCodeAt(3)) &&\r\n                            val.charAt(1) === Q.Culture.dateSeparator) {\r\n                            val = '0' + val;\r\n                            break;\r\n                        }\r\n                        else if (isNumeric(val.charCodeAt(0)) &&\r\n                            isNumeric(val.charCodeAt(1)) &&\r\n                            isNumeric(val.charCodeAt(3)) &&\r\n                            val.charAt(2) === Q.Culture.dateSeparator) {\r\n                            val = val.charAt(0) + val.charAt(1) +\r\n                                Q.Culture.dateSeparator + '0' + val.charAt(3) + Q.Culture.dateSeparator;\r\n                            break;\r\n                        }\r\n                        else {\r\n                            break;\r\n                        }\r\n                    }\r\n                    default: {\r\n                        return;\r\n                    }\r\n                }\r\n                input.val(val);\r\n            }\r\n\r\n            if (val.length < 6 && (e.which >= 48 && e.which <= 57 || e.which >= 96 && e.which <= 105) &&\r\n                isNumeric(val.charCodeAt(val.length - 1))) {\r\n                switch (val.length) {\r\n                    case 1: {\r\n                        if (val.charCodeAt(0) <= 51) {\r\n                            return;\r\n                        }\r\n                        val = '0' + val;\r\n                        break;\r\n                    }\r\n\r\n                    case 2: {\r\n                        if (!isNumeric(val.charCodeAt(0))) {\r\n                            return;\r\n                        }\r\n                        break;\r\n                    }\r\n\r\n                    case 3: {\r\n                        if (!isNumeric(val.charCodeAt(0)) ||\r\n                            val.charAt(1) !== Q.Culture.dateSeparator ||\r\n                            val.charCodeAt(2) <= 49) {\r\n                            return;\r\n                        }\r\n\r\n                        val = '0' + val.charAt(0) + Q.Culture.dateSeparator + '0' + val.charAt(2);\r\n                        break;\r\n                    }\r\n\r\n                    case 4: {\r\n                        if (val.charAt(1) == Q.Culture.dateSeparator) {\r\n                            if (!isNumeric(val.charCodeAt(0)) ||\r\n                                !isNumeric(val.charCodeAt(2))) {\r\n                                return;\r\n                            }\r\n\r\n                            val = '0' + val;\r\n                            break;\r\n                        }\r\n                        else if (val.charAt(2) == Q.Culture.dateSeparator) {\r\n                            if (!isNumeric(val.charCodeAt(0)) ||\r\n                                !isNumeric(val.charCodeAt(1)) ||\r\n                                val.charCodeAt(3) <= 49) {\r\n                                return;\r\n                            }\r\n\r\n                            val = val.charAt(0) + val.charAt(1) + Q.Culture.dateSeparator +\r\n                                '0' + val.charAt(3);\r\n                            break;\r\n                        }\r\n                        else {\r\n                            return;\r\n                        }\r\n                    }\r\n                    case 5: {\r\n                        if (val.charAt(2) !== Q.Culture.dateSeparator ||\r\n                            !isNumeric(val.charCodeAt(0)) ||\r\n                            !isNumeric(val.charCodeAt(1)) ||\r\n                            !isNumeric(val.charCodeAt(3))) {\r\n                            return;\r\n                        }\r\n\r\n                        break;\r\n                    }\r\n\r\n                    default: {\r\n                        return;\r\n                    }\r\n                }\r\n\r\n                input.val(val + Q.Culture.dateSeparator);\r\n            }\r\n        };\r\n    }\r\n}","namespace Serenity {\r\n\r\n    import Option = Serenity.Decorators.option\r\n\r\n    @Decorators.registerEditor('Serenity.DateTimeEditor', [IStringValue, IReadOnly])\r\n    @Decorators.element('<input type=\"text\"/>')\r\n    export class DateTimeEditor extends Widget<DateTimeEditorOptions> implements IStringValue, IReadOnly {\r\n\r\n        private minValue: string;\r\n        private maxValue: string;\r\n        private minDate: string;\r\n        private maxDate: string;\r\n        private sqlMinMax: boolean;\r\n        private time: JQuery;\r\n\r\n        constructor(input: JQuery, opt?: DateTimeEditorOptions) {\r\n            super(input, opt);\r\n\r\n            input.addClass('dateQ s-DateTimeEditor').datepicker({\r\n                showOn: 'button',\r\n                beforeShow: function () {\r\n                    return !input.hasClass('readonly');\r\n                } as any,\r\n                yearRange: Q.coalesce(this.options.yearRange, '-100:+50')\r\n            });\r\n\r\n            input.bind('keyup.' + this.uniqueName, e => {\r\n                if (e.which === 32 && !this.get_readOnly()) {\r\n                    if (this.get_valueAsDate() !== new Date()) {\r\n                        this.set_valueAsDate(new Date());\r\n                        this.element.trigger('change');\r\n                    }\r\n                }\r\n                else {\r\n                    Serenity.DateEditor.dateInputKeyup(e);\r\n                }\r\n            });\r\n\r\n            input.bind('change.' + this.uniqueName,\r\n                DateEditor.dateInputChange);\r\n\r\n            this.time = $('<select/>').addClass('editor s-DateTimeEditor time');\r\n            var after = input.next('.ui-datepicker-trigger');\r\n            if (after.length > 0) {\r\n                this.time.insertAfter(after);\r\n            }\r\n            else {\r\n                after = input.prev('.ui-datepicker-trigger');\r\n                if (after.length > 0) {\r\n                    this.time.insertBefore(after);\r\n                }\r\n                else {\r\n                    this.time.insertAfter(input);\r\n                }\r\n            }\r\n\r\n            var timeOpt = DateTimeEditor.getTimeOptions(\r\n                Q.coalesce(this.options.startHour, 0), 0,\r\n                Q.coalesce(this.options.endHour, 23), 59,\r\n                Q.coalesce(this.options.intervalMinutes, 5));\r\n\r\n            for (var t of timeOpt) {\r\n                Q.addOption(this.time, t, t);\r\n            }\r\n\r\n            VX.addValidationRule(input, this.uniqueName, e1 => {\r\n                var value = this.get_value();\r\n                if (Q.isEmptyOrNull(value)) {\r\n                    return null;\r\n                }\r\n\r\n                if (!Q.isEmptyOrNull(this.get_minValue()) &&\r\n                    (ss as any).compareStrings(value, this.get_minValue()) < 0) {\r\n                    return Q.format(Q.text('Validation.MinDate'),\r\n                        Q.formatDate(this.get_minValue(), null));\r\n                }\r\n\r\n                if (!Q.isEmptyOrNull(this.get_maxValue()) &&\r\n                    (ss as any).compareStrings(value, this.get_maxValue()) >= 0) {\r\n                    return Q.format(Q.text('Validation.MaxDate'),\r\n                        Q.formatDate(this.get_maxValue(), null));\r\n                }\r\n                return null;\r\n            });\r\n\r\n            this.set_sqlMinMax(true);\r\n\r\n            $(\"<div class='inplace-button inplace-now'><b></b></div>\")\r\n                .attr('title', 'set to now')\r\n                .insertAfter(this.time).click(e2 => {\r\n                    if (this.element.hasClass('readonly')) {\r\n                        return;\r\n                    }\r\n                    this.set_valueAsDate(new Date());\r\n                    input.triggerHandler('change');\r\n                });\r\n\r\n            this.time.on('change', function (e3) {\r\n                input.triggerHandler('change');\r\n            });\r\n        }\r\n\r\n        get_value(): string {\r\n            var value = this.element.val().trim();\r\n            if (value != null && value.length === 0) {\r\n                return null;\r\n            }\r\n\r\n\t\t\tvar datePart = Q.formatDate(value, 'yyyy-MM-dd');\r\n            var timePart = this.time.val();\r\n            var result = datePart + 'T' + timePart + ':00.000';\r\n\r\n            if (this.options.useUtc) {\r\n                result = Q.formatISODateTimeUTC(Q.parseISODateTime(result));\r\n            }\r\n\r\n\t\t\treturn result;\r\n        }\r\n\r\n        get value(): string {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: string) {\r\n            if (Q.isEmptyOrNull(value)) {\r\n                this.element.val('');\r\n                this.time.val('00:00');\r\n            }\r\n\t\t\telse if (value.toLowerCase() === 'today') {\r\n                this.element.val(Q.formatDate((ss as any).today(), null));\r\n                this.time.val('00:00');\r\n            }\r\n\t\t\telse {\r\n                var val = ((value.toLowerCase() === 'now') ? new Date() : Q.parseISODateTime(value));\r\n                val = Serenity.DateTimeEditor.roundToMinutes(val, Q.coalesce(this.options.intervalMinutes, 5));\r\n                this.element.val(Q.formatDate(val, null));\r\n                this.time.val(Q.formatDate(val, 'HH:mm'));\r\n            }\r\n        }\r\n\r\n        set value(v: string) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        private get_valueAsDate(): Date {\r\n            if (Q.isEmptyOrNull(this.get_value())) {\r\n                return null;\r\n            }\r\n\r\n\t\t\treturn Q.parseISODateTime(this.get_value());\r\n        }\r\n\r\n        get valueAsDate() {\r\n            return this.get_valueAsDate();\r\n        }\r\n\r\n        private set_valueAsDate(value: Date) {\r\n            if (value == null) {\r\n                this.set_value(null);\r\n            }\r\n\r\n\t\t\tthis.set_value(Q.formatDate(value, 'yyyy-MM-ddTHH:mm'));\r\n        }\r\n\r\n        set valueAsDate(value: Date) {\r\n            this.set_valueAsDate(value);\r\n        }\r\n\r\n        @Option()\r\n        get_minValue(): string {\r\n            return this.minValue;\r\n        }\r\n\r\n        set_minValue(value: string) {\r\n            this.minValue = value;\r\n        }\r\n\r\n        @Option()\r\n        get_maxValue(): string {\r\n            return this.maxValue;\r\n        }\r\n\r\n        set_maxValue(value: string): void {\r\n            this.maxValue = value;\r\n        }\r\n\r\n        get_minDate(): Date {\r\n            return Q.parseISODateTime(this.get_minValue());\r\n        }\r\n\r\n        set_minDate(value: Date): void {\r\n            this.set_minValue(Q.formatDate(value, 'yyyy-MM-ddTHH:mm:ss'));\r\n        }\r\n\r\n        @Option()\r\n        get_maxDate(): Date {\r\n            return Q.parseISODateTime(this.get_maxValue());\r\n        }\r\n\r\n        set_maxDate(value: Date) {\r\n            this.set_maxValue(Q.formatDate(value, 'yyyy-MM-ddTHH:mm:ss'));\r\n        }\r\n\r\n        @Option()\r\n        get_sqlMinMax(): boolean {\r\n            return this.get_minValue() === '1753-01-01' && this.get_maxValue() === '9999-12-31';\r\n        }\r\n\r\n        set_sqlMinMax(value: boolean) {\r\n            if (value) {\r\n                this.set_minValue('1753-01-01');\r\n                this.set_maxValue('9999-12-31');\r\n            }\r\n            else {\r\n                this.set_minValue(null);\r\n                this.set_maxValue(null);\r\n            }\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return this.element.hasClass('readonly');\r\n        }\r\n\r\n        set_readOnly(value: boolean): void {\r\n\r\n            if (value !== this.get_readOnly()) {\r\n                if (value) {\r\n                    this.element.addClass('readonly').attr('readonly', 'readonly');\r\n                    this.element.nextAll('.ui-datepicker-trigger').css('opacity', '0.1');\r\n                    this.element.nextAll('.inplace-now').css('opacity', '0.1');\r\n\r\n                }\r\n                else {\r\n                    this.element.removeClass('readonly').removeAttr('readonly');\r\n                    this.element.nextAll('.ui-datepicker-trigger').css('opacity', '1');\r\n                    this.element.nextAll('.inplace-now').css('opacity', '1');\r\n                }\r\n                Serenity.EditorUtils.setReadonly(this.time, value);\r\n            }\r\n        }\r\n\r\n        static roundToMinutes(date: Date, minutesStep: number) {\r\n            date = new Date(date.getTime());\r\n            var m = (ss as any).Int32.trunc((ss as any).round(date.getMinutes() / minutesStep) * minutesStep);\r\n            date.setMinutes(m);\r\n            date.setSeconds(0);\r\n            date.setMilliseconds(0);\r\n            return date;\r\n        }\r\n\r\n        static getTimeOptions = function (fromHour: number, fromMin: number,\r\n            toHour: number, toMin: number, stepMins: number) {\r\n            var list = [];\r\n            if (toHour >= 23) {\r\n                toHour = 23;\r\n            }\r\n            if (toMin >= 60) {\r\n                toMin = 59;\r\n            }\r\n            var hour = fromHour;\r\n            var min = fromMin;\r\n            while (true) {\r\n                if (hour > toHour || hour === toHour && min > toMin) {\r\n                    break;\r\n                }\r\n                var t = ((hour >= 10) ? '' : '0') + hour + ':' + ((min >= 10) ? '' : '0') + min;\r\n                list.push(t);\r\n                min += stepMins;\r\n                if (min >= 60) {\r\n                    min -= 60;\r\n                    hour++;\r\n                }\r\n            }\r\n            return list;\r\n        };\r\n    }\r\n\r\n    export interface DateTimeEditorOptions {\r\n        startHour?: any;\r\n        endHour?: any;\r\n        intervalMinutes?: any;\r\n        yearRange?: string;\r\n        useUtc?: boolean;\r\n    }\r\n}\r\n","\r\nnamespace Serenity {\r\n\r\n    export interface Select2CommonOptions {\r\n        allowClear?: boolean;\r\n        delimited?: boolean;\r\n        minimumResultsForSearch?: any;\r\n        multiple?: boolean;\r\n    }\r\n\r\n    export interface Select2FilterOptions {\r\n        cascadeFrom?: string;\r\n        cascadeField?: string;\r\n        cascadeValue?: any;\r\n        filterField?: string;\r\n        filterValue?: any;\r\n    }\r\n\r\n    export interface Select2InplaceAddOptions {\r\n        inplaceAdd?: boolean;\r\n        inplaceAddPermission?: string;\r\n        dialogType?: string;\r\n        autoComplete?: boolean;\r\n    }\r\n\r\n    export interface Select2EditorOptions extends Select2FilterOptions, Select2InplaceAddOptions, Select2CommonOptions {\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass('Serenity.Select2Editor',\r\n        [Serenity.ISetEditValue, Serenity.IGetEditValue, Serenity.IStringValue, Serenity.IReadOnly])\r\n    @Serenity.Decorators.element(\"<input type=\\\"hidden\\\"/>\")\r\n    export class Select2Editor<TOptions, TItem> extends Widget<TOptions> implements\r\n        Serenity.ISetEditValue, Serenity.IGetEditValue, Serenity.IStringValue, Serenity.IReadOnly {\r\n\r\n        public items: Select2Item[];\r\n        protected itemById: Q.Dictionary<Select2Item>\r\n        protected pageSize: number = 100;\r\n        protected lastCreateTerm: string;\r\n\r\n        constructor(hidden: JQuery, opt?: any) {\r\n            super(hidden, opt);\r\n\r\n            this.items = [];\r\n            this.itemById = {};\r\n            var emptyItemText = this.emptyItemText();\r\n            if (emptyItemText != null) {\r\n                hidden.attr('placeholder', emptyItemText);\r\n            }\r\n            var select2Options = this.getSelect2Options();\r\n            hidden.select2(select2Options);\r\n            hidden.attr('type', 'text');\r\n\r\n            // jquery validate to work\r\n            hidden.bind('change.' + this.uniqueName, <any>function (e: JQueryEventObject, x: boolean) {\r\n                if (!!(Serenity.WX.hasOriginalEvent(e) || !x)) {\r\n                    if (Serenity.ValidationHelper.getValidator(hidden) != null) {\r\n                        hidden.valid();\r\n                    }\r\n                }\r\n            });\r\n\r\n            this.setCascadeFrom((this.options as Select2EditorOptions).cascadeFrom);\r\n\r\n            if (this.useInplaceAdd())\r\n                this.addInplaceCreate(Q.text('Controls.SelectEditor.InplaceAdd'), null);\r\n        }\r\n\r\n        destroy() {\r\n            if (this.element != null) {\r\n                this.element.select2('destroy');\r\n            }\r\n\r\n\t\t\tsuper.destroy();\r\n        }\r\n\r\n        protected emptyItemText() {\r\n            return Q.coalesce(this.element.attr('placeholder'),\r\n                Q.text('Controls.SelectEditor.EmptyItemText'));\r\n        }\r\n\r\n        protected allowClear() {\r\n            return (this.options as Select2EditorOptions).allowClear != null ?\r\n                !!(this.options as Select2EditorOptions).allowClear : this.emptyItemText() != null;\r\n        }\r\n\r\n        protected isMultiple() {\r\n            return !!(this.options as Select2EditorOptions).multiple;\r\n        }\r\n\r\n        protected getSelect2Options(): Select2Options {\r\n            var emptyItemText = this.emptyItemText();\r\n            var opt: Select2Options = {\r\n                data: this.items,\r\n                multiple: this.isMultiple(),\r\n                placeHolder: (!Q.isEmptyOrNull(emptyItemText) ? emptyItemText : null),\r\n                allowClear: this.allowClear(),\r\n                createSearchChoicePosition: 'bottom',\r\n                query: (query) => {\r\n                    var term = (Q.isEmptyOrNull(query.term) ? '' : Select2.util.stripDiacritics(\r\n                        Q.coalesce(query.term, '')).toUpperCase());\r\n\r\n                    var results = this.items.filter(function (item) {\r\n                        return term == null || Q.startsWith(Select2.util.stripDiacritics(\r\n                            Q.coalesce(item.text, '')).toUpperCase(), term);\r\n                    });\r\n\r\n                    results.push(...this.items.filter(item1 =>\r\n                        term != null && !Q.startsWith(Select2.util.stripDiacritics(\r\n                            Q.coalesce(item1.text, '')).toUpperCase(), term) &&\r\n                        Select2.util.stripDiacritics(Q.coalesce(item1.text, ''))\r\n                            .toUpperCase().indexOf(term) >= 0));\r\n\r\n                    query.callback({\r\n                        results: results.slice((query.page - 1) * this.pageSize, query.page * this.pageSize),\r\n                        more: results.length >= query.page * this.pageSize\r\n                    });\r\n                },\r\n                initSelection: (element, callback) => {\r\n                    var val = element.val();\r\n                    var isAutoComplete = this.isAutoComplete();\r\n                    if (this.isMultiple()) {\r\n                        var list = [];\r\n                        var $t1 = val.split(',');\r\n                        for (var $t2 = 0; $t2 < $t1.length; $t2++) {\r\n                            var z = $t1[$t2];\r\n                            var item2 = this.itemById[z];\r\n                            if (item2 == null && isAutoComplete) {\r\n                                item2 = { id: z, text: z };\r\n                                this.addItem(item2);\r\n                            }\r\n                            if (item2 != null) {\r\n                                list.push(item2);\r\n                            }\r\n                        }\r\n                        callback(list);\r\n                        return;\r\n                    }\r\n                    var it = this.itemById[val];\r\n                    if (it == null && isAutoComplete) {\r\n                        it = { id: val, text: val };\r\n                        this.addItem(it);\r\n                    }\r\n                    callback(it);\r\n                }\r\n            }\r\n\r\n            if ((this.options as Select2EditorOptions).minimumResultsForSearch != null)\r\n                opt.minimumResultsForSearch = (this.options as Select2EditorOptions).minimumResultsForSearch;\r\n\r\n            if (this.isAutoComplete() || this.useInplaceAdd())\r\n                opt.createSearchChoice = this.getCreateSearchChoice(null);\r\n\r\n            return opt;\r\n        }\r\n\r\n        get_delimited() {\r\n            return !!(this.options as Select2EditorOptions).delimited;\r\n        }\r\n\r\n        public clearItems() {\r\n            (ss as any).clear(this.items);\r\n            this.itemById = {};\r\n        }\r\n\r\n        public addItem(item: Select2Item) {\r\n            this.items.push(item);\r\n            this.itemById[item.id] = item;\r\n        }\r\n\r\n        public addOption(key: string, text: string, source?: any, disabled?: boolean) {\r\n            this.addItem({\r\n                id: key,\r\n                text: text,\r\n                source: source,\r\n                disabled: disabled\r\n            });\r\n        }\r\n\r\n        protected addInplaceCreate(addTitle: string, editTitle: string) {\r\n            var self = this;\r\n            addTitle = Q.coalesce(addTitle, Q.text('Controls.SelectEditor.InplaceAdd'));\r\n            editTitle = Q.coalesce(editTitle, Q.text('Controls.SelectEditor.InplaceEdit'));\r\n            var inplaceButton = $('<a><b/></a>')\r\n                .addClass('inplace-button inplace-create')\r\n                .attr('title', addTitle)\r\n                .insertAfter(this.element).click(function (e) {\r\n                    self.inplaceCreateClick(e);\r\n                });\r\n\r\n            this.get_select2Container().add(this.element).addClass('has-inplace-button');\r\n\r\n            Serenity.WX.change(this, (e1: JQueryEventObject) => {\r\n                var isNew = this.isMultiple() || Q.isEmptyOrNull(this.get_value());\r\n                inplaceButton.attr('title', (isNew ? addTitle : editTitle)).toggleClass('edit', !isNew);\r\n            });\r\n\r\n            Serenity.WX.changeSelect2(this, (e2: JQueryEventObject) => {\r\n                if (this.isMultiple()) {\r\n                    var values = this.get_values();\r\n                    if (values.length > 0 && values[values.length - 1] == (-2147483648).toString()) {\r\n                        this.set_values(values.slice(0, values.length - 1));\r\n                        this.inplaceCreateClick(e2);\r\n                    }\r\n                }\r\n                else if (this.get_value() == (-2147483648).toString()) {\r\n                    this.set_value(null);\r\n                    this.inplaceCreateClick(e2);\r\n                }\r\n            });\r\n\r\n            if (this.isMultiple()) {\r\n                this.get_select2Container().on('dblclick.' + this.uniqueName, '.select2-search-choice', (e3: JQueryEventObject) => {\r\n                    var q = $(e3.target);\r\n                    if (!q.hasClass('select2-search-choice')) {\r\n                        q = q.closest('.select2-search-choice');\r\n                    }\r\n                    var index = q.index();\r\n                    var values1 = this.get_values();\r\n                    if (index < 0 || index >= this.get_values().length) {\r\n                        return;\r\n                    }\r\n                    e3['editItem'] = values1[index];\r\n                    this.inplaceCreateClick(e3);\r\n                });\r\n            }\r\n        }\r\n\r\n        protected useInplaceAdd(): boolean {\r\n            return !this.isAutoComplete() &&\r\n                (this.options as Select2EditorOptions).inplaceAdd &&\r\n                ((this.options as Select2EditorOptions).inplaceAddPermission == null ||\r\n                    Q.Authorization.hasPermission((this.options as Select2EditorOptions).inplaceAddPermission));\r\n        }\r\n\r\n        protected isAutoComplete(): boolean {\r\n            return !!(this.options as Select2EditorOptions).autoComplete;\r\n        }\r\n\r\n        public getCreateSearchChoice(getName: (z: any) => string) {\r\n            return (s: string) => {\r\n\r\n                this.lastCreateTerm = s;\r\n                s = Q.coalesce(Select2.util.stripDiacritics(s), '').toLowerCase();\r\n\r\n                if (Q.isTrimmedEmpty(s)) {\r\n                    return null;\r\n                }\r\n\r\n                if (Q.any(this.get_items(), (x: Select2Item) => {\r\n                        var text = getName ? getName(x.source) : x.text;\r\n                        return Select2.util.stripDiacritics(Q.coalesce(text, '')).toLowerCase() == s;\r\n                }))\r\n                    return null;\r\n\r\n                if (!Q.any(this.get_items(), x1 => {\r\n                    return Q.coalesce(Select2.util.stripDiacritics(x1.text), '').toLowerCase().indexOf(s) !== -1;\r\n                })) {\r\n                    if (this.isAutoComplete()) {\r\n                        return {\r\n                            id: this.lastCreateTerm,\r\n                            text: this.lastCreateTerm\r\n                        };\r\n                    }\r\n\r\n                    return {\r\n                        id: (-2147483648).toString(),\r\n                        text: Q.text('Controls.SelectEditor.NoResultsClickToDefine')\r\n                    };\r\n                }\r\n\r\n                if (this.isAutoComplete()) {\r\n                    return {\r\n                        id: this.lastCreateTerm,\r\n                        text: this.lastCreateTerm\r\n                    };\r\n                }\r\n\r\n                return {\r\n                    id: (-2147483648).toString(),\r\n                    text: Q.text('Controls.SelectEditor.ClickToDefine')\r\n                };\r\n            }\r\n        }\r\n\r\n        setEditValue(source: any, property: PropertyItem) {\r\n            var val = source[property.name];\r\n            if(Q.isArray(val)) {\r\n                this.set_values(val);\r\n            }\r\n\t\t\telse {\r\n                this.set_value((val == null ? null : val.toString()));\r\n            }\r\n        }\r\n\r\n        getEditValue(property: PropertyItem, target: any) {\r\n            if (!this.isMultiple() || this.get_delimited()) {\r\n                target[property.name] = this.get_value();\r\n            }\r\n\t\t\telse {\r\n                target[property.name] = this.get_values();\r\n            }\r\n        }\r\n\r\n        protected get_select2Container() {\r\n            return this.element.prevAll('.select2-container');\r\n        }\r\n\r\n        protected get_items() {\r\n            return this.items;\r\n        }\r\n\r\n        protected get_itemByKey() {\r\n            return this.itemById;\r\n        }\r\n\r\n        get_value() {\r\n            var val;\r\n            if (this.element.data('select2')) {\r\n                val = this.element.select2('val');\r\n                if (val != null && Q.isArray(val)) {\r\n                    return val.join(',');\r\n                }\r\n            }\r\n            else\r\n                val = this.element.val();\r\n\r\n\t\t\treturn val;\r\n        }\r\n\r\n        get value(): string {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: string) {\r\n\r\n            if (value != this.get_value()) {\r\n                var val: any = value;\r\n                if (!Q.isEmptyOrNull(value) && this.isMultiple()) {\r\n                    val = value.split(String.fromCharCode(44)).map(function (x) {\r\n                        return Q.trimToNull(x);\r\n                    }).filter(function (x1) {\r\n                        return x1 != null;\r\n                    });\r\n                }\r\n\r\n                this.element.select2('val', val)\r\n                    .triggerHandler('change', [true]);\r\n\r\n                this.updateInplaceReadOnly();\r\n            }\r\n        }\r\n\r\n        set value(v: string) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        get selectedItem(): TItem {\r\n            let selectedValue = this.get_value();\r\n            if (selectedValue && this.itemById) {\r\n                let item = this.itemById[selectedValue];\r\n                if (item)\r\n                    return item.source;\r\n            }\r\n            return null;\r\n        }\r\n\r\n        protected get_values(): string[] {\r\n\r\n            var val = this.element.select2('val');\r\n            if (val == null) {\r\n                return [];\r\n            }\r\n\r\n\t\t\tif (Q.isArray(val)) {\r\n                return val;\r\n            }\r\n\r\n            var str = val;\r\n            if (Q.isEmptyOrNull(str)) {\r\n                return [];\r\n            }\r\n\r\n\t\t\treturn [str];\r\n        }\r\n\r\n        get values(): string[] {\r\n            return this.get_values();\r\n        }\r\n\r\n        protected set_values(value: string[]) {\r\n\r\n            if (value == null || value.length === 0) {\r\n                this.set_value(null);\r\n                return;\r\n            }\r\n\r\n\t\t\tthis.set_value(value.join(','));\r\n        }\r\n\r\n        set values(value: string[]) {\r\n            this.set_values(value);\r\n        }\r\n\r\n        protected get_text(): string {\r\n            return Q.coalesce(this.element.select2('data'), {}).text;\r\n        }\r\n\r\n        get text(): string {\r\n            return this.get_text();\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return !Q.isEmptyOrNull(this.element.attr('readonly'));\r\n        }\r\n\r\n        get readOnly(): boolean {\r\n            return this.get_readOnly();\r\n        }\r\n\r\n        private updateInplaceReadOnly(): void {\r\n            var readOnly = this.get_readOnly() &&\r\n                (this.isMultiple() || !this.value);\r\n\r\n            this.element.nextAll('.inplace-create')\r\n                .attr('disabled', (readOnly ? 'disabled' : ''))\r\n                .css('opacity', (readOnly ? '0.1' : ''))\r\n                .css('cursor', (readOnly ? 'default' : ''));\r\n        }\r\n\r\n        set_readOnly(value: boolean) {\r\n            if (value !== this.get_readOnly()) {\r\n                Serenity.EditorUtils.setReadonly(this.element, value);\r\n                this.updateInplaceReadOnly();\r\n            }\r\n        }\r\n\r\n        set readOnly(value: boolean) {\r\n            this.set_readOnly(value);\r\n        }\r\n\r\n        protected getCascadeFromValue(parent: Serenity.Widget<any>) {\r\n            return Serenity.EditorUtils.getValue(parent);\r\n        }\r\n\r\n        protected cascadeLink: Serenity.CascadedWidgetLink<Widget<any>>;\r\n\r\n        protected setCascadeFrom(value: string) {\r\n\r\n            if (Q.isEmptyOrNull(value)) {\r\n                if (this.cascadeLink != null) {\r\n                    this.cascadeLink.set_parentID(null);\r\n                    this.cascadeLink = null;\r\n                }\r\n                (this.options as Select2EditorOptions).cascadeFrom = null;\r\n                return;\r\n            }\r\n\r\n            this.cascadeLink = new Serenity.CascadedWidgetLink<Widget<any>>(Widget, this, p => {\r\n                this.set_cascadeValue(this.getCascadeFromValue(p));\r\n            });\r\n\r\n            this.cascadeLink.set_parentID(value);\r\n            (this.options as Select2EditorOptions).cascadeFrom = value;\r\n        }\r\n\r\n        protected get_cascadeFrom(): string {\r\n            return (this.options as Select2EditorOptions).cascadeFrom;\r\n        }\r\n\r\n        get cascadeFrom(): string {\r\n            return this.get_cascadeFrom();\r\n        }\r\n\r\n        protected set_cascadeFrom(value: string) {\r\n            if (value !== (this.options as Select2EditorOptions).cascadeFrom) {\r\n                this.setCascadeFrom(value);\r\n                this.updateItems();\r\n            }\r\n        }\r\n\r\n        set cascadeFrom(value: string) {\r\n            this.set_cascadeFrom(value);\r\n        }\r\n\r\n        protected get_cascadeField() {\r\n            return Q.coalesce((this.options as Select2EditorOptions).cascadeField, (this.options as Select2EditorOptions).cascadeFrom);\r\n        }\r\n\r\n        get cascadeField(): string {\r\n            return this.get_cascadeField();\r\n        }\r\n\r\n        protected set_cascadeField(value: string) {\r\n            (this.options as Select2EditorOptions).cascadeField = value;\r\n        }\r\n\r\n        set cascadeField(value: string) {\r\n            this.set_cascadeField(value);\r\n        }\r\n\r\n        protected get_cascadeValue(): any {\r\n            return (this.options as Select2EditorOptions).cascadeValue;\r\n        }\r\n\r\n        get cascadeValue(): any {\r\n            return this.get_cascadeValue();\r\n        }\r\n\r\n        protected set_cascadeValue(value: any) {\r\n            if ((this.options as Select2EditorOptions).cascadeValue !== value) {\r\n                (this.options as Select2EditorOptions).cascadeValue = value;\r\n                this.set_value(null);\r\n                this.updateItems();\r\n            }\r\n        }\r\n\r\n        set cascadeValue(value: any) {\r\n            this.set_cascadeValue(value);\r\n        }\r\n\r\n        protected get_filterField() {\r\n            return (this.options as Select2EditorOptions).filterField;\r\n        }\r\n\r\n        get filterField(): string {\r\n            return this.get_filterField();\r\n        }\r\n\r\n        protected set_filterField(value: string) {\r\n            (this.options as Select2EditorOptions).filterField = value;\r\n        }\r\n\r\n        set filterField(value: string) {\r\n            this.set_filterField(value);\r\n        }\r\n\r\n        protected get_filterValue(): any {\r\n            return (this.options as Select2EditorOptions).filterValue;\r\n        }\r\n\r\n        get filterValue(): any {\r\n            return this.get_filterValue();\r\n        }\r\n\r\n        protected set_filterValue(value: any) {\r\n            if ((this.options as Select2EditorOptions).filterValue !== value) {\r\n                (this.options as Select2EditorOptions).filterValue = value;\r\n                this.set_value(null);\r\n                this.updateItems();\r\n            }\r\n        }\r\n\r\n        set filterValue(value: any) {\r\n            this.set_filterValue(value);\r\n        }\r\n\r\n        protected cascadeItems(items: TItem[]) {\r\n\r\n            var val = this.get_cascadeValue();\r\n\r\n            if (val == null || val === '') {\r\n\r\n                if (!Q.isEmptyOrNull(this.get_cascadeField())) {\r\n                    return [];\r\n                }\r\n\r\n                return items;\r\n            }\r\n\r\n            var key = val.toString();\r\n            var fld = this.get_cascadeField();\r\n\r\n            return items.filter(x => {\r\n                var itemKey = Q.coalesce(x[fld], Serenity.ReflectionUtils.getPropertyValue(x, fld));\r\n                return !!(itemKey != null && itemKey.toString() === key);\r\n            });\r\n        }\r\n\r\n        protected filterItems(items: TItem[]) {\r\n            var val = this.get_filterValue();\r\n\r\n            if (val == null || val === '') {\r\n                return items;\r\n            }\r\n\r\n            var key = val.toString();\r\n            var fld = this.get_filterField();\r\n\r\n            return items.filter(x => {\r\n                var itemKey = Q.coalesce(x[fld], Serenity.ReflectionUtils.getPropertyValue(x, fld));\r\n                return !!(itemKey != null && itemKey.toString() === key);\r\n            });\r\n        }\r\n\r\n        protected updateItems() {\r\n        }\r\n\r\n        protected getDialogTypeKey() {\r\n            if ((this.options as Select2EditorOptions).dialogType != null) {\r\n                return (this.options as Select2EditorOptions).dialogType;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        protected createEditDialog(callback: (dlg: IEditDialog) => void) {\r\n            var dialogTypeKey = this.getDialogTypeKey();\r\n            var dialogType = Serenity.DialogTypeRegistry.get(dialogTypeKey);\r\n            Serenity.Widget.create({\r\n                type: dialogType,\r\n                init: x => callback(x as any)\r\n            });\r\n        }\r\n\r\n        public onInitNewEntity: (entity: TItem) => void;\r\n\r\n        protected initNewEntity(entity: TItem) {\r\n            if (!Q.isEmptyOrNull(this.get_cascadeField())) {\r\n                entity[this.get_cascadeField()] = this.get_cascadeValue();\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(this.get_filterField())) {\r\n                entity[this.get_filterField()] = this.get_filterValue();\r\n            }\r\n\r\n            if (this.onInitNewEntity != null) {\r\n                this.onInitNewEntity(entity);\r\n            }\r\n        }\r\n\r\n        protected setEditDialogReadOnly(dialog: any): void {\r\n            // an ugly workaround\r\n            dialog.element && dialog.element\r\n                .find('.tool-button.delete-button')\r\n                .addClass('disabled')\r\n                .unbind('click');\r\n        }\r\n\r\n        protected editDialogDataChange() {\r\n        }\r\n\r\n        protected setTermOnNewEntity(entity: TItem, term: string) {\r\n        }\r\n\r\n        protected inplaceCreateClick(e: JQueryEventObject) {\r\n\r\n            if (this.get_readOnly() &&\r\n                ((this.isMultiple() && !e['editItem']) || !this.value))\r\n                return;\r\n\r\n            this.createEditDialog(dialog => {\r\n\r\n                if (this.get_readOnly())\r\n                    this.setEditDialogReadOnly(dialog);\r\n\r\n                Serenity.SubDialogHelper.bindToDataChange(dialog, this, (x, dci) => {\r\n                    this.editDialogDataChange();\r\n                    this.updateItems();\r\n                    this.lastCreateTerm = null;\r\n\r\n                    if ((dci.type === 'create' || dci.type === 'update') &&\r\n                        dci.entityId != null) {\r\n                        var id = dci.entityId.toString();\r\n\r\n                        if (this.isMultiple()) {\r\n                            var values = this.get_values().slice();\r\n                            if (values.indexOf(id) < 0) {\r\n                                values.push(id);\r\n                            }\r\n                            this.set_values(null);\r\n                            this.set_values(values.slice());\r\n                        }\r\n                        else {\r\n                            this.set_value(null);\r\n                            this.set_value(id);\r\n                        }\r\n                    }\r\n                    else if (this.isMultiple() && dci.type === 'delete' &&\r\n                        dci.entityId != null) {\r\n                        var id1 = dci.entityId.toString();\r\n                        var values1 = this.get_values().slice();\r\n\r\n                        var idx1 = values1.indexOf(id1);\r\n                        if (idx1 >= 0)\r\n                            values1.splice(idx1, 1);\r\n\r\n                        this.set_values(values1.slice());\r\n                    }\r\n                    else if (!this.isMultiple()) {\r\n                        this.set_value(null);\r\n                    }\r\n                }, true);\r\n\r\n                var editItem = e['editItem'];\r\n                if (editItem != null) {\r\n                    dialog.load(editItem, () => {\r\n                        (dialog as any).dialogOpen(this.openDialogAsPanel);\r\n                    }, null);\r\n                }\r\n                else if (this.isMultiple() || Q.isEmptyOrNull(this.get_value())) {\r\n                    var entity: TItem = {} as any;\r\n                    this.setTermOnNewEntity(entity, Q.trimToEmpty(this.lastCreateTerm));\r\n                    this.initNewEntity(entity);\r\n                    dialog.load(entity, () => {\r\n                        (dialog as any).dialogOpen(this.openDialogAsPanel);\r\n                    }, null);\r\n                }\r\n                else {\r\n                    dialog.load(this.get_value(), () => {\r\n                        (dialog as any).dialogOpen(this.openDialogAsPanel);\r\n                    }, null);\r\n                }\r\n            });\r\n        }\r\n\r\n        public openDialogAsPanel: boolean;\r\n    }\r\n\r\n    declare namespace Select2Extensions {\r\n        function select2(element: JQuery): JQuery;\r\n        function select2(element: JQuery, options: Select2Options): JQuery;\r\n        function select2(element: JQuery, action: string): JQuery;\r\n        function select2(element: JQuery, option: string, value: any): JQuery;\r\n        function select2(element: JQuery, option: string): any;\r\n    }\r\n\r\n    export interface Select2Item {\r\n        id: string;\r\n        text: string;\r\n        source?: any;\r\n        disabled?: boolean;\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass('Serenity.SelectEditor')\r\n    export class SelectEditor extends Select2Editor<SelectEditorOptions, Select2Item> {\r\n        constructor(hidden: JQuery, opt?: SelectEditorOptions) {\r\n            super(hidden, opt);\r\n            this.updateItems();\r\n        }\r\n\r\n        getItems() {\r\n            return this.options.items || [];\r\n        }\r\n\r\n        protected emptyItemText() {\r\n            if (!Q.isEmptyOrNull(this.options.emptyOptionText)) {\r\n                return this.options.emptyOptionText;\r\n            }\r\n            return super.emptyItemText();\r\n        }\r\n\r\n        updateItems() {\r\n            var items = this.getItems();\r\n            this.clearItems();\r\n\r\n            if (items.length > 0) {\r\n                var isStrings = typeof (items[0]) === 'string';\r\n                for (var item of items) {\r\n                    var key = isStrings ? item : item[0];\r\n                    var text = isStrings ? item : Q.coalesce(item[1], item[0]);\r\n                    this.addOption(key, text, item, false);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    export interface SelectEditorOptions extends Select2CommonOptions {\r\n        items?: any[];\r\n        emptyOptionText?: string;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerEditor('Serenity.DateYearEditor')\r\n    export class DateYearEditor extends SelectEditor {\r\n\r\n        constructor(hidden: JQuery, opt: DateYearEditorOptions) {\r\n            super(hidden, opt);\r\n\r\n            this.updateItems();\r\n        }\r\n\r\n        getItems() {\r\n            var opt = this.options as DateYearEditorOptions;\r\n\r\n            if (opt.items != null && opt.items.length >= 1) {\r\n                return opt.items;\r\n            }\r\n\r\n            var years = [];\r\n            var minYear = (new Date()).getFullYear();\r\n            var maxYear = (new Date()).getFullYear();\r\n\r\n            opt.minYear = Q.coalesce(opt.minYear, '-10').toString();\r\n            if (Q.startsWith(opt.minYear, '-')) {\r\n                minYear -= parseInt(opt.minYear.substr(1), 10);\r\n            }\r\n            else if (Q.startsWith(opt.minYear, '+')) {\r\n                minYear += parseInt(opt.minYear.substr(1), 10);\r\n            }\r\n            else {\r\n                minYear = parseInt(opt.minYear, 10);\r\n            }\r\n\r\n            opt.maxYear = Q.coalesce(opt.maxYear, '+10').toString();\r\n            if (Q.startsWith(opt.maxYear, '-')) {\r\n                maxYear -= parseInt(opt.maxYear.substr(1), 10);\r\n            }\r\n            else if (Q.startsWith(opt.maxYear, '+')) {\r\n                maxYear += parseInt(opt.maxYear.substr(1), 10);\r\n            }\r\n            else {\r\n                maxYear = parseInt(opt.maxYear, 10);\r\n            }\r\n\r\n            if (opt.descending) {\r\n                for (var i = maxYear; i >= minYear; i--) {\r\n                    years.push(i.toString());\r\n                }\r\n            }\r\n            else {\r\n                for (var i1 = minYear; i1 <= maxYear; i1++) {\r\n                    years.push(i1.toString());\r\n                }\r\n            }\r\n\r\n            return years;\r\n        }\r\n    }\r\n\r\n    export interface DateYearEditorOptions extends SelectEditorOptions {\r\n        minYear?: string;\r\n        maxYear?: string;\r\n        descending?: boolean;\r\n    }\r\n\r\n}","namespace Serenity {\r\n\r\n    export interface LookupEditorOptions extends Select2EditorOptions {\r\n        lookupKey?: string;\r\n    }\r\n\r\n    @Serenity.Decorators.registerEditor(\"Serenity.LookupEditorBase\")\r\n    export class LookupEditorBase<TOptions extends LookupEditorOptions, TItem> extends Select2Editor<TOptions, TItem> {\r\n\r\n        constructor(input: JQuery, opt?: TOptions) {\r\n            super(input, opt);\r\n\r\n            var self = this;\r\n            if (!this.isAsyncWidget()) {\r\n                this.updateItems();\r\n                Q.ScriptData.bindToChange('Lookup.' + this.getLookupKey(), this.uniqueName, function () {\r\n                    self.updateItems();\r\n                });\r\n            }\r\n        }\r\n\r\n        protected initializeAsync(): PromiseLike<void> {\r\n            return this.updateItemsAsync().then(() => {\r\n                Q.ScriptData.bindToChange('Lookup.' + this.getLookupKey(), this.uniqueName, () => {\r\n                    this.updateItemsAsync();\r\n                });\r\n            }, null);\r\n        }\r\n\r\n        destroy(): void {\r\n            Q.ScriptData.unbindFromChange(this.uniqueName);\r\n            super.destroy();\r\n        }\r\n\r\n        protected getLookupKey(): string {\r\n            if (this.options.lookupKey != null) {\r\n                return this.options.lookupKey;\r\n            }\r\n\r\n            var key = (ss as any).getTypeFullName((ss as any).getInstanceType(this));\r\n\r\n            var idx = key.indexOf('.');\r\n            if (idx >= 0) {\r\n                key = key.substring(idx + 1);\r\n            }\r\n\r\n            if (Q.endsWith(key, 'Editor')) {\r\n                key = key.substr(0, key.length - 6);\r\n            }\r\n\r\n            return key;\r\n        }\r\n\r\n        protected getLookup(): Q.Lookup<TItem> {\r\n            return Q.getLookup<TItem>(this.getLookupKey());\r\n        }\r\n\r\n        protected getLookupAsync(): PromiseLike<Q.Lookup<TItem>> {\r\n            return Promise.resolve().then(() => {\r\n                var key = this.getLookupKey();\r\n                return Q.getLookupAsync<TItem>(key);\r\n            }, null);\r\n        }\r\n\r\n        protected getItems(lookup: Q.Lookup<TItem>) {\r\n            return this.filterItems(this.cascadeItems(lookup.items));\r\n        }\r\n\r\n        protected getItemText(item: TItem, lookup: Q.Lookup<TItem>) {\r\n            var textValue = lookup.textFormatter ? lookup.textFormatter(item) : item[lookup.textField];\r\n            return textValue == null ? '' : textValue.toString();\r\n        }\r\n\r\n        protected getItemDisabled(item: TItem, lookup: Q.Lookup<TItem>) {\r\n            return false;\r\n        }\r\n\r\n        public updateItems() {\r\n            var lookup = this.getLookup();\r\n            this.clearItems();\r\n            var items = this.getItems(lookup);\r\n            for (var $t1 = 0; $t1 < items.length; $t1++) {\r\n                var item = items[$t1];\r\n                var text = this.getItemText(item, lookup);\r\n                var disabled = this.getItemDisabled(item, lookup);\r\n                var idValue = item[lookup.idField];\r\n                var id = (idValue == null ? '' : idValue.toString());\r\n                this.addItem({\r\n                    id: id,\r\n                    text: text,\r\n                    source: item,\r\n                    disabled: disabled\r\n                });\r\n            }\r\n        }\r\n\r\n        public updateItemsAsync(): PromiseLike<void> {\r\n            return this.getLookupAsync().then((lookup) => {\r\n                this.clearItems();\r\n                var items = this.getItems(lookup);\r\n                for (var $t1 = 0; $t1 < items.length; $t1++) {\r\n                    var item = items[$t1];\r\n                    var text = this.getItemText(item, lookup);\r\n                    var disabled = this.getItemDisabled(item, lookup);\r\n                    var idValue = item[lookup.idField];\r\n                    var id = (idValue == null ? '' : idValue.toString());\r\n                    this.addItem({ id: id, text: text, source: item, disabled: disabled });\r\n                }\r\n            }, null);\r\n        }\r\n\r\n        protected getDialogTypeKey() {\r\n            var dialogTypeKey = super.getDialogTypeKey();\r\n            if (dialogTypeKey)\r\n                return dialogTypeKey;\r\n\r\n            return this.getLookupKey();\r\n        }\r\n\r\n        protected setCreateTermOnNewEntity(entity: TItem, term: string) {\r\n            entity[this.getLookup().textField] = term;\r\n        }\r\n\r\n        protected editDialogDataChange() {\r\n            Q.reloadLookup(this.getLookupKey());\r\n        }\r\n    }    \r\n\r\n    @Decorators.registerEditor('Serenity.LookupEditor')\r\n    export class LookupEditor extends LookupEditorBase<LookupEditorOptions, any> {\r\n        constructor(hidden: JQuery, opt?: LookupEditorOptions) {\r\n            super(hidden, opt);\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    import Option = Serenity.Decorators.option\r\n\r\n    export namespace EditorTypeRegistry {\r\n        let knownTypes: Q.Dictionary<WidgetClass>;\r\n\r\n        export function get(key: string): WidgetClass {\r\n\r\n            if (Q.isEmptyOrNull(key)) {\r\n                throw new (ss as any).ArgumentNullException('key');\r\n            }\r\n\r\n            initialize();\r\n\r\n            var editorType = knownTypes[key.toLowerCase()];\r\n            if (editorType == null) {\r\n\r\n                var type = Q.typeByFullName(key);\r\n                if (type != null) {\r\n                    knownTypes[key.toLowerCase()] = type;\r\n                    return type;\r\n                }\r\n\r\n                throw new ss.Exception(Q.format(\"Can't find {0} editor type!\", key));\r\n            }\r\n            return editorType;\r\n\r\n        }\r\n\r\n        function initialize(): void {\r\n\r\n            if (knownTypes != null)\r\n                return;\r\n\r\n            knownTypes = {};\r\n\r\n            var assemblies = (ss as any).getAssemblies();\r\n            for (var assembly of assemblies) {\r\n                for (var type of (ss as any).getAssemblyTypes(assembly)) {\r\n\r\n                    if (!(type.prototype instanceof Serenity.Widget)) {\r\n                        continue;\r\n                    }\r\n\r\n                    if ((ss as any).isGenericTypeDefinition(type)) {\r\n                        continue;\r\n                    }\r\n\r\n                    var fullName = (ss as any).getTypeFullName(type).toLowerCase();\r\n                    knownTypes[fullName] = type;\r\n\r\n                    var editorAttr = (ss as any).getAttributes(type, Serenity.EditorAttribute, false);\r\n                    if (editorAttr != null && editorAttr.length > 0) {\r\n                        var attrKey = editorAttr[0].key;\r\n                        if (!Q.isEmptyOrNull(attrKey)) {\r\n                            knownTypes[attrKey.toLowerCase()] = type;\r\n                        }\r\n                    }\r\n\r\n                    for (var k of Q.Config.rootNamespaces) {\r\n                        if (Q.startsWith(fullName, k.toLowerCase() + '.')) {\r\n                            var kx = fullName.substr(k.length + 1).toLowerCase();\r\n                            if (knownTypes[kx] == null) {\r\n                                knownTypes[kx] = type;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            setTypeKeysWithoutEditorSuffix();\r\n        }\r\n\r\n        export function reset(): void {\r\n            knownTypes = null;\r\n        }\r\n\r\n        function setTypeKeysWithoutEditorSuffix() {\r\n            var suffix = 'editor';\r\n            var keys = Object.keys(knownTypes);\r\n            for (var k of keys) {\r\n                setWithoutSuffix(k, knownTypes[k]);\r\n            }\r\n        }\r\n\r\n        function setWithoutSuffix(key: string, t: Serenity.WidgetClass) {\r\n            var suffix = 'editor';\r\n\r\n            if (!Q.endsWith(key, suffix))\r\n                return;\r\n\r\n            var p = key.substr(0, key.length - suffix.length);\r\n\r\n            if (Q.isEmptyOrNull(p))\r\n                return;\r\n\r\n            if (knownTypes[p] != null)\r\n                return;\r\n\r\n            knownTypes[p] = knownTypes[key];\r\n        }\r\n    }\r\n\r\n    export namespace EditorUtils {\r\n\r\n        export function getDisplayText(editor: Serenity.Widget<any>): string {\r\n\r\n            var select2 = editor.element.data('select2');\r\n\r\n            if (select2 != null) {\r\n                var data = editor.element.select2('data');\r\n                if (data == null)\r\n                    return '';\r\n\r\n                return Q.coalesce(data.text, '');\r\n            }\r\n\r\n            var value = getValue(editor);\r\n            if (value == null) {\r\n                return '';\r\n            }\r\n\r\n            if (typeof value === \"string\")\r\n                return value;\r\n\r\n            if (value instanceof Boolean)\r\n                return (!!value ? Q.coalesce(Q.tryGetText('Controls.FilterPanel.OperatorNames.true'), 'True') :\r\n                    Q.coalesce(Q.tryGetText('Controls.FilterPanel.OperatorNames.true'), 'False'));\r\n\r\n            return value.toString();\r\n        }\r\n\r\n        var dummy: PropertyItem = { name: '_' };\r\n\r\n        export function getValue(editor: Serenity.Widget<any>): any {\r\n            var target = {};\r\n            saveValue(editor, dummy, target);\r\n            return target['_'];\r\n        }\r\n\r\n        export function saveValue(editor: Serenity.Widget<any>, item: PropertyItem, target: any): void {\r\n\r\n            var getEditValue = (ss as any).safeCast(editor, Serenity.IGetEditValue);\r\n\r\n            if (getEditValue != null) {\r\n                getEditValue.getEditValue(item, target);\r\n                return;\r\n            }\r\n\r\n            var stringValue = (ss as any).safeCast(editor, Serenity.IStringValue);\r\n            if (stringValue != null) {\r\n                target[item.name] = stringValue.get_value();\r\n                return;\r\n            }\r\n\r\n            var booleanValue = (ss as any).safeCast(editor, Serenity.IBooleanValue);\r\n            if (booleanValue != null) {\r\n                target[item.name] = booleanValue.get_value();\r\n                return;\r\n            }\r\n\r\n            var doubleValue = (ss as any).safeCast(editor, Serenity.IDoubleValue);\r\n            if (doubleValue != null) {\r\n                var value = doubleValue.get_value();\r\n                target[item.name] = (isNaN(value) ? null : value);\r\n                return;\r\n            }\r\n\r\n            if ((editor as any).getEditValue != null) {\r\n                (editor as any).getEditValue(item, target);\r\n                return;\r\n            }\r\n\r\n            if (editor.element.is(':input')) {\r\n                target[item.name] = editor.element.val();\r\n                return;\r\n            }\r\n        }\r\n\r\n        export function setValue(editor: Serenity.Widget<any>, value: any): void {\r\n            var source = { _: value };\r\n            loadValue(editor, dummy, source);\r\n        }\r\n\r\n        export function loadValue(editor: Serenity.Widget<any>, item: PropertyItem, source: any): void {\r\n\r\n            var setEditValue = (ss as any).safeCast(editor, Serenity.ISetEditValue);\r\n            if (setEditValue != null) {\r\n                setEditValue.setEditValue(source, item);\r\n                return;\r\n            }\r\n\r\n            var stringValue = (ss as any).safeCast(editor, Serenity.IStringValue);\r\n            if (stringValue != null) {\r\n                var value = source[item.name];\r\n                if (value != null) {\r\n                    value = value.toString();\r\n                }\r\n                stringValue.set_value((ss as any).cast(value, String));\r\n                return;\r\n            }\r\n\r\n            var booleanValue = (ss as any).safeCast(editor, Serenity.IBooleanValue);\r\n            if (booleanValue != null) {\r\n                var value1 = source[item.name];\r\n                if (typeof (value1) === 'number') {\r\n                    booleanValue.set_value(value1 > 0);\r\n                }\r\n                else {\r\n                    booleanValue.set_value(!!value1);\r\n                }\r\n                return;\r\n            }\r\n\r\n            var doubleValue = (ss as any).safeCast(editor, Serenity.IDoubleValue);\r\n            if (doubleValue != null) {\r\n                var d = source[item.name];\r\n                if (!!(d == null || (ss as any).isInstanceOfType(d, String) && Q.isTrimmedEmpty((ss as any).cast(d, String)))) {\r\n                    doubleValue.set_value(null);\r\n                }\r\n                else if ((ss as any).isInstanceOfType(d, String)) {\r\n                    doubleValue.set_value((ss as any).cast(Q.parseDecimal((ss as any).cast(d, String)), Number));\r\n                }\r\n                else if ((ss as any).isInstanceOfType(d, Boolean)) {\r\n                    doubleValue.set_value((!!d ? 1 : 0));\r\n                }\r\n                else {\r\n                    doubleValue.set_value((ss as any).cast(d, Number));\r\n                }\r\n                return;\r\n            }\r\n\r\n            if ((editor as any).setEditValue != null) {\r\n                (editor as any).setEditValue(source, item);\r\n                return;\r\n            }\r\n\r\n            if (editor.element.is(':input')) {\r\n                var v = source[item.name];\r\n                if (v == null) {\r\n                    editor.element.val('');\r\n                }\r\n                else {\r\n                    editor.element.val(v);\r\n                }\r\n                return;\r\n            }\r\n        }\r\n\r\n        export function setReadonly(elements: JQuery, isReadOnly: boolean): JQuery {\r\n            elements.each(function (index, el) {\r\n                var elx = $(el);\r\n                var type = elx.attr('type');\r\n                if (elx.is('select') || type === 'radio' || type === 'checkbox') {\r\n                    if (isReadOnly) {\r\n                        elx.addClass('readonly').attr('disabled', 'disabled');\r\n                    }\r\n                    else {\r\n                        elx.removeClass('readonly').removeAttr('disabled');\r\n                    }\r\n                }\r\n                else if (isReadOnly) {\r\n                    elx.addClass('readonly').attr('readonly', 'readonly');\r\n                }\r\n                else {\r\n                    elx.removeClass('readonly').removeAttr('readonly');\r\n                }\r\n                return true;\r\n            });\r\n            return elements;\r\n        }\r\n\r\n        export function setReadOnly(widget: Serenity.Widget<any>, isReadOnly: boolean): void {\r\n\r\n            var readOnly = (ss as any).safeCast(widget, Serenity.IReadOnly);\r\n\r\n            if (readOnly != null) {\r\n                readOnly.set_readOnly(isReadOnly);\r\n            }\r\n            else if (widget.element.is(':input')) {\r\n                setReadonly(widget.element, isReadOnly);\r\n            }\r\n        }\r\n\r\n        export function setRequired(widget: Serenity.Widget<any>, isRequired: boolean): void {\r\n            var req = (ss as any).safeCast(widget, IValidateRequired);\r\n            if (req != null) {\r\n                req.set_required(isRequired);\r\n            }\r\n            else if (widget.element.is(':input')) {\r\n                widget.element.toggleClass('required', !!isRequired);\r\n            }\r\n            var gridField = WX.getGridField(widget);\r\n            var hasSupItem = gridField.find('sup').get().length > 0;\r\n            if (isRequired && !hasSupItem) {\r\n                $('<sup>*</sup>').attr('title', Q.text('Controls.PropertyGrid.RequiredHint'))\r\n                    .prependTo(gridField.find('.caption')[0]);\r\n            }\r\n            else if (!isRequired && hasSupItem) {\r\n                $(gridField.find('sup')[0]).remove();\r\n            }\r\n        }\r\n\r\n        export function setContainerReadOnly(container: JQuery, readOnly: boolean) {\r\n\r\n            if (!readOnly) {\r\n\r\n                if (!container.hasClass('readonly-container'))\r\n                    return;\r\n\r\n                container.removeClass('readonly-container').find(\".editor.container-readonly\")\r\n                    .removeClass('container-readonly').each((i, e) => {\r\n                        var w = $(e).tryGetWidget(Serenity.Widget);\r\n                        if (w != null)\r\n                            Serenity.EditorUtils.setReadOnly(w, false);\r\n                        else\r\n                            Serenity.EditorUtils.setReadonly($(e), false);\r\n                    });\r\n\r\n                return;\r\n            }\r\n\r\n            container.addClass('readonly-container').find(\".editor\")\r\n                .not('.container-readonly')\r\n                .each((i, e) => {\r\n                    var w = $(e).tryGetWidget(Serenity.Widget);\r\n                    if (w != null) {\r\n\r\n                        if (w['get_readOnly']) {\r\n                            if (w['get_readOnly']())\r\n                                return;\r\n                        }\r\n                        else if ($(e).is('[readonly]') || $(e).is('[disabled]') || $(e).is('.readonly') || $(e).is('.disabled'))\r\n                            return;\r\n\r\n                        $(e).addClass('container-readonly');\r\n                        Serenity.EditorUtils.setReadOnly(w, true);\r\n\r\n                    }\r\n                    else {\r\n                        if ($(e).is('[readonly]') || $(e).is('[disabled]') || $(e).is('.readonly') || $(e).is('.disabled'))\r\n                            return;\r\n\r\n                        Serenity.EditorUtils.setReadonly($(e).addClass('container-readonly'), true);\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    function Editor(name: string, intf?: any[]) {\r\n        return Decorators.registerEditor('Serenity.' + name + 'Editor', intf)\r\n    }\r\n\r\n    import Element = Decorators.element\r\n\r\n    @Editor('Boolean', [IBooleanValue])\r\n    @Element('<input type=\"checkbox\"/>')\r\n    export class BooleanEditor extends Widget<any> {\r\n\r\n        constructor(input: JQuery) {\r\n            super(input);\r\n\r\n            input.removeClass(\"flexify\");\r\n        }\r\n\r\n        public get value(): boolean {\r\n            return this.element.is(\":checked\");\r\n        }\r\n\r\n        protected get_value(): boolean {\r\n            return this.value;\r\n        }\r\n\r\n        public set value(value: boolean) {\r\n            this.element.prop(\"checked\", !!value);\r\n        }\r\n\r\n        protected set_value(value: boolean): void {\r\n            this.value = value;\r\n        }\r\n    }\r\n\r\n    @Editor('Decimal', [IDoubleValue])\r\n    @Element('<input type=\"text\"/>')\r\n    export class DecimalEditor extends Widget<DecimalEditorOptions> implements IDoubleValue {\r\n\r\n        constructor(input: JQuery, opt?: DecimalEditorOptions) {\r\n            super(input, opt);\r\n\r\n            input.addClass('decimalQ');\r\n\t\t\tvar numericOptions = $.extend(Serenity.DecimalEditor.defaultAutoNumericOptions(), {\r\n\t\t\t\tvMin: Q.coalesce(this.options.minValue, this.options.allowNegatives ? (this.options.maxValue != null ? (\"-\" + this.options.maxValue) : '-999999999999.99') : '0.00'),\r\n                vMax: Q.coalesce(this.options.maxValue, '999999999999.99')\r\n            });\r\n\r\n            if (this.options.decimals != null) {\r\n                numericOptions.mDec = this.options.decimals;\r\n            }\r\n\r\n            if (this.options.padDecimals != null) {\r\n                numericOptions.aPad = this.options.padDecimals;\r\n            }\r\n\r\n            (input as any).autoNumeric(numericOptions);\r\n        }\r\n\r\n        get_value(): number {\r\n            var val = (this.element as any).autoNumeric('get');\r\n\r\n            if (!!(val == null || val === ''))\r\n                return null;\r\n\r\n            return parseFloat(val);\r\n        }\r\n\r\n        get value(): number {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: number) {\r\n            if (value == null || (value as any) === '') {\r\n                this.element.val('');\r\n            }\r\n            else {\r\n                (this.element as any).autoNumeric('set', value);\r\n            }\r\n        }\r\n\r\n        set value(v: number) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        get_isValid(): boolean {\r\n            return !isNaN(this.get_value());\r\n        }\r\n\r\n        static defaultAutoNumericOptions(): any {\r\n            return {\r\n                aDec: Q.Culture.decimalSeparator,\r\n                altDec: ((Q.Culture.decimalSeparator === '.') ? ',' : '.'),\r\n                aSep: ((Q.Culture.decimalSeparator === '.') ? ',' : '.'),\r\n                aPad: true\r\n            };\r\n        }\r\n    }\r\n\r\n    export interface IntegerEditorOptions {\r\n        minValue?: number;\r\n\t\tmaxValue?: number;\r\n\t\tallowNegatives?: boolean;\r\n    }\r\n\r\n    @Editor('Integer', [IDoubleValue])\r\n    @Element('<input type=\"text\"/>')\r\n    export class IntegerEditor extends Widget<IntegerEditorOptions> implements IDoubleValue {\r\n\r\n        constructor(input: JQuery, opt?: IntegerEditorOptions) {\r\n            super(input, opt);\r\n\r\n            input.addClass('integerQ');\r\n            var numericOptions = $.extend(Serenity.DecimalEditor.defaultAutoNumericOptions(),\r\n                {\r\n\t\t\t\t\tvMin: Q.coalesce(this.options.minValue, this.options.allowNegatives ? (this.options.maxValue != null ? (\"-\" + this.options.maxValue) : '-2147483647') : '0'),\r\n                    vMax: Q.coalesce(this.options.maxValue, 2147483647),\r\n                    aSep: null\r\n                });\r\n\r\n            (input as any).autoNumeric(numericOptions);\r\n        }\r\n\r\n        get_value(): number {\r\n            var val = (this.element as any).autoNumeric('get');\r\n            if (!!Q.isTrimmedEmpty(val)) {\r\n                return null;\r\n            }\r\n            else {\r\n                return parseInt(val, 10);\r\n            }\r\n        }\r\n\r\n        get value(): number {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: number) {\r\n            if (value == null || (value as any) === '') {\r\n                this.element.val('');\r\n            }\r\n            else {\r\n                (this.element as any).autoNumeric('set', value);\r\n            }\r\n        }\r\n\r\n        set value(v: number) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        get_isValid(): boolean {\r\n            return !isNaN(this.get_value());\r\n        }\r\n    }\r\n\r\n\r\n    export interface DecimalEditorOptions {\r\n        minValue?: string;\r\n        maxValue?: string;\r\n        decimals?: any;\r\n\t\tpadDecimals?: any;\r\n\t\tallowNegatives?: boolean;\r\n    }\r\n\r\n    export interface EmailEditorOptions {\r\n        domain?: string;\r\n        readOnlyDomain?: boolean;\r\n    }\r\n\r\n    @Editor('Email', [IStringValue, IReadOnly])\r\n    @Element('<input type=\"text\"/>')\r\n    export class EmailEditor extends Widget<EmailEditorOptions> {\r\n\r\n        constructor(input: JQuery, opt: EmailEditorOptions) {\r\n            super(input, opt);\r\n\r\n            EmailEditor.registerValidationMethods();\r\n\r\n            input.addClass('emailuser').removeClass('flexify');\r\n\r\n            var spanAt = $('<span/>').text('@').addClass('emailat').insertAfter(input);\r\n\r\n            var domain = $('<input type=\"text\"/>').addClass('emaildomain').addClass('flexify').insertAfter(spanAt);\r\n            domain.bind('blur.' + this.uniqueName, function () {\r\n                var validator = domain.closest('form').data('validator');\r\n                if (validator != null) {\r\n                    validator.element(input[0]);\r\n                }\r\n            });\r\n\r\n            if (!Q.isEmptyOrNull(this.options.domain)) {\r\n                domain.val(this.options.domain);\r\n            }\r\n\r\n            if (this.options.readOnlyDomain) {\r\n                domain.attr('readonly', 'readonly').addClass('disabled').attr('tabindex', '-1');\r\n            }\r\n\r\n            input.bind('keypress.' + this.uniqueName, e => {\r\n                if (e.which === 64) {\r\n                    e.preventDefault();\r\n                    if (!this.options.readOnlyDomain) {\r\n                        domain.focus();\r\n                        domain.select();\r\n                    }\r\n                }\r\n            });\r\n\r\n            domain.bind('keypress.' + this.uniqueName, function (e1) {\r\n                if (e1.which === 64) {\r\n                    e1.preventDefault();\r\n                }\r\n            });\r\n\r\n            if (!this.options.readOnlyDomain) {\r\n                input.change(e2 => this.set_value(input.val()));\r\n            }\r\n        }\r\n\r\n        static registerValidationMethods(): void {\r\n            if ($.validator.methods['emailuser'] != null)\r\n                return;\r\n\r\n            $.validator.addMethod('emailuser', function (value, element) {\r\n\r\n                var domain = $(element).nextAll('.emaildomain');\r\n                if (domain.length > 0 && domain.attr('readonly') == null) {\r\n\r\n                    if (this.optional(element) && this.optional(domain[0])) {\r\n                        return true;\r\n                    }\r\n\r\n                    value = value + '@' + domain.val();\r\n\r\n                    if (Q.Config.emailAllowOnlyAscii) {\r\n                        return (new RegExp(\"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}\" +\r\n                            \"[a-zA-Z0-9])?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$\"))\r\n                            .test(value);\r\n                    }\r\n\r\n                    return (new RegExp(\"^((([a-z]|\\\\d|[!#\\\\$%&'\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|\" +\r\n                        \"[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+(\\\\.([a-z]|\\\\d|\" +\r\n                        \"[!#\\\\$%&'\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+)*)|\" +\r\n                        \"((\\\\x22)((((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(([\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x7f]|\" +\r\n                        \"\\\\x21|[\\\\x23-\\\\x5b]|[\\\\x5d-\\\\x7e]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(\\\\\\\\([\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0d-\\\\x7f]|\" +\r\n                        \"[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]))))*(((\\\\x20|\\\\x09)*(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(\\\\x22)))@((([a-z]|\\\\d|\" +\r\n                        \"[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])\" +\r\n                        \"([a-z]|\\\\d|-|\\\\.|_|~|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-z]|\\\\d|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))\\\\.)\" +\r\n                        \"+(([a-z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(([a-z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])([a-z]|\\\\d|-|\\\\.|_|~|\" +\r\n                        \"[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])*([a-z]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])))$\", 'i')).test(value);\r\n                }\r\n                else {\r\n\r\n                    if (Q.Config.emailAllowOnlyAscii) {\r\n                        return this.optional(element) || (new RegExp(\"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+$\")).test(value);\r\n                    }\r\n\r\n                    return this.optional(element) || (new RegExp(\"^((([a-z]|\\\\d|[!#\\\\$%&'\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+\" +\r\n                        \"(\\\\.([a-z]|\\\\d|[!#\\\\$%&'\\\\*\\\\+\\\\-\\\\/=\\\\?\\\\^_`{\\\\|}~]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF])+)*)|((\\\\x22)((((\\\\x20|\\\\x09)*\" +\r\n                        \"(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(([\\\\x01-\\\\x08\\\\x0b\\\\x0c\\\\x0e-\\\\x1f\\\\x7f]|\\\\x21|[\\\\x23-\\\\x5b]|[\\\\x5d-\\\\x7e]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\" +\r\n                        \"\\\\uFDCF\\\\uFDF0-\\\\uFFEF])|(\\\\\\\\([\\\\x01-\\\\x09\\\\x0b\\\\x0c\\\\x0d-\\\\x7f]|[\\\\u00A0-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFEF]))))*(((\\\\x20|\\\\x09)*\" +\r\n                        \"(\\\\x0d\\\\x0a))?(\\\\x20|\\\\x09)+)?(\\\\x22)))$\", 'i')).test(value);\r\n                }\r\n            }, Q.text(\"Validation.Email\"));\r\n        }\r\n\r\n        get_value(): string {\r\n            var domain = this.element.nextAll('.emaildomain');\r\n            var value = this.element.val();\r\n            var domainValue = domain.val();\r\n            if (Q.isEmptyOrNull(value)) {\r\n                if (this.options.readOnlyDomain || Q.isEmptyOrNull(domainValue)) {\r\n                    return '';\r\n                }\r\n                return '@' + domainValue;\r\n            }\r\n            return value + '@' + domainValue;\r\n        }\r\n\r\n        get value(): string {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: string): void {\r\n            var domain = this.element.nextAll('.emaildomain');\r\n            value = Q.trimToNull(value);\r\n            if (value == null) {\r\n                if (!this.options.readOnlyDomain) {\r\n                    domain.val('');\r\n                }\r\n                this.element.val('');\r\n            }\r\n            else {\r\n                var parts = value.split('@');\r\n                if (parts.length > 1) {\r\n                    if (!this.options.readOnlyDomain) {\r\n                        domain.val(parts[1]);\r\n                        this.element.val(parts[0]);\r\n                    }\r\n                    else if (!Q.isEmptyOrNull(this.options.domain)) {\r\n                        if (parts[1] !== this.options.domain) {\r\n                            this.element.val(value);\r\n                        }\r\n                        else {\r\n                            this.element.val(parts[0]);\r\n                        }\r\n                    }\r\n                    else {\r\n                        this.element.val(parts[0]);\r\n                    }\r\n                }\r\n                else {\r\n                    this.element.val(parts[0]);\r\n                }\r\n            }\r\n        }\r\n\r\n        set value(v: string) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            var domain = this.element.nextAll('.emaildomain');\r\n            return !(this.element.attr('readonly') == null &&\r\n                (!this.options.readOnlyDomain || domain.attr('readonly') == null));\r\n        }\r\n\r\n        set_readOnly(value: boolean): void {\r\n            var domain = this.element.nextAll('.emaildomain');\r\n            if (value) {\r\n                this.element.attr('readonly', 'readonly').addClass('readonly');\r\n                if (!this.options.readOnlyDomain) {\r\n                    domain.attr('readonly', 'readonly').addClass('readonly');\r\n                }\r\n            }\r\n            else {\r\n                this.element.removeAttr('readonly').removeClass('readonly');\r\n                if (!this.options.readOnlyDomain) {\r\n                    domain.removeAttr('readonly').removeClass('readonly');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    export interface EnumEditorOptions extends Select2CommonOptions {\r\n        enumKey?: string;\r\n        enumType?: any;\r\n    }\r\n\r\n    @Editor('Enum')\r\n    export class EnumEditor extends Select2Editor<EnumEditorOptions, Select2Item> {\r\n        constructor(hidden: JQuery, opt: EnumEditorOptions) {\r\n            super(hidden, opt);\r\n            this.updateItems();\r\n        }\r\n\r\n        protected updateItems(): void {\r\n            this.clearItems();\r\n\r\n            var enumType = this.options.enumType || Serenity.EnumTypeRegistry.get(this.options.enumKey);\r\n            var enumKey = this.options.enumKey;\r\n\r\n            if (enumKey == null && enumType != null) {\r\n                var enumKeyAttr = (ss as any).getAttributes(enumType, Serenity.EnumKeyAttribute, false);\r\n                if (enumKeyAttr.length > 0) {\r\n                    enumKey = enumKeyAttr[0].value;\r\n                }\r\n            }\r\n\r\n            var values = (ss as any).Enum.getValues(enumType);\r\n            for (var x of values) {\r\n                var name = (ss as any).Enum.toString(enumType, x);\r\n                this.addOption((ss as any).cast(x, (ss as any).Int32).toString(),\r\n                    Q.coalesce(Q.tryGetText('Enums.' + enumKey + '.' + name), name), null, false);\r\n            }\r\n        }\r\n\r\n        protected allowClear() {\r\n            return Q.coalesce(this.options.allowClear, true);\r\n        }\r\n    }\r\n\r\n    export interface GoogleMapOptions {\r\n        latitude?: any;\r\n        longitude?: any;\r\n        zoom?: any;\r\n        mapTypeId?: any;\r\n        markerTitle?: string;\r\n        markerLatitude?: any;\r\n        markerLongitude?: any;\r\n    }\r\n\r\n    declare var google: any;\r\n\r\n    @Editor('GoogleMap', [])\r\n    @Element('<div/>')\r\n    export class GoogleMap extends Widget<GoogleMapOptions> {\r\n\r\n        private map: any;\r\n\r\n        constructor(container: JQuery, opt: GoogleMapOptions) {\r\n            super(container, opt);\r\n\r\n            var center = new google.maps.LatLng(\r\n                Q.coalesce(this.options.latitude, 0),\r\n                Q.coalesce(this.options.longitude, 0));\r\n\r\n            var mapOpt: any = new Object();\r\n            mapOpt.center = center;\r\n            mapOpt.mapTypeId = Q.coalesce(this.options.mapTypeId, 'roadmap');\r\n            mapOpt.zoom = Q.coalesce(this.options.zoom, 15);\r\n            mapOpt.zoomControl = true;\r\n            this.map = new google.maps.Map(container[0], mapOpt);\r\n\r\n            if (this.options.markerTitle != null) {\r\n                var markerOpt: any = new Object();\r\n\r\n                var lat = this.options.markerLatitude;\r\n                if (lat == null) {\r\n                    lat = Q.coalesce(this.options.latitude, 0);\r\n                }\r\n                var lon = this.options.markerLongitude;\r\n                if (lon == null) {\r\n                    lon = Q.coalesce(this.options.longitude, 0);\r\n                }\r\n                markerOpt.position = new google.maps.LatLng(lat, lon);\r\n                markerOpt.map = this.map;\r\n                markerOpt.title = this.options.markerTitle;\r\n                markerOpt.animation = 2;\r\n                new google.maps.Marker(markerOpt);\r\n            }\r\n\r\n            Serenity.LazyLoadHelper.executeOnceWhenShown(container, () => {\r\n                google.maps.event.trigger(this.map, 'resize', []);\r\n                this.map.setCenter(center);\r\n                // in case it wasn't visible (e.g. in dialog)\r\n            });\r\n        }\r\n\r\n        get_map(): any {\r\n            return this.map;\r\n        }\r\n    }\r\n\r\n\r\n    export interface HtmlContentEditorOptions {\r\n        cols?: any;\r\n        rows?: any;\r\n    }\r\n\r\n    @Editor('HtmlContent', [IStringValue, IReadOnly])\r\n    @Element('<textarea/>')\r\n    export class HtmlContentEditor extends Widget<HtmlContentEditorOptions>\r\n        implements IStringValue, IReadOnly {\r\n\r\n        private _instanceReady: boolean;\r\n\r\n        constructor(textArea: JQuery, opt?: HtmlContentEditorOptions) {\r\n            super(textArea, opt)\r\n\r\n            this._instanceReady = false;\r\n            HtmlContentEditor.includeCKEditor();\r\n\r\n            var id = textArea.attr('id');\r\n            if (Q.isTrimmedEmpty(id)) {\r\n                textArea.attr('id', this.uniqueName);\r\n                id = this.uniqueName;\r\n            }\r\n\r\n            if (this.options.cols != null)\r\n                textArea.attr('cols', this.options.cols);\r\n\r\n            if (this.options.rows != null)\r\n                textArea.attr('rows', this.options.rows);\r\n\r\n            this.addValidationRule(this.uniqueName, e => {\r\n                if (e.hasClass('required')) {\r\n                    var value = Q.trimToNull(this.get_value());\r\n                    if (value == null)\r\n                        return Q.text('Validation.Required');\r\n                }\r\n\r\n                return null;\r\n            });\r\n\r\n            Serenity.LazyLoadHelper.executeOnceWhenShown(this.element, () => {\r\n                var config = this.getConfig();\r\n                window['CKEDITOR'] && window['CKEDITOR'].replace(id, config);\r\n            });\r\n        }\r\n\r\n        protected instanceReady(x: any): void {\r\n            this._instanceReady = true;\r\n            $(x.editor.container.$).addClass(this.element.attr('class'));\r\n            this.element.addClass('select2-offscreen').css('display', 'block');\r\n\r\n            // for validation to work\r\n            x.editor.setData(this.element.val());\r\n            x.editor.setReadOnly(this.get_readOnly());\r\n        }\r\n\r\n        protected getLanguage(): string {\r\n            if (!window['CKEDITOR'])\r\n                return 'en';\r\n\r\n            var CKEDITOR = window['CKEDITOR'];\r\n\r\n            var lang = Q.coalesce(Q.trimToNull($('html').attr('lang')), 'en');\r\n            if (!!CKEDITOR.lang.languages[lang]) {\r\n                return lang;\r\n            }\r\n            if (lang.indexOf(String.fromCharCode(45)) >= 0) {\r\n                lang = lang.split(String.fromCharCode(45))[0];\r\n            }\r\n            if (!!CKEDITOR.lang.languages[lang]) {\r\n                return lang;\r\n            }\r\n            return 'en';\r\n        }\r\n\r\n        protected getConfig(): CKEditorConfig {\r\n            return {\r\n                customConfig: '',\r\n                language: this.getLanguage(),\r\n                bodyClass: 's-HtmlContentBody',\r\n                on: {\r\n                    instanceReady: (x: any) => this.instanceReady(x),\r\n                    change: (x1: any) => {\r\n                        x1.editor.updateElement();\r\n                        this.element.triggerHandler('change');\r\n                    }\r\n                },\r\n                toolbarGroups: [\r\n                    {\r\n                        name: 'clipboard',\r\n                        groups: ['clipboard', 'undo']\r\n                    }, {\r\n                        name: 'editing',\r\n                        groups: ['find', 'selection', 'spellchecker']\r\n                    }, {\r\n                        name: 'insert',\r\n                        groups: ['links', 'insert', 'blocks', 'bidi', 'list', 'indent']\r\n                    }, {\r\n                        name: 'forms',\r\n                        groups: ['forms', 'mode', 'document', 'doctools', 'others', 'about', 'tools']\r\n                    }, {\r\n                        name: 'colors'\r\n                    }, {\r\n                        name: 'basicstyles',\r\n                        groups: ['basicstyles', 'cleanup']\r\n                    }, {\r\n                        name: 'align'\r\n                    }, {\r\n                        name: 'styles'\r\n                    }],\r\n                removeButtons: 'SpecialChar,Anchor,Subscript,Styles',\r\n                format_tags: 'p;h1;h2;h3;pre',\r\n                removeDialogTabs: 'image:advanced;link:advanced',\r\n                removePlugins: 'uploadimage,image2',\r\n                contentsCss: Q.resolveUrl('~/Content/site/site.htmlcontent.css'),\r\n                entities: false,\r\n                entities_latin: false,\r\n                entities_greek: false,\r\n                autoUpdateElement: true,\r\n                height: (this.options.rows == null || this.options.rows === 0) ? null :\r\n                    ((this.options.rows * 20) + 'px')\r\n            };\r\n        }\r\n\r\n        protected getEditorInstance() {\r\n            var id = this.element.attr('id');\r\n            return window['CKEDITOR'].instances[id];\r\n        }\r\n\r\n        destroy(): void {\r\n            var instance = this.getEditorInstance();\r\n            instance && instance.destroy(true);\r\n            super.destroy();\r\n        }\r\n\r\n        get_value(): string {\r\n            var instance = this.getEditorInstance();\r\n            if (this._instanceReady && instance) {\r\n                return instance.getData();\r\n            }\r\n            else {\r\n                return this.element.val();\r\n            }\r\n        }\r\n\r\n        get value(): string {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: string): void {\r\n            var instance = this.getEditorInstance();\r\n            this.element.val(value);\r\n            if (this._instanceReady && instance)\r\n                instance.setData(value);\r\n        }\r\n\r\n        set value(v: string) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return !Q.isEmptyOrNull(this.element.attr('disabled'));\r\n        }\r\n\r\n        set_readOnly(value: boolean) {\r\n\r\n            if (this.get_readOnly() !== value) {\r\n                if (value) {\r\n                    this.element.attr('disabled', 'disabled');\r\n                }\r\n                else {\r\n                    this.element.removeAttr('disabled');\r\n                }\r\n\r\n                var instance = this.getEditorInstance();\r\n                if (this._instanceReady && instance)\r\n                    instance.setReadOnly(value);\r\n            }\r\n        }\r\n\r\n        static CKEditorVer = \"4.7.1\";\r\n\r\n        static includeCKEditor(): void {\r\n            if (window['CKEDITOR']) {\r\n                return;\r\n            }\r\n\r\n            var script = $('#CKEditorScript');\r\n            if (script.length > 0) {\r\n                return;\r\n            }\r\n\r\n            $('<script/>').attr('type', 'text/javascript')\r\n                .attr('id', 'CKEditorScript')\r\n                .attr('src', Q.resolveUrl('~/Scripts/CKEditor/ckeditor.js?v=' +\r\n                    HtmlContentEditor.CKEditorVer))\r\n                .appendTo(window.document.head);\r\n        };\r\n    }\r\n\r\n    @Editor('HtmlNoteContent')\r\n    export class HtmlNoteContentEditor extends HtmlContentEditor {\r\n        constructor(textArea: JQuery, opt?: HtmlContentEditorOptions) {\r\n            super(textArea, opt);\r\n        }\r\n\r\n        protected getConfig(): CKEditorConfig {\r\n            var config = super.getConfig();\r\n            (config as any).removeButtons += ',Cut,Copy,Paste,BulletedList,NumberedList,' +\r\n                'Indent,Outdent,SpecialChar,Subscript,Superscript,Styles,PasteText,' +\r\n                'PasteFromWord,Strike,Link,Unlink,CreatePlaceholder,Image,Table,' +\r\n                'HorizontalRule,Source,Maximize,Format,Font,FontSize,Anchor,Blockquote,' +\r\n                'CreatePlaceholder,BGColor,JustifyLeft,JustifyCenter,' +\r\n                'JustifyRight,JustifyBlock,Superscript,RemoveFormat';\r\n\r\n            (config as any).removePlugins = 'elementspath,uploadimage,image2';\r\n            return config;\r\n        }\r\n    }\r\n\r\n    @Editor('HtmlReportContent')\r\n    export class HtmlReportContentEditor extends HtmlContentEditor {\r\n        constructor(textArea: JQuery, opt?: HtmlContentEditorOptions) {\r\n            super(textArea, opt);\r\n        }\r\n\r\n        protected getConfig(): CKEditorConfig {\r\n            var config = super.getConfig();\r\n            (config as any).removeButtons += ',Cut,Copy,Paste,BulletedList,NumberedList,' +\r\n                'Indent,Outdent,SpecialChar,Subscript,Superscript,Styles,' +\r\n                'PasteText,PasteFromWord,Strike,Link,Unlink,CreatePlaceholder,' +\r\n                'Image,Table,HorizontalRule,Source,Maximize,Format,Font,FontSize,' +\r\n                'Anchor,Blockquote,CreatePlaceholder,BGColor,JustifyLeft,JustifyCenter,' +\r\n                'JustifyRight,JustifyBlock,Superscript,RemoveFormat';\r\n\r\n            (config as any).removePlugins = 'elementspath,uploadimage,image2';\r\n            return config;\r\n        }\r\n    }\r\n\r\n    export interface ImageUploadEditorOptions {\r\n        minWidth?: number;\r\n        maxWidth?: number;\r\n        minHeight?: number;\r\n        maxHeight?: number;\r\n        minSize?: number;\r\n        maxSize?: number;\r\n        originalNameProperty?: string;\r\n        urlPrefix?: string;\r\n        allowNonImage?: boolean;\r\n        displayFileName?: boolean;\r\n    }\r\n\r\n    @Editor('ImageUpload', [IReadOnly])\r\n    @Element('<div/>')\r\n    export class ImageUploadEditor extends Widget<ImageUploadEditorOptions>\r\n        implements IReadOnly, IGetEditValue, ISetEditValue {\r\n\r\n        constructor(div: JQuery, opt: ImageUploadEditorOptions) {\r\n            super(div, opt);\r\n\r\n            div.addClass('s-ImageUploadEditor');\r\n            if (Q.isEmptyOrNull(this.options.originalNameProperty))\r\n                div.addClass('hide-original-name');\r\n\r\n            this.toolbar = new Toolbar($('<div/>').appendTo(this.element), {\r\n                buttons: this.getToolButtons()\r\n            });\r\n\r\n            var progress = $('<div><div></div></div>')\r\n                .addClass('upload-progress')\r\n                .prependTo(this.toolbar.element);\r\n\r\n            var uio = this.getUploadInputOptions();\r\n            this.uploadInput = UploadHelper.addUploadInput(uio);\r\n\r\n            this.fileSymbols = $('<ul/>').appendTo(this.element);\r\n            this.updateInterface();\r\n        }\r\n\r\n        protected getUploadInputOptions(): UploadInputOptions {\r\n            return {\r\n                container: this.toolbar.findButton('add-file-button'),\r\n                zone: this.element,\r\n                inputName: this.uniqueName,\r\n                progress: this.progress,\r\n                fileDone: (response, name, data) => {\r\n                    if (!UploadHelper.checkImageConstraints(response, this.options)) {\r\n                        return;\r\n                    }\r\n\r\n                    var newEntity: UploadedFile = {\r\n                        OriginalName: name,\r\n                        Filename: response.TemporaryFile\r\n                    };\r\n\r\n                    this.entity = newEntity;\r\n                    this.populate();\r\n                    this.updateInterface();\r\n                }\r\n            }\r\n        }\r\n\r\n        protected addFileButtonText(): string {\r\n            return Q.text('Controls.ImageUpload.AddFileButton');\r\n        }\r\n\r\n        protected getToolButtons(): ToolButton[] {\r\n            return [\r\n                {\r\n                    title: this.addFileButtonText(),\r\n                    cssClass: 'add-file-button',\r\n                    onClick: function () {\r\n                    }\r\n                },\r\n                {\r\n                    title: '',\r\n                    hint: Q.text('Controls.ImageUpload.DeleteButtonHint'),\r\n                    cssClass: 'delete-button',\r\n                    onClick: () => {\r\n                        this.entity = null;\r\n                        this.populate();\r\n                        this.updateInterface();\r\n                    }\r\n                }\r\n            ];\r\n        }\r\n\r\n        protected populate(): void {\r\n            var displayOriginalName = this.options.displayFileName ||\r\n                !Q.isTrimmedEmpty(this.options.originalNameProperty);\r\n\r\n            if (this.entity == null) {\r\n                UploadHelper.populateFileSymbols(this.fileSymbols,\r\n                    null, displayOriginalName, this.options.urlPrefix);\r\n            }\r\n            else {\r\n                UploadHelper.populateFileSymbols(\r\n                    this.fileSymbols, [this.entity], displayOriginalName,\r\n                    this.options.urlPrefix);\r\n            }\r\n        }\r\n\r\n        protected updateInterface(): void {\r\n            var addButton = this.toolbar.findButton('add-file-button');\r\n            var delButton = this.toolbar.findButton('delete-button');\r\n            addButton.toggleClass('disabled', this.get_readOnly());\r\n            delButton.toggleClass('disabled', this.get_readOnly() ||\r\n                this.entity == null);\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return this.uploadInput.attr('disabled') != null;\r\n        }\r\n\r\n        set_readOnly(value: boolean): void {\r\n            if (this.get_readOnly() !== value) {\r\n                if (value) {\r\n                    (this.uploadInput.attr('disabled', 'disabled') as any).fileupload('disable');\r\n                }\r\n                else {\r\n                    (this.uploadInput.removeAttr('disabled') as any).fileupload('enable');\r\n                }\r\n                this.updateInterface();\r\n            }\r\n        }\r\n\r\n        get_value(): UploadedFile {\r\n            if (this.entity == null) {\r\n                return null;\r\n            }\r\n            var copy = $.extend({}, this.entity);\r\n            return copy;\r\n        }\r\n\r\n        get value(): UploadedFile {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: UploadedFile): void {\r\n            if (value != null) {\r\n                if (value.Filename == null) {\r\n                    this.entity = null;\r\n                }\r\n                else {\r\n                    this.entity = $.extend({}, value);\r\n                }\r\n            }\r\n            else {\r\n                this.entity = null;\r\n            }\r\n            this.populate();\r\n            this.updateInterface();\r\n        }\r\n\r\n        set value(v: UploadedFile) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        getEditValue(property: PropertyItem, target: any) {\r\n            target[property.name] = this.entity == null ? null :\r\n                Q.trimToNull(this.entity.Filename);\r\n        }\r\n\r\n        setEditValue(source: any, property: PropertyItem) {\r\n            var value: UploadedFile = {};\r\n            value.Filename = source[property.name];\r\n            if (Q.isEmptyOrNull(this.options.originalNameProperty)) {\r\n\r\n                if (this.options.displayFileName) {\r\n                    var s = Q.coalesce(value.Filename, '');\r\n                    var idx = (ss as any).lastIndexOfAnyString(s, [47, 92]);\r\n                    if (idx >= 0) {\r\n                        value.OriginalName = s.substr(idx + 1);\r\n                    }\r\n                    else {\r\n                        value.OriginalName = s;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                value.OriginalName = source[this.options.originalNameProperty];\r\n            }\r\n\r\n            this.set_value(value);\r\n        }\r\n\r\n        protected entity: UploadedFile;\r\n        protected toolbar: Toolbar;\r\n        protected progress: JQuery;\r\n        protected fileSymbols: JQuery;\r\n        protected uploadInput: JQuery;\r\n    }\r\n\r\n    @Editor('MultipleImageUpload', [IReadOnly])\r\n    @Element('<div/>')\r\n    export class MultipleImageUploadEditor extends Widget<ImageUploadEditorOptions>\r\n        implements IReadOnly, IGetEditValue, ISetEditValue {\r\n\r\n        private entities: UploadedFile[];\r\n        private toolbar: Toolbar;\r\n        private fileSymbols: JQuery;\r\n        private uploadInput: JQuery;\r\n\r\n        constructor(div: JQuery, opt: ImageUploadEditorOptions) {\r\n            super(div, opt);\r\n\r\n            this.entities = [];\r\n            div.addClass('s-MultipleImageUploadEditor');\r\n            var self = this;\r\n            this.toolbar = new Toolbar($('<div/>').appendTo(this.element), {\r\n                buttons: this.getToolButtons()\r\n            });\r\n            var progress = $('<div><div></div></div>')\r\n                .addClass('upload-progress').prependTo(this.toolbar.element);\r\n\r\n            var addFileButton = this.toolbar.findButton('add-file-button');\r\n\r\n            this.uploadInput = Serenity.UploadHelper.addUploadInput({\r\n                container: addFileButton,\r\n                zone: this.element,\r\n                inputName: this.uniqueName,\r\n                progress: progress,\r\n                fileDone: (response, name, data) => {\r\n                    if (!UploadHelper.checkImageConstraints(response, this.options)) {\r\n                        return;\r\n                    }\r\n                    var newEntity = { OriginalName: name, Filename: response.TemporaryFile };\r\n                    self.entities.push(newEntity);\r\n                    self.populate();\r\n                    self.updateInterface();\r\n                }\r\n            });\r\n\r\n            this.fileSymbols = $('<ul/>').appendTo(this.element);\r\n            this.updateInterface();\r\n        }\r\n\r\n        protected addFileButtonText(): string {\r\n            return Q.text('Controls.ImageUpload.AddFileButton');\r\n        }\r\n\r\n        protected getToolButtons(): ToolButton[] {\r\n            return [{\r\n                title: this.addFileButtonText(),\r\n                cssClass: 'add-file-button',\r\n                onClick: function () {\r\n                }\r\n            }];\r\n        }\r\n\r\n        protected populate(): void {\r\n            Serenity.UploadHelper.populateFileSymbols(this.fileSymbols, this.entities,\r\n                true, this.options.urlPrefix);\r\n\r\n            this.fileSymbols.children().each((i, e) => {\r\n                var x = i;\r\n                $(\"<a class='delete'></a>\").appendTo($(e).children('.filename'))\r\n                    .click(ev => {\r\n                        ev.preventDefault();\r\n                        (ss as any).removeAt(this.entities, x);\r\n                        this.populate();\r\n                    });\r\n            });\r\n        }\r\n\r\n        protected updateInterface(): void {\r\n            var addButton = this.toolbar.findButton('add-file-button');\r\n            addButton.toggleClass('disabled', this.get_readOnly());\r\n            this.fileSymbols.find('a.delete').toggle(!this.get_readOnly());\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return this.uploadInput.attr('disabled') != null;\r\n        }\r\n\r\n        set_readOnly(value: boolean): void {\r\n            if (this.get_readOnly() !== value) {\r\n                if (value) {\r\n                    (this.uploadInput.attr('disabled', 'disabled') as any).fileupload('disable');\r\n                }\r\n                else {\r\n                    (this.uploadInput.removeAttr('disabled') as any).fileupload('enable');\r\n                }\r\n                this.updateInterface();\r\n            }\r\n        }\r\n\r\n        get_value(): UploadedFile[] {\r\n            return this.entities.map(function (x) {\r\n                return $.extend({}, x);\r\n            });\r\n        }\r\n\r\n        get value(): UploadedFile[] {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: UploadedFile[]) {\r\n            this.entities = (value || []).map(function (x) {\r\n                return $.extend({}, x);\r\n            });\r\n            this.populate();\r\n            this.updateInterface();\r\n        }\r\n\r\n        set value(v: UploadedFile[]) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        getEditValue(property: PropertyItem, target: any) {\r\n            if (this.jsonEncodeValue) {\r\n                target[property.name] = $.toJSON(this.get_value());\r\n            }\r\n            else {\r\n                target[property.name] = this.get_value();\r\n            }\r\n        }\r\n\r\n        setEditValue(source: any, property: PropertyItem) {\r\n            var val = source[property.name];\r\n            if ((ss as any).isInstanceOfType(val, String)) {\r\n                var json = Q.coalesce(Q.trimToNull(val), '[]');\r\n                if (Q.startsWith(json, '[') && Q.endsWith(json, ']')) {\r\n                    this.set_value($.parseJSON(json));\r\n                }\r\n                else {\r\n                    this.set_value([{\r\n                        Filename: json,\r\n                        OriginalName: 'UnknownFile'\r\n                    }]);\r\n                }\r\n            }\r\n            else {\r\n                this.set_value(val as any);\r\n            }\r\n        }\r\n\r\n        @Option()\r\n        public jsonEncodeValue: boolean;\r\n    }\r\n\r\n    // http://digitalbush.com/projects/masked-input-plugin/\r\n    @Editor('Masked', [IStringValue])\r\n    @Element(\"<input type=\\\"text\\\"/>\")\r\n    export class MaskedEditor extends Widget<MaskedEditorOptions> {\r\n\r\n        constructor(input: JQuery, opt?: MaskedEditorOptions) {\r\n            super(input, opt);\r\n\r\n            (input as any).mask(this.options.mask || '', {\r\n                placeholder: Q.coalesce(this.options.placeholder, '_')\r\n            });\r\n        }\r\n\r\n        public get value(): string {\r\n            this.element.triggerHandler(\"blur.mask\");\r\n            return this.element.val();\r\n        }\r\n\r\n        protected get_value(): string {\r\n            return this.value;\r\n        }\r\n\r\n        public set value(value: string) {\r\n            this.element.val(value);\r\n        }\r\n\r\n        protected set_value(value: string): void {\r\n            this.value = value;\r\n        }\r\n    }\r\n\r\n    export interface MaskedEditorOptions {\r\n        mask?: string;\r\n        placeholder?: string;\r\n    }\r\n\r\n    @Editor('String', [IStringValue])\r\n    @Element(\"<input type=\\\"text\\\"/>\")\r\n    export class StringEditor extends Widget<any> {\r\n\r\n        constructor(input: JQuery) {\r\n            super(input);\r\n        }\r\n\r\n        public get value(): string {\r\n            return this.element.val();\r\n        }\r\n\r\n        protected get_value(): string {\r\n            return this.value;\r\n        }\r\n\r\n        public set value(value: string) {\r\n            this.element.val(value);\r\n        }\r\n\r\n        protected set_value(value: string): void {\r\n            this.value = value;\r\n        }\r\n    }\r\n\r\n    @Editor('EmailAddress')\r\n    export class EmailAddressEditor extends Serenity.StringEditor {\r\n        constructor(input: JQuery) {\r\n            super(input);\r\n\r\n            input.attr('type', 'email')\r\n                .addClass('email');\r\n        }\r\n    }\r\n\r\n    @Editor('Password')\r\n    export class PasswordEditor extends StringEditor {\r\n        constructor(input: JQuery) {\r\n            super(input);\r\n\r\n            input.attr('type', 'password');\r\n        }\r\n    }\r\n\r\n    export interface RadioButtonEditorOptions {\r\n        enumKey?: string;\r\n        enumType?: any;\r\n        lookupKey?: string;\r\n    }\r\n\r\n    @Editor('RadioButton', [IStringValue, IReadOnly])\r\n    @Element('<div/>')\r\n    export class RadioButtonEditor extends Widget<RadioButtonEditorOptions>\r\n        implements IReadOnly {\r\n\r\n        constructor(input: JQuery, opt: RadioButtonEditorOptions) {\r\n            super(input, opt);\r\n\r\n            if (Q.isEmptyOrNull(this.options.enumKey) &&\r\n                this.options.enumType == null &&\r\n                Q.isEmptyOrNull(this.options.lookupKey)) {\r\n                return;\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(this.options.lookupKey)) {\r\n                var lookup = Q.getLookup(this.options.lookupKey);\r\n                for (var item of lookup.items) {\r\n                    var textValue = item[lookup.textField];\r\n                    var text = (textValue == null ? '' : textValue.toString());\r\n                    var idValue = item[lookup.idField];\r\n                    var id = (idValue == null ? '' : idValue.toString());\r\n                    this.addRadio(id, text);\r\n                }\r\n            }\r\n            else {\r\n                var enumType = this.options.enumType || Serenity.EnumTypeRegistry.get(this.options.enumKey);\r\n                var enumKey = this.options.enumKey;\r\n                if (enumKey == null && enumType != null) {\r\n                    var enumKeyAttr = (ss as any).getAttributes(enumType, Serenity.EnumKeyAttribute, false);\r\n                    if (enumKeyAttr.length > 0) {\r\n                        enumKey = enumKeyAttr[0].value;\r\n                    }\r\n                }\r\n\r\n                var values = (ss as any).Enum.getValues(enumType);\r\n                for (var x of values) {\r\n                    var name = (ss as any).Enum.toString(enumType, x);\r\n                    this.addRadio(x.toString(), Q.coalesce(Q.tryGetText(\r\n                        'Enums.' + enumKey + '.' + name), name));\r\n                }\r\n            }\r\n        }\r\n\r\n        protected addRadio(value: string, text: string) {\r\n            var label = $('<label/>').text(text);\r\n            $('<input type=\"radio\"/>').attr('name', this.uniqueName)\r\n                .attr('id', this.uniqueName + '_' + value)\r\n                .attr('value', value).prependTo(label);\r\n            label.appendTo(this.element);\r\n        }\r\n\r\n        get_value(): string {\r\n            return this.element.find('input:checked').first().val();\r\n        }\r\n\r\n        get value(): string {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: string): void {\r\n            if (value !== this.get_value()) {\r\n                var inputs = this.element.find('input');\r\n                var checks = inputs.filter(':checked');\r\n                if (checks.length > 0) {\r\n                    (checks[0] as HTMLInputElement).checked = false;\r\n                }\r\n                if (!Q.isEmptyOrNull(value)) {\r\n                    checks = inputs.filter('[value=' + value + ']');\r\n                    if (checks.length > 0) {\r\n                        (checks[0] as HTMLInputElement).checked = true;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        set value(v: string) {\r\n            this.set_value(v);\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return this.element.attr('disabled') != null;\r\n        }\r\n\r\n        set_readOnly(value: boolean): void {\r\n            if (this.get_readOnly() !== value) {\r\n                if (value) {\r\n                    this.element.attr('disabled', 'disabled')\r\n                        .find('input').attr('disabled', 'disabled');\r\n                }\r\n                else {\r\n                    this.element.removeAttr('disabled')\r\n                        .find('input').removeAttr('disabled');\r\n                }\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    export interface RecaptchaOptions {\r\n        siteKey?: string;\r\n        language?: string;\r\n    }\r\n\r\n    @Decorators.registerEditor('Serenity.Recaptcha', [IStringValue])\r\n    @Decorators.element(\"<div/>\")\r\n    export class Recaptcha extends Widget<RecaptchaOptions> implements IStringValue {\r\n        constructor(div: JQuery, opt: RecaptchaOptions) {\r\n            super(div, opt);\r\n\r\n            this.element.addClass('g-recaptcha').attr('data-sitekey', this.options.siteKey);\r\n            if (!!(window['grecaptcha'] == null && $('script#RecaptchaInclude').length === 0)) {\r\n                var src = 'https://www.google.com/recaptcha/api.js';\r\n                var lng = this.options.language;\r\n                if (lng == null) {\r\n                    lng = Q.coalesce($('html').attr('lang'), '');\r\n                }\r\n                src += '?hl=' + lng;\r\n                $('<script/>').attr('id', 'RecaptchaInclude').attr('src', src).appendTo(document.body);\r\n            }\r\n\r\n            var valInput = $('<input />').insertBefore(this.element)\r\n                .attr('id', this.uniqueName + '_validate').val('x');\r\n\r\n            var gro = {};\r\n            gro['visibility'] = 'hidden';\r\n            gro['width'] = '0px';\r\n            gro['height'] = '0px';\r\n            gro['padding'] = '0px';\r\n\r\n            var input = valInput.css(gro);\r\n            var self = this;\r\n\r\n            VX.addValidationRule(input, this.uniqueName, e => {\r\n                if (Q.isEmptyOrNull(this.get_value())) {\r\n                    return Q.text('Validation.Required');\r\n                }\r\n                return null;\r\n            });\r\n        }\r\n\r\n        get_value(): string {\r\n            return this.element.find('.g-recaptcha-response').val();\r\n        }\r\n\r\n        set_value(value: string): void {\r\n            // ignore\r\n        }\r\n    }\r\n\r\n    export interface TextAreaEditorOptions {\r\n        cols?: number;\r\n        rows?: number;\r\n    }\r\n\r\n    @Editor('TextArea', [IStringValue])\r\n    @Element(\"<textarea />\")\r\n    export class TextAreaEditor extends Widget<TextAreaEditorOptions> {\r\n\r\n        constructor(input: JQuery, opt?: TextAreaEditorOptions) {\r\n            super(input, opt);\r\n\r\n            if (this.options.cols !== 0) {\r\n                input.attr('cols', Q.coalesce(this.options.cols, 80));\r\n            }\r\n            if (this.options.rows !== 0) {\r\n                input.attr('rows', Q.coalesce(this.options.rows, 6));\r\n            }\r\n        }\r\n\r\n        public get value(): string {\r\n            return this.element.val();\r\n        }\r\n\r\n        protected get_value(): string {\r\n            return this.value;\r\n        }\r\n\r\n        public set value(value: string) {\r\n            this.element.val(value);\r\n        }\r\n\r\n        protected set_value(value: string): void {\r\n            this.value = value;\r\n        }\r\n    }\r\n\r\n    export interface TimeEditorOptions {\r\n        noEmptyOption?: boolean;\r\n        startHour?: any;\r\n        endHour?: any;\r\n        intervalMinutes?: any;\r\n    }\r\n\r\n    @Editor('Time', [IDoubleValue, IReadOnly])\r\n    @Element(\"<select />\")\r\n    export class TimeEditor extends Widget<TimeEditorOptions> {\r\n\r\n        private minutes: JQuery;\r\n\r\n        constructor(input: JQuery, opt?: TimeEditorOptions) {\r\n            super(input, opt);\r\n\r\n            input.addClass('editor s-TimeEditor hour');\r\n\r\n            if (!this.options.noEmptyOption) {\r\n                Q.addOption(input, '', '--');\r\n            }\r\n\r\n            for (var h = (this.options.startHour || 0); h <= (this.options.endHour || 23); h++) {\r\n                Q.addOption(input, h.toString(), ((h < 10) ? ('0' + h) : h.toString()));\r\n            }\r\n\r\n            this.minutes = $('<select/>').addClass('editor s-TimeEditor minute').insertAfter(input);\r\n            this.minutes.change(() => this.element.trigger(\"change\"));\r\n\r\n            for (var m = 0; m <= 59; m += (this.options.intervalMinutes || 5)) {\r\n                Q.addOption(this.minutes, m.toString(), ((m < 10) ? ('0' + m) : m.toString()));\r\n            }\r\n        }\r\n\r\n        public get value(): number {\r\n            var hour = Q.toId(this.element.val());\r\n            var minute = Q.toId(this.minutes.val());\r\n            if (hour == null || minute == null) {\r\n                return null;\r\n            }\r\n            return hour * 60 + minute;\r\n        }\r\n\r\n        protected get_value(): number {\r\n            return this.value;\r\n        }\r\n\r\n        public set value(value: number) {\r\n            if (!value) {\r\n                if (this.options.noEmptyOption) {\r\n                    this.element.val(this.options.startHour);\r\n                    this.minutes.val('0');\r\n                }\r\n                else {\r\n                    this.element.val('');\r\n                    this.minutes.val('0');\r\n                }\r\n            }\r\n            else {\r\n                this.element.val(Math.floor(value / 60).toString());\r\n                this.minutes.val(value % 60);\r\n            }\r\n        }\r\n\r\n        protected set_value(value: number): void {\r\n            this.value = value;\r\n        }\r\n\r\n        get_readOnly(): boolean {\r\n            return this.element.hasClass('readonly');\r\n        }\r\n\r\n        set_readOnly(value: boolean): void {\r\n\r\n            if (value !== this.get_readOnly()) {\r\n                if (value) {\r\n                    this.element.addClass('readonly').attr('readonly', 'readonly');\r\n                }\r\n                else {\r\n                    this.element.removeClass('readonly').removeAttr('readonly');\r\n                }\r\n                Serenity.EditorUtils.setReadonly(this.minutes, value);\r\n            }\r\n        }\r\n    }\r\n\r\n    @Editor('URL', [IStringValue])\r\n    export class URLEditor extends StringEditor {\r\n\r\n        constructor(input: JQuery) {\r\n            super(input);\r\n\r\n            input.addClass(\"url\").attr(\"title\", \"URL should be entered in format: 'http://www.site.com/page'.\");\r\n\r\n            input.on(\"blur.\" + this.uniqueName, e => {\r\n                var validator = input.closest(\"form\").data(\"validator\") as JQueryValidation.Validator;\r\n                if (validator == null)\r\n                    return;\r\n\r\n                if (!input.hasClass(\"error\"))\r\n                    return;\r\n\r\n                var value = Q.trimToNull(input.val());\r\n                if (!value)\r\n                    return;\r\n\r\n                value = \"http://\" + value;\r\n\r\n                if ($.validator.methods['url'].call(validator, value, input[0]) == true) {\r\n                    input.val(value);\r\n                    validator.element(input);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    @Editor('Select2Ajax', [IStringValue])\r\n    @Element('<input type=\"hidden\" />')\r\n    export class Select2AjaxEditor<TOptions, TItem> extends Widget<TOptions> implements IStringValue {\r\n        pageSize: number = 50;\r\n\r\n        constructor(hidden: JQuery, opt: TOptions) {\r\n            super(hidden, opt);\r\n\r\n            var emptyItemText = this.emptyItemText();\r\n            if (emptyItemText != null)\r\n                hidden.attr(\"placeholder\", emptyItemText);\r\n\r\n            hidden.select2(this.getSelect2Options());\r\n\r\n            hidden.attr(\"type\", \"text\"); // jquery validate to work\r\n\r\n            hidden.on(\"change.\" + this.uniqueName, (e, x) => {\r\n                if (WX.hasOriginalEvent(e) || !x) {\r\n                    if (ValidationHelper.getValidator(hidden) != null)\r\n                        hidden.valid();\r\n                }\r\n            });\r\n        }\r\n\r\n        protected emptyItemText(): string {\r\n            var txt = this.element.attr('placeholder');\r\n            if (txt == null) {\r\n                txt = Q.text('Controls.SelectEditor.EmptyItemText');\r\n            }\r\n            return txt;\r\n        }\r\n\r\n        protected getService(): string {\r\n            throw new (ss as any).NotImplementedException();\r\n        }\r\n\r\n        protected query(request: ListRequest, callback: (p1: ListResponse<any>) => void): void {\r\n            var options: Q.ServiceOptions<any> = {\r\n                blockUI: false,\r\n                service: this.getService() + '/List',\r\n                request: request,\r\n                onSuccess: function (response) {\r\n                    callback(response);\r\n                }\r\n            };\r\n            this.executeQuery(options);\r\n        }\r\n\r\n        protected executeQuery(options: ServiceOptions<ListResponse<any>>): void {\r\n            Q.serviceCall(options);\r\n        }\r\n\r\n        protected queryByKey(key: string, callback: (p1: any) => void): void {\r\n            var options: Q.ServiceOptions<any> = {\r\n                blockUI: false,\r\n                service: this.getService() + '/Retrieve',\r\n                request: { EntityId: key },\r\n                onSuccess: function (response) {\r\n                    callback(response.Entity);\r\n                }\r\n            };\r\n            this.executeQueryByKey(options);\r\n        }\r\n\r\n        protected executeQueryByKey(options: ServiceOptions<RetrieveResponse<any>>): void {\r\n            Q.serviceCall(options);\r\n        }\r\n\r\n        protected getItemKey(item: any): string {\r\n            return null;\r\n        }\r\n\r\n        protected getItemText(item: any): string {\r\n            return null;\r\n        }\r\n\r\n        protected getTypeDelay(): number {\r\n            return 500;\r\n        }\r\n\r\n        protected getSelect2Options(): Select2Options {\r\n            var emptyItemText = this.emptyItemText();\r\n            var queryTimeout = 0;\r\n            return {\r\n                minimumResultsForSearch: 10,\r\n                placeHolder: (!Q.isEmptyOrNull(emptyItemText) ? emptyItemText : null),\r\n                allowClear: Q.isValue(emptyItemText),\r\n                query: query => {\r\n                    var request = {\r\n                        ContainsText: Q.trimToNull(query.term), Skip: (query.page - 1) * this.pageSize, Take: this.pageSize + 1\r\n                    };\r\n\r\n                    if (queryTimeout !== 0) {\r\n                        window.clearTimeout(queryTimeout);\r\n                    }\r\n\r\n                    queryTimeout = window.setTimeout(() => {\r\n                        this.query(request, response => {\r\n                            query.callback({\r\n                                results: response.Entities.slice(0, this.pageSize).map(x => {\r\n                                    return { id: this.getItemKey(x), text: this.getItemText(x), source: x };\r\n                                }), more: response.Entities.length >= this.pageSize\r\n                            });\r\n                        });\r\n                    }, this.getTypeDelay());\r\n\r\n                },\r\n                initSelection: (element, callback) => {\r\n                    var val = element.val();\r\n                    if (Q.isEmptyOrNull(val)) {\r\n                        callback(null);\r\n                        return;\r\n                    }\r\n                    this.queryByKey(val, result => {\r\n                        callback((result == null ? null : {\r\n                            id: this.getItemKey(result),\r\n                            text: this.getItemText(result),\r\n                            source: result\r\n                        }));\r\n                    });\r\n                }\r\n            };\r\n        }\r\n\r\n        protected addInplaceCreate(title: string): void {\r\n            var self = this;\r\n            $('<a><b/></a>').addClass('inplace-button inplace-create')\r\n                .attr('title', title).insertAfter(this.element).click(function (e) {\r\n                    self.inplaceCreateClick(e);\r\n                });\r\n\r\n            this.get_select2Container().add(this.element)\r\n                .addClass('has-inplace-button');\r\n        }\r\n\r\n        protected inplaceCreateClick(e: any): void {\r\n        }\r\n\r\n        protected get_select2Container(): JQuery {\r\n            return this.element.prevAll('.select2-container');\r\n        }\r\n\r\n        get_value(): string {\r\n            return (ss as any).safeCast(this.element.select2('val'), String);\r\n        }\r\n\r\n        get value(): string {\r\n            return this.get_value();\r\n        }\r\n\r\n        set_value(value: string) {\r\n            if (value !== this.get_value()) {\r\n                this.element.select2('val', value)\r\n                    .triggerHandler('change', [true]);\r\n            }\r\n        }\r\n\r\n        set value(v: string) {\r\n            this.set_value(v);\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    export interface FilterOperator {\r\n        key?: string;\r\n        title?: string;\r\n        format?: string;\r\n    }\r\n\r\n    export namespace FilterOperators {\r\n\r\n        export const isTrue = 'true';\r\n        export const isFalse = 'false';\r\n        export const contains = 'contains';\r\n        export const startsWith = 'startswith';\r\n        export const EQ = 'eq';\r\n        export const NE = 'ne';\r\n        export const GT = 'gt';\r\n        export const GE = 'ge';\r\n        export const LT = 'lt';\r\n        export const LE = 'le';\r\n        export const BW = 'bw';\r\n        export const IN = 'in';\r\n        export const isNull = 'isnull';\r\n        export const isNotNull = 'isnotnull';\r\n\r\n        export const toCriteriaOperator: Q.Dictionary<string> = {\r\n            eq: '=',\r\n            ne: '!=',\r\n            gt: '>',\r\n            ge: '>=',\r\n            lt: '<',\r\n            le: '<='\r\n        };\r\n    }\r\n}","declare namespace Serenity {\r\n\r\n    interface FilterLine {\r\n        field?: string;\r\n        operator?: string;\r\n        isOr?: boolean;\r\n        leftParen?: boolean;\r\n        rightParen?: boolean;\r\n        validationError?: string;\r\n        criteria?: any[];\r\n        displayText?: string;\r\n        state?: any;\r\n    }\r\n\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerClass('FilterStore')\r\n    export class FilterStore {\r\n\r\n        constructor(fields: PropertyItem[]) {\r\n\r\n            this.items = [];\r\n\r\n            if (fields == null) {\r\n                throw new (ss as any).ArgumentNullException('source');\r\n            }\r\n\r\n            this.fields = fields.slice();\r\n\r\n            this.get_fields().sort(function (x, y) {\r\n                var titleX = Q.tryGetText(x.title);\r\n                if (titleX == null) {\r\n                    titleX = x.title;\r\n                    if (titleX == null)\r\n                        titleX = x.name;\r\n                }\r\n\r\n                var titleY = Q.tryGetText(y.title);\r\n                if (titleY == null) {\r\n                    titleY = y.title;\r\n                    if (titleY == null)\r\n                        titleY = y.name;\r\n                }\r\n\r\n                return Q.turkishLocaleCompare(titleX, titleY);\r\n            });\r\n\r\n            this.fieldByName = {};\r\n\r\n            for (var field of fields) {\r\n                this.get_fieldByName()[field.name] = field;\r\n            }\r\n        }\r\n\r\n        static getCriteriaFor(items: FilterLine[]): any[] {\r\n\r\n            if (items == null)\r\n                return [''];\r\n\r\n            var inParens = false;\r\n            var currentBlock = [''];\r\n            var isBlockOr = false;\r\n            var criteria = [''];\r\n\r\n            for (var i = 0; i < items.length; i++) {\r\n                var line = items[i];\r\n\r\n                if (line.leftParen || inParens && line.rightParen) {\r\n\r\n                    if (!Serenity.Criteria.isEmpty(currentBlock)) {\r\n\r\n                        if (inParens)\r\n                            currentBlock = Serenity.Criteria.paren(currentBlock);\r\n\r\n                        if (isBlockOr)\r\n                            criteria = Serenity.Criteria.join(criteria,\r\n                                'or', currentBlock);\r\n                        else\r\n                            criteria = Serenity.Criteria.join(criteria,\r\n                                'and', currentBlock);\r\n\r\n                        currentBlock = [''];\r\n                    }\r\n\r\n                    inParens = false;\r\n                }\r\n\r\n                if (line.leftParen) {\r\n                    isBlockOr = line.isOr;\r\n                    inParens = true;\r\n                }\r\n\r\n                if (line.isOr)\r\n                    currentBlock = Serenity.Criteria.join(currentBlock,\r\n                        'or', line.criteria);\r\n                else\r\n                    currentBlock = Serenity.Criteria.join(currentBlock,\r\n                        'and', line.criteria);\r\n            }\r\n\r\n            if (!Serenity.Criteria.isEmpty(currentBlock)) {\r\n                if (isBlockOr)\r\n                    criteria = Serenity.Criteria.join(criteria,\r\n                        'or', Serenity.Criteria.paren(currentBlock));\r\n                else\r\n                    criteria = Serenity.Criteria.join(criteria,\r\n                        'and', Serenity.Criteria.paren(currentBlock));\r\n            }\r\n\r\n            return criteria;\r\n        }\r\n\r\n        static getDisplayTextFor(items: FilterLine[]): string {\r\n\r\n            if (items == null)\r\n                return '';\r\n\r\n            var inParens = false;\r\n            var displayText = '';\r\n\r\n            for (var i = 0; i < items.length; i++) {\r\n                var line = items[i];\r\n\r\n                if (inParens && (line.rightParen || line.leftParen)) {\r\n                    displayText += ')';\r\n                    inParens = false;\r\n                }\r\n\r\n                if (displayText.length > 0) {\r\n                    displayText += ' ' + Q.text('Controls.FilterPanel.' +\r\n                        (line.isOr ? 'Or' : 'And')) + ' ';\r\n                }\r\n\r\n                if (line.leftParen) {\r\n                    displayText += '(';\r\n                    inParens = true;\r\n                }\r\n\r\n                displayText += line.displayText;\r\n            }\r\n\r\n            if (inParens) {\r\n                displayText += ')';\r\n            }\r\n\r\n            return displayText;\r\n        }\r\n\r\n        private changed: any;\r\n        private displayText: string;\r\n        private fields: PropertyItem[];\r\n        private fieldByName: Q.Dictionary<PropertyItem>\r\n        private items: FilterLine[];\r\n\r\n        get_fields(): PropertyItem[] {\r\n            return this.fields;\r\n        }\r\n\r\n        get_fieldByName(): Q.Dictionary<PropertyItem> {\r\n            return this.fieldByName;\r\n        }\r\n\r\n        get_items(): FilterLine[] {\r\n            return this.items;\r\n        }\r\n\r\n        raiseChanged(): void {\r\n            this.displayText = null;\r\n            this.changed && this.changed(this, (ss as any).EventArgs.Empty);\r\n        }\r\n\r\n        add_changed(value: (e: JQueryEventObject, a: any) => void): void {\r\n            this.changed = (ss as any).delegateCombine(this.changed, value);\r\n        }\r\n\r\n        remove_changed(value: (e: JQueryEventObject, a: any) => void): void {\r\n            this.changed = (ss as any).delegateRemove(this.changed, value);\r\n        }\r\n\r\n        get_activeCriteria(): any[] {\r\n            return FilterStore.getCriteriaFor(this.items);\r\n        }\r\n\r\n        get_displayText(): string {\r\n            if (this.displayText == null)\r\n                this.displayText = FilterStore.getDisplayTextFor(this.items);\r\n            \r\n            return this.displayText;\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n    export interface IFiltering {\r\n        createEditor(): void;\r\n        getCriteria(): CriteriaWithText;\r\n        getOperators(): FilterOperator[];\r\n        loadState(state: any): void;\r\n        saveState(): any;\r\n        get_field(): PropertyItem;\r\n        set_field(value: PropertyItem): void;\r\n        get_container(): JQuery;\r\n        set_container(value: JQuery): void;\r\n        get_operator(): FilterOperator;\r\n        set_operator(value: FilterOperator): void;\r\n    }\r\n\r\n    @Decorators.registerInterface('Serenity.IFiltering')\r\n    export class IFiltering {\r\n    }\r\n\r\n    export interface CriteriaWithText {\r\n        criteria?: any[];\r\n        displayText?: string;\r\n    }\r\n\r\n    export interface IQuickFiltering {\r\n        initQuickFilter(filter: QuickFilter<Widget<any>, any>): void;\r\n    }\r\n\r\n    @Decorators.registerInterface('Serenity.IQuickFiltering')\r\n    export class IQuickFiltering {\r\n    }\r\n\r\n    import Operators = FilterOperators;\r\n    import Option = Decorators.option\r\n\r\n    @Serenity.Decorators.registerClass('Serenity.BaseFiltering', [IFiltering, IQuickFiltering])\r\n    export abstract class BaseFiltering implements IFiltering, IQuickFiltering {\r\n\r\n        private field: PropertyItem;\r\n\r\n        public get_field() {\r\n            return this.field;\r\n        }\r\n\r\n        set_field(value: PropertyItem) {\r\n            this.field = value;\r\n        }\r\n\r\n        private container: JQuery;\r\n\r\n        get_container() {\r\n            return this.container;\r\n        }\r\n\r\n        set_container(value: JQuery) {\r\n            this.container = value;\r\n        }\r\n\r\n        private operator: FilterOperator;\r\n\r\n        get_operator() {\r\n            return this.operator;\r\n        }\r\n\r\n        set_operator(value: FilterOperator) {\r\n            this.operator = value;\r\n        }\r\n\r\n        abstract getOperators(): FilterOperator[];\r\n\r\n        protected appendNullableOperators(list: FilterOperator[]) {\r\n            if (!this.isNullable()) {\r\n                return list;\r\n            }\r\n            list.push({ key: Serenity.FilterOperators.isNotNull });\r\n            list.push({ key: Serenity.FilterOperators.isNull });\r\n            return list;\r\n        }\r\n\r\n        protected appendComparisonOperators(list: FilterOperator[]) {\r\n            list.push({ key: Serenity.FilterOperators.EQ });\r\n            list.push({ key: Serenity.FilterOperators.NE });\r\n            list.push({ key: Serenity.FilterOperators.LT });\r\n            list.push({ key: Serenity.FilterOperators.LE });\r\n            list.push({ key: Serenity.FilterOperators.GT });\r\n            list.push({ key: Serenity.FilterOperators.GE });\r\n            return list;\r\n        }\r\n\r\n        protected isNullable() {\r\n            return this.get_field().required !== true;\r\n        }\r\n\r\n        public createEditor() {\r\n            switch (this.get_operator().key) {\r\n                case 'true':\r\n                case 'false':\r\n                case 'isnull':\r\n                case 'isnotnull': {\r\n                    return;\r\n                }\r\n                case 'contains':\r\n                case 'startswith':\r\n                case 'eq':\r\n                case 'ne':\r\n                case 'lt':\r\n                case 'le':\r\n                case 'gt':\r\n                case 'ge': {\r\n                    this.get_container().html('<input type=\"text\"/>');\r\n                    return;\r\n                }\r\n            }\r\n\r\n            throw new ss.Exception(Q.format(\"Filtering '{0}' has no editor for '{1}' operator\",\r\n                (ss as any).getTypeName((ss as any).getInstanceType(this)), this.get_operator().key));\r\n        }\r\n\r\n        protected operatorFormat(op: FilterOperator) {\r\n            return Q.coalesce(op.format, Q.coalesce(Q.tryGetText(\r\n                'Controls.FilterPanel.OperatorFormats.' + op.key), op.key));\r\n        }\r\n\r\n        protected getTitle(field: PropertyItem) {\r\n            return Q.coalesce(Q.tryGetText(field.title), Q.coalesce(field.title, field.name));\r\n        }\r\n\r\n        protected displayText(op: FilterOperator, values?: any[]) {\r\n            if (!values || values.length === 0) {\r\n                return Q.format(this.operatorFormat(op), this.getTitle(this.field));\r\n            }\r\n            else if (values.length === 1) {\r\n                return Q.format(this.operatorFormat(op), this.getTitle(this.field), values[0]);\r\n            }\r\n            else {\r\n                return Q.format(this.operatorFormat(op), this.getTitle(this.field), values[0], values[1]);\r\n            }\r\n        }\r\n\r\n        protected getCriteriaField() {\r\n            return this.field.name;\r\n        }\r\n\r\n        public getCriteria(): CriteriaWithText {\r\n            var result: CriteriaWithText = {};\r\n            var text: string;\r\n            switch (this.get_operator().key) {\r\n                case 'true': {\r\n                    result.displayText = this.displayText(this.get_operator(), []);\r\n                    result.criteria = [[this.getCriteriaField()], '=', true];\r\n                    return result;\r\n                }\r\n\r\n                case 'false': {\r\n                    result.displayText = this.displayText(this.get_operator(), []);\r\n                    result.criteria = [[this.getCriteriaField()], '=', false];\r\n                    return result;\r\n                }\r\n\r\n                case 'isnull': {\r\n                    result.displayText = this.displayText(this.get_operator(), []);\r\n                    result.criteria = ['is null', [this.getCriteriaField()]];\r\n                    return result;\r\n                }\r\n\r\n                case 'isnotnull': {\r\n                    result.displayText = this.displayText(this.get_operator(), []);\r\n                    result.criteria = ['is not null', [this.getCriteriaField()]];\r\n                    return result;\r\n                }\r\n\r\n                case 'contains': {\r\n                    text = this.getEditorText();\r\n                    result.displayText = this.displayText(this.get_operator(), [text]);\r\n                    result.criteria = [[this.getCriteriaField()], 'like', '%' + text + '%'];\r\n                    return result;\r\n                }\r\n\r\n                case 'startswith': {\r\n                    text = this.getEditorText();\r\n                    result.displayText = this.displayText(this.get_operator(), [text]);\r\n                    result.criteria = [[this.getCriteriaField()], 'like', text + '%'];\r\n                    return result;\r\n                }\r\n\r\n                case 'eq':\r\n                case 'ne':\r\n                case 'lt':\r\n                case 'le':\r\n                case 'gt':\r\n                case 'ge': {\r\n                    text = this.getEditorText();\r\n                    result.displayText = this.displayText(this.get_operator(), [text]);\r\n                    result.criteria = [[this.getCriteriaField()], Serenity.FilterOperators.toCriteriaOperator[\r\n                        this.get_operator().key], this.getEditorValue()];\r\n                    return result;\r\n                }\r\n            }\r\n\r\n            throw new ss.Exception(Q.format(\"Filtering '{0}' has no handler for '{1}' operator\",\r\n                (ss as any).getTypeName((ss as any).getInstanceType(this)), this.get_operator().key));\r\n        }\r\n\r\n        loadState(state: any) {\r\n            var input = this.get_container().find(':input').first();\r\n            input.val(state);\r\n        }\r\n\r\n        saveState() {\r\n            switch (this.get_operator().key) {\r\n                case 'contains':\r\n                case 'startswith':\r\n                case 'eq':\r\n                case 'ne':\r\n                case 'lt':\r\n                case 'le':\r\n                case 'gt':\r\n                case 'ge': {\r\n                    var input = this.get_container().find(':input').first();\r\n                    return input.val();\r\n                }\r\n            }\r\n            return null;\r\n        }\r\n\r\n        protected argumentNull() {\r\n            return new (ss as any).ArgumentNullException('value', Q.text('Controls.FilterPanel.ValueRequired'));\r\n        }\r\n\r\n        validateEditorValue(value: string) {\r\n            if (value.length === 0) {\r\n                throw this.argumentNull();\r\n            }\r\n            return value;\r\n        }\r\n\r\n        getEditorValue() {\r\n            var input = this.get_container().find(':input').not('.select2-focusser').first();\r\n            if (input.length !== 1) {\r\n                throw new ss.Exception(Q.format(\"Couldn't find input in filter container for {0}\",\r\n                    Q.coalesce(this.field.title, this.field.name)));\r\n            }\r\n\r\n            var value;\r\n            if (input.data('select2') != null) {\r\n                value = input.select2('val');\r\n            }\r\n            else {\r\n                value = input.val();\r\n            }\r\n\r\n            value = Q.coalesce(value, '').trim();\r\n\r\n            return this.validateEditorValue(value);\r\n        }\r\n\r\n        getEditorText() {\r\n            var input = this.get_container().find(':input').not('.select2-focusser').not('.select2-input').first();\r\n            if (input.length === 0) {\r\n                return this.get_container().text().trim();\r\n            }\r\n            var value;\r\n            if (input.data('select2') != null) {\r\n                value = Q.coalesce(input.select2('data'), {}).text;\r\n            }\r\n            else {\r\n                value = input.val();\r\n            }\r\n            return value;\r\n        }\r\n\r\n        initQuickFilter(filter: QuickFilter<Widget<any>, any>) {\r\n            filter.field = this.getCriteriaField();\r\n            filter.type = Serenity.StringEditor;\r\n            filter.title = this.getTitle(this.field);\r\n            filter.options = Q.deepClone({}, this.get_field().quickFilterParams);\r\n        }\r\n    }\r\n\r\n    function Filtering(name: string) {\r\n        return Decorators.registerClass('Serenity.' + name + 'Filtering')\r\n    }\r\n\r\n    @Filtering('BaseEditor')\r\n    export abstract class BaseEditorFiltering<TEditor extends Widget<any>> extends BaseFiltering {\r\n        constructor(public editorType: any) {\r\n            super();\r\n        }\r\n\r\n        protected useEditor() {\r\n            switch (this.get_operator().key) {\r\n                case 'eq':\r\n                case 'ne':\r\n                case 'lt':\r\n                case 'le':\r\n                case 'gt':\r\n                case 'ge':\r\n                    return true;\r\n            }\r\n            return false;\r\n        }\r\n\r\n        protected editor: TEditor;\r\n\r\n        createEditor() {\r\n            if (this.useEditor()) {\r\n                this.editor = Serenity.Widget.create({\r\n                    type: this.editorType,\r\n                    container: this.get_container(),\r\n                    options: this.getEditorOptions(),\r\n                    init: null\r\n                }) as any;\r\n                return;\r\n            }\r\n            this.editor = null;\r\n            super.createEditor();\r\n        }\r\n\r\n        protected useIdField() {\r\n            return false;\r\n        }\r\n\r\n        getCriteriaField() {\r\n            if (this.useEditor() &&\r\n                this.useIdField() &&\r\n                !Q.isEmptyOrNull(this.get_field().filteringIdField)) {\r\n                return this.get_field().filteringIdField;\r\n            }\r\n\r\n            return super.getCriteriaField();\r\n        }\r\n\r\n        getEditorOptions() {\r\n            var opt = Q.deepClone({}, this.get_field().editorParams);\r\n            delete opt['cascadeFrom'];\r\n            // currently can't support cascadeFrom in filtering\r\n            return Q.deepClone(opt, this.get_field().filteringParams);\r\n        }\r\n\r\n        loadState(state: any) {\r\n            if (this.useEditor()) {\r\n                if (state == null) {\r\n                    return;\r\n                }\r\n\r\n                Serenity.EditorUtils.setValue(this.editor, state);\r\n                return;\r\n            }\r\n\r\n            super.loadState(state);\r\n        }\r\n\r\n        saveState() {\r\n            if (this.useEditor()) {\r\n                return Serenity.EditorUtils.getValue(this.editor);\r\n            }\r\n\r\n            return super.saveState();\r\n        }\r\n\r\n        getEditorValue() {\r\n            if (this.useEditor()) {\r\n                var value = Serenity.EditorUtils.getValue(this.editor);\r\n\r\n                if (value == null || (typeof value == \"string\" && value.trim().length === 0))\r\n                    throw this.argumentNull();\r\n\r\n                return value;\r\n            }\r\n\r\n            return super.getEditorValue();\r\n        }\r\n\r\n        initQuickFilter(filter: QuickFilter<Widget<any>, any>) {\r\n            super.initQuickFilter(filter);\r\n\r\n            filter.type = this.editorType;\r\n            filter.options = Q.deepClone({},\r\n                this.getEditorOptions(),\r\n                this.get_field().quickFilterParams);\r\n        }\r\n    }\r\n\r\n    @Filtering('Date')\r\n    export class DateFiltering extends BaseEditorFiltering<DateEditor> {\r\n\r\n        constructor() {\r\n            super(DateEditor)\r\n        }\r\n\r\n        getOperators(): FilterOperator[] {\r\n            return this.appendNullableOperators(this.appendComparisonOperators([]));\r\n        }\r\n    }\r\n\r\n    @Filtering('Boolean')\r\n    export class BooleanFiltering extends BaseFiltering {\r\n        getOperators() {\r\n            return this.appendNullableOperators([\r\n                { key: Serenity.FilterOperators.isTrue },\r\n                { key: Serenity.FilterOperators.isFalse }\r\n            ]);\r\n        }\r\n    }\r\n\r\n    @Filtering('DateTime')\r\n    export class DateTimeFiltering extends BaseEditorFiltering<DateEditor> {\r\n\r\n        constructor() {\r\n            super(DateTimeEditor)\r\n        }\r\n\r\n        getOperators(): FilterOperator[] {\r\n            return this.appendNullableOperators(\r\n                this.appendComparisonOperators([]));\r\n        }\r\n\r\n        getCriteria() {\r\n            var result: CriteriaWithText = {};\r\n\r\n            switch (this.get_operator().key) {\r\n                case 'eq':\r\n                case 'ne':\r\n                case 'lt':\r\n                case 'le':\r\n                case 'gt':\r\n                case 'ge': {\r\n                    {\r\n                        var text = this.getEditorText();\r\n                        result.displayText = this.displayText(this.get_operator(), [text]);\r\n                        var date = Q.parseISODateTime(this.getEditorValue());\r\n                        date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n                        var next = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);\r\n                        var criteria = [this.getCriteriaField()];\r\n                        var dateValue = Q.formatDate(date, 'yyyy-MM-dd');\r\n                        var nextValue = Q.formatDate(next, 'yyyy-MM-dd');\r\n                        switch (this.get_operator().key) {\r\n                            case 'eq': {\r\n                                result.criteria = Criteria.join([criteria, '>=', dateValue], 'and', [criteria, '<', nextValue]);\r\n                                return result;\r\n                            }\r\n                            case 'ne': {\r\n                                result.criteria = Criteria.paren(Criteria.join([criteria, '<', dateValue], 'or', [criteria, '>', nextValue]));\r\n                                return result;\r\n                            }\r\n                            case 'lt': {\r\n                                result.criteria = [criteria, '<', dateValue];\r\n                                return result;\r\n                            }\r\n                            case 'le': {\r\n                                result.criteria = [criteria, '<', nextValue];\r\n                                return result;\r\n                            }\r\n                            case 'gt': {\r\n                                result.criteria = [criteria, '>=', nextValue];\r\n                                return result;\r\n                            }\r\n                            case 'ge': {\r\n                                result.criteria = [criteria, '>=', dateValue];\r\n                                return result;\r\n                            }\r\n                        }\r\n                    }\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return super.getCriteria();\r\n        }\r\n    }\r\n\r\n    @Filtering('Decimal')\r\n    export class DecimalFiltering extends BaseEditorFiltering<DecimalEditor> {\r\n        constructor() {\r\n            super(DecimalEditor);\r\n        }\r\n\r\n        getOperators(): Serenity.FilterOperator[] {\r\n            return this.appendNullableOperators(\r\n                this.appendComparisonOperators([]));\r\n        }\r\n    }\r\n\r\n    @Filtering('Editor')\r\n    export class EditorFiltering extends BaseEditorFiltering<Serenity.Widget<any>> {\r\n\r\n        constructor() {\r\n            super(Widget)\r\n        }\r\n\r\n        @Option()\r\n        editorType: string;\r\n\r\n        @Option()\r\n        useRelative: boolean;\r\n\r\n        @Option()\r\n        useLike: boolean;\r\n\r\n        getOperators(): Serenity.FilterOperator[] {\r\n            var list = [];\r\n\r\n            list.push({ key: Operators.EQ });\r\n            list.push({ key: Operators.NE });\r\n\r\n            if (this.useRelative) {\r\n                list.push({ key: Operators.LT });\r\n                list.push({ key: Operators.LE });\r\n                list.push({ key: Operators.GT });\r\n                list.push({ key: Operators.GE });\r\n            }\r\n\r\n            if (this.useLike) {\r\n                list.push({ key: Operators.contains });\r\n                list.push({ key: Operators.startsWith });\r\n            }\r\n\r\n            this.appendNullableOperators(list);\r\n\r\n            return list;\r\n        }\r\n\r\n        protected useEditor() {\r\n            var op = this.get_operator().key;\r\n\r\n            return op === Operators.EQ ||\r\n                op === Operators.NE ||\r\n                (this.useRelative && (\r\n                    op === Operators.LT ||\r\n                    op === Operators.LE ||\r\n                    op === Operators.GT ||\r\n                    op === Operators.GE));\r\n        }\r\n\r\n        getEditorOptions() {\r\n            var opt = super.getEditorOptions();\r\n            if (this.useEditor() && this.editorType === Q.coalesce(this.get_field().editorType, 'String')) {\r\n                opt = $.extend(opt, this.get_field().editorParams);\r\n            }\r\n\r\n            return opt;\r\n        }\r\n\r\n        createEditor() {\r\n            if (this.useEditor()) {\r\n                var editorType = Serenity.EditorTypeRegistry.get(this.editorType);\r\n\r\n                this.editor = Serenity.Widget.create({\r\n                    type: editorType ,\r\n                    element: e => e.appendTo(this.get_container()),\r\n                    options: this.getEditorOptions()\r\n                });\r\n\r\n                return;\r\n            }\r\n\r\n            super.createEditor();\r\n        }\r\n\r\n        protected useIdField(): boolean {\r\n            return this.useEditor();\r\n        }\r\n\r\n        initQuickFilter(filter: QuickFilter<Widget<any>, any>) {\r\n            super.initQuickFilter(filter);\r\n\r\n            filter.type = Serenity.EditorTypeRegistry.get(this.editorType);\r\n        }\r\n    }\r\n\r\n    @Filtering('Enum')\r\n    export class EnumFiltering extends BaseEditorFiltering<EnumEditor> {\r\n        constructor() {\r\n            super(EnumEditor);\r\n        }\r\n\r\n        getOperators() {\r\n            var op = [{ key: Operators.EQ }, { key: Operators.NE }];\r\n            return this.appendNullableOperators(op);\r\n        }\r\n    }\r\n\r\n    @Filtering('Integer')\r\n    export class IntegerFiltering extends BaseEditorFiltering<IntegerEditor> {\r\n        constructor() {\r\n            super(IntegerEditor);\r\n        }\r\n\r\n        getOperators(): FilterOperator[] {\r\n            return this.appendNullableOperators(this.appendComparisonOperators([]));\r\n        }\r\n    }\r\n\r\n    @Filtering('Lookup')\r\n    export class LookupFiltering extends BaseEditorFiltering<LookupEditor> {\r\n\r\n        constructor() {\r\n            super(LookupEditor);\r\n        }\r\n\r\n        getOperators(): FilterOperator[] {\r\n            var ops = [{ key: Operators.EQ }, { key: Operators.NE }, { key: Operators.contains }, { key: Operators.startsWith }]\r\n            return this.appendNullableOperators(ops);\r\n        }\r\n\r\n        protected useEditor(): boolean {\r\n            var op = this.get_operator().key;\r\n            return op == Operators.EQ || op == Operators.NE;\r\n        }\r\n\r\n        protected useIdField(): boolean {\r\n            return this.useEditor();\r\n        }\r\n\r\n        getEditorText(): string {\r\n            if (this.useEditor()) {\r\n                return this.editor.text;\r\n            }\r\n\r\n            return super.getEditorText();\r\n        }\r\n    }\r\n\r\n    @Filtering('String')\r\n    export class StringFiltering extends BaseFiltering {\r\n\r\n        getOperators(): Serenity.FilterOperator[] {\r\n            var ops = [\r\n                { key: Operators.contains }, \r\n                { key: Operators.startsWith }, \r\n                { key: Operators.EQ },\r\n                { key: Operators.NE }\r\n            ];\r\n            return this.appendNullableOperators(ops);\r\n        }\r\n\r\n        validateEditorValue(value: string) {\r\n            if (value.length === 0) {\r\n                return value;\r\n            }\r\n\r\n            return super.validateEditorValue(value);\r\n        }\r\n    }\r\n\r\n    export namespace FilteringTypeRegistry {\r\n\r\n        let knownTypes: Q.Dictionary<Function>;\r\n\r\n\r\n        function initialize(): void {\r\n\r\n            if (knownTypes != null)\r\n                return;\r\n            \r\n            knownTypes = {};\r\n\r\n            for (var assembly of (ss as any).getAssemblies()) {\r\n                for (var type of (ss as any).getAssemblyTypes(assembly)) {\r\n                    if (!(ss as any).isAssignableFrom(Serenity.IFiltering, type))\r\n                        continue;\r\n                    \r\n                    if ((ss as any).isGenericTypeDefinition(type))\r\n                        continue;\r\n\r\n                    var fullName = (ss as any).getTypeFullName(type).toLowerCase();\r\n\r\n                    knownTypes[fullName] = type;\r\n\r\n                    for (var k of Q.Config.rootNamespaces) {\r\n                        if (Q.startsWith(fullName, k.toLowerCase() + '.')) {\r\n                            var kx = fullName.substr(k.length + 1).toLowerCase();\r\n\r\n                            if (knownTypes[kx] == null) {\r\n                                knownTypes[kx] = type;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            setTypeKeysWithoutFilterHandlerSuffix();\r\n        }\r\n\r\n        function setTypeKeysWithoutFilterHandlerSuffix() {\r\n            var suffix = 'filtering';\r\n            \r\n            for (var k of Object.keys(knownTypes)) {\r\n                if (!Q.endsWith(k, suffix))\r\n                    continue;\r\n                \r\n                var p = k.substr(0, k.length - suffix.length);\r\n                if (Q.isEmptyOrNull(p))\r\n                    continue;\r\n\r\n                if (knownTypes[p] != null)\r\n                    continue;\r\n                \r\n                knownTypes[p] = knownTypes[k];\r\n            }\r\n        }\r\n\r\n        function reset(): void {\r\n            knownTypes = null;\r\n        }\r\n\r\n        export function get(key: string): Function {\r\n\r\n            if (Q.isEmptyOrNull(key))\r\n                throw new (ss as any).ArgumentNullException('key');\r\n\r\n            initialize();\r\n            var formatterType = knownTypes[key.toLowerCase()];\r\n            if (formatterType == null)\r\n                throw new ss.Exception(Q.format(\r\n                    \"Can't find {0} filter handler type!\", key));\r\n\r\n            return formatterType;\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerClass('Serenity.FilterWidgetBase')\r\n    export class FilterWidgetBase<TOptions> extends TemplatedWidget<TOptions> {\r\n        private store: Serenity.FilterStore;\r\n\r\n        private onFilterStoreChanged: () => void;\r\n\r\n        constructor(div: JQuery, opt?: TOptions) {\r\n            super(div, opt);\r\n\r\n            this.store = new FilterStore([]);\r\n            this.onFilterStoreChanged = () => this.filterStoreChanged();\r\n            this.store.add_changed(this.onFilterStoreChanged);\r\n        }\r\n\r\n        destroy() {\r\n\r\n            if (this.store) {\r\n                this.store.remove_changed(this.onFilterStoreChanged);\r\n                this.onFilterStoreChanged = null;\r\n                this.store = null;\r\n            }\r\n\r\n            super.destroy();\r\n        }\r\n\r\n        protected filterStoreChanged() {\r\n        }\r\n\r\n        get_store(): FilterStore {\r\n            return this.store;\r\n        }\r\n\r\n        set_store(value: FilterStore): void {\r\n            if (this.store !== value) {\r\n                if (this.store != null) \r\n                    this.store.remove_changed(this.onFilterStoreChanged);\r\n\r\n                this.store = value || new FilterStore([]);\r\n                this.store.add_changed(this.onFilterStoreChanged);\r\n                this.filterStoreChanged();\r\n            }\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerClass('Serenity.FilterDisplayBar')\r\n    export class FilterDisplayBar extends FilterWidgetBase<any> {\r\n\r\n        constructor(div: JQuery) {\r\n            super(div);\r\n\r\n            this.element.find('.cap').text(\r\n                Q.text('Controls.FilterPanel.EffectiveFilter'));\r\n\r\n            this.element.find('.edit').text(\r\n                Q.text('Controls.FilterPanel.EditFilter'));\r\n\r\n            this.element.find('.reset').attr('title',\r\n                Q.text('Controls.FilterPanel.ResetFilterHint'));\r\n\r\n            var openFilterDialog = (e: JQueryEventObject) => {\r\n                e.preventDefault();\r\n                var dialog = new FilterDialog();\r\n                dialog.get_filterPanel().set_store(this.get_store());\r\n                dialog.dialogOpen(null);\r\n            };\r\n\r\n            this.element.find('.edit').click(openFilterDialog);\r\n            this.element.find('.txt').click(openFilterDialog);\r\n\r\n            this.element.find('.reset').click(e1 => {\r\n                e1.preventDefault();\r\n                (ss as any).clear(this.get_store().get_items());\r\n                this.get_store().raiseChanged();\r\n            });\r\n        }\r\n\r\n        protected filterStoreChanged() {\r\n            super.filterStoreChanged();\r\n\r\n            var displayText = Q.trimToNull(this.get_store().get_displayText());\r\n\r\n            this.element.find('.current').toggle(displayText != null);\r\n            this.element.find('.reset').toggle(displayText != null);\r\n\r\n            if (displayText == null)\r\n                displayText = Q.text('Controls.FilterPanel.EffectiveEmpty');\r\n\r\n            this.element.find('.txt').text('[' + displayText + ']');\r\n        }\r\n\r\n        protected getTemplate() {\r\n            return \"<div><a class='reset'></a><a class='edit'></a>\" + \r\n                \"<div class='current'><span class='cap'></span>\" +\r\n                \"<a class='txt'></a></div></div>\";\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerClass('Serenity.FilterFieldSelect')\r\n    class FilterFieldSelect extends Select2Editor<any, PropertyItem> {\r\n        constructor(hidden: JQuery, fields: PropertyItem[]) {\r\n            super(hidden);\r\n\r\n            for (var field of fields) {\r\n                this.addOption(field.name, Q.coalesce(Q.tryGetText(field.title),\r\n                    Q.coalesce(field.title, field.name)), field);\r\n            }\r\n        }\r\n\r\n        emptyItemText() {\r\n            if (Q.isEmptyOrNull(this.value)) {\r\n                return Q.text('Controls.FilterPanel.SelectField');\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        getSelect2Options() {\r\n            var opt = super.getSelect2Options();\r\n            opt.allowClear = false;\r\n            return opt;\r\n        }\r\n    }\r\n\r\n    @Decorators.registerClass('Serenity.FilterOperatorSelect')\r\n    class FilterOperatorSelect extends Select2Editor<any, FilterOperator> {\r\n        constructor(hidden: JQuery, source: FilterOperator[]) {\r\n            super(hidden);\r\n\r\n            for (var op of source) {\r\n                var title = Q.coalesce(op.title, Q.coalesce(\r\n                    Q.tryGetText(\"Controls.FilterPanel.OperatorNames.\" + op.key), op.key));\r\n                this.addOption(op.key, title, op);\r\n            }\r\n\r\n            if (source.length && source[0])\r\n                this.value = source[0].key;\r\n        }\r\n\r\n        emptyItemText(): string {\r\n            return null;\r\n        }\r\n\r\n        getSelect2Options() {\r\n            var opt = super.getSelect2Options();\r\n            opt.allowClear = false;\r\n            return opt;\r\n        }\r\n    }\r\n\r\n    export class FilterPanel extends FilterWidgetBase<any> {\r\n\r\n        private rowsDiv: JQuery;\r\n\r\n        constructor(div: JQuery) {\r\n            super(div);\r\n\r\n            this.element.addClass('s-FilterPanel');\r\n            this.rowsDiv = this.byId('Rows');\r\n            this.initButtons();\r\n            this.updateButtons();\r\n        }\r\n\r\n        private showInitialLine: boolean;\r\n\r\n        get_showInitialLine() {\r\n            return this.showInitialLine;\r\n        }\r\n\r\n        set_showInitialLine(value: boolean) {\r\n            if (this.showInitialLine !== value) {\r\n                this.showInitialLine = value;\r\n                if (this.showInitialLine && this.rowsDiv.children().length === 0) {\r\n                    this.addEmptyRow(false);\r\n                }\r\n            }\r\n        }\r\n\r\n        protected filterStoreChanged() {\r\n            super.filterStoreChanged();\r\n            this.updateRowsFromStore();\r\n        }\r\n\r\n        updateRowsFromStore() {\r\n            this.rowsDiv.empty();\r\n\r\n            var items = this.get_store().get_items();\r\n            for (var item of items) {\r\n                this.addEmptyRow(false);\r\n\r\n                var row = this.rowsDiv.children().last();\r\n\r\n                var divl = row.children('div.l');\r\n                divl.children('.leftparen').toggleClass('active', !!item.leftParen);\r\n                divl.children('.rightparen').toggleClass('active', !!item.rightParen);\r\n                divl.children('.andor').toggleClass('or', !!item.isOr)\r\n                    .text(Q.text((!!item.isOr ? 'Controls.FilterPanel.Or' :\r\n                        'Controls.FilterPanel.And')));\r\n\r\n                var fieldSelect = row.children('div.f')\r\n                    .find('input.field-select').getWidget(FilterFieldSelect);\r\n\r\n                fieldSelect.value = item.field;\r\n                this.rowFieldChange(row);\r\n                var operatorSelect = row.children('div.o')\r\n                    .find('input.op-select').getWidget(FilterOperatorSelect);\r\n\r\n                operatorSelect.set_value(item.operator);\r\n                this.rowOperatorChange(row);\r\n\r\n                var filtering = this.getFilteringFor(row);\r\n                if (filtering != null) {\r\n                    filtering.set_operator({ key: item.operator });\r\n                    filtering.loadState(item.state);\r\n                }\r\n            }\r\n\r\n            if (this.get_showInitialLine() && this.rowsDiv.children().length === 0) {\r\n                this.addEmptyRow(false);\r\n            }\r\n\r\n            this.updateParens();\r\n        }\r\n\r\n        private showSearchButton: boolean;\r\n\r\n        get_showSearchButton(): boolean {\r\n            return this.showSearchButton;\r\n        }\r\n\r\n        set_showSearchButton(value: boolean): void {\r\n            if (this.showSearchButton !== value) {\r\n                this.showSearchButton = value;\r\n                this.updateButtons();\r\n            }\r\n        }\r\n\r\n        private updateStoreOnReset: boolean;\r\n\r\n        get_updateStoreOnReset() {\r\n            return this.updateStoreOnReset;\r\n        }\r\n\r\n        set_updateStoreOnReset(value: boolean): void {\r\n            if (this.updateStoreOnReset !== value) {\r\n                this.updateStoreOnReset = value;\r\n            }\r\n        }\r\n\r\n        protected getTemplate(): string {\r\n            return \"<div id='~_Rows' class='filter-lines'>\" +\r\n                \"</div>\" +\r\n                \"<div id='~_Buttons' class='buttons'>\" +\r\n                \"<button id='~_AddButton' class='btn btn-primary add'></button>\" +\r\n                \"<button id='~_SearchButton' class='btn btn-success search'></button>\" +\r\n                \"<button id='~_ResetButton' class='btn btn-danger reset'></button>\" +\r\n                \"</div>\" +\r\n                \"<div style='clear: both'>\" +\r\n                \"</div>\"\r\n        }\r\n\r\n        protected initButtons(): void {\r\n            this.byId('AddButton').text(Q.text('Controls.FilterPanel.AddFilter'))\r\n                .click((e) => this.addButtonClick(e));\r\n\r\n            this.byId('SearchButton').text(Q.text('Controls.FilterPanel.SearchButton'))\r\n                .click((e) => this.searchButtonClick(e));\r\n\r\n            this.byId('ResetButton').text(Q.text('Controls.FilterPanel.ResetButton'))\r\n                .click((e) => this.resetButtonClick(e));\r\n        }\r\n\r\n        protected searchButtonClick(e: JQueryEventObject) {\r\n            e.preventDefault();\r\n            this.search();\r\n        }\r\n\r\n        get_hasErrors(): boolean {\r\n            return this.rowsDiv.children().children('div.v')\r\n                .children('span.error').length > 0;\r\n        }\r\n\r\n        search() {\r\n            this.rowsDiv.children().children('div.v')\r\n                .children('span.error').remove();\r\n\r\n            var filterLines = [];\r\n            var errorText = null;\r\n            var row = null;\r\n            for (var i = 0; i < this.rowsDiv.children().length; i++) {\r\n                try {\r\n                    row = this.rowsDiv.children().eq(i);\r\n                    var filtering = this.getFilteringFor(row);\r\n                    if (filtering == null) {\r\n                        continue;\r\n                    }\r\n\r\n                    var field = this.getFieldFor(row);\r\n                    var op = row.children('div.o').find('input.op-select')\r\n                        .getWidget(FilterOperatorSelect).value;\r\n\r\n                    if (op == null || op.length === 0) \r\n                        throw new (ss as any).ArgumentOutOfRangeException('operator',\r\n                            Q.text('Controls.FilterPanel.InvalidOperator'));\r\n\r\n                    var line: FilterLine = {};\r\n                    line.field = field.name;\r\n                    line.operator = op;\r\n                    line.isOr = row.children('div.l')\r\n                        .children('a.andor').hasClass('or');\r\n                    line.leftParen = row.children('div.l')\r\n                        .children('a.leftparen').hasClass('active');\r\n                    line.rightParen = row.children('div.l')\r\n                        .children('a.rightparen').hasClass('active');\r\n                    filtering.set_operator({ key: op });\r\n                    var criteria = filtering.getCriteria();\r\n                    line.criteria = criteria.criteria;\r\n                    line.state = filtering.saveState();\r\n                    line.displayText = criteria.displayText;\r\n                    filterLines.push(line);\r\n                }\r\n                catch (ex) {\r\n                    ex = (ss.Exception as any).wrap(ex);\r\n                    if ((ss as any).isInstanceOfType(ex, (ss as any).ArgumentException)) {\r\n                        errorText = ex.get_message();\r\n                        break;\r\n                    }\r\n                    else {\r\n                        throw ex;\r\n                    }\r\n                }\r\n            }\r\n\r\n            // if an error occurred, display it, otherwise set current filters\r\n            if (errorText != null) {\r\n                $('<span/>').addClass('error')\r\n                    .attr('title', errorText).appendTo(row.children('div.v'));\r\n                row.children('div.v').find('input:first').focus();\r\n                return;\r\n            }\r\n\r\n            (ss as any).clear(this.get_store().get_items());\r\n            (ss as any).arrayAddRange(this.get_store().get_items(), filterLines);\r\n            this.get_store().raiseChanged();\r\n        }\r\n\r\n        protected addButtonClick(e: JQueryEventObject) {\r\n            this.addEmptyRow(true);\r\n            e.preventDefault();\r\n        }\r\n\r\n        protected resetButtonClick(e: JQueryEventObject) {\r\n            e.preventDefault();\r\n\r\n            if (this.get_updateStoreOnReset()) {\r\n                if (this.get_store().get_items().length > 0) {\r\n                    (ss as any).clear(this.get_store().get_items());\r\n                    this.get_store().raiseChanged();\r\n                }\r\n            }\r\n\r\n            this.rowsDiv.empty();\r\n            this.updateButtons();\r\n            if (this.get_showInitialLine()) {\r\n                this.addEmptyRow(false);\r\n            }\r\n        }\r\n\r\n        protected findEmptyRow(): JQuery {\r\n            var result: JQuery = null;\r\n\r\n            this.rowsDiv.children().each(function (index, row) {\r\n                var fieldInput = $(row).children('div.f')\r\n                    .children('input.field-select').first();\r\n                if (fieldInput.length === 0) {\r\n                    return true;\r\n                }\r\n                var val = fieldInput.val();\r\n                if (val == null || val.length === 0) {\r\n                    result = $(row);\r\n                    return false;\r\n                }\r\n                return true;\r\n            });\r\n\r\n            return result;\r\n        }\r\n\r\n        protected addEmptyRow(popupField: boolean) {\r\n            var emptyRow = this.findEmptyRow();\r\n\r\n            if (emptyRow != null) {\r\n                emptyRow.find('input.field-select').select2('focus');\r\n                if (popupField) {\r\n                    emptyRow.find('input.field-select').select2('open');\r\n                }\r\n                return emptyRow;\r\n            }\r\n\r\n            var isLastRowOr = this.rowsDiv.children().last()\r\n                .children('a.andor').hasClass('or');\r\n\r\n            var row = $(\r\n                \"<div class='filter-line'>\" +\r\n                \"<a class='delete'><span></span></a>\" +\r\n                \"<div class='l'>\" +\r\n                \"<a class='rightparen' href='#'>)</a>\" +\r\n                \"<a class='andor' href='#'></a>\" +\r\n                \"<a class='leftparen' href='#'>(</a>\" +\r\n                \"</div>\" +\r\n                \"<div class='f'>\" +\r\n                \"<input type='hidden' class='field-select'>\" +\r\n                \"</div>\" +\r\n                \"<div class='o'></div>\" +\r\n                \"<div class='v'></div>\" +\r\n                \"<div style='clear: both'></div>\" +\r\n                \"</div>\").appendTo(this.rowsDiv);\r\n\r\n            var parenDiv = row.children('div.l').hide();\r\n\r\n            parenDiv.children('a.leftparen, a.rightparen')\r\n                .click((e) => this.leftRightParenClick(e));\r\n\r\n            var andor = parenDiv.children('a.andor').attr('title', Q.text('Controls.FilterPanel.ChangeAndOr'));\r\n            if (isLastRowOr) {\r\n                andor.addClass('or').text(Q.text('Controls.FilterPanel.Or'));\r\n            }\r\n            else {\r\n                andor.text(Q.text('Controls.FilterPanel.And'));\r\n            }\r\n\r\n            andor.click((e) => this.andOrClick(e));\r\n\r\n            row.children('a.delete')\r\n                .attr('title', Q.text('Controls.FilterPanel.RemoveField'))\r\n                .click((e) => this.deleteRowClick(e));\r\n\r\n            var fieldSel = new FilterFieldSelect(row.children('div.f')\r\n                .children('input'), this.get_store().get_fields())\r\n                .changeSelect2(e => this.onRowFieldChange(e));\r\n\r\n            this.updateParens();\r\n            this.updateButtons();\r\n\r\n            row.find('input.field-select').select2('focus');\r\n\r\n            if (popupField) {\r\n                row.find('input.field-select').select2('open');\r\n            }\r\n\r\n            return row;\r\n        }\r\n\r\n        protected onRowFieldChange(e: JQueryEventObject) {\r\n            var row = $(e.target).closest('div.filter-line');\r\n            this.rowFieldChange(row);\r\n            var opSelect = row.children('div.o').find('input.op-select');\r\n            opSelect.select2('focus');\r\n        }\r\n\r\n        protected rowFieldChange(row: JQuery) {\r\n            row.removeData('Filtering');\r\n            var select = row.children('div.f').find('input.field-select')\r\n                .getWidget(FilterFieldSelect);\r\n            var fieldName = select.get_value();\r\n            var isEmpty = fieldName == null || fieldName === '';\r\n            this.removeFiltering(row);\r\n            this.populateOperatorList(row);\r\n            this.rowOperatorChange(row);\r\n            this.updateParens();\r\n            this.updateButtons();\r\n        }\r\n\r\n        protected removeFiltering(row: JQuery): void {\r\n            row.data('Filtering', null);\r\n            row.data('FilteringField', null);\r\n        }\r\n\r\n        protected populateOperatorList(row: JQuery): void {\r\n            row.children('div.o').html('');\r\n\r\n            var filtering = this.getFilteringFor(row);\r\n            if (filtering == null)\r\n                return;\r\n\r\n            var hidden = row.children('div.o').html('<input/>')\r\n                .children().attr('type', 'hidden').addClass('op-select');\r\n\r\n            var operators = filtering.getOperators();\r\n            var opSelect = new FilterOperatorSelect(hidden, operators);\r\n            opSelect.changeSelect2(e => this.onRowOperatorChange(e));\r\n        }\r\n\r\n        protected getFieldFor(row: JQuery) {\r\n            if (row.length === 0) {\r\n                return null;\r\n            }\r\n            var select = row.children('div.f').find('input.field-select')\r\n                .getWidget(FilterFieldSelect);\r\n\r\n            if (Q.isEmptyOrNull(select.value)) {\r\n                return null;\r\n            }\r\n\r\n            return this.get_store().get_fieldByName()[select.get_value()];\r\n        }\r\n\r\n        protected getFilteringFor(row: JQuery): IFiltering {\r\n            var field = this.getFieldFor(row);\r\n\r\n            if (field == null)\r\n                return null;\r\n\r\n            var filtering = (ss as any).cast(row.data('Filtering'), IFiltering);\r\n\r\n            if (filtering != null)\r\n                return filtering;\r\n\r\n            var filteringType = FilteringTypeRegistry.get(\r\n                Q.coalesce(field.filteringType, 'String'));\r\n\r\n            var editorDiv = row.children('div.v');\r\n            filtering = (ss as any).cast((ss as any).createInstance(filteringType), IFiltering);\r\n            ReflectionOptionsSetter.set(filtering, field.filteringParams);\r\n            filtering.set_container(editorDiv);\r\n            filtering.set_field(field);\r\n            row.data('Filtering', filtering);\r\n            return filtering;\r\n        }\r\n\r\n        protected onRowOperatorChange(e: JQueryEventObject) {\r\n            var row = $(e.target).closest('div.filter-line');\r\n            this.rowOperatorChange(row);\r\n            var firstInput = row.children('div.v').find(':input:visible').first();\r\n            try {\r\n                firstInput.focus();\r\n            }\r\n            catch ($t1) {\r\n            }\r\n        }\r\n\r\n        protected rowOperatorChange(row: JQuery): void {\r\n\r\n            if (row.length === 0) {\r\n                return;\r\n            }\r\n\r\n            var editorDiv = row.children('div.v');\r\n            editorDiv.html('');\r\n            var filtering = this.getFilteringFor(row);\r\n            if (filtering == null)\r\n                return;\r\n            \r\n            var operatorSelect = row.children('div.o').find('input.op-select')\r\n                .getWidget(FilterOperatorSelect);\r\n\r\n            if (Q.isEmptyOrNull(operatorSelect.get_value()))\r\n                return;\r\n            \r\n            var ops = filtering.getOperators().filter(function (x) {\r\n                return x.key === operatorSelect.value;\r\n            });\r\n\r\n            var op = ((ops.length > 0) ? ops[0] : null);\r\n            if (op == null)\r\n                return;\r\n\r\n            filtering.set_operator(op);\r\n            filtering.createEditor();\r\n        }\r\n\r\n        protected deleteRowClick(e: JQueryEventObject): void {\r\n            e.preventDefault();\r\n            var row = $(e.target).closest('div.filter-line');\r\n            row.remove();\r\n\r\n            if (this.rowsDiv.children().length === 0) {\r\n                this.search();\r\n            }\r\n\r\n            this.updateParens();\r\n            this.updateButtons();\r\n        }\r\n\r\n        protected updateButtons(): void {\r\n            this.byId('SearchButton').toggle(\r\n                this.rowsDiv.children().length >= 1 && this.showSearchButton);\r\n            this.byId('ResetButton').toggle(\r\n                this.rowsDiv.children().length >= 1);\r\n        }\r\n\r\n        protected andOrClick(e: JQueryEventObject): void {\r\n            e.preventDefault();\r\n            var andor = $(e.target).toggleClass('or');\r\n            andor.text(Q.text('Controls.FilterPanel.' +\r\n                (andor.hasClass('or') ? 'Or' : 'And')));\r\n        }\r\n\r\n        protected leftRightParenClick(e: JQueryEventObject): void {\r\n            e.preventDefault();\r\n            $(e.target).toggleClass('active');\r\n            this.updateParens();\r\n        }\r\n\r\n        protected updateParens() {\r\n            var rows = this.rowsDiv.children();\r\n            if (rows.length === 0) {\r\n                return;\r\n            }\r\n            rows.removeClass('paren-start');\r\n            rows.removeClass('paren-end');\r\n            rows.children('div.l').css('display', ((rows.length === 1) ? 'none' : 'block'));\r\n            rows.first().children('div.l').children('a.rightparen, a.andor')\r\n                .css('visibility', 'hidden');\r\n\r\n            for (var i = 1; i < rows.length; i++) {\r\n                var row = rows.eq(i);\r\n                row.children('div.l').css('display', 'block')\r\n                    .children('a.lefparen, a.andor').css('visibility', 'visible');\r\n            }\r\n\r\n            var inParen = false;\r\n            for (var i1 = 0; i1 < rows.length; i1++) {\r\n                var row1 = rows.eq(i1);\r\n                var divParen = row1.children('div.l');\r\n                var lp = divParen.children('a.leftparen');\r\n                var rp = divParen.children('a.rightparen');\r\n                if (rp.hasClass('active') && inParen) {\r\n                    inParen = false;\r\n                    if (i1 > 0) {\r\n                        rows.eq(i1 - 1).addClass('paren-end');\r\n                    }\r\n                }\r\n                if (lp.hasClass('active')) {\r\n                    inParen = true;\r\n                    if (i1 > 0) {\r\n                        row1.addClass('paren-start');\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","declare namespace Serenity {\r\n\r\n    interface QuickFilterArgs<TWidget> {\r\n        field?: string;\r\n        widget?: TWidget;\r\n        request?: ListRequest;\r\n        equalityFilter?: any;\r\n        value?: any;\r\n        active?: boolean;\r\n        handled?: boolean;\r\n    }\r\n\r\n    interface QuickFilter<TWidget extends Widget<TOptions>, TOptions> {\r\n        field?: string;\r\n        type?: new (element: JQuery, options: TOptions) => TWidget;\r\n        handler?: (h: QuickFilterArgs<TWidget>) => void;\r\n        title?: string;\r\n        options?: TOptions;\r\n        element?: (e: JQuery) => void;\r\n        init?: (w: TWidget) => void;\r\n        separator?: boolean;\r\n        cssClass?: string;\r\n        loadState?: (w: TWidget, state: any) => void;\r\n        saveState?: (w: TWidget) => any;\r\n        displayText?: (w: TWidget, label: string) => string;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    export interface QuickSearchInputOptions {\r\n        typeDelay?: number;\r\n        loadingParentClass?: string;\r\n        filteredParentClass?: string;\r\n        onSearch?: (p1: string, p2: string, p3: (p1: boolean) => void) => void;\r\n        fields?: QuickSearchField[];\r\n    }\r\n\r\n    export class QuickSearchInput extends Widget<QuickSearchInputOptions> {\r\n        private lastValue: string;\r\n        private field: QuickSearchField;\r\n        private fieldChanged: boolean;\r\n        private timer: number;\r\n\r\n        constructor(input: JQuery, opt: QuickSearchInputOptions) {\r\n            super(input, opt);\r\n\r\n            input.attr('title', Q.text('Controls.QuickSearch.Hint'))\r\n                .attr('placeholder', Q.text('Controls.QuickSearch.Placeholder'));\r\n            this.lastValue = Q.trim(Q.coalesce(input.val(), ''));\r\n\r\n            var self = this;\r\n            this.element.bind('keyup.' + this.uniqueName, function () {\r\n                self.checkIfValueChanged();\r\n            });\r\n\r\n            this.element.bind('change.' + this.uniqueName, function () {\r\n                self.checkIfValueChanged();\r\n            });\r\n\r\n            $('<span><i></i></span>').addClass('quick-search-icon')\r\n                .insertBefore(input);\r\n\r\n            if (Q.isValue(this.options.fields) && this.options.fields.length > 0) {\r\n                var a = $('<a/>').addClass('quick-search-field').attr('title',\r\n                    Q.text('Controls.QuickSearch.FieldSelection')).insertBefore(input);\r\n\r\n                var menu = $('<ul></ul>').css('width', '120px');\r\n\r\n                for (var item of this.options.fields) {\r\n                    var field = { $: item };\r\n                    $('<li><a/></li>').appendTo(menu).children().attr('href', '#')\r\n                        .text(Q.coalesce(item.title, '')).click((ss as any).mkdel({\r\n                            field: field,\r\n                            $this: this\r\n                        }, function (e: any) {\r\n                            e.preventDefault();\r\n                            this.$this.fieldChanged = !(ss as any).referenceEquals(self.field, this.field.$);\r\n                            self.field = this.field.$;\r\n                            this.$this.updateInputPlaceHolder();\r\n                            this.$this.checkIfValueChanged();\r\n                        }));\r\n                }\r\n\r\n                new Serenity.PopupMenuButton(a, {\r\n                    positionMy: 'right top',\r\n                    positionAt: 'right bottom',\r\n                    menu: menu\r\n                });\r\n\r\n                this.field = this.options.fields[0];\r\n                this.updateInputPlaceHolder();\r\n            }\r\n\r\n            this.element.bind('execute-search.' + this.uniqueName, e1 => {\r\n                if (!!this.timer) {\r\n                    window.clearTimeout(this.timer);\r\n                }\r\n                this.searchNow(Q.trim(Q.coalesce(this.element.val(), '')));\r\n            });\r\n        }\r\n\r\n        protected checkIfValueChanged(): void {\r\n            if (this.element.hasClass('ignore-change')) {\r\n                return;\r\n            }\r\n\r\n            var value = Q.trim(Q.coalesce(this.element.val(), ''));\r\n            if (value == this.lastValue && (!this.fieldChanged || Q.isEmptyOrNull(value))) {\r\n                this.fieldChanged = false;\r\n                return;\r\n            }\r\n\r\n            this.fieldChanged = false;\r\n\r\n            if (!!this.timer) {\r\n                window.clearTimeout(this.timer);\r\n            }\r\n\r\n            var self = this;\r\n            this.timer = window.setTimeout(function () {\r\n                self.searchNow(value);\r\n            }, Q.coalesce(this.options.typeDelay, 500));\r\n\r\n            this.lastValue = value;\r\n        }\r\n\r\n        get_field(): QuickSearchField {\r\n            return this.field;\r\n        }\r\n\r\n        set_field(value: QuickSearchField): void {\r\n            if (this.field !== value) {\r\n                this.fieldChanged = true;\r\n                this.field = value;\r\n                this.updateInputPlaceHolder();\r\n                this.checkIfValueChanged();\r\n            }\r\n        }\r\n\r\n        protected updateInputPlaceHolder() {\r\n            var qsf = this.element.prevAll('.quick-search-field');\r\n            if (this.field) {\r\n                qsf.text(this.field.title);\r\n            }\r\n\t\t\telse {\r\n                qsf.text('');\r\n            }\r\n        }\r\n\r\n        protected searchNow(value: string) {\r\n            this.element.parent().toggleClass(\r\n                Q.coalesce(this.options.filteredParentClass, 's-QuickSearchFiltered'), !!(value.length > 0));\r\n\r\n            this.element.parent().addClass(\r\n                Q.coalesce(this.options.loadingParentClass, 's-QuickSearchLoading'))\r\n                    .addClass(Q.coalesce(this.options.loadingParentClass, 's-QuickSearchLoading'));\r\n\r\n            var done = (results: any) => {\r\n                this.element.removeClass(Q.coalesce(this.options.loadingParentClass,\r\n                    's-QuickSearchLoading')).parent().removeClass(\r\n                        Q.coalesce(this.options.loadingParentClass, 's-QuickSearchLoading'));\r\n\r\n                if (!results) {\r\n                    this.element.closest('.s-QuickSearchBar')\r\n                        .find('.quick-search-icon i')\r\n                        .effect('shake', { distance: 2 });\r\n                }\r\n            };\r\n\r\n            if (this.options.onSearch != null) {\r\n                this.options.onSearch(((this.field != null &&\r\n                    !Q.isEmptyOrNull(this.field.name)) ? this.field.name : null), value, done);\r\n            }\r\n            else {\r\n                done(true);\r\n            }\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    export interface IInitializeColumn {\r\n        initializeColumn(column: Slick.Column): void;\r\n    }\r\n\r\n    @Serenity.Decorators.registerInterface('Serenity.IInitializeColumn')\r\n    export class IInitializeColumn {\r\n    }\r\n\r\n    import Option = Serenity.Decorators.option\r\n\r\n    function Formatter(name: string, intf?: any[]) {\r\n        return Decorators.registerFormatter('Serenity.' + name + 'Formatter', intf)\r\n    }\r\n\r\n    @Formatter('Boolean')\r\n    export class BooleanFormatter implements Slick.Formatter {\r\n        format(ctx: Slick.FormatterContext) {\r\n\r\n            if (ctx.value == null) {\r\n                return '';\r\n            }\r\n\r\n            var text;\r\n            if (!!ctx.value) {\r\n                text = Q.tryGetText(this.trueText);\r\n                if (text == null) {\r\n                    text = this.trueText;\r\n                    if (text == null) {\r\n                        text = Q.coalesce(Q.tryGetText('Dialogs.YesButton'), 'Yes');\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                text = Q.tryGetText(this.falseText);\r\n                if (text == null) {\r\n                    text = this.falseText;\r\n                    if (text == null) {\r\n                        text = Q.coalesce(Q.tryGetText('Dialogs.NoButton'), 'No');\r\n                    }\r\n                }\r\n            }\r\n\r\n            return Q.htmlEncode(text);\r\n        }\r\n\r\n        @Option()\r\n        public falseText: string;\r\n\r\n        @Option()\r\n        public trueText: string;\r\n    }\r\n\r\n    @Formatter('Checkbox')\r\n    export class CheckboxFormatter implements Slick.Formatter {\r\n        format(ctx: Slick.FormatterContext) {\r\n            return '<span class=\"check-box no-float readonly ' + (!!ctx.value ? ' checked' : '') + '\"></span>';\r\n        }\r\n    }\r\n\r\n    @Formatter('Date')\r\n    export class DateFormatter implements Slick.Formatter {\r\n        constructor() {\r\n            this.displayFormat = Q.Culture.dateFormat;\r\n        }\r\n\r\n        static format(value: any, format?: string) {\r\n            if (value == null) {\r\n                return '';\r\n            }\r\n\r\n            var date: Date;\r\n\r\n            if (value instanceof Date) {\r\n                date = value;\r\n            }\r\n            else if (typeof value === 'string') {\r\n                date = Q.parseISODateTime(value);\r\n\r\n                if (date == null) {\r\n                    return Q.htmlEncode(value);\r\n                }\r\n            }\r\n            else {\r\n                return value.toString();\r\n            }\r\n\r\n            return Q.htmlEncode(Q.formatDate(date, format));\r\n        }\r\n\r\n        @Option()\r\n        public displayFormat: string;\r\n\r\n        format(ctx: Slick.FormatterContext): string {\r\n            return DateFormatter.format(ctx.value, this.displayFormat);\r\n        }\r\n    }\r\n\r\n    @Formatter('DateTime')\r\n    export class DateTimeFormatter extends DateFormatter {\r\n        constructor() {\r\n            super();\r\n            this.displayFormat = Q.Culture.dateTimeFormat;\r\n        }\r\n    }\r\n\r\n    @Formatter('Enum')\r\n    export class EnumFormatter implements Slick.Formatter {\r\n\r\n        format(ctx: Slick.FormatterContext): string {\r\n            return EnumFormatter.format(EnumTypeRegistry.get(this.enumKey), ctx.value);\r\n        }\r\n\r\n        @Option()\r\n        enumKey: string;\r\n\r\n        static format(enumType: any, value: any) {\r\n\r\n            if (value == null) {\r\n                return '';\r\n            }\r\n\r\n            var name;\r\n            try {\r\n                name = (ss as any).Enum.toString(enumType, value);\r\n            }\r\n            catch (e) {\r\n                e = (ss.Exception as any).wrap(e);\r\n                if ((ss as any).isInstanceOfType(e, (ss as any).ArgumentException)) {\r\n                    name = value.toString();\r\n                }\r\n                else {\r\n                    throw e;\r\n                }\r\n            }\r\n\r\n            var enumKeyAttr = (ss as any).getAttributes(enumType, EnumKeyAttribute, false);\r\n            var enumKey = ((enumKeyAttr.length > 0) ? enumKeyAttr[0].value : (ss as any).getTypeFullName(enumType));\r\n            return EnumFormatter.getText(enumKey, name);\r\n        }\r\n\r\n        static getText(enumKey: string, name: string) {\r\n            if (Q.isEmptyOrNull(name)) {\r\n                return '';\r\n            }\r\n\r\n            return Q.htmlEncode(Q.coalesce(Q.tryGetText('Enums.' + enumKey + '.' + name), name));\r\n        }\r\n\r\n        static getName(enumType: any, value: any) {\r\n            if (value == null) {\r\n                return '';\r\n            }\r\n            return (ss as any).Enum.toString(enumType, value);\r\n        }\r\n    }\r\n\r\n    @Formatter('FileDownload', [ISlickFormatter, IInitializeColumn])\r\n    export class FileDownloadFormatter implements Slick.Formatter, IInitializeColumn {\r\n\r\n        format(ctx: Slick.FormatterContext): string {\r\n            var dbFile = (ss as any).safeCast(ctx.value, String);\r\n            if (Q.isEmptyOrNull(dbFile)) {\r\n                return '';\r\n            }\r\n\r\n            var downloadUrl = FileDownloadFormatter.dbFileUrl(dbFile);\r\n            var originalName = (!Q.isEmptyOrNull(this.originalNameProperty) ?\r\n                (ss as any).safeCast(ctx.item[this.originalNameProperty], String) : null);\r\n\r\n            originalName = Q.coalesce(originalName, '');\r\n            var text = Q.format(Q.coalesce(this.displayFormat, '{0}'),\r\n                originalName, dbFile, downloadUrl);\r\n\r\n            return \"<a class='file-download-link' target='_blank' href='\" +\r\n                Q.attrEncode(downloadUrl) + \"'>\" + Q.htmlEncode(text) + '</a>';\r\n        }\r\n\r\n        static dbFileUrl(filename: string): string {\r\n            filename = Q.replaceAll(Q.coalesce(filename, ''), '\\\\', '/');\r\n            return Q.resolveUrl('~/upload/') + filename;\r\n        }\r\n\r\n        initializeColumn(column: Slick.Column): void {\r\n            column.referencedFields = column.referencedFields || [];\r\n            if (!Q.isEmptyOrNull(this.originalNameProperty)) {\r\n                column.referencedFields.push(this.originalNameProperty);\r\n                return;\r\n            }\r\n        }\r\n\r\n        @Option()\r\n        displayFormat: string;\r\n\r\n        @Option()\r\n        originalNameProperty: string;\r\n    }\r\n\r\n    @Formatter('Minute')\r\n    export class MinuteFormatter implements Slick.Formatter {\r\n\r\n        format(ctx: Slick.FormatterContext) {\r\n            return MinuteFormatter.format(ctx.value);\r\n        }\r\n\r\n        static format(value: number): string {\r\n            var hour = Math.floor(value / 60);\r\n            var minute = value - hour * 60;\r\n            var hourStr, minuteStr;\r\n\r\n            if (value == null || isNaN(value))\r\n                return '';\r\n\r\n            if (hour < 10)\r\n                hourStr = '0' + hour;\r\n            else\r\n                hourStr = hour.toString();\r\n\r\n            if (minute < 10)\r\n                minuteStr = '0' + minute;\r\n            else\r\n                minuteStr = minute.toString();\r\n\r\n            return Q.format('{0}:{1}', hourStr, minuteStr);\r\n        }\r\n    }\r\n\r\n    @Formatter('Number')\r\n    export class NumberFormatter {\r\n        format(ctx: Slick.FormatterContext): string {\r\n            return NumberFormatter.format(ctx.value, this.displayFormat);\r\n        }\r\n\r\n        static format(value: any, format?: string): string {\r\n            format = Q.coalesce(format, '0.##');\r\n            if (value == null)\r\n                return '';\r\n\r\n            if (typeof (value) === 'number') {\r\n                if (isNaN(value))\r\n                    return '';\r\n\r\n                return Q.htmlEncode(Q.formatNumber(value, format));\r\n            }\r\n\r\n            var dbl = Q.parseDecimal(value.toString());\r\n            if (dbl == null)\r\n                return '';\r\n\r\n            return Q.htmlEncode(value.toString());\r\n        }\r\n\r\n        @Option()\r\n        displayFormat: string;\r\n    }\r\n\r\n    @Formatter('Url', [ISlickFormatter, IInitializeColumn])\r\n    export class UrlFormatter implements Slick.Formatter, IInitializeColumn {\r\n\r\n        format(ctx: Slick.FormatterContext): string {\r\n            var url = (!Q.isEmptyOrNull(this.urlProperty) ?\r\n                Q.coalesce(ctx.item[this.urlProperty], '').toString() :\r\n                Q.coalesce(ctx.value, '').toString());\r\n\r\n            if (Q.isEmptyOrNull(url))\r\n                return '';\r\n\r\n            if (!Q.isEmptyOrNull(this.urlFormat))\r\n                url = Q.format(this.urlFormat, url);\r\n\r\n            if (url != null && Q.startsWith(url, '~/'))\r\n                url = Q.resolveUrl(url);\r\n\r\n            var display = (!Q.isEmptyOrNull(this.displayProperty) ?\r\n                Q.coalesce(ctx.item[this.displayProperty], '').toString() :\r\n                Q.coalesce(ctx.value, '').toString());\r\n\r\n            if (!Q.isEmptyOrNull(this.displayFormat))\r\n                display = Q.format(this.displayFormat, display);\r\n\r\n            var s = \"<a href='\" + Q.attrEncode(url) + \"'\";\r\n            if (!Q.isEmptyOrNull(this.target))\r\n                s += \" target='\" + this.target + \"'\";\r\n\r\n            s += '>' + Q.htmlEncode(display) + '</a>';\r\n\r\n            return s;\r\n        }\r\n\r\n        initializeColumn(column: Slick.Column): void {\r\n            column.referencedFields = column.referencedFields || [];\r\n\r\n            if (!Q.isEmptyOrNull(this.displayProperty)) {\r\n                column.referencedFields.push(this.displayProperty);\r\n                return;\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(this.urlProperty)) {\r\n                column.referencedFields.push(this.urlProperty);\r\n                return;\r\n            }\r\n        }\r\n\r\n        @Option()\r\n        displayProperty: string;\r\n\r\n        @Option()\r\n        displayFormat: string;\r\n\r\n        @Option()\r\n        urlProperty: string;\r\n\r\n        @Option()\r\n        urlFormat: string;\r\n\r\n        @Option()\r\n        target: string;\r\n    }\r\n\r\n    export namespace FormatterTypeRegistry {\r\n\r\n        let knownTypes: Q.Dictionary<Function>;\r\n\r\n        function setTypeKeysWithoutFormatterSuffix() {\r\n            var suffix = 'formatter';\r\n            for (var k of Object.keys(knownTypes)) {\r\n                if (!Q.endsWith(k, suffix)) \r\n                    continue;\r\n                \r\n                var p = k.substr(0, k.length - suffix.length);\r\n                if (Q.isEmptyOrNull(p))\r\n                    continue;\r\n                \r\n                if (knownTypes[p] != null)\r\n                    continue;\r\n                \r\n                knownTypes[p] = knownTypes[k];\r\n            }\r\n        }\r\n\r\n        function initialize() {\r\n\r\n            if (knownTypes) {\r\n                return;\r\n            }\r\n\r\n            knownTypes = {};\r\n            var assemblies = (ss as any).getAssemblies();\r\n            for (var assembly of assemblies) {\r\n                var types = (ss as any).getAssemblyTypes(assembly);\r\n                for (var type of types) {\r\n                    if (!(ss as any).isAssignableFrom(Serenity.ISlickFormatter, type))\r\n                        continue;\r\n                    \r\n                    if ((ss as any).isGenericTypeDefinition(type))\r\n                        continue;\r\n                    \r\n                    var fullName = (ss as any).getTypeFullName(type).toLowerCase();\r\n                    knownTypes[fullName] = type;\r\n\r\n                    for (var k of Q.Config.rootNamespaces) {\r\n                        if (Q.startsWith(fullName, k.toLowerCase() + '.')) {\r\n                            var kx = fullName.substr(k.length + 1).toLowerCase();\r\n                            if (knownTypes[kx] == null) {\r\n                                knownTypes[kx] = type;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            setTypeKeysWithoutFormatterSuffix();\r\n        }\r\n\r\n        export function get(key: string): Function {\r\n            if (Q.isEmptyOrNull(key)) \r\n                throw new (ss as any).ArgumentNullException('key');\r\n            \r\n            initialize();\r\n\r\n            var formatterType = knownTypes[key.toLowerCase()];\r\n            if (formatterType == null) {\r\n                throw new ss.Exception(Q.format(\r\n                    \"Can't find {0} formatter type!\", key));\r\n            }\r\n\r\n            return formatterType;\r\n        }\r\n\r\n        export function reset() {\r\n            knownTypes = null;\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n    export class Flexify extends Widget<FlexifyOptions> {\r\n        private xDifference = 0;\r\n        private yDifference = 0;\r\n        constructor(container: JQuery, options: FlexifyOptions) {\r\n            super(container, options);\r\n\r\n            Serenity.LazyLoadHelper.executeOnceWhenShown(container, () => {\r\n                this.storeInitialSize();\r\n            });\r\n        }\r\n\r\n        storeInitialSize() {\r\n            if (!!this.element.data('flexify-init')) {\r\n                return;\r\n            }\r\n\r\n            var designWidth = this.options.designWidth;\r\n            if (designWidth == null)\r\n                designWidth = this.element.width();\r\n            this.element.data('flexify-width', designWidth);\r\n\r\n            var designHeight = this.options.designHeight;\r\n            if (designHeight == null)\r\n                designHeight = this.element.height();\r\n            this.element.data('flexify-height', designHeight);\r\n\r\n            this.element.data('flexify-init', true);\r\n\r\n            this.element.bind('resize.' + this.uniqueName, () =>\r\n                this.resizeElements());\r\n\r\n            this.element.bind('resizestop.' + this.uniqueName, () =>\r\n                this.resizeElements());\r\n            \r\n            var tabs = this.element.find('.ui-tabs');\r\n            if (tabs.length > 0) {\r\n                tabs.bind('tabsactivate.' + this.uniqueName, () =>\r\n                    this.resizeElements());\r\n            }\r\n\r\n\t\t\tif (this.options.designWidth != null || this.options.designHeight != null) \r\n                this.resizeElements();\r\n        }\r\n\r\n        private getXFactor(element: JQuery): number {\r\n            var xFactor = null;\r\n            if (this.options.getXFactor != null)\r\n                xFactor = this.options.getXFactor(element);\r\n\r\n\t\t\tif (xFactor == null)\r\n                xFactor = element.data('flex-x');\r\n\r\n            return Q.coalesce(xFactor, 1);\r\n        }\r\n\r\n        private getYFactor(element: JQuery): number {\r\n            var yFactor = null;\r\n\r\n            if (this.options.getYFactor != null) \r\n                yFactor = this.options.getYFactor(element);\r\n\r\n\t\t\tif (yFactor == null) \r\n                yFactor = element.data('flex-y');\r\n\r\n\t\t\treturn Q.coalesce(yFactor, 0);\r\n        }\r\n\r\n        private resizeElements(): void {\r\n            var width = this.element.width();\r\n            var initialWidth = this.element.data('flexify-width');\r\n            if (initialWidth == null) {\r\n                this.element.data('flexify-width', width);\r\n                initialWidth = width;\r\n            }\r\n\r\n\t\t\tvar height = this.element.height();\r\n            var initialHeight = this.element.data('flexify-height');\r\n            if (initialHeight == null) {\r\n                this.element.data('flexify-height', height);\r\n                initialHeight = height;\r\n            }\r\n\r\n\t\t\tthis.xDifference = width - initialWidth;\r\n            this.yDifference = height - initialHeight;\r\n\r\n            var containers = this.element;\r\n            var tabPanels = this.element.find('.ui-tabs-panel');\r\n\r\n            if (tabPanels.length > 0) {\r\n                containers = tabPanels.filter(':visible');\r\n            }\r\n\r\n            containers.find('.flexify')\r\n                .add(tabPanels.filter('.flexify:visible'))\r\n                .each((i, e) => {\r\n                    this.resizeElement($(e));\r\n                });\r\n        }\r\n\r\n        private resizeElement(element: JQuery): void {\r\n            var xFactor = this.getXFactor(element);\r\n            if(xFactor !== 0) {\r\n                var initialWidth = element.data('flexify-width');\r\n                if (initialWidth == null) {\r\n                    var width = element.width();\r\n                    element.data('flexify-width', width);\r\n                    initialWidth = width;\r\n                }\r\n\r\n                element.width(initialWidth + xFactor * this.xDifference | 0);\r\n            }\r\n\r\n\t\t\tvar yFactor = this.getYFactor(element);\r\n            if (yFactor !== 0) {\r\n                var initialHeight = element.data('flexify-height');\r\n                if (initialHeight == null) {\r\n                    var height = element.height();\r\n                    element.data('flexify-height', height);\r\n                    initialHeight = height;\r\n                }\r\n                element.height(initialHeight + yFactor * this.yDifference | 0);\r\n            }\r\n\r\n\t\t\tif (element.hasClass('require-layout')) {\r\n                element.triggerHandler('layout');\r\n            }\r\n        }\r\n    }\r\n\r\n    export interface FlexifyOptions {\r\n        getXFactor?: (p1: JQuery) => any;\r\n        getYFactor?: (p1: JQuery) => any;\r\n        designWidth?: any;\r\n        designHeight?: any;\r\n    }\r\n}","namespace Serenity {\r\n    export namespace EnumTypeRegistry {\r\n\r\n        let knownTypes: Q.Dictionary<Function>;\r\n\r\n        export function tryGet(key: string): Function {\r\n\r\n            if (knownTypes == null) {\r\n                knownTypes = {};\r\n                for (var assembly of (ss as any).getAssemblies()) {\r\n                    for (var type of (ss as any).getAssemblyTypes(assembly)) {\r\n                        if ((ss as any).isEnum(type)) {\r\n                            var fullName = (ss as any).getTypeFullName(type);\r\n                            knownTypes[fullName] = type;\r\n                            var enumKeyAttr = (ss as any).getAttributes(type, Serenity.EnumKeyAttribute, false);\r\n                            if (enumKeyAttr != null && enumKeyAttr.length > 0) {\r\n                                knownTypes[enumKeyAttr[0].value] = type;\r\n                            }\r\n\r\n                            for (var k of Q.Config.rootNamespaces) {\r\n                                if (Q.startsWith(fullName, k + '.')) {\r\n                                    knownTypes[fullName.substr(k.length + 1)] = type;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (knownTypes[key] == null)\r\n                return null;\r\n\r\n            return knownTypes[key];\r\n        }\r\n\r\n        export function get(key: string): Function {\r\n            var type = EnumTypeRegistry.tryGet(key);\r\n            if (type == null) {\r\n                var message = Q.format(\"Can't find {0} enum type! If you have recently defined this enum type \" + \r\n                    \"in server side code, make sure your project builds successfully and transform T4 templates. \" +\r\n                    \"Also make sure that enum is under your project root namespace, and your namespace parts starts \" + \r\n                    \"with capital letters, e.g.MyProject.Pascal.Cased namespace\", key);\r\n\r\n                Q.notifyError(message, '', null);\r\n                throw new (ss as any).Exception(message);\r\n            }\r\n\r\n            return type;\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n    export class PrefixedContext {\r\n        constructor(public readonly idPrefix: string) {\r\n        }\r\n\r\n        byId(id: string) {\r\n            return $('#' + this.idPrefix + id);\r\n        }\r\n\r\n        w<TWidget>(id: string, type: { new (...args: any[]): TWidget }): TWidget {\r\n            return $('#' + this.idPrefix + id).getWidget<TWidget>(type);\r\n        }\r\n    }\r\n\r\n    export namespace ReflectionOptionsSetter {\r\n        export function set(target: any, options: any): void {\r\n            if (options == null) {\r\n                return;\r\n            }\r\n\r\n            var type = (ss as any).getInstanceType(target);\r\n\r\n            if (type === Object) {\r\n                return;\r\n            }\r\n\r\n            var propByName = type.__propByName;\r\n            var fieldByName = type.__fieldByName;\r\n            if (propByName == null) {\r\n                var props = (ss as any).getMembers(type, 16, 20);\r\n                var propList = props.filter(function (x: any) {\r\n                    return !!x.setter && ((x.attr || []).filter(function (a: any) {\r\n                        return (ss as any).isInstanceOfType(a, Serenity.OptionAttribute);\r\n                    }).length > 0 || (x.attr || []).filter(function (a: any) {\r\n                        return (ss as any).isInstanceOfType(a, System.ComponentModel.DisplayNameAttribute);\r\n                    }).length > 0);\r\n                });\r\n\r\n                propByName = {};\r\n                for (var k of propList) {\r\n                    propByName[ReflectionUtils.makeCamelCase(k.name)] = k;\r\n                }\r\n\r\n                type.__propByName = propByName;\r\n            }\r\n\r\n            if (fieldByName == null) {\r\n                var fields = (ss as any).getMembers(type, 4, 20);\r\n                var fieldList = fields.filter(function (x1: any) {\r\n                    return (x1.attr || []).filter(function (a: any) {\r\n                        return (ss as any).isInstanceOfType(a, Serenity.OptionAttribute);\r\n                    }).length > 0 || (x1.attr || []).filter(function (a: any) {\r\n                        return (ss as any).isInstanceOfType(a, System.ComponentModel.DisplayNameAttribute);\r\n                    }).length > 0;\r\n                });\r\n\r\n                fieldByName = {};\r\n                for (var $t2 = 0; $t2 < fieldList.length; $t2++) {\r\n                    var k1 = fieldList[$t2];\r\n                    fieldByName[ReflectionUtils.makeCamelCase(k1.name)] = k1;\r\n                }\r\n                type.__fieldByName = fieldByName;\r\n            }\r\n\r\n            var keys = Object.keys(options);\r\n            for (var k2 of keys) {\r\n                var v = options[k2];\r\n                var cc = ReflectionUtils.makeCamelCase(k2);\r\n                var p = propByName[cc] || propByName[k2];\r\n                if (p != null) {\r\n                    (ss as any).midel(p.setter, target)(v);\r\n                }\r\n                else {\r\n                    var f = fieldByName[cc] || fieldByName[k2];\r\n                    if (f != null) {\r\n                        (ss as any).fieldAccess(f, target, v);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    export namespace ReflectionUtils {\r\n        export function getPropertyValue(o: any, property: string): any {\r\n            var d = o;\r\n            var getter = d['get_' + property];\r\n            if (!!!(typeof (getter) === 'undefined')) {\r\n                return getter.apply(o);\r\n            }\r\n            var camelCase = makeCamelCase(property);\r\n            getter = d['get_' + camelCase];\r\n            if (!!!(typeof (getter) === 'undefined')) {\r\n                return getter.apply(o);\r\n            }\r\n            return d[camelCase];\r\n        }\r\n\r\n        export function setPropertyValue(o: any, property: string, value: any): void {\r\n            var d = o;\r\n            var setter = d['set_' + property];\r\n            if (!!!(typeof (setter) === 'undefined')) {\r\n                setter.apply(o, [value]);\r\n                return;\r\n            }\r\n            var camelCase = makeCamelCase(property);\r\n            setter = d['set_' + camelCase];\r\n            if (!!!(typeof (setter) === 'undefined')) {\r\n                setter.apply(o, [value]);\r\n                return;\r\n            }\r\n            d[camelCase] = value;\r\n        }\r\n\r\n        export function makeCamelCase(s: string): string {\r\n            if (Q.isEmptyOrNull(s)) {\r\n                return s;\r\n            }\r\n\r\n            if (s === 'ID') {\r\n                return 'id';\r\n            }\r\n\r\n            var hasNonUppercase = false;\r\n            var numUppercaseChars = 0;\r\n            for (var index = 0; index < s.length; index++) {\r\n                if (s.charCodeAt(index) >= 65 && s.charCodeAt(index) <= 90) {\r\n                    numUppercaseChars++;\r\n                }\r\n                else {\r\n                    hasNonUppercase = true;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (!hasNonUppercase && s.length !== 1 || numUppercaseChars === 0) {\r\n                return s;\r\n            }\r\n            else if (numUppercaseChars > 1) {\r\n                return s.substr(0, numUppercaseChars - 1).toLowerCase() + s.substr(numUppercaseChars - 1);\r\n            }\r\n            else if (s.length === 1) {\r\n                return s.toLowerCase();\r\n            }\r\n            else {\r\n                return s.substr(0, 1).toLowerCase() + s.substr(1);\r\n            }\r\n        }\r\n    }\r\n\r\n    export interface ScriptContext {\r\n    }\r\n\r\n    @Decorators.registerClass('Serenity.ScriptContext')\r\n    export class ScriptContext {\r\n    }\r\n}\r\n\r\ndeclare namespace Serenity {\r\n\r\n    const enum RetrieveColumnSelection {\r\n        details = 0,\r\n        keyOnly = 1,\r\n        list = 2\r\n    }\r\n\r\n    class CheckListEditor extends Widget<CheckListEditorOptions> {\r\n        constructor(div: JQuery, opt: CheckListEditorOptions);\r\n        getItems(): CheckListItem[];\r\n        updateItems(): void;\r\n    }\r\n\r\n    interface CheckListEditorOptions {\r\n        items?: CheckListItem[];\r\n        selectAllOptionText?: string;\r\n    }\r\n\r\n    class CheckListItem {\r\n        id: string;\r\n        text: string;\r\n        parentId: string;\r\n    }\r\n\r\n    interface CheckTreeItem<TSource> {\r\n        isSelected?: boolean;\r\n        hideCheckBox?: boolean;\r\n        isAllDescendantsSelected?: boolean;\r\n        id?: string;\r\n        text?: string;\r\n        parentId?: string;\r\n        children?: CheckTreeItem<TSource>[];\r\n        source?: TSource;\r\n    }\r\n\r\n    const enum ColumnSelection {\r\n        List = 0,\r\n        KeyOnly = 1,\r\n        Details = 2\r\n    }\r\n\r\n    interface HtmlContentEditorOptions {\r\n    }\r\n\r\n    interface GridPersistanceFlags {\r\n        columnWidths?: boolean;\r\n        columnVisibility?: boolean;\r\n        sortColumns?: boolean;\r\n        filterItems?: boolean;\r\n        quickFilters?: boolean;\r\n        quickFilterText?: boolean;\r\n        quickSearch?: boolean;\r\n        includeDeleted?: boolean;\r\n    }\r\n\r\n    interface PersistedGridColumn {\r\n        id: string;\r\n        width?: number;\r\n        sort?: number;\r\n        visible?: boolean;\r\n    }\r\n\r\n    interface PersistedGridSettings {\r\n        columns?: PersistedGridColumn[];\r\n        filterItems?: FilterLine[];\r\n        quickFilters?: Q.Dictionary<any>;\r\n        quickFilterText?: string;\r\n        quickSearchField?: QuickSearchField;\r\n        quickSearchText?: string;\r\n        includeDeleted?: boolean;\r\n    }\r\n\r\n    interface SettingStorage {\r\n        getItem(key: string): string;\r\n        setItem(key: string, value: string): void;\r\n    }\r\n\r\n    interface CKEditorConfig {\r\n    }\r\n\r\n    enum CaptureOperationType {\r\n        Before = 0,\r\n        Delete = 1,\r\n        Insert = 2,\r\n        Update = 3\r\n    }\r\n\r\n    namespace CustomValidation {\r\n        function registerValidationMethods(): void;\r\n    }\r\n\r\n    interface DialogButton {\r\n        text: string;\r\n        click: () => void;\r\n    }\r\n\r\n    interface EditorTypeInfo {\r\n        type?: Function;\r\n        displayName?: string;\r\n        optionsType?: Function;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    export namespace WX {\r\n        export function getWidget<TWidget>(element: JQuery, type: Function): any {\r\n            if (element == null) {\r\n                throw new (ss as any).ArgumentNullException('element');\r\n            }\r\n            if (element.length === 0) {\r\n                throw new ss.Exception(Q.format(\"Searching for widget of type '{0}' on a non-existent element! ({1})\",\r\n                    (ss as any).getTypeFullName(type), element.selector));\r\n            }\r\n            var widget = element.tryGetWidget(type as any);\r\n            if (widget == null) {\r\n                var message = Q.format(\"Element has no widget of type '{0}'! If you have recently changed editor \" +\r\n                    \"type of a property in a form class, or changed data type in row (which also changes editor type)\" +\r\n                    \" your script side Form definition might be out of date. Make sure your project builds successfully \" +\r\n                    \"and transform T4 templates\", (ss as any).getTypeFullName(type));\r\n                Q.notifyError(message, '', null);\r\n                throw new ss.Exception(message);\r\n            }\r\n            return widget;\r\n        }\r\n\r\n        export function getWidgetName(type: Function): string {\r\n            return Q.replaceAll((ss as any).getTypeFullName(type), '.', '_');\r\n        }\r\n\r\n        export function hasOriginalEvent(e: any): boolean {\r\n            return !!!(typeof (e.originalEvent) === 'undefined');\r\n        }\r\n\r\n        export function change(widget: any, handler: any): void {\r\n            widget.element.bind('change.' + widget.uniqueName, handler);\r\n        }\r\n        \r\n        export function changeSelect2(widget: any, handler: any): void {\r\n            widget.element.bind('change.' + widget.uniqueName, function (e: JQueryEventObject, x: boolean) {\r\n                if (!!(hasOriginalEvent(e) || !x)) {\r\n                    handler(e);\r\n                }\r\n            });\r\n        }\r\n\r\n        export function getGridField(widget: Serenity.Widget<any>): JQuery {\r\n            return widget.element.closest('.field');\r\n        }\r\n    }\r\n\r\n    Serenity.Widget.prototype['changeSelect2'] = function (handler) {\r\n        var widget = this;\r\n        widget.element.bind('change.' + widget.uniqueName, function (e: JQueryEventObject, x: any) {\r\n            if (!!(WX.hasOriginalEvent(e) || !x)) {\r\n                handler(e);\r\n            }\r\n        });\r\n    };\r\n\r\n    Serenity.Widget.prototype['change'] = function (handler1) {\r\n        var widget1 = this;\r\n        widget1.element.bind('change.' + widget1.uniqueName, handler1);\r\n    };\r\n\r\n    Serenity.Widget.prototype['getGridField'] = function () {\r\n        return this.element.closest('.field');\r\n    };\r\n\r\n    $.fn.tryGetWidget = function (widgetType: any) {\r\n        var element = this;\r\n        var widget2;\r\n        if ((ss as any).isAssignableFrom(Serenity.Widget, widgetType)) {\r\n            var widgetName = WX.getWidgetName(widgetType);\r\n            widget2 = element.data(widgetName);\r\n            if (widget2 != null && !(ss as any).isAssignableFrom(widgetType, (ss as any).getInstanceType(widget2))) {\r\n                widget2 = null;\r\n            }\r\n            if (widget2 != null) {\r\n                return widget2;\r\n            }\r\n        }\r\n\r\n        var data = element.data();\r\n        if (data == null) {\r\n            return null;\r\n        }\r\n\r\n        for (var key of Object.keys(data)) {\r\n            widget2 = data[key];\r\n            if (widget2 != null && (ss as any).isAssignableFrom(widgetType, (ss as any).getInstanceType(widget2))) {\r\n                return widget2;\r\n            }\r\n        }\r\n\r\n        return null;\r\n    };\r\n\r\n    $.fn.getWidget = function (widgetType1: any) {\r\n        var element1 = this;\r\n        if (element1 == null) {\r\n            throw new (ss as any).ArgumentNullException('element');\r\n        }\r\n        if (element1.length === 0) {\r\n            throw new ss.Exception(Q.format(\"Searching for widget of type '{0}' on a non-existent element! ({1})\",\r\n                (ss as any).getTypeFullName(widgetType1), element1.selector));\r\n        }\r\n\r\n        var widget3 = element1.tryGetWidget(widgetType1);\r\n        if (widget3 == null) {\r\n            var message = Q.format(\"Element has no widget of type '{0}'! If you have recently changed \" +\r\n                \"editor type of a property in a form class, or changed data type in row (which also changes \" +\r\n                \"editor type) your script side Form definition might be out of date. Make sure your project \" +\r\n                \"builds successfully and transform T4 templates\", (ss as any).getTypeFullName(widgetType1));\r\n            Q.notifyError(message, '', null);\r\n            throw new ss.Exception(message);\r\n        }\r\n        return widget3;\r\n    };\r\n}\r\n\r\n","namespace Serenity {\r\n\r\n    @Decorators.registerClass('PropertyGrid')\r\n    export class PropertyGrid extends Widget<PropertyGridOptions> {\r\n\r\n        private editors: Widget<any>[];\r\n        private items: PropertyItem[];\r\n\r\n        constructor(div: JQuery, opt: PropertyGridOptions) {\r\n            super(div, opt);\r\n\r\n            if (opt.mode == null)\r\n                opt.mode = 1;\r\n\r\n            div.addClass('s-PropertyGrid');\r\n            this.editors = [];\r\n            var items = this.options.items || [];\r\n            this.items = [];\r\n\r\n            var useTabs = Q.any(items, function (x) {\r\n                return !Q.isEmptyOrNull(x.tab);\r\n            });\r\n\r\n            if (useTabs) {\r\n                var itemsWithoutTab = items.filter(f => Q.isEmptyOrNull(f.tab));\r\n                if (itemsWithoutTab.length > 0) {\r\n                    this.createItems(this.element, itemsWithoutTab);\r\n\r\n                    $(\"<div class='pad'></div>\").appendTo(this.element);\r\n                }\r\n\r\n                var itemsWithTab = items.filter(f => !Q.isEmptyOrNull(f.tab));\r\n\r\n                var ul = $(\"<ul class='nav nav-tabs property-tabs' role='tablist'></ul>\")\r\n                    .appendTo(this.element);\r\n\r\n                var tc = $(\"<div class='tab-content property-panes'></div>\")\r\n                    .appendTo(this.element);\r\n\r\n                var tabIndex = 0;\r\n                var i = 0;\r\n                while (i < itemsWithTab.length) {\r\n                    var tab = { $: Q.trimToEmpty(itemsWithTab[i].tab) };\r\n                    var tabItems = [];\r\n\r\n                    var j = i;\r\n                    do {\r\n                        tabItems.push(itemsWithTab[j]);\r\n                    } while (++j < itemsWithTab.length &&\r\n                        Q.trimToEmpty(itemsWithTab[j].tab) === tab.$);\r\n                    i = j;\r\n\r\n                    var li = $(\"<li><a data-toggle='tab' role='tab'></a></li>\")\r\n                        .appendTo(ul);\r\n\r\n                    if (tabIndex === 0) {\r\n                        li.addClass('active');\r\n                    }\r\n\r\n                    var tabID = this.uniqueName + '_Tab' + tabIndex;\r\n\r\n                    li.children('a').attr('href', '#' + tabID)\r\n                        .text(this.determineText(tab.$, (ss as any).mkdel({\r\n                            tab: tab\r\n                        }, function (prefix: string) {\r\n                            return prefix + 'Tabs.' + this.tab.$;\r\n                            })));\r\n\r\n                    var pane = $(\"<div class='tab-pane fade' role='tabpanel'>\")\r\n                        .appendTo(tc);\r\n\r\n                    if (tabIndex === 0) {\r\n                        pane.addClass('in active');\r\n                    }\r\n\r\n                    pane.attr('id', tabID);\r\n                    this.createItems(pane, tabItems);\r\n                    tabIndex++;\r\n                }\r\n            }\r\n            else {\r\n                this.createItems(this.element, items);\r\n            }\r\n\r\n            this.updateInterface();\r\n        }\r\n\r\n        destroy() {\r\n            if (this.editors != null) {\r\n                for (var i = 0; i < this.editors.length; i++) {\r\n                    this.editors[i].destroy();\r\n                }\r\n                this.editors = null;\r\n            }\r\n            this.element.find('a.category-link').unbind('click',\r\n                this.categoryLinkClick).remove();\r\n\r\n            Serenity.Widget.prototype.destroy.call(this);\r\n        }\r\n\r\n        private createItems(container: JQuery, items: PropertyItem[]) {\r\n            var categoryIndexes = {};\r\n            var categoriesDiv = container;\r\n\r\n            var useCategories = this.options.useCategories !== false && Q.any(items, function (x) {\r\n                return !Q.isEmptyOrNull(x.category);\r\n            });\r\n\r\n            if (useCategories) {\r\n                var linkContainer = $('<div/>').addClass('category-links');\r\n                categoryIndexes = this.createCategoryLinks(linkContainer, items);\r\n                if (Object.keys(categoryIndexes).length > 1) {\r\n                    linkContainer.appendTo(container);\r\n                }\r\n                else {\r\n                    linkContainer.find('a.category-link').unbind('click',\r\n                        this.categoryLinkClick).remove();\r\n                }\r\n            }\r\n\r\n            categoriesDiv = $('<div/>').addClass('categories').appendTo(container);\r\n            var fieldContainer;\r\n            if (useCategories) {\r\n                fieldContainer = categoriesDiv;\r\n            }\r\n            else {\r\n                fieldContainer = $('<div/>').addClass('category').appendTo(categoriesDiv);\r\n            }\r\n            var priorCategory = null;\r\n            for (var i = 0; i < items.length; i++) {\r\n                var item = items[i];\r\n                var category = item.category;\r\n                if (category == null) {\r\n                    category = Q.coalesce(this.options.defaultCategory, '');\r\n                }\r\n\r\n                if (useCategories && priorCategory !== category) {\r\n                    var categoryDiv = this.createCategoryDiv(categoriesDiv,\r\n                        categoryIndexes, category,\r\n                        ((item.collapsible !== true) ? null :\r\n                            Q.coalesce(item.collapsed, false)));\r\n\r\n                    if (priorCategory == null) {\r\n                        categoryDiv.addClass('first-category');\r\n                    }\r\n                    priorCategory = category;\r\n                    fieldContainer = categoryDiv;\r\n                }\r\n                var editor = this.createField(fieldContainer, item);\r\n                this.items.push(item);\r\n                this.editors.push(editor);\r\n            }\r\n        }\r\n\r\n        private createCategoryDiv(categoriesDiv: JQuery,\r\n            categoryIndexes: Q.Dictionary<number>, category: string, collapsed: boolean) {\r\n\r\n            var categoryDiv = $('<div/>').addClass('category')\r\n                .appendTo(categoriesDiv);\r\n\r\n            var title = $('<div/>').addClass('category-title')\r\n                .append($('<a/>').addClass('category-anchor')\r\n                .text(this.determineText(category, function (prefix) {\r\n                    return prefix + 'Categories.' + category;\r\n                }))\r\n                .attr('name', this.options.idPrefix + \r\n                    'Category' + categoryIndexes[category].toString()))\r\n                .appendTo(categoryDiv);\r\n\r\n            if (collapsed != null) {\r\n                categoryDiv.addClass(((collapsed === true) ?\r\n                    'collapsible collapsed' : 'collapsible'));\r\n\r\n                var img = $('<i/>').addClass(((collapsed === true) ?\r\n                    'fa fa-plus' : 'fa fa-minus')).appendTo(title);\r\n\r\n                title.click(function (e) {\r\n                    categoryDiv.toggleClass('collapsed');\r\n                    img.toggleClass('fa-plus').toggleClass('fa-minus');\r\n                });\r\n            }\r\n\r\n\t\t\treturn categoryDiv;\r\n        }\r\n\r\n        private categoryLinkClick = (e: JQueryEventObject) => {\r\n            e.preventDefault();\r\n\r\n            var title = $('a[name=' + e.target.getAttribute('href')\r\n                .toString().substr(1) + ']');\r\n\r\n            if (title.closest('.category').hasClass('collapsed'))\r\n                title.closest('.category').children('.category-title').click();\r\n\r\n            var animate = function () {\r\n                title.fadeTo(100, 0.5, function () {\r\n                    title.fadeTo(100, 1, function () {\r\n                    });\r\n                });\r\n            };\r\n\r\n            var intoView = title.closest('.category');\r\n            if (intoView.closest(':scrollable(both)').length === 0)\r\n                animate();\r\n            else {\r\n                (intoView as any).scrollintoview({\r\n                    duration: 'fast',\r\n                    direction: 'y',\r\n                    complete: animate\r\n                });\r\n            }\r\n        }\r\n\r\n        private determineText(text: string, getKey: (s: string) => string) {\r\n            if (text != null && !Q.startsWith(text, '`')) {\r\n                var local = Q.tryGetText(text);\r\n                if (local != null) {\r\n                    return local;\r\n                }\r\n            }\r\n\r\n            if (text != null && Q.startsWith(text, '`')) {\r\n                text = text.substr(1);\r\n            }\r\n\r\n\t\t\tif (!Q.isEmptyOrNull(this.options.localTextPrefix)) {\r\n                var local1 = Q.tryGetText(getKey(this.options.localTextPrefix));\r\n                if (local1 != null) {\r\n                    return local1;\r\n                }\r\n            }\r\n\r\n\t\t\treturn text;\r\n        }\r\n\r\n        private createField(container: JQuery, item: PropertyItem) {\r\n            var fieldDiv = $('<div/>').addClass('field')\r\n                .addClass(item.name).data('PropertyItem', item).appendTo(container);\r\n\r\n            if (!Q.isEmptyOrNull(item.cssClass)) {\r\n                fieldDiv.addClass(item.cssClass);\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(item.formCssClass)) {\r\n                fieldDiv.addClass(item.formCssClass);\r\n                if (item.formCssClass.indexOf('line-break-') >= 0) {\r\n                    var splitted = item.formCssClass.split(String.fromCharCode(32));\r\n                    if (splitted.indexOf('line-break-xs') >= 0) {\r\n                        $(\"<div class='line-break' style='width: 100%' />\")\r\n                            .insertBefore(fieldDiv);\r\n                    }\r\n                    else if (splitted.indexOf('line-break-sm') >= 0) {\r\n                        $(\"<div class='line-break hidden-xs' style='width: 100%' />\")\r\n                            .insertBefore(fieldDiv);\r\n                    }\r\n                    else if (splitted.indexOf('line-break-md') >= 0) {\r\n                        $(\"<div class='line-break hidden-sm' style='width: 100%' />\")\r\n                            .insertBefore(fieldDiv);\r\n                    }\r\n                    else if (splitted.indexOf('line-break-lg') >= 0) {\r\n                        $(\"<div class='line-break hidden-md' style='width: 100%' />\")\r\n                            .insertBefore(fieldDiv);\r\n                    }\r\n                }\r\n            }\r\n            var editorId = this.options.idPrefix + item.name;\r\n            var title = this.determineText(item.title, function (prefix) {\r\n                return prefix + item.name;\r\n            });\r\n\r\n            var hint = this.determineText(item.hint, function (prefix1) {\r\n                return prefix1 + item.name + '_Hint';\r\n            });\r\n\r\n            var placeHolder = this.determineText(item.placeholder, function (prefix2) {\r\n                return prefix2 + item.name + '_Placeholder';\r\n            });\r\n\r\n            if (hint == null) {\r\n                hint = Q.coalesce(title, '');\r\n            }\r\n\r\n            var label = $('<label/>')\r\n                .addClass('caption').attr('for', editorId)\r\n                .attr('title', hint).html(Q.coalesce(title, ''))\r\n                .appendTo(fieldDiv);\r\n\r\n            if (!Q.isEmptyOrNull(item.labelWidth)) {\r\n                if (item.labelWidth === '0') {\r\n                    label.hide();\r\n                }\r\n                else {\r\n                    label.css('width', item.labelWidth);\r\n                }\r\n            }\r\n\r\n            if (item.required === true) {\r\n                $('<sup>*</sup>').attr('title',\r\n                    Q.text('Controls.PropertyGrid.RequiredHint'))\r\n                    .prependTo(label);\r\n            }\r\n\r\n            var editorType = Serenity.EditorTypeRegistry\r\n                .get(Q.coalesce(item.editorType, 'String'));\r\n            var elementAttr = (ss as any).getAttributes(editorType,\r\n                Serenity.ElementAttribute, true);\r\n            var elementHtml = ((elementAttr.length > 0) ?\r\n                elementAttr[0].value : '<input/>');\r\n\r\n            var element = Widget.elementFor(editorType as any)\r\n                .addClass('editor').addClass('flexify')\r\n                .attr('id', editorId).appendTo(fieldDiv);\r\n\r\n            if (element.is(':input')) {\r\n                element.attr('name', Q.coalesce(item.name, ''));\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(placeHolder)) {\r\n                element.attr('placeholder', placeHolder);\r\n            }\r\n            var editorParams = item.editorParams;\r\n            var optionsType = null;\r\n            var optionsAttr = (ss as any).getAttributes(editorType,\r\n                Serenity.OptionsTypeAttribute, true);\r\n\r\n            if (optionsAttr != null && optionsAttr.length > 0) {\r\n                optionsType = optionsAttr[0].optionsType;\r\n            }\r\n            var editor;\r\n            if (optionsType != null) {\r\n                editorParams = $.extend((ss as any).createInstance(optionsType),\r\n                    item.editorParams);\r\n\r\n                editor = new (editorType as any)(element, editorParams);\r\n            }\r\n            else {\r\n                editorParams = $.extend(new Object(), item.editorParams);\r\n                editor = new (editorType as any)(element, editorParams);\r\n            }\r\n\r\n            editor.initialize();\r\n\r\n            if ((ss as any).isInstanceOfType(editor, BooleanEditor) &&\r\n                (item.editorParams == null || !!!item.editorParams['labelFor'])) {\r\n                label.removeAttr('for');\r\n            }\r\n\r\n            if ((ss as any).isInstanceOfType(editor, RadioButtonEditor) &&\r\n                (item.editorParams == null || !!!item.editorParams['labelFor'])) {\r\n                label.removeAttr('for');\r\n            }\r\n\r\n            if (item.maxLength != null) {\r\n                PropertyGrid.setMaxLength(editor, item.maxLength);\r\n            }\r\n\r\n            if (item.editorParams != null) {\r\n                ReflectionOptionsSetter.set(editor, item.editorParams);\r\n            }\r\n\r\n            $('<div/>').addClass('vx').appendTo(fieldDiv);\r\n            $('<div/>').addClass('clear').appendTo(fieldDiv);\r\n\r\n            return editor;\r\n        }\r\n\r\n        private getCategoryOrder(items: PropertyItem[]) {\r\n            var order = 0;\r\n            var result = {};\r\n            var categoryOrder = Q.trimToNull(this.options.categoryOrder);\r\n            if (categoryOrder != null) {\r\n                var split = categoryOrder.split(';');\r\n                for (var s of split) {\r\n                    var x = Q.trimToNull(s);\r\n                    if (x == null) {\r\n                        continue;\r\n                    }\r\n                    if (result[x] != null) {\r\n                        continue;\r\n                    }\r\n                    result[x] = order++;\r\n                }\r\n            }\r\n\r\n            for (var x1 of items) {\r\n                var category = x1.category;\r\n                if (category == null) {\r\n                    category = Q.coalesce(this.options.defaultCategory, '');\r\n                }\r\n                if (result[category] == null) {\r\n                    result[category] = order++;\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        private createCategoryLinks(container: JQuery, items: PropertyItem[]) {\r\n\t\t\tvar idx = 0;\r\n\t\t\tvar itemIndex = {};\r\n\t\t\tvar itemCategory = {};\r\n            for (var x of items) {\r\n\t\t\t\tvar name1 = x.name;\r\n\t\t\t\tvar cat1 = x.category;\r\n\t\t\t\tif (cat1 == null) {\r\n\t\t\t\t\tcat1 = Q.coalesce(this.options.defaultCategory, '');\r\n\t\t\t\t}\r\n\t\t\t\titemCategory[name1] = cat1;\r\n\t\t\t\titemIndex[x.name] = idx++;\r\n            }\r\n\r\n\t\t\tvar self = this;\r\n\t\t\tvar categoryOrder = this.getCategoryOrder(items);\r\n\r\n            items.sort(function (x1, y) {\r\n\t\t\t\tvar c = 0;\r\n\t\t\t\tvar xcategory = itemCategory[x1.name];\r\n\t\t\t\tvar ycategory = itemCategory[y.name];\r\n\t\t\t\tif (!(ss as any).referenceEquals(xcategory, ycategory)) {\r\n\t\t\t\t\tvar c1 = categoryOrder[xcategory];\r\n\t\t\t\t\tvar c2 = categoryOrder[ycategory];\r\n\t\t\t\t\tif (c1 != null && c2 != null) {\r\n\t\t\t\t\t\tc = c1 - c2;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (c1 != null) {\r\n\t\t\t\t\t\tc = -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (c2 != null) {\r\n\t\t\t\t\t\tc = 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (c === 0) {\r\n\t\t\t\t\tc = (ss as any).compareStrings(xcategory, ycategory);\r\n\t\t\t\t}\r\n\t\t\t\tif (c === 0) {\r\n\t\t\t\t\tc = (ss as any).compare(itemIndex[x1.name], itemIndex[y.name]);\r\n\t\t\t\t}\r\n\t\t\t\treturn c;\r\n            });\r\n\r\n\t\t\tvar categoryIndexes = {};\r\n\t\t\tfor (var i = 0; i < items.length; i++) {\r\n\t\t\t\tvar item = items[i];\r\n\t\t\t\tvar category = { $: itemCategory[item.name] };\r\n                if (categoryIndexes[category.$] == null) {\r\n                    var index = Object.keys(categoryIndexes).length + 1;\r\n\t\t\t\t\tcategoryIndexes[category.$] = index;\r\n\t\t\t\t\tif (index > 1) {\r\n\t\t\t\t\t\t$('<span/>').addClass('separator').text('|').prependTo(container);\r\n\t\t\t\t\t}\r\n                    $('<a/>').addClass('category-link').text(\r\n                        this.determineText(category.$,\r\n                            (ss as any).mkdel({ category: category },\r\n                                function (prefix: string) {\r\n                                    return prefix + 'Categories.' + this.category.$;\r\n                                })))\r\n                        .attr('tabindex', '-1')\r\n                        .attr('href', '#' + this.options.idPrefix +\r\n                            'Category' + index.toString())\r\n                        .click(this.categoryLinkClick)\r\n                        .prependTo(container);\r\n\t\t\t\t}\r\n            }\r\n\r\n\t\t\t$('<div/>').addClass('clear').appendTo(container);\r\n\t\t\treturn categoryIndexes;\r\n        }\r\n\r\n        get_editors(): Widget<any>[] {\r\n            return this.editors;\r\n        }\r\n\r\n        get_items(): PropertyItem[] {\r\n            return this.items;\r\n        }\r\n\r\n        get_idPrefix(): string {\r\n            return this.options.idPrefix;\r\n        }\r\n\r\n        get_mode(): PropertyGridMode {\r\n            return this.options.mode;\r\n        }\r\n\r\n        set_mode(value: PropertyGridMode) {\r\n            if(this.options.mode !== value) {\r\n                this.options.mode = value;\r\n                this.updateInterface();\r\n            }\r\n        }\r\n\r\n        // Obsolete\r\n        static loadEditorValue(editor: Serenity.Widget<any>,\r\n            item: PropertyItem, source: any): void {\r\n        }\r\n\r\n        // Obsolete\r\n        static saveEditorValue(editor: Serenity.Widget<any>,\r\n            item: PropertyItem, target: any): void {\r\n\r\n            EditorUtils.saveValue(editor, item, target);\r\n        }\r\n\r\n        // Obsolete\r\n        private static setReadOnly(widget: Serenity.Widget<any>, isReadOnly: boolean): void {\r\n            EditorUtils.setReadOnly(widget, isReadOnly);\r\n        }\r\n\r\n        // Obsolete\r\n        private static setReadonly(elements: JQuery, isReadOnly: boolean): JQuery {\r\n            return EditorUtils.setReadonly(elements, isReadOnly);\r\n        }\r\n\r\n        // Obsolete\r\n        private static setRequired(widget: Serenity.Widget<any>, isRequired: boolean): void {\r\n            EditorUtils.setRequired(widget, isRequired);\r\n        }\r\n\r\n        private static setMaxLength(widget: Widget<any>, maxLength: number) {\r\n            if (widget.element.is(':input')) {\r\n                if (maxLength > 0) {\r\n                    widget.element.attr('maxlength', maxLength);\r\n                }\r\n                else {\r\n                    widget.element.removeAttr('maxlength');\r\n                }\r\n            }\r\n        }\r\n\r\n        load(source: any): void {\r\n            for (var i = 0; i < this.editors.length; i++) {\r\n                var item = this.items[i];\r\n                var editor = this.editors[i];\r\n                if (!!(this.get_mode() === 1 && item.defaultValue != null) &&\r\n                    typeof (source[item.name]) === 'undefined') {\r\n                    source[item.name] = item.defaultValue;\r\n                }\r\n\r\n                Serenity.EditorUtils.loadValue(editor, item, source);\r\n            }\r\n        }\r\n\r\n        save(target?: any): any {\r\n            if (target == null)\r\n                target = Object.create(null);\r\n            for (var i = 0; i < this.editors.length; i++) {\r\n                var item = this.items[i];\r\n                if (item.oneWay !== true && this.canModifyItem(item)) {\r\n                    var editor = this.editors[i];\r\n                    Serenity.EditorUtils.saveValue(editor, item, target);\r\n                }\r\n            }\r\n            return target;\r\n        }\r\n\r\n        public get value(): any {\r\n            return this.save();\r\n        }\r\n\r\n        public set value(val: any) {\r\n            if (val == null)\r\n                val = Object.create(null);\r\n            this.load(val);\r\n        }\r\n\r\n        private canModifyItem(item: PropertyItem) {\r\n            if (this.get_mode() === PropertyGridMode.insert) {\r\n                if (item.insertable === false) {\r\n                    return false;\r\n                }\r\n\r\n                if (item.insertPermission == null) {\r\n                    return true;\r\n                }\r\n\r\n                return Q.Authorization.hasPermission(item.insertPermission);\r\n            }\r\n            else if (this.get_mode() === PropertyGridMode.update) {\r\n                if (item.updatable === false) {\r\n                    return false;\r\n                }\r\n\r\n                if (item.updatePermission == null) {\r\n                    return true;\r\n                }\r\n\r\n                return Q.Authorization.hasPermission(item.updatePermission);\r\n            }\r\n\t\t\treturn true;\r\n        }\r\n\r\n        updateInterface() {\r\n            for (var i = 0; i < this.editors.length; i++) {\r\n                var item = this.items[i];\r\n                var editor = this.editors[i];\r\n                var readOnly = item.readOnly === true || !this.canModifyItem(item);\r\n                Serenity.EditorUtils.setReadOnly(editor, readOnly);\r\n                Serenity.EditorUtils.setRequired(editor, !readOnly &&\r\n                    !!item.required && item.editorType !== 'Boolean');\r\n                if (item.visible === false || item.readPermission != null ||\r\n                    item.insertPermission != null || item.updatePermission != null ||\r\n                    item.hideOnInsert === true || item.hideOnUpdate === true) {\r\n                    var hidden = (item.readPermission != null &&\r\n                        !Q.Authorization.hasPermission(item.readPermission)) ||\r\n                        item.visible === false ||\r\n                        (this.get_mode() === PropertyGridMode.insert && item.hideOnInsert === true) ||\r\n                        (this.get_mode() === 2 && item.hideOnUpdate === true);\r\n\r\n                    editor.getGridField().toggle(!hidden);\r\n                }\r\n            }\r\n        }\r\n\r\n        enumerateItems(callback: (p1: PropertyItem, p2: Serenity.Widget<any>) => void): void {\r\n            for (var i = 0; i < this.editors.length; i++) {\r\n                var item = this.items[i];\r\n                var editor = this.editors[i];\r\n                callback(item, editor);\r\n            }\r\n        }\r\n    }\r\n\r\n    export declare const enum PropertyGridMode {\r\n        insert = 1,\r\n        update = 2\r\n    }\r\n\r\n    export interface PropertyGridOptions {\r\n        idPrefix?: string;\r\n        items?: PropertyItem[];\r\n        useCategories?: boolean;\r\n        categoryOrder?: string;\r\n        defaultCategory?: string;\r\n        localTextPrefix?: string;\r\n        mode?: PropertyGridMode;\r\n    }\r\n}","namespace Serenity {\r\n    export interface ToolButton {\r\n        title?: string;\r\n        hint?: string;\r\n        cssClass?: string;\r\n        icon?: string;\r\n        onClick?: any;\r\n        htmlEncode?: any;\r\n        hotkey?: string;\r\n        hotkeyAllowDefault?: boolean;\r\n        hotkeyContext?: any;\r\n        separator?: (false | true | 'left' | 'right' | 'both');\r\n        visible?: boolean | (() => boolean);\r\n        disabled?: boolean | (() => boolean);\r\n    }\r\n\r\n    export interface PopupMenuButtonOptions {\r\n        menu?: JQuery;\r\n        onPopup?: () => void;\r\n        positionMy?: string;\r\n        positionAt?: string;\r\n    }\r\n\r\n    @Decorators.registerEditor('Serenity.PopupMenuButton')\r\n    export class PopupMenuButton extends Widget<PopupMenuButtonOptions> {\r\n        constructor(div: JQuery, opt: PopupMenuButtonOptions) {\r\n            super(div, opt);\r\n\r\n            div.addClass('s-PopupMenuButton');\r\n            div.click(e => {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                if (this.options.onPopup != null) {\r\n                    this.options.onPopup();\r\n                }\r\n\r\n                var menu = this.options.menu;\r\n                menu.show().position({\r\n                    my: Q.coalesce(this.options.positionMy, 'left top'),\r\n                    at: Q.coalesce(this.options.positionAt, 'left bottom'),\r\n                    of: this.element\r\n                });\r\n\r\n                var uq = this.uniqueName;\r\n                $(document).one('click.' + uq, function (x) {\r\n                    menu.hide();\r\n                });\r\n            });\r\n\r\n            this.options.menu.hide().appendTo(document.body)\r\n                .addClass('s-PopupMenu').menu();\r\n        }\r\n\r\n        destroy() {\r\n            if (this.options.menu != null) { \r\n                this.options.menu.remove();\r\n                this.options.menu = null;\r\n            }\r\n\r\n            super.destroy();\r\n        }\r\n    }\r\n\r\n\r\n    export interface PopupToolButtonOptions extends PopupMenuButtonOptions {\r\n    }\r\n\r\n    @Decorators.registerEditor('Serenity.PopupToolButton')\r\n    export class PopupToolButton extends PopupMenuButton {\r\n        constructor(div: JQuery, opt: PopupToolButtonOptions) {\r\n            super(div, opt);\r\n\r\n            div.addClass('s-PopupToolButton');\r\n            $('<b/>').appendTo(div.children('.button-outer').children('span'));\r\n        }\r\n    }\r\n\r\n    export interface ToolbarOptions {\r\n        buttons?: ToolButton[];\r\n        hotkeyContext?: any;\r\n    }\r\n\r\n    @Decorators.registerClass('Serenity.Toolbar')\r\n    export class Toolbar extends Widget<ToolbarOptions> {\r\n        constructor(div: JQuery, options: ToolbarOptions) {\r\n            super(div, options);\r\n\r\n            this.element.addClass('s-Toolbar clearfix')\r\n                .html('<div class=\"tool-buttons\"><div class=\"buttons-outer\">' +\r\n                    '<div class=\"buttons-inner\"></div></div></div>');\r\n            var container = $('div.buttons-inner', this.element);\r\n            var buttons = this.options.buttons;\r\n            for (var i = 0; i < buttons.length; i++) {\r\n                this.createButton(container, buttons[i]);\r\n            }\r\n        }\r\n\r\n        destroy() {\r\n            this.element.find('div.tool-button').unbind('click');\r\n            if (this.mouseTrap) {\r\n                if (!!this.mouseTrap.destroy) {\r\n                    this.mouseTrap.destroy();\r\n                }\r\n                else {\r\n                    this.mouseTrap.reset();\r\n                }\r\n                this.mouseTrap = null;\r\n            }\r\n\r\n            super.destroy();\r\n        }\r\n\r\n        protected mouseTrap: any;\r\n\r\n        protected createButton(container: JQuery, b: ToolButton) {\r\n            var cssClass = Q.coalesce(b.cssClass, '');\r\n\r\n            if (b.separator === true || b.separator === 'left' || b.separator === 'both') {\r\n                $('<div class=\"separator\"></div>').appendTo(container);\r\n            }\r\n\r\n            var btn = $('<div class=\"tool-button\"><div class=\"button-outer\">' +\r\n                '<span class=\"button-inner\"></span></div></div>')\r\n                .appendTo(container);\r\n\r\n            if (b.separator === 'right' || b.separator === 'both') {\r\n                $('<div class=\"separator\"></div>').appendTo(container);\r\n            }\r\n\r\n            if (cssClass.length > 0) {\r\n\t\t\t\tbtn.addClass(cssClass);\r\n\t\t\t}\r\n\r\n            if (!Q.isEmptyOrNull(b.hint)) {\r\n\t\t\t\tbtn.attr('title', b.hint);\r\n\t\t\t}\r\n\r\n            btn.click(function (e) {\r\n\t\t\t\tif (btn.hasClass('disabled')) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tb.onClick(e);\r\n            });\r\n\r\n\t\t\tvar text = b.title;\r\n\t\t\tif (b.htmlEncode !== false) {\r\n\t\t\t\ttext = Q.htmlEncode(b.title);\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(b.icon)) {\r\n\t\t\t\tbtn.addClass('icon-tool-button');\r\n\t\t\t\tvar klass = b.icon;\r\n\t\t\t\tif (Q.startsWith(klass, 'fa-')) {\r\n\t\t\t\t\tklass = 'fa ' + klass;\r\n                }\r\n                else if (Q.startsWith(klass, 'glyphicon-')) {\r\n\t\t\t\t\tklass = 'glyphicon ' + klass;\r\n\t\t\t\t}\r\n\t\t\t\ttext = \"<i class='\" + klass + \"'></i> \" + text;\r\n\t\t\t}\r\n\t\t\tif (text == null || text.length === 0) {\r\n\t\t\t\tbtn.addClass('no-text');\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tbtn.find('span').html(text);\r\n            }\r\n\r\n            if (b.visible === false)\r\n                btn.hide();\r\n\r\n            if (b.disabled != null && typeof b.disabled !== \"function\")\r\n                btn.toggleClass('disabled', !!b.disabled);\r\n\r\n            if (typeof b.visible === \"function\" || typeof b.disabled == \"function\") {\r\n                btn.on('updateInterface', () => {\r\n                    if (typeof b.visible === \"function\")\r\n                        btn.toggle(!!b.visible());\r\n\r\n                    if (typeof b.disabled === \"function\")\r\n                        btn.toggleClass(\"disabled\", !!b.disabled());\r\n                });\r\n            }\r\n\r\n            if (!!(!Q.isEmptyOrNull(b.hotkey) && window['Mousetrap'] != null)) {\r\n                this.mouseTrap = this.mouseTrap || window['Mousetrap'](\r\n                    b.hotkeyContext || this.options.hotkeyContext || window.document.documentElement);\r\n\r\n                this.mouseTrap.bind(b.hotkey, function (e1: BaseJQueryEventObject, action: any) {\r\n\t\t\t\t\tif (btn.is(':visible')) {\r\n\t\t\t\t\t\tbtn.triggerHandler('click');\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn b.hotkeyAllowDefault;\r\n\t\t\t\t});\r\n\t\t\t}\r\n        }\r\n\r\n        findButton(className: string): JQuery {\r\n            if (className != null && Q.startsWith(className, '.')) {\r\n                className = className.substr(1);\r\n            }\r\n            return $('div.tool-button.' + className, this.element);\r\n        }\r\n\r\n        updateInterface() {\r\n            this.element.find('.tool-button').each(function (i: number, el: Element) {\r\n                $(el).triggerHandler('updateInterface')\r\n            });\r\n        }\r\n    }\r\n}\r\n","namespace Serenity {\r\n    export interface CreateWidgetParams<TWidget extends Widget<TOptions>, TOptions> {\r\n        type?: new (element: JQuery, options?: TOptions) => TWidget;\r\n        options?: TOptions;\r\n        container?: JQuery;\r\n        element?: (e: JQuery) => void;\r\n        init?: (w: TWidget) => void;\r\n    }\r\n}","declare namespace Serenity {\r\n\r\n    namespace CustomValidation {\r\n        function registerValidationMethods(): void;\r\n    }\r\n\r\n    type CustomValidationRule = (element: JQuery) => string;\r\n\r\n}","namespace Serenity {\r\n\r\n    export interface IValidateRequired {\r\n        get_required(): boolean;\r\n        set_required(value: boolean): void;\r\n    }\r\n\r\n    @Decorators.registerInterface('Serenity.IValidateRequired')\r\n    export class IValidateRequired {\r\n    }\r\n}","declare namespace Serenity {\r\n\r\n    interface DataChangeInfo {\r\n        type: string;\r\n        entityId: any;\r\n        entity: any;\r\n    }\r\n\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerInterface('Serenity.IDialog')\r\n    export class IDialog {\r\n    }\r\n\r\n    export interface IDialog {\r\n        dialogOpen(asPanel?: boolean): void;\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass([Serenity.IDialog])\r\n    export class TemplatedDialog<TOptions> extends TemplatedWidget<TOptions> {\r\n\r\n        protected tabs: JQuery;\r\n        protected toolbar: Serenity.Toolbar;\r\n        protected validator: JQueryValidation.Validator;\r\n\r\n        constructor(options?: TOptions) {\r\n            super(Q.newBodyDiv().addClass('s-TemplatedDialog hidden'), options);\r\n\r\n            this.element.attr(\"id\", this.uniqueName);\r\n\r\n            this.initValidator();\r\n            this.initTabs();\r\n            this.initToolbar();\r\n        }\r\n\r\n        private get isMarkedAsPanel() {\r\n            var panelAttr = (ss as any).getAttributes((ss as any).getInstanceType(this),\r\n                Serenity.PanelAttribute, true) as Serenity.PanelAttribute[];\r\n            return panelAttr.length > 0 && panelAttr[panelAttr.length - 1].value !== false;\r\n        }\r\n\r\n        private get isResponsive() {\r\n            return Q.Config.responsiveDialogs ||\r\n                (ss as any).getAttributes((ss as any).getInstanceType(this), ResponsiveAttribute, true).length > 0;\r\n        }\r\n\r\n        private static getCssSize(element: JQuery, name: string): number {\r\n            var cssSize = element.css(name);\r\n            if (cssSize == null) {\r\n                return null;\r\n            }\r\n\r\n            if (!Q.endsWith(cssSize, 'px')) {\r\n                return null;\r\n            }\r\n\r\n            cssSize = cssSize.substr(0, cssSize.length - 2);\r\n            let i = Q.parseInteger(cssSize);\r\n            if (i == null || isNaN(i) || i == 0)\r\n                return null;\r\n\r\n            return i;\r\n        }\r\n\r\n        private static applyCssSizes(opt: JQueryUI.DialogOptions, dialogClass: string) {\r\n            let size: number;\r\n            let dialog = $('<div/>').hide().addClass(dialogClass).appendTo(document.body);\r\n            try {\r\n                var sizeHelper = $('<div/>').addClass('size').appendTo(dialog);\r\n                size = TemplatedDialog.getCssSize(sizeHelper, 'minWidth'); \r\n                if (size != null)\r\n                    opt.minWidth = size;\r\n\r\n                size = TemplatedDialog.getCssSize(sizeHelper, 'width');\r\n                if (size != null)\r\n                    opt.width = size;\r\n\r\n                size = TemplatedDialog.getCssSize(sizeHelper, 'height');\r\n                if (size != null)\r\n                    opt.height = size;\r\n\r\n                size = TemplatedDialog.getCssSize(sizeHelper, 'minHeight');\r\n                if (size != null)\r\n                    opt.minHeight = size;\r\n            }\r\n            finally {\r\n                dialog.remove();\r\n            }\r\n        };\r\n\r\n        public destroy(): void {\r\n            this.tabs && this.tabs.tabs('destroy');\r\n            this.tabs = null;\r\n            this.toolbar && this.toolbar.destroy();\r\n            this.toolbar = null;\r\n            this.validator && this.byId('Form').remove();\r\n            this.validator = null;\r\n            if (this.element != null &&\r\n                this.element.hasClass('ui-dialog-content')) {\r\n                this.element.dialog('destroy');\r\n                this.element.removeClass('ui-dialog-content');\r\n            }\r\n            $(window).unbind('.' + this.uniqueName);\r\n            super.destroy();\r\n        }\r\n\r\n        protected initDialog(): void {\r\n            if (this.element.hasClass('ui-dialog-content'))\r\n                return;\r\n\r\n            this.element.removeClass('hidden');\r\n\r\n            this.element.dialog(this.getDialogOptions());\r\n            this.element.closest('.ui-dialog').on('resize', e => this.arrange());\r\n\r\n            let type = (ss as any).getInstanceType(this);\r\n\r\n            if (this.isResponsive) {\r\n                DialogExtensions.dialogResizable(this.element);\r\n\r\n                $(window).bind('resize.' + this.uniqueName, e => {\r\n                    if (this.element && this.element.is(':visible')) {\r\n                        this.handleResponsive();\r\n                    }\r\n                });\r\n\r\n                this.element.closest('.ui-dialog').addClass('flex-layout');\r\n            }\r\n            else if ((ss as any).getAttributes(type, FlexifyAttribute, true).length > 0) {\r\n                DialogExtensions.dialogFlexify(this.element);\r\n                DialogExtensions.dialogResizable(this.element);\r\n            }\r\n\r\n            if ((ss as any).getAttributes(type, MaximizableAttribute, true).length > 0) {\r\n                DialogExtensions.dialogMaximizable(this.element);\r\n            }\r\n\r\n            var self = this;\r\n            this.element.bind('dialogopen.' + this.uniqueName, () => {\r\n                $(document.body).addClass('modal-dialog-open');\r\n\r\n                if (this.isResponsive) {\r\n                    this.handleResponsive();\r\n                }\r\n\r\n                self.onDialogOpen();\r\n            });\r\n\r\n            this.element.bind('dialogclose.' + this.uniqueName, () => {\r\n                $(document.body).toggleClass('modal-dialog-open', $('.ui-dialog:visible').length > 0);\r\n                self.onDialogClose();\r\n            });\r\n        }\r\n\r\n        protected initToolbar(): void {\r\n            var toolbarDiv = this.byId('Toolbar');\r\n            if (toolbarDiv.length === 0) {\r\n                return;\r\n            }\r\n\r\n            var hotkeyContext = this.element.closest('.ui-dialog');\r\n            if (hotkeyContext.length === 0) {\r\n                hotkeyContext = this.element;\r\n            }\r\n\r\n            var opt = { buttons: this.getToolbarButtons(), hotkeyContext: hotkeyContext[0] };\r\n            this.toolbar = new Toolbar(toolbarDiv, opt);\r\n        }\r\n\r\n        protected getToolbarButtons(): ToolButton[] {\r\n            return [];\r\n        }\r\n\r\n        protected getValidatorOptions(): JQueryValidation.ValidationOptions {\r\n            return {};\r\n        }\r\n\r\n        protected initValidator(): void {\r\n            var form = this.byId('Form');\r\n            if (form.length > 0) {\r\n                var valOptions = this.getValidatorOptions();\r\n                this.validator = form.validate(Q.validateOptions(valOptions));\r\n            }\r\n        }\r\n\r\n        protected resetValidation() {\r\n            this.validator && (this.validator as any).resetAll();\r\n        }\r\n\r\n        protected validateForm() {\r\n            return this.validator == null || !!this.validator.form();\r\n        }\r\n\r\n        public dialogOpen(asPanel?: boolean): void {\r\n            asPanel = Q.coalesce(asPanel, this.isMarkedAsPanel);\r\n            if (asPanel) {\r\n                if (!this.element.hasClass('s-Panel')) {\r\n                    // so that panel title is created if needed\r\n                    this.element.on('panelopen.' + this.uniqueName, () => {\r\n                        this.onDialogOpen();\r\n                    });\r\n                    this.element.on('panelclose.' + this.uniqueName, () => {\r\n                        this.onDialogClose();\r\n                    });\r\n                }\r\n\r\n                TemplatedDialog.openPanel(this.element, this.uniqueName);\r\n                this.setupPanelTitle();\r\n            }\r\n            else {\r\n                if (!this.element.hasClass('ui-dialog-content'))\r\n                    this.initDialog();\r\n\r\n                this.element.dialog('open');\r\n            }\r\n        }\r\n\r\n        public static openPanel(element: JQuery, uniqueName: string) {\r\n            var container = $('.panels-container');\r\n            if (!container.length)\r\n                container = $('section.content');\r\n\r\n            element.data('paneluniquename', uniqueName);\r\n\r\n            if (container.length) {\r\n                container = container.last();\r\n                container.children()\r\n                    .not(element)\r\n                    .not('.panel-hidden')\r\n                    .addClass('panel-hidden panel-hidden-' + uniqueName);\r\n\r\n                if (element[0].parentElement !== container[0])\r\n                    element.appendTo(container);\r\n            }\r\n\r\n            $('.ui-dialog:visible, .ui-widget-overlay:visible')\r\n                .not(element)\r\n                .addClass('panel-hidden panel-hidden-' + uniqueName);\r\n\r\n            element\r\n                .removeClass('hidden')\r\n                .removeClass('panel-hidden')\r\n                .addClass('s-Panel')\r\n                .trigger('panelopen');\r\n        }\r\n\r\n        public static closePanel(element: JQuery, e?: JQueryEventObject) {\r\n            if (!element.hasClass('s-Panel') || element.hasClass('hidden'))\r\n                return;\r\n\r\n            var query = $.Event(e as any);\r\n            (query as any).type = 'panelbeforeclose';\r\n            query.target = element[0];\r\n            element.trigger(query);\r\n            if (query.isDefaultPrevented())\r\n                return;\r\n\r\n            element.addClass('hidden');\r\n            var uniqueName = element.data('paneluniquename') || new Date().getTime();\r\n            var klass = 'panel-hidden-' + uniqueName;\r\n            $('.' + klass).removeClass(klass).removeClass('panel-hidden');\r\n            $(window).triggerHandler('resize');\r\n            $('.require-layout:visible').triggerHandler('layout');\r\n\r\n            var e = $.Event(e as any);\r\n            (e as any).type = 'panelclose';\r\n            (e as any).target = element[0];\r\n            element.trigger(e);\r\n        }\r\n\r\n        protected onDialogOpen(): void {\r\n            if (!$(document.body).hasClass('mobile-device'))\r\n                $(':input', this.element).not('button').eq(0).focus();\r\n            this.arrange();\r\n            this.tabs && this.tabs.tabs('option', 'active', 0);\r\n        }\r\n\r\n        protected arrange(): void {\r\n            this.element.find('.require-layout').filter(':visible').each(function (i, e) {\r\n                $(e).triggerHandler('layout');\r\n            });\r\n        }\r\n\r\n        protected onDialogClose() {\r\n            $(document).trigger('click');\r\n\r\n            // for tooltips etc.\r\n            if (($ as any).qtip) {\r\n                $(document.body).children('.qtip').each(function (index, el) {\r\n                    ($(el) as any).qtip('hide');\r\n                });\r\n            }\r\n\r\n            window.setTimeout(() => {\r\n                var element = this.element;\r\n                this.destroy();\r\n                element.remove();\r\n                Q.positionToastContainer(false);\r\n            }, 0);\r\n        }\r\n\r\n        protected addCssClass(): void {\r\n            if (this.isMarkedAsPanel) {\r\n                super.addCssClass();\r\n\r\n                if (this.isResponsive)\r\n                    this.element.addClass(\"flex-layout\");\r\n            }\r\n        }\r\n\r\n        protected getDialogOptions(): JQueryUI.DialogOptions {\r\n            var opt: JQueryUI.DialogOptions = {};\r\n            var dialogClass = 's-Dialog ' + this.getCssClass();\r\n            opt.dialogClass = dialogClass;\r\n            opt.width = 920;\r\n            TemplatedDialog.applyCssSizes(opt, dialogClass);\r\n            opt.autoOpen = false;\r\n            let type = (ss as any).getInstanceType(this);\r\n            opt.resizable = (ss as any).getAttributes(type, Serenity.ResizableAttribute, true).length > 0;\r\n            opt.modal = true;\r\n            opt.position = { my: 'center', at: 'center', of: $(window.window) };\r\n            opt.title = Q.coalesce(this.element.data('dialogtitle'), this.getDialogTitle()) || '';\r\n            return opt;\r\n        }\r\n\r\n        protected getDialogTitle() {\r\n            return \"\";\r\n        }\r\n\r\n        public dialogClose(): void {\r\n            if (this.element.hasClass('ui-dialog-content'))\r\n                this.element.dialog().dialog('close');\r\n            else if (this.element.hasClass('s-Panel') && !this.element.hasClass('hidden')) {\r\n                TemplatedDialog.closePanel(this.element);\r\n            }\r\n        }\r\n\r\n        public get dialogTitle(): string {\r\n            if (this.element.hasClass('ui-dialog-content'))\r\n                return this.element.dialog('option', 'title');\r\n\r\n            return this.element.data('dialogtitle');\r\n        }\r\n\r\n        private setupPanelTitle() {\r\n            var value = Q.coalesce(this.dialogTitle, this.getDialogTitle());\r\n            var pt = this.element.children('.panel-titlebar');\r\n\r\n            if (Q.isEmptyOrNull(value)) {\r\n                pt.remove();\r\n            }\r\n            else {\r\n                if (!this.element.children('.panel-titlebar').length) {\r\n                    pt = $(\"<div class='panel-titlebar'><div class='panel-titlebar-text'></div></div>\")\r\n                        .prependTo(this.element);\r\n                }\r\n                pt.children('.panel-titlebar-text').text(value);\r\n\r\n                if (this.element.hasClass('s-Panel')) {\r\n                    if (!pt.children('.panel-titlebar-close').length) {\r\n                        $('<button class=\"panel-titlebar-close\">&nbsp;</button>')\r\n                            .prependTo(pt)\r\n                            .click(e => {\r\n                                TemplatedDialog.closePanel(this.element, e);\r\n                            });\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public set dialogTitle(value: string) {\r\n            var oldTitle = this.dialogTitle;\r\n            this.element.data('dialogtitle', value);\r\n\r\n            if (this.element.hasClass('ui-dialog-content'))\r\n                this.element.dialog('option', 'title', value);\r\n            else if (this.element.hasClass('s-Panel')) {\r\n                if (oldTitle != this.dialogTitle) {\r\n                    this.setupPanelTitle();\r\n                    this.arrange();\r\n                }\r\n\r\n            }\r\n        }\r\n\r\n        public set_dialogTitle(value: string) {\r\n            this.dialogTitle = value;\r\n        }\r\n\r\n        protected initTabs(): void {\r\n            var tabsDiv = this.byId('Tabs');\r\n            if (tabsDiv.length === 0) {\r\n                return;\r\n            }\r\n            this.tabs = tabsDiv.tabs({});\r\n            this.tabs.bind('tabsactivate', () => this.arrange());\r\n        }\r\n\r\n        protected handleResponsive(): void {\r\n            var dlg = this.element.dialog();\r\n            var uiDialog = this.element.closest('.ui-dialog');\r\n            if ($(document.body).hasClass('mobile-device')) {\r\n                var data = this.element.data('responsiveData');\r\n                if (!data) {\r\n                    data = {};\r\n                    data.draggable = dlg.dialog('option', 'draggable');\r\n                    data.resizable = dlg.dialog('option', 'resizable');\r\n                    data.position = dlg.css('position');\r\n                    var pos = uiDialog.position();\r\n                    data.left = pos.left;\r\n                    data.top = pos.top;\r\n                    data.width = uiDialog.width();\r\n                    data.height = uiDialog.height();\r\n                    data.contentHeight = this.element.height();\r\n                    this.element.data('responsiveData', data);\r\n                    dlg.dialog('option', 'draggable', false);\r\n                    dlg.dialog('option', 'resizable', false);\r\n                }\r\n                uiDialog.addClass('mobile-layout');\r\n                uiDialog.css({ left: '0px', top: '0px', width: $(window).width() + 'px', height: $(window).height() + 'px', position: 'fixed' });\r\n                $(document.body).scrollTop(0);\r\n                Q.layoutFillHeight(this.element);\r\n            }\r\n            else {\r\n                var d = this.element.data('responsiveData');\r\n                if (d) {\r\n                    dlg.dialog('option', 'draggable', d.draggable);\r\n                    dlg.dialog('option', 'resizable', d.resizable);\r\n                    this.element.closest('.ui-dialog').css({ left: '0px', top: '0px', width: d.width + 'px', height: d.height + 'px', position: d.position });\r\n                    this.element.height(d.contentHeight);\r\n                    uiDialog.removeClass('mobile-layout');\r\n                    this.element.removeData('responsiveData');\r\n                }\r\n            }\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerClass('Serenity.PropertyDialog')\r\n    export class PropertyDialog<TItem, TOptions> extends TemplatedDialog<TOptions> {\r\n        protected _entity: TItem;\r\n        protected _entityId: any;\r\n\r\n        constructor(opt?: TOptions) {\r\n            super(opt);\r\n\r\n            if (!this.isAsyncWidget()) {\r\n                this.initPropertyGrid();\r\n                this.loadInitialEntity();\r\n            }\r\n        }\r\n\r\n        destroy() {\r\n            if (this.propertyGrid) {\r\n                this.propertyGrid.destroy();\r\n                this.propertyGrid = null;\r\n            }\r\n\r\n            if (this.validator) {\r\n                this.byId('Form').remove();\r\n                this.validator = null;\r\n            }\r\n\r\n            super.destroy();\r\n        }\r\n\r\n        protected initPropertyGridAsync() {\r\n            return Promise.resolve().then(() => {\r\n                var pgDiv = this.byId('PropertyGrid');\r\n                if (pgDiv.length <= 0) {\r\n                    return Promise.resolve();\r\n                }\r\n                return this.getPropertyGridOptionsAsync().then(pgOptions => {\r\n                    this.propertyGrid = new Serenity.PropertyGrid(pgDiv, pgOptions);\r\n                    if (this.element.closest('.ui-dialog').hasClass('s-Flexify')) {\r\n                        this.propertyGrid.element.children('.categories').flexHeightOnly(1);\r\n                    }\r\n                    return this.propertyGrid.initialize();\r\n                });\r\n            });\r\n        }\r\n\r\n        protected getDialogOptions() {\r\n            var opt = super.getDialogOptions();\r\n            opt.buttons = this.getDialogButtons();\r\n            opt.width = 400;\r\n            return opt;\r\n        }\r\n\r\n        protected getDialogButtons(): JQueryUI.DialogButtonOptions[] {\r\n            return [{\r\n                text: Q.text('Dialogs.OkButton'),\r\n                click: () => this.okClick()\r\n            }, {\r\n                text: Q.text('Dialogs.CancelButton'),\r\n                click: () => this.cancelClick()\r\n            }];\r\n        }\r\n\r\n        protected okClick() {\r\n            if (!this.validateBeforeSave()) {\r\n                return;\r\n            }\r\n\r\n            this.okClickValidated();\r\n        }\r\n\r\n        protected okClickValidated() {\r\n            this.dialogClose();\r\n        }\r\n\r\n        protected cancelClick() {\r\n            this.dialogClose();\r\n        }\r\n\r\n        protected initPropertyGrid() {\r\n            var pgDiv = this.byId('PropertyGrid');\r\n            if (pgDiv.length <= 0) {\r\n                return;\r\n            }\r\n            var pgOptions = this.getPropertyGridOptions();\r\n            this.propertyGrid = (new Serenity.PropertyGrid(pgDiv, pgOptions)).init(null);\r\n            if (this.element.closest('.ui-dialog').hasClass('s-Flexify')) {\r\n                this.propertyGrid.element.children('.categories').flexHeightOnly(1);\r\n            }\r\n        }\r\n\r\n        protected getFormKey(): string {\r\n            var attributes = (ss as any).getAttributes(\r\n                (ss as any).getInstanceType(this), Serenity.FormKeyAttribute, true);\r\n            if (attributes.length >= 1) {\r\n                return attributes[0].value;\r\n            }\r\n            else {\r\n                var name = (ss as any).getTypeFullName((ss as any).getInstanceType(this));\r\n                var px = name.indexOf('.');\r\n                if (px >= 0) {\r\n                    name = name.substring(px + 1);\r\n                }\r\n                if (Q.endsWith(name, 'Dialog')) {\r\n                    name = name.substr(0, name.length - 6);\r\n                }\r\n                else if (Q.endsWith(name, 'Panel')) {\r\n                    name = name.substr(0, name.length - 5);\r\n                }\r\n                return name;\r\n            }\r\n        }\r\n\r\n        protected getPropertyGridOptions(): PropertyGridOptions {\r\n            return {\r\n                idPrefix: this.idPrefix,\r\n                items: this.getPropertyItems(),\r\n                mode: 1,\r\n                useCategories: false,\r\n                localTextPrefix: 'Forms.' + this.getFormKey() + '.'\r\n            };\r\n        }\r\n\r\n        protected getPropertyGridOptionsAsync(): PromiseLike<PropertyGridOptions> {\r\n            return this.getPropertyItemsAsync().then(propertyItems => {\r\n                return {\r\n                    idPrefix: this.idPrefix,\r\n                    items: propertyItems, mode: 1,\r\n                    useCategories: false,\r\n                    localTextPrefix: 'Forms.' + this.getFormKey() + '.'\r\n                };\r\n            });\r\n        }\r\n\r\n        protected getPropertyItems(): PropertyItem[] {\r\n            var formKey = this.getFormKey();\r\n            return Q.getForm(formKey);\r\n        }\r\n\r\n        protected getPropertyItemsAsync(): PromiseLike<PropertyItem[]> {\r\n            return Promise.resolve().then(() => {\r\n                var formKey = this.getFormKey();\r\n                return Q.getFormAsync(formKey);\r\n            });\r\n        }\r\n\r\n        protected getSaveEntity(): TItem {\r\n            var entity = new Object();\r\n            if (this.propertyGrid) {\r\n                this.propertyGrid.save(entity);\r\n            }\r\n            return entity as TItem;\r\n        }\r\n\r\n        protected initializeAsync(): PromiseLike<void> {\r\n            return super.initializeAsync()\r\n                .then(() => this.initPropertyGridAsync())\r\n                .then(() => this.loadInitialEntity());\r\n        }\r\n\r\n        protected loadInitialEntity(): void {\r\n            this.propertyGrid && this.propertyGrid.load(new Object());\r\n        }\r\n\r\n        protected get_entity() {\r\n            return this._entity;\r\n        }\r\n\r\n        protected set_entity(value: TItem) {\r\n            this._entity = Q.coalesce(value, new Object()) as any;\r\n        }\r\n\r\n        protected get_entityId() {\r\n            return this._entityId;\r\n        }\r\n\r\n        protected set_entityId(value: any): void {\r\n            this._entityId = value;\r\n        }\r\n\r\n        protected validateBeforeSave(): boolean {\r\n            return this.validator.form();\r\n        }\r\n\r\n        protected updateTitle() {\r\n        }\r\n\r\n        protected propertyGrid: Serenity.PropertyGrid;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerClass('Serenity.FilterDialog')\r\n    export class FilterDialog extends TemplatedDialog<any> {\r\n\r\n        private filterPanel: FilterPanel;\r\n\r\n        constructor() {\r\n            super();\r\n\r\n            this.filterPanel = new FilterPanel(this.byId('FilterPanel'));\r\n            this.filterPanel.set_showInitialLine(true);\r\n            this.filterPanel.set_showSearchButton(false);\r\n            this.filterPanel.set_updateStoreOnReset(false);\r\n        }\r\n\r\n        get_filterPanel(): FilterPanel {\r\n            return this.filterPanel;\r\n        }\r\n\r\n        protected getTemplate(): string {\r\n            return '<div id=\"~_FilterPanel\"/>';\r\n        }\r\n\r\n        protected getDialogOptions() {\r\n            var opt = super.getDialogOptions();\r\n\r\n            opt.buttons = [\r\n                {\r\n                    text: Q.text('Dialogs.OkButton'),\r\n                    click: () => {\r\n                        this.filterPanel.search();\r\n                        if (this.filterPanel.get_hasErrors()) {\r\n                            Q.notifyError(Q.text('Controls.FilterPanel.FixErrorsMessage'), '', null);\r\n                            return;\r\n                        }\r\n\r\n                        this.dialogClose();\r\n                    }\r\n                },\r\n                {\r\n                    text: Q.text('Dialogs.CancelButton'),\r\n                    click: () => this.dialogClose()\r\n                }\r\n            ];\r\n\r\n            opt.title = Q.text('Controls.FilterPanel.DialogTitle');\r\n\r\n            return opt;\r\n        }\r\n    }\r\n\r\n}","namespace Serenity {\r\n    export interface QuickFilterBarOptions {\r\n        filters: QuickFilter<Widget<any>, any>[];\r\n        getTitle?: (filter: QuickFilter<Widget<any>, any>) => string;\r\n        idPrefix?: string;\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass('Serenity.QuickFilterBar')\r\n    @Serenity.Decorators.element(\"<div/>\")\r\n    export class QuickFilterBar extends Widget<QuickFilterBarOptions> {\r\n\r\n        constructor(container: JQuery, options?: QuickFilterBarOptions) {\r\n            super(container, options);\r\n\r\n            container.addClass('quick-filters-bar').addClass('clear');\r\n\r\n            var filters = this.options.filters;\r\n            for (var f = 0; f < filters.length; f++) {\r\n                var filter = filters[f];\r\n                this.add(filter);\r\n            }\r\n\r\n            this.options.idPrefix = Q.coalesce(this.options.idPrefix, this.uniqueName + '_');\r\n        }\r\n\r\n        public addSeparator(): void {\r\n            this.element.append($('<hr/>'));\r\n        }\r\n\r\n        public add<TWidget extends Widget<any>, TOptions>(opt: QuickFilter<TWidget, TOptions>): TWidget {\r\n\r\n            if (opt == null) {\r\n                throw new (ss as any).ArgumentNullException('opt');\r\n            }\r\n\r\n            if (opt.separator) {\r\n                this.addSeparator();\r\n            }\r\n\r\n            var item = $(\"<div class='quick-filter-item'><span class='quick-filter-label'></span></div>\")\r\n                .appendTo(this.element)\r\n                .data('qffield', opt.field).children();\r\n\r\n            var title = opt.title;\r\n            if (title == null) {\r\n                title = this.options.getTitle ? this.options.getTitle(opt) : null;\r\n                if (title == null) {\r\n                    title = opt.field;\r\n                }\r\n            }\r\n\r\n            var quickFilter = item.text(title).parent();\r\n\r\n            if (opt.displayText != null) {\r\n                quickFilter.data('qfdisplaytext', opt.displayText);\r\n            }\r\n\r\n            if (opt.saveState != null) {\r\n                quickFilter.data('qfsavestate', opt.saveState);\r\n            }\r\n\r\n            if (opt.loadState != null) {\r\n                quickFilter.data('qfloadstate', opt.loadState);\r\n            }\r\n\r\n            if (!Q.isEmptyOrNull(opt.cssClass)) {\r\n                quickFilter.addClass(opt.cssClass);\r\n            }\r\n\r\n            var widget = Serenity.Widget.create({\r\n                type: opt.type,\r\n                element: e => {\r\n                    if (!Q.isEmptyOrNull(opt.field)) {\r\n                        e.attr('id', this.options.idPrefix + opt.field);\r\n                    }\r\n                    e.attr('placeholder', ' ');\r\n                    e.appendTo(quickFilter);\r\n                    if (opt.element != null) {\r\n                        opt.element(e);\r\n                    }\r\n                },\r\n                options: opt.options,\r\n                init: opt.init\r\n            });\r\n\r\n            var submitHandler = (request: Serenity.ListRequest) => {\r\n\r\n                if (quickFilter.hasClass('ignore')) {\r\n                    return;\r\n                }\r\n\r\n                request.EqualityFilter = request.EqualityFilter || {};\r\n                var value = Serenity.EditorUtils.getValue(widget);\r\n                var active = value != null && !Q.isEmptyOrNull(value.toString());\r\n                if (opt.handler != null) {\r\n                    var args = {\r\n                        field: opt.field,\r\n                        request: request,\r\n                        equalityFilter: request.EqualityFilter,\r\n                        value: value,\r\n                        active: active,\r\n                        widget: widget,\r\n                        handled: true\r\n                    };\r\n                    opt.handler(args);\r\n                    quickFilter.toggleClass('quick-filter-active', args.active);\r\n                    if (!args.handled) {\r\n                        request.EqualityFilter[opt.field] = value;\r\n                    }\r\n                }\r\n                else {\r\n                    request.EqualityFilter[opt.field] = value;\r\n                    quickFilter.toggleClass('quick-filter-active', active);\r\n                }\r\n            };\r\n\r\n            Serenity.WX.changeSelect2(widget, (e1: JQueryEventObject) => {\r\n                // use timeout give cascaded dropdowns a chance to update / clear themselves\r\n                window.setTimeout(() => this.onChange && this.onChange(e1), 0);\r\n            });\r\n\r\n            this.add_submitHandlers(submitHandler);\r\n            widget.element.bind('remove.' + this.uniqueName, x => {\r\n                this.remove_submitHandlers(submitHandler);\r\n            });\r\n\r\n            return widget;\r\n        }\r\n\r\n        public addDateRange(field: string, title?: string): Serenity.DateEditor {\r\n            return this.add(QuickFilterBar.dateRange(field, title)) as Serenity.DateEditor;\r\n        }\r\n\r\n        public static dateRange(field: string, title?: string): QuickFilter<DateEditor, DateTimeEditorOptions> {\r\n            var end: Serenity.DateEditor = null;\r\n            return <QuickFilter<DateEditor, DateTimeEditorOptions>>{\r\n                field: field,\r\n                type: Serenity.DateEditor,\r\n                title: title,\r\n                element: function (e1) {\r\n                    end = Serenity.Widget.create({\r\n                        type: Serenity.DateEditor,\r\n                        element: function (e2) {\r\n                            e2.insertAfter(e1);\r\n                        },\r\n                        options: null,\r\n                        init: null\r\n                    });\r\n\r\n                    end.element.change(function (x) {\r\n                        e1.triggerHandler('change');\r\n                    });\r\n\r\n                    $('<span/>').addClass('range-separator').text('-').insertAfter(e1);\r\n                },\r\n                handler: function (args) {\r\n                    var active1 = !Q.isTrimmedEmpty(args.widget.value);\r\n                    var active2 = !Q.isTrimmedEmpty(end.value);\r\n                    if (active1 && !Q.parseDate(args.widget.element.val())) {\r\n                        active1 = false;\r\n                        Q.notifyWarning(Q.text('Validation.DateInvalid'), '', null);\r\n                        args.widget.element.val('');\r\n                    }\r\n                    if (active2 && !Q.parseDate(end.element.val())) {\r\n                        active2 = false;\r\n                        Q.notifyWarning(Q.text('Validation.DateInvalid'), '', null);\r\n                        end.element.val('');\r\n                    }\r\n                    args.active = active1 || active2;\r\n                    if (active1) {\r\n                        args.request.Criteria = Serenity.Criteria.join(args.request.Criteria, 'and',\r\n                            [[args.field], '>=', args.widget.value]);\r\n                    }\r\n                    if (active2) {\r\n                        var next = new Date(end.valueAsDate.valueOf());\r\n                        next.setDate(next.getDate() + 1);\r\n                        args.request.Criteria = Serenity.Criteria.join(args.request.Criteria, 'and',\r\n                            [[args.field], '<', Q.formatDate(next, 'yyyy-MM-dd')]);\r\n                    }\r\n                },\r\n                displayText: function (w, l) {\r\n                    var v1 = Serenity.EditorUtils.getDisplayText(w);\r\n                    var v2 = Serenity.EditorUtils.getDisplayText(end);\r\n                    if (Q.isEmptyOrNull(v1) && Q.isEmptyOrNull(v2)) {\r\n                        return null;\r\n                    }\r\n                    var text1 = l + ' >= ' + v1;\r\n                    var text2 = l + ' <= ' + v2;\r\n                    if (!Q.isEmptyOrNull(v1) && !Q.isEmptyOrNull(v2)) {\r\n                        return text1 + ' ' + Q.coalesce(Q.tryGetText('Controls.FilterPanel.And'), 'and') + ' ' + text2;\r\n                    }\r\n                    else if (!Q.isEmptyOrNull(v1)) {\r\n                        return text1;\r\n                    }\r\n                    else {\r\n                        return text2;\r\n                    }\r\n                },\r\n                saveState: function (w1) {\r\n                    return [Serenity.EditorUtils.getValue(w1), Serenity.EditorUtils.getValue(end)];\r\n                },\r\n                loadState: function (w2, state) {\r\n                    if (state == null || !Q.isArray(state) || state.length !== 2) {\r\n                        state = [null, null];\r\n                    }\r\n\r\n                    Serenity.EditorUtils.setValue(w2, state[0]);\r\n                    Serenity.EditorUtils.setValue(end, state[1]);\r\n                }\r\n            };\r\n        }\r\n\r\n        public addDateTimeRange(field: string, title?: string) {\r\n            return this.add(QuickFilterBar.dateTimeRange(field, title)) as Serenity.DateTimeEditor;\r\n        }\r\n\r\n        public static dateTimeRange(field: string, title?: string): QuickFilter<DateTimeEditor, DateTimeEditorOptions> {\r\n            var end: Serenity.DateTimeEditor = null;\r\n\r\n            return <QuickFilter<DateTimeEditor, DateTimeEditorOptions>>{\r\n                field: field,\r\n                type: Serenity.DateTimeEditor,\r\n                title: title,\r\n                element: function (e1) {\r\n                    end = Serenity.Widget.create({\r\n                        type: Serenity.DateTimeEditor,\r\n                        element: function (e2) {\r\n                            e2.insertAfter(e1);\r\n                        },\r\n                        options: null,\r\n                        init: null\r\n                    });\r\n\r\n                    end.element.change(function (x) {\r\n                        e1.triggerHandler('change');\r\n                    });\r\n\r\n                    $('<span/>').addClass('range-separator').text('-').insertAfter(e1);\r\n                },\r\n                init: function (i) {\r\n                    i.element.parent().find('.time').change(function (x1) {\r\n                        i.element.triggerHandler('change');\r\n                    });\r\n                },\r\n                handler: function (args) {\r\n                    var active1 = !Q.isTrimmedEmpty(args.widget.value);\r\n                    var active2 = !Q.isTrimmedEmpty(end.value);\r\n                    if (active1 && !Q.parseDate(args.widget.element.val())) {\r\n                        active1 = false;\r\n                        Q.notifyWarning(Q.text('Validation.DateInvalid'), '', null);\r\n                        args.widget.element.val('');\r\n                    }\r\n                    if (active2 && !Q.parseDate(end.element.val())) {\r\n                        active2 = false;\r\n                        Q.notifyWarning(Q.text('Validation.DateInvalid'), '', null);\r\n                        end.element.val('');\r\n                    }\r\n                    args.active = active1 || active2;\r\n                    if (active1) {\r\n                        args.request.Criteria = Serenity.Criteria.join(args.request.Criteria, 'and',\r\n                            [[args.field], '>=', args.widget.value]);\r\n                    }\r\n                    if (active2) {\r\n                        args.request.Criteria = Serenity.Criteria.join(args.request.Criteria, 'and',\r\n                            [[args.field], '<=', end.value]);\r\n                    }\r\n                },\r\n                displayText: function (w, l) {\r\n                    var v1 = Serenity.EditorUtils.getDisplayText(w);\r\n                    var v2 = Serenity.EditorUtils.getDisplayText(end);\r\n                    if (Q.isEmptyOrNull(v1) && Q.isEmptyOrNull(v2)) {\r\n                        return null;\r\n                    }\r\n                    var text1 = l + ' >= ' + v1;\r\n                    var text2 = l + ' <= ' + v2;\r\n                    if (!Q.isEmptyOrNull(v1) && !Q.isEmptyOrNull(v2)) {\r\n                        return text1 + ' ' + Q.coalesce(Q.tryGetText('Controls.FilterPanel.And'), 'and') + ' ' + text2;\r\n                    }\r\n                    else if (!Q.isEmptyOrNull(v1)) {\r\n                        return text1;\r\n                    }\r\n                    else {\r\n                        return text2;\r\n                    }\r\n                },\r\n                saveState: function (w1) {\r\n                    return [Serenity.EditorUtils.getValue(w1), Serenity.EditorUtils.getValue(end)];\r\n                },\r\n                loadState: function (w2, state) {\r\n                    if (state == null || !Q.isArray(state) || state.length !== 2) {\r\n                        state = [null, null];\r\n                    }\r\n                    Serenity.EditorUtils.setValue(w2, state[0]);\r\n                    Serenity.EditorUtils.setValue(end, state[1]);\r\n                }\r\n            };\r\n        }\r\n\r\n        public addBoolean(field: string, title?: string, yes?: string, no?: string): SelectEditor {\r\n            return this.add(QuickFilterBar.boolean(field, title, yes, no));\r\n        }\r\n\r\n        public static boolean(field: string, title?: string, yes?: string, no?: string): QuickFilter<SelectEditor, SelectEditorOptions> {\r\n            var opt: SelectEditorOptions = {};\r\n            var items = [];\r\n\r\n            var trueText = yes;\r\n            if (trueText == null) {\r\n                trueText = Q.text('Controls.FilterPanel.OperatorNames.true');\r\n            }\r\n            items.push(['1', trueText]);\r\n\r\n            var falseText = no;\r\n            if (falseText == null) {\r\n                falseText = Q.text('Controls.FilterPanel.OperatorNames.false');\r\n            }\r\n\r\n            items.push(['0', falseText]);\r\n\r\n            opt.items = items;\r\n\r\n            return {\r\n                field: field,\r\n                type: Serenity.SelectEditor,\r\n                title: title,\r\n                options: opt,\r\n                handler: function (args) {\r\n                    args.equalityFilter[args.field] = args.value == null || Q.isEmptyOrNull(args.value.toString()) ?\r\n                        null : !!Q.toId(args.value);\r\n                }\r\n            };\r\n        }\r\n\r\n        public static propertyItemToQuickFilter(item: PropertyItem) {\r\n            var quick: any = {};\r\n\r\n            var name = item.name;\r\n            var title = Q.tryGetText(item.title);\r\n            if (title == null) {\r\n                title = item.title;\r\n                if (title == null) {\r\n                    title = name;\r\n                }\r\n            }\r\n\r\n            var filteringType = Serenity.FilteringTypeRegistry.get(Q.coalesce(item.filteringType, 'String'));\r\n            if (filteringType === Serenity.DateFiltering) {\r\n                quick = QuickFilterBar.dateRange(name, title);\r\n            }\r\n            else if (filteringType === Serenity.DateTimeFiltering) {\r\n                quick = QuickFilterBar.dateTimeRange(name, title);\r\n            }\r\n            else if (filteringType === Serenity.BooleanFiltering) {\r\n                var q = item.quickFilterParams || {};\r\n                var f = item.filteringParams || {};\r\n                var trueText = q['trueText'];\r\n                if (trueText == null) {\r\n                    trueText = f['trueText'];\r\n                }\r\n                var falseText = q['falseText'];\r\n                if (falseText == null) {\r\n                    falseText = f['falseText'];\r\n                }\r\n                quick = QuickFilterBar.boolean(name, title, trueText, falseText);\r\n            }\r\n            else {\r\n                var filtering = new (filteringType as any)() as IFiltering;\r\n                if (filtering && (ss as any).isInstanceOfType(filtering, Serenity.IQuickFiltering)) {\r\n                    Serenity.ReflectionOptionsSetter.set(filtering, item.filteringParams);\r\n                    filtering.set_field(item);\r\n                    filtering.set_operator({ key: Serenity.FilterOperators.EQ });\r\n                    (filtering as any).initQuickFilter(quick);\r\n                    quick.options = Q.deepClone(quick.options, item.quickFilterParams);\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            if (!!item.quickFilterSeparator) {\r\n                quick.separator = true;\r\n            }\r\n\r\n            quick.cssClass = item.quickFilterCssClass;\r\n            return quick;\r\n        }\r\n\r\n        public onChange: (e: JQueryEventObject) => void;\r\n\r\n        private submitHandlers: any;\r\n\r\n        destroy() {\r\n            this.submitHandlers = null;\r\n            super.destroy();\r\n        }\r\n\r\n        public onSubmit(request: Serenity.ListRequest) {\r\n            this.submitHandlers && this.submitHandlers(request);\r\n        }\r\n\r\n        protected add_submitHandlers(action: (request: Serenity.ListRequest) => void): void {\r\n            this.submitHandlers = (ss as any).delegateCombine(this.submitHandlers, action);\r\n        }\r\n\r\n        protected remove_submitHandlers(action: (request: Serenity.ListRequest) => void): void {\r\n            this.submitHandlers = (ss as any).delegateRemove(this.submitHandlers, action);\r\n        }\r\n\r\n        protected clear_submitHandlers() {\r\n        }\r\n\r\n        public find<TWidget>(type: { new(...args: any[]): TWidget }, field: string): TWidget {\r\n            return $('#' + this.options.idPrefix + field).getWidget(type);\r\n        }\r\n\r\n        public tryFind<TWidget>(type: { new(...args: any[]): TWidget }, field: string): TWidget {\r\n            var el = $('#' + this.options.idPrefix + field);\r\n            if (!el.length)\r\n                return null;\r\n\r\n            return el.tryGetWidget(type);\r\n        }\r\n    }\r\n}\r\n","namespace Serenity {\r\n    export interface IDataGrid {\r\n        getElement(): JQuery;\r\n        getGrid(): Slick.Grid;\r\n        getView(): Slick.RemoteView<any>;\r\n        getFilterStore(): Serenity.FilterStore;\r\n    }\r\n\r\n    @Serenity.Decorators.registerInterface('Serenity.IDataGrid')\r\n    export class IDataGrid {\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass('Serenity.DataGrid', [IDataGrid, IReadOnly])\r\n    @Serenity.Decorators.element(\"<div/>\")\r\n    export class DataGrid<TItem, TOptions> extends Widget<TOptions> implements IDataGrid, IReadOnly {\r\n\r\n        protected titleDiv: JQuery;\r\n        protected toolbar: Toolbar;\r\n        protected filterBar: FilterDisplayBar;\r\n        protected quickFiltersDiv: JQuery;\r\n        protected quickFiltersBar: QuickFilterBar;\r\n        protected slickContainer: JQuery;\r\n        protected allColumns: Slick.Column[];\r\n        protected initialSettings: PersistedGridSettings;\r\n        protected restoringSettings: number = 0;\r\n        private idProperty: string;\r\n        private isActiveProperty: string;\r\n        private localTextDbPrefix: string;\r\n        private isDisabled: boolean;\r\n        private rows: any;\r\n        private slickGridOnSort: any;\r\n        private slickGridOnClick: any;\r\n        public view: Slick.RemoteView<TItem>;\r\n        public slickGrid: Slick.Grid;\r\n        public openDialogsAsPanel: boolean;\r\n\r\n        public static defaultRowHeight: number;\r\n        public static defaultHeaderHeight: number;\r\n        public static defaultPersistanceStorage: SettingStorage;\r\n\r\n        constructor(container: JQuery, options?: TOptions) {\r\n            super(container, options);\r\n\r\n            var self = this;\r\n\r\n            this.element.addClass('s-DataGrid').html('');\r\n            this.element.addClass('s-' + (ss as any).getTypeName((ss as any).getInstanceType(this)));\r\n            this.element.addClass('require-layout').bind('layout.' + this.uniqueName, function () {\r\n                self.layout();\r\n            });\r\n\r\n            this.setTitle(this.getInitialTitle());\r\n\r\n            var buttons = this.getButtons();\r\n            if (buttons != null) {\r\n                this.createToolbar(buttons);\r\n            }\r\n\r\n            this.slickContainer = this.createSlickContainer();\r\n            this.view = this.createView();\r\n\r\n            this.slickGrid = this.createSlickGrid();\r\n\r\n            if (this.enableFiltering()) {\r\n                this.createFilterBar();\r\n            }\r\n\r\n            if (this.usePager()) {\r\n                this.createPager();\r\n            }\r\n            this.bindToSlickEvents();\r\n            this.bindToViewEvents();\r\n\r\n            if (buttons != null) {\r\n                this.createToolbarExtensions();\r\n            }\r\n\r\n            this.createQuickFilters();\r\n\r\n            this.updateDisabledState();\r\n            this.updateInterface();\r\n\r\n            if (!this.isAsyncWidget()) {\r\n                this.initialSettings = this.getCurrentSettings(null);\r\n                this.restoreSettings(null, null);\r\n                window.setTimeout(() => this.initialPopulate(), 0);\r\n            }\r\n        }\r\n\r\n        protected attrs<TAttr>(attrType: { new(...args: any[]): TAttr }): TAttr[] {\r\n            return (ss as any).getAttributes((ss as any).getInstanceType(this), attrType, true);\r\n        }\r\n\r\n        protected layout(): void {\r\n            if (!this.element.is(':visible') || this.slickContainer == null)\r\n                return;\r\n\r\n            var responsiveHeight = this.element.hasClass('responsive-height');\r\n            var madeAutoHeight = this.slickGrid != null && this.slickGrid.getOptions().autoHeight;\r\n            var shouldAutoHeight = responsiveHeight && window.innerWidth < 768;\r\n\r\n            if (shouldAutoHeight) {\r\n                if (this.element[0] && this.element[0].style.height != \"auto\")\r\n                    this.element[0].style.height = \"auto\";\r\n\r\n                if (!madeAutoHeight) {\r\n\r\n                    this.slickContainer.css('height', 'auto')\r\n                        .children('.slick-pane').each((i, e: HTMLElement) => {\r\n                            if (e.style.height != null && e.style.height != \"auto\")\r\n                                e.style.height = \"auto\";\r\n                        });\r\n\r\n                    this.slickGrid.setOptions({ autoHeight: true });\r\n                }\r\n            }\r\n            else {\r\n                if (madeAutoHeight) {\r\n                    this.slickContainer.children('.slick-viewport').css('height', 'auto');\r\n                    this.slickGrid.setOptions({ autoHeight: false });\r\n                }\r\n\r\n                Q.layoutFillHeight(this.slickContainer);\r\n            }\r\n\r\n            this.slickGrid.resizeCanvas();\r\n        }\r\n\r\n        protected getInitialTitle(): string {\r\n            return null;\r\n        }\r\n\r\n        protected createToolbarExtensions(): void {\r\n        }\r\n\r\n        protected ensureQuickFilterBar(): QuickFilterBar {\r\n\r\n            if (this.quickFiltersDiv == null)\r\n                this.createQuickFilters([]);\r\n\r\n            return this.quickFiltersBar;\r\n        }\r\n\r\n        protected createQuickFilters(filters?: QuickFilter<Widget<any>, any>[]): void {\r\n\r\n            if (this.quickFiltersDiv == null && (filters != null ||\r\n                ((filters = this.getQuickFilters()) && filters != null && filters.length))) {\r\n                this.quickFiltersDiv = $('<div/>').addClass('quick-filters-bar');\r\n                if (this.toolbar) {\r\n                    $('<div/>').addClass('clear').appendTo(this.toolbar.element);\r\n                    this.quickFiltersDiv.appendTo(this.toolbar.element);\r\n                }\r\n                else {\r\n                    this.quickFiltersDiv.appendTo($('<div/>').addClass('s-Toolbar').insertBefore(this.slickContainer));\r\n                }\r\n\r\n                this.quickFiltersBar = new QuickFilterBar(this.quickFiltersDiv, {\r\n                    filters: filters,\r\n                    getTitle: (filter: QuickFilter<Widget<any>, any>) => this.determineText(pre => pre + filter.field),\r\n                    idPrefix: this.uniqueName + '_QuickFilter_'\r\n                });\r\n                this.quickFiltersBar.onChange = (e) => this.quickFilterChange(e);\r\n            }\r\n        }\r\n\r\n        protected getQuickFilters(): QuickFilter<Widget<any>, any>[] {\r\n            return this.allColumns.filter(function (x) {\r\n                return x.sourceItem &&\r\n                    x.sourceItem.quickFilter === true &&\r\n                    (x.sourceItem.readPermission == null ||\r\n                        Q.Authorization.hasPermission(x.sourceItem.readPermission));\r\n            }).map(x => QuickFilterBar.propertyItemToQuickFilter(x.sourceItem))\r\n                .filter(x => x != null);\r\n        }\r\n\r\n        protected findQuickFilter<TWidget>(type: { new(...args: any[]): TWidget }, field: string): TWidget {\r\n            if (this.quickFiltersBar != null)\r\n                return this.quickFiltersBar.find(type, field);\r\n\r\n            return $('#' + this.uniqueName + '_QuickFilter_' + field).getWidget(type);\r\n        }\r\n\r\n        protected tryFindQuickFilter<TWidget>(type: { new(...args: any[]): TWidget }, field: string): TWidget {\r\n            if (this.quickFiltersBar != null)\r\n                return this.quickFiltersBar.tryFind(type, field);\r\n\r\n            var el = $('#' + this.uniqueName + '_QuickFilter_' + field);\r\n            if (!el.length)\r\n                return null;\r\n\r\n            return el.tryGetWidget(type);\r\n        }\r\n\r\n        protected createIncludeDeletedButton(): void {\r\n            if (!Q.isEmptyOrNull(this.getIsActiveProperty()) ||\r\n                !Q.isEmptyOrNull(this.getIsDeletedProperty())) {\r\n                Serenity.GridUtils.addIncludeDeletedToggle(this.toolbar.element, this.view, null, false);\r\n            }\r\n        }\r\n\r\n        protected getQuickSearchFields(): QuickSearchField[] {\r\n            return null;\r\n        }\r\n\r\n        protected createQuickSearchInput(): void {\r\n            Serenity.GridUtils.addQuickSearchInput(this.toolbar.element, this.view, this.getQuickSearchFields());\r\n        }\r\n\r\n        public destroy() {\r\n            if (this.quickFiltersBar) {\r\n                this.quickFiltersBar.destroy();\r\n                this.quickFiltersBar = null;\r\n            }\r\n\r\n            if (this.toolbar) {\r\n                this.toolbar.destroy();\r\n                this.toolbar = null;\r\n            }\r\n\r\n            if (this.slickGrid) {\r\n                this.slickGrid.onClick.clear();\r\n                this.slickGrid.onSort.clear();\r\n                this.slickGrid.onColumnsResized.clear();\r\n                this.slickGrid.onColumnsReordered.clear();\r\n                this.slickGrid.destroy();\r\n                this.slickGrid = null;\r\n            }\r\n\r\n            if (this.view) {\r\n                this.view.onDataChanged.clear();\r\n                this.view.onSubmit = null;\r\n                this.view.setFilter(null);\r\n                this.view = null;\r\n            }\r\n\r\n            this.titleDiv = null;\r\n            super.destroy();\r\n        }\r\n\r\n        protected getItemCssClass(item: TItem, index: number): string {\r\n            var activeFieldName = this.getIsActiveProperty();\r\n            var deletedFieldName = this.getIsDeletedProperty();\r\n            if (Q.isEmptyOrNull(activeFieldName) && Q.isEmptyOrNull(deletedFieldName)) {\r\n                return null;\r\n            }\r\n\r\n            if (activeFieldName) {\r\n                var value = item[activeFieldName];\r\n                if (value == null) {\r\n                    return null;\r\n                }\r\n\r\n                if (typeof (value) === 'number') {\r\n                    if (value < 0) {\r\n                        return 'deleted';\r\n                    }\r\n                    else if (value === 0) {\r\n                        return 'inactive';\r\n                    }\r\n                }\r\n                else if (typeof (value) === 'boolean') {\r\n                    if (value === false) {\r\n                        return 'deleted';\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                return item[deletedFieldName] ? 'deleted' : null;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        protected getItemMetadata(item: TItem, index: number): any {\r\n            var itemClass = this.getItemCssClass(item, index);\r\n            if (Q.isEmptyOrNull(itemClass)) {\r\n                return new Object();\r\n            }\r\n            return { cssClasses: itemClass };\r\n        }\r\n\r\n        protected postProcessColumns(columns: Slick.Column[]): Slick.Column[] {\r\n            Serenity.SlickHelper.setDefaults(columns, this.getLocalTextDbPrefix());\r\n            return columns;\r\n        }\r\n\r\n        protected initialPopulate(): void {\r\n            var self = this;\r\n            if (this.populateWhenVisible()) {\r\n                Serenity.LazyLoadHelper.executeEverytimeWhenShown(this.element, function () {\r\n                    self.refreshIfNeeded();\r\n                }, false);\r\n                if (this.element.is(':visible') && this.view) {\r\n                    this.view.populate();\r\n                }\r\n            }\r\n            else if (this.view) {\r\n                this.view.populate();\r\n            }\r\n        }\r\n\r\n        protected canFilterColumn(column: Slick.Column): boolean {\r\n            return (column.sourceItem != null && \r\n                column.sourceItem.notFilterable !== true &&\r\n                (column.sourceItem.readPermission == null ||\r\n                    Q.Authorization.hasPermission(column.sourceItem.readPermission)));\r\n        }\r\n\r\n        protected initializeFilterBar() {\r\n\r\n            this.filterBar.set_store(new Serenity.FilterStore(\r\n                this.allColumns\r\n                    .filter(c => this.canFilterColumn(c))\r\n                    .map(x => x.sourceItem)));\r\n\r\n            this.filterBar.get_store().add_changed((s: JQueryEventObject, e: any) => {\r\n                if (this.restoringSettings <= 0) {\r\n                    this.persistSettings(null);\r\n                    this.view && (this.view.seekToPage = 1);\r\n                    this.refresh();\r\n                }\r\n            });\r\n        }\r\n\r\n        protected initializeAsync(): PromiseLike<void> {\r\n            return super.initializeAsync()\r\n                .then<Slick.Column[]>(() => this.getColumnsAsync())\r\n                .then(columns => {\r\n                    this.allColumns = columns;\r\n                this.postProcessColumns(this.allColumns);\r\n                this.filterBar && this.initializeFilterBar();\r\n\r\n                var visibleColumns = this.allColumns.filter(function (x2) {\r\n                    return x2.visible !== false;\r\n                });\r\n\r\n                if (this.slickGrid) {\r\n                    this.slickGrid.setColumns(visibleColumns);\r\n                }\r\n                this.setInitialSortOrder();\r\n                this.initialSettings = this.getCurrentSettings(null);\r\n                this.restoreSettings(null, null);\r\n                this.initialPopulate();\r\n            }, null);\r\n        }\r\n\r\n        protected createSlickGrid(): Slick.Grid {\r\n\r\n            var visibleColumns: Slick.Column[];\r\n\r\n            if (this.isAsyncWidget()) {\r\n                visibleColumns = [];\r\n            }\r\n            else {\r\n                this.allColumns = this.getColumns();\r\n                visibleColumns = this.postProcessColumns(this.allColumns).filter(function (x) {\r\n                    return x.visible !== false;\r\n                });\r\n            }\r\n\r\n            var slickOptions = this.getSlickOptions();\r\n            var grid = new Slick.Grid(this.slickContainer, this.view as any, visibleColumns, slickOptions);\r\n            grid.registerPlugin(new Slick.AutoTooltips({\r\n                enableForHeaderCells: true\r\n            }));\r\n\r\n            this.slickGrid = grid;\r\n            this.rows = this.slickGrid;\r\n            if (!this.isAsyncWidget()) {\r\n                this.setInitialSortOrder();\r\n            }\r\n\r\n            return grid;\r\n        }\r\n\r\n        protected setInitialSortOrder(): void {\r\n            var sortBy = this.getDefaultSortBy();\r\n\r\n            if (this.view) {\r\n                this.view.sortBy = Array.prototype.slice.call(sortBy);\r\n            }\r\n\r\n            var mapped = sortBy.map(function (s) {\r\n                var x: Slick.ColumnSort = {};\r\n                if (s && Q.endsWith(s.toLowerCase(), ' desc')) {\r\n                    x.columnId = (ss as any).trimEndString(s.substr(0, s.length - 5));\r\n                    x.sortAsc = false;\r\n                }\r\n                else {\r\n                    x.columnId = s;\r\n                    x.sortAsc = true;\r\n                }\r\n                return x;\r\n            });\r\n\r\n            this.slickGrid.setSortColumns(mapped);\r\n        }\r\n\r\n        itemAt(row: number): TItem {\r\n            return this.slickGrid.getDataItem(row);\r\n        }\r\n\r\n        rowCount() {\r\n            return this.slickGrid.getDataLength();\r\n        }\r\n\r\n        getItems(): TItem[] {\r\n            return this.view.getItems();\r\n        }\r\n\r\n        setItems(value: TItem[]) {\r\n            this.view.setItems(value, true);\r\n        }\r\n\r\n        protected bindToSlickEvents() {\r\n            var self = this;\r\n            this.slickGridOnSort = (e: JQuery, p: any) => {\r\n                self.view.populateLock();\r\n                try {\r\n                    var sortBy = [];\r\n                    var col: any;\r\n                    if (!!p.multiColumnSort) {\r\n                        for (var i = 0; !!(i < p.sortCols.length); i++) {\r\n                            var x = p.sortCols[i];\r\n                            col = x.sortCol;\r\n                            if (col == null) {\r\n                                col = {};\r\n                            }\r\n                            sortBy.push(col.field + (!!x.sortAsc ? '' : ' DESC'));\r\n                        }\r\n                    }\r\n                    else {\r\n                        var col = p.sortCol;\r\n                        if (col == null) {\r\n                            col = {};\r\n                        }\r\n                        sortBy.push(col.field + (!!p.sortAsc ? '' : ' DESC'));\r\n                    }\r\n\r\n                    self.view.seekToPage = 1;\r\n                    self.view.sortBy = sortBy;\r\n                }\r\n                finally {\r\n                    self.view.populateUnlock();\r\n                }\r\n                self.view.populate();\r\n                this.persistSettings(null);\r\n            };\r\n\r\n            this.slickGrid.onSort.subscribe(this.slickGridOnSort);\r\n\r\n            this.slickGridOnClick = (e1: JQueryEventObject, p1: any) => {\r\n                self.onClick(e1, p1.row, p1.cell);\r\n            }\r\n\r\n            this.slickGrid.onClick.subscribe(this.slickGridOnClick);\r\n\r\n            this.slickGrid.onColumnsReordered.subscribe((e2: JQueryEventObject, p2: any) => {\r\n                return this.persistSettings(null);\r\n            });\r\n\r\n            this.slickGrid.onColumnsResized.subscribe((e3: JQueryEventObject, p3: any) => {\r\n                return this.persistSettings(null);\r\n            });\r\n        }\r\n\r\n        protected getAddButtonCaption(): string {\r\n            return Q.coalesce(Q.tryGetText('Controls.DataGrid.NewButton'), 'New');\r\n        }\r\n\r\n        protected getButtons(): ToolButton[] {\r\n            return [];\r\n        }\r\n\r\n        protected editItem(entityOrId: any): void {\r\n            throw new (ss as any).NotImplementedException();\r\n        }\r\n\r\n        protected editItemOfType(itemType: string, entityOrId: any): void {\r\n            if (itemType === this.getItemType()) {\r\n                this.editItem(entityOrId);\r\n                return;\r\n            }\r\n\r\n            throw new (ss as any).NotImplementedException();\r\n        }\r\n\r\n        protected onClick(e: JQueryEventObject, row: number, cell: number): void {\r\n            if (e.isDefaultPrevented()) {\r\n                return;\r\n            }\r\n\r\n            var target = $(e.target);\r\n            if (!target.hasClass('s-EditLink')) {\r\n                target = target.closest('a');\r\n            }\r\n\r\n            if (target.hasClass('s-EditLink')) {\r\n                e.preventDefault();\r\n                this.editItemOfType(Serenity.SlickFormatting.getItemType(target), Serenity.SlickFormatting.getItemId(target));\r\n            }\r\n        }\r\n\r\n        protected viewDataChanged(e: any, rows: TItem[]): void {\r\n            this.markupReady();\r\n            this.layout();\r\n        }\r\n\r\n        protected bindToViewEvents(): void {\r\n            var self = this;\r\n\r\n            this.view.onDataChanged.subscribe(function (e, d) {\r\n                return self.viewDataChanged(e, d);\r\n            });\r\n\r\n            this.view.onSubmit = function (view) {\r\n                return self.onViewSubmit();\r\n            };\r\n\r\n            this.view.setFilter(function (item, view1) {\r\n                return self.onViewFilter(item);\r\n            });\r\n\r\n            this.view.onProcessData = function (response, view2) {\r\n                return self.onViewProcessData(response);\r\n            }\r\n        }\r\n\r\n        protected onViewProcessData(response: ListResponse<TItem>): ListResponse<TItem> {\r\n            return response;\r\n        }\r\n\r\n        protected onViewFilter(item: TItem): boolean {\r\n            return true;\r\n        }\r\n\r\n        protected getIncludeColumns(include: { [key: string]: boolean }): void {\r\n            var columns = this.slickGrid.getColumns();\r\n            for (var column of columns) {\r\n                if (column.field) {\r\n                    include[column.field] = true;\r\n                }\r\n\r\n                if (column.referencedFields) {\r\n                    for (var x of column.referencedFields) {\r\n                        include[x] = true;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        protected setCriteriaParameter(): void {\r\n            delete this.view.params['Criteria'];\r\n            if (this.filterBar) {\r\n                var criteria = this.filterBar.get_store().get_activeCriteria();\r\n                if (!Serenity.Criteria.isEmpty(criteria)) {\r\n                    this.view.params.Criteria = criteria;\r\n                }\r\n            }\r\n        }\r\n\r\n        protected setEquality(field: string, value: any): void {\r\n            Q.setEquality(this.view.params, field, value);\r\n        }\r\n\r\n        protected setIncludeColumnsParameter(): void {\r\n            var include = {};\r\n            this.getIncludeColumns(include);\r\n            var array = [];\r\n            for (var key of Object.keys(include)) {\r\n                array.push(key);\r\n            }\r\n            this.view.params.IncludeColumns = array;\r\n        }\r\n\r\n        protected onViewSubmit(): boolean {\r\n            if (this.isDisabled || !this.getGridCanLoad()) {\r\n                return false;\r\n            }\r\n\r\n            this.setCriteriaParameter();\r\n            this.setIncludeColumnsParameter();\r\n            this.invokeSubmitHandlers();\r\n\r\n            return true;\r\n        }\r\n\r\n        protected markupReady(): void {\r\n        }\r\n\r\n        protected createSlickContainer(): JQuery {\r\n            return $('<div class=\"grid-container\"></div>').appendTo(this.element);\r\n        }\r\n\r\n        protected createView(): Slick.RemoteView<TItem> {\r\n            var opt = this.getViewOptions();\r\n            return new Slick.RemoteView<TItem>(opt);\r\n        }\r\n\r\n        protected getDefaultSortBy(): any[] {\r\n            if (this.slickGrid) {\r\n\r\n                var columns = this.slickGrid.getColumns().filter(function (x) {\r\n                    return x.sortOrder && x.sortOrder !== 0;\r\n                });\r\n\r\n                if (columns.length > 0) {\r\n                    columns.sort(function (x1, y) {\r\n                        return (ss as any).compare(Math.abs(x1.sortOrder), Math.abs(y.sortOrder));\r\n                    });\r\n\r\n                    var list = [];\r\n                    for (var i = 0; i < columns.length; i++) {\r\n                        var col = columns[i];\r\n                        list.push(col.field + ((col.sortOrder < 0) ? ' DESC' : ''));\r\n                    }\r\n\r\n                    return list;\r\n                }\r\n            }\r\n\r\n            return [];\r\n        }\r\n\r\n        protected usePager(): boolean {\r\n            return false;\r\n        }\r\n\r\n        protected enableFiltering(): boolean {\r\n            var attr = this.attrs(Serenity.FilterableAttribute);\r\n            return attr.length > 0 && attr[0].value;\r\n        }\r\n\r\n        protected populateWhenVisible(): boolean {\r\n            return false;\r\n        }\r\n\r\n        protected createFilterBar(): void {\r\n            var filterBarDiv = $('<div/>').appendTo(this.element);\r\n            var self = this;\r\n            this.filterBar = new Serenity.FilterDisplayBar(filterBarDiv);\r\n            if (!this.isAsyncWidget())\r\n                this.initializeFilterBar();\r\n        }\r\n\r\n        protected getPagerOptions(): Slick.PagerOptions {\r\n            return {\r\n                view: this.view,\r\n                rowsPerPage: 20,\r\n                rowsPerPageOptions: [20, 100, 500, 2500]\r\n            };\r\n        }\r\n\r\n        protected createPager(): void {\r\n            var pagerDiv = $('<div></div>').appendTo(this.element);\r\n            pagerDiv.slickPager(this.getPagerOptions());\r\n        }\r\n\r\n        protected getViewOptions() {\r\n            var opt: Slick.RemoteViewOptions = {};\r\n            opt.idField = this.getIdProperty();\r\n            opt.sortBy = this.getDefaultSortBy();\r\n\r\n            if (!this.usePager()) {\r\n                opt.rowsPerPage = 0;\r\n            }\r\n            else if (this.element.hasClass('responsive-height')) {\r\n                opt.rowsPerPage = (($(window.window).width() < 768) ? 20 : 100);\r\n            }\r\n            else {\r\n                opt.rowsPerPage = 100;\r\n            }\r\n\r\n            opt.getItemMetadata = (item, index) => {\r\n                return this.getItemMetadata(item, index);\r\n            };\r\n\r\n            return opt;\r\n        }\r\n\r\n        protected createToolbar(buttons: ToolButton[]): void {\r\n            var toolbarDiv = $('<div class=\"grid-toolbar\"></div>').appendTo(this.element);\r\n            this.toolbar = new Serenity.Toolbar(toolbarDiv, { buttons: buttons, hotkeyContext: this.element[0] });\r\n        }\r\n\r\n        getTitle(): string {\r\n            if (!this.titleDiv) {\r\n                return null;\r\n            }\r\n\r\n            return this.titleDiv.children().text();\r\n        }\r\n\r\n        setTitle(value: string) {\r\n            if (value !== this.getTitle()) {\r\n                if (value == null) {\r\n                    if (this.titleDiv) {\r\n                        this.titleDiv.remove();\r\n                        this.titleDiv = null;\r\n                    }\r\n                }\r\n                else {\r\n                    if (!this.titleDiv) {\r\n                        this.titleDiv = $('<div class=\"grid-title\"><div class=\"title-text\"></div></div>')\r\n                            .prependTo(this.element);\r\n                    }\r\n                    this.titleDiv.children().text(value);\r\n                }\r\n\r\n                this.layout();\r\n            }\r\n        }\r\n\r\n        protected getItemType(): string {\r\n            return 'Item';\r\n        }\r\n\r\n        protected itemLink(itemType?: string, idField?: string, text?: (ctx: Slick.FormatterContext) => string,\r\n            cssClass?: (ctx: Slick.FormatterContext) => string, encode: boolean = true): Slick.Format {\r\n\r\n            if (itemType == null) {\r\n                itemType = this.getItemType();\r\n            }\r\n\r\n            if (idField == null) {\r\n                idField = this.getIdProperty();\r\n            }\r\n\r\n            return Serenity.SlickFormatting.itemLink(itemType, idField, text, cssClass, encode);\r\n        }\r\n\r\n        protected getColumnsKey(): string {\r\n            var attr = this.attrs(Serenity.ColumnsKeyAttribute);\r\n            if (attr && attr.length > 0) {\r\n                return attr[0].value;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        protected getPropertyItemsAsync(): PromiseLike<PropertyItem[]> {\r\n            return Promise.resolve()\r\n                .then<PropertyItem[]>(() => {\r\n                    var columnsKey = this.getColumnsKey();\r\n                    if (!Q.isEmptyOrNull(columnsKey)) {\r\n                        return Q.getColumnsAsync(columnsKey);\r\n                    }\r\n                    return Promise.resolve<PropertyItem[]>([]);\r\n                }, null);\r\n        }\r\n\r\n        protected getPropertyItems(): PropertyItem[] {\r\n            var attr = this.attrs(Serenity.ColumnsKeyAttribute);\r\n\r\n            var columnsKey = this.getColumnsKey();\r\n            if (!Q.isEmptyOrNull(columnsKey)) {\r\n                return Q.getColumns(columnsKey);\r\n            }\r\n\r\n            return [];\r\n        }\r\n\r\n        protected getColumns(): Slick.Column[] {\r\n            var propertyItems = this.getPropertyItems();\r\n            return this.propertyItemsToSlickColumns(propertyItems);\r\n        }\r\n\r\n        protected propertyItemsToSlickColumns(propertyItems: PropertyItem[]): Slick.Column[] {\r\n            var columns = Serenity.PropertyItemSlickConverter.toSlickColumns(propertyItems);\r\n            for (var i = 0; i < propertyItems.length; i++) {\r\n                var item = propertyItems[i];\r\n                var column = columns[i];\r\n                if (item.editLink === true) {\r\n                    var oldFormat = { $: column.format };\r\n                    var css = { $: (item.editLinkCssClass) != null ? item.editLinkCssClass : null };\r\n                    column.format = this.itemLink(\r\n                        item.editLinkItemType != null ? item.editLinkItemType : null,\r\n                        item.editLinkIdField != null ? item.editLinkIdField : null,\r\n                        (ss as any).mkdel({ oldFormat: oldFormat }, function(ctx: Slick.FormatterContext) {\r\n                            if (this.oldFormat.$ != null) {\r\n                                return this.oldFormat.$(ctx);\r\n                            }\r\n                            return Q.htmlEncode(ctx.value);\r\n                        }),\r\n                        (ss as any).mkdel({ css: css }, function(ctx1: Slick.FormatterContext) {\r\n                            return Q.coalesce(this.css.$, '');\r\n                        }), false);\r\n\r\n                    if (!Q.isEmptyOrNull(item.editLinkIdField)) {\r\n                        column.referencedFields = column.referencedFields || [];\r\n                        column.referencedFields.push(item.editLinkIdField);\r\n                    }\r\n                }\r\n            }\r\n            return columns;\r\n        }\r\n\r\n        protected getColumnsAsync(): PromiseLike<Slick.Column[]> {\r\n            return this.getPropertyItemsAsync().then(propertyItems => {\r\n                return this.propertyItemsToSlickColumns(propertyItems);\r\n            }, null);\r\n        }\r\n\r\n        protected getSlickOptions(): Slick.GridOptions {\r\n            var opt: Slick.GridOptions = {};\r\n            opt.multiSelect = false;\r\n            opt.multiColumnSort = true;\r\n            opt.enableCellNavigation = false;\r\n            opt.headerRowHeight = Serenity.DataGrid.defaultHeaderHeight;\r\n            opt.rowHeight = Serenity.DataGrid.defaultRowHeight;\r\n            return opt;\r\n        }\r\n\r\n        protected populateLock(): void {\r\n            this.view.populateLock();\r\n        }\r\n\r\n        protected populateUnlock(): void {\r\n            this.view.populateUnlock();\r\n        }\r\n\r\n        protected getGridCanLoad(): boolean {\r\n            return true;\r\n        }\r\n\r\n        public refresh() {\r\n            if (!this.populateWhenVisible()) {\r\n                this.internalRefresh();\r\n                return;\r\n            }\r\n            if (this.slickContainer.is(':visible')) {\r\n                this.slickContainer.data('needsRefresh', false);\r\n                this.internalRefresh();\r\n                return;\r\n            }\r\n            this.slickContainer.data('needsRefresh', true);\r\n        }\r\n\r\n        protected refreshIfNeeded(): void {\r\n            if (!!this.slickContainer.data('needsRefresh')) {\r\n                this.slickContainer.data('needsRefresh', false);\r\n                this.internalRefresh();\r\n            }\r\n        }\r\n\r\n        protected internalRefresh(): void {\r\n            this.view.populate();\r\n        }\r\n\r\n        public setIsDisabled(value: boolean): void {\r\n            if (this.isDisabled !== value) {\r\n                this.isDisabled = value;\r\n                if (this.isDisabled) {\r\n                    this.view.setItems([], true);\r\n                }\r\n\r\n                this.updateDisabledState();\r\n            }\r\n        }\r\n\r\n        private _readonly: boolean;\r\n\r\n        public get readOnly(): boolean {\r\n            return this.get_readOnly();\r\n        }\r\n\r\n        public set readOnly(value: boolean) {\r\n            this.set_readOnly(value);\r\n        }\r\n\r\n        public get_readOnly() {\r\n            return !!this._readonly;\r\n        }\r\n\r\n        public set_readOnly(value: boolean) {\r\n            if (!!this._readonly != !!value) {\r\n                this._readonly = !!value;\r\n                this.updateInterface();\r\n            }\r\n        }\r\n\r\n        protected updateInterface() {\r\n            this.toolbar && this.toolbar.updateInterface();\r\n        }\r\n\r\n        protected getLocalTextDbPrefix(): string {\r\n            if (this.localTextDbPrefix == null) {\r\n                this.localTextDbPrefix = Q.coalesce(this.getLocalTextPrefix(), '');\r\n                if (this.localTextDbPrefix.length > 0 && !Q.endsWith(this.localTextDbPrefix, '.')) {\r\n                    this.localTextDbPrefix = 'Db.' + this.localTextDbPrefix + '.';\r\n                }\r\n            }\r\n\r\n            return this.localTextDbPrefix;\r\n        }\r\n\r\n        protected getLocalTextPrefix(): string {\r\n            var attr = this.attrs(LocalTextPrefixAttribute);\r\n\r\n            if (attr.length >= 1)\r\n                return attr[0].value;\r\n\r\n            return '';\r\n        }\r\n\r\n        protected getIdProperty(): string {\r\n            if (this.idProperty == null) {\r\n                var attr = this.attrs(IdPropertyAttribute);\r\n\r\n                if (attr.length === 1) {\r\n                    this.idProperty = attr[0].value;\r\n                }\r\n                else {\r\n                    this.idProperty = 'ID';\r\n                }\r\n            }\r\n\r\n            return this.idProperty;\r\n        }\r\n\r\n        protected getIsDeletedProperty(): string {\r\n            return null;\r\n        }\r\n\r\n        protected getIsActiveProperty(): string {\r\n            if (this.isActiveProperty == null) {\r\n                var attr = this.attrs(IsActivePropertyAttribute);\r\n\r\n                if (attr.length === 1) {\r\n                    this.isActiveProperty = attr[0].value;\r\n                }\r\n                else {\r\n                    this.isActiveProperty = '';\r\n                }\r\n            }\r\n            return this.isActiveProperty;\r\n        }\r\n\r\n        protected updateDisabledState(): void {\r\n            this.slickContainer.toggleClass('ui-state-disabled', !!this.isDisabled);\r\n        }\r\n\r\n        protected resizeCanvas(): void {\r\n            this.slickGrid.resizeCanvas();\r\n        }\r\n\r\n        protected subDialogDataChange(): void {\r\n            this.refresh();\r\n        }\r\n\r\n        protected addFilterSeparator(): void {\r\n            this.ensureQuickFilterBar().addSeparator();\r\n        }\r\n\r\n        protected determineText(getKey: (prefix: string) => string) {\r\n            var localTextPrefix = this.getLocalTextDbPrefix();\r\n            if (!Q.isEmptyOrNull(localTextPrefix)) {\r\n                var local = Q.tryGetText(getKey(localTextPrefix));\r\n                if (local != null) {\r\n                    return local;\r\n                }\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        protected addQuickFilter<TWidget extends Widget<any>, TOptions>(opt: QuickFilter<TWidget, TOptions>): TWidget {\r\n            return this.ensureQuickFilterBar().add(opt);\r\n        }\r\n\r\n        protected addDateRangeFilter(field: string, title?: string): Serenity.DateEditor {\r\n            return this.ensureQuickFilterBar().addDateRange(field, title);\r\n        }\r\n\r\n        protected dateRangeQuickFilter(field: string, title?: string) {\r\n            return QuickFilterBar.dateRange(field, title);\r\n        }\r\n\r\n        protected addDateTimeRangeFilter(field: string, title?: string) {\r\n            return this.ensureQuickFilterBar().addDateTimeRange(field, title);\r\n        }\r\n\r\n        protected dateTimeRangeQuickFilter(field: string, title?: string) {\r\n            return QuickFilterBar.dateTimeRange(field, title);\r\n        }\r\n\r\n        protected addBooleanFilter(field: string, title?: string, yes?: string, no?: string): SelectEditor {\r\n            return this.ensureQuickFilterBar().addBoolean(field, title, yes, no);\r\n        }\r\n\r\n        protected booleanQuickFilter(field: string, title?: string, yes?: string, no?: string) {\r\n            return QuickFilterBar.boolean(field, title, yes, no);\r\n        }\r\n\r\n        protected invokeSubmitHandlers() {\r\n            if (this.quickFiltersBar != null) {\r\n                this.quickFiltersBar.onSubmit(this.view.params);\r\n            }\r\n        }\r\n\r\n        protected quickFilterChange(e: JQueryEventObject) {\r\n            this.persistSettings(null);\r\n            this.view && (this.view.seekToPage = 1);\r\n            this.refresh();\r\n        }\r\n\r\n        protected getPersistanceStorage(): SettingStorage {\r\n            return Serenity.DataGrid.defaultPersistanceStorage;\r\n        }\r\n\r\n        protected getPersistanceKey(): string {\r\n            var key = 'GridSettings:';\r\n            var path = window.location.pathname;\r\n            if (!Q.isEmptyOrNull(path)) {\r\n                key += path.substr(1).split(String.fromCharCode(47)).slice(0, 2).join('/') + ':';\r\n            }\r\n\r\n            key += (ss as any).getTypeFullName((ss as any).getInstanceType(this));\r\n            return key;\r\n        }\r\n\r\n        protected gridPersistanceFlags(): GridPersistanceFlags {\r\n            return {};\r\n        }\r\n\r\n        protected canShowColumn(column: Slick.Column) {\r\n            if (column == null) {\r\n                return false;\r\n            }\r\n\r\n            var item = column.sourceItem;\r\n            if (item == null) {\r\n                return true;\r\n            }\r\n\r\n            if (item.filterOnly === true) {\r\n                return false;\r\n            }\r\n\r\n            if (item.readPermission == null) {\r\n                return true;\r\n            }\r\n\r\n            return Q.Authorization.hasPermission(item.readPermission);\r\n        }\r\n\r\n        protected getPersistedSettings(): PersistedGridSettings {\r\n            var storage = this.getPersistanceStorage();\r\n            if (storage == null)\r\n                return null;\r\n\r\n            var json = Q.trimToNull(storage.getItem(this.getPersistanceKey()));\r\n            if (json != null && Q.startsWith(json, '{') && Q.endsWith(json, '}'))\r\n                return JSON.parse(json);\r\n\r\n            return null;\r\n        }\r\n\r\n        protected restoreSettings(settings?: PersistedGridSettings, flags?: GridPersistanceFlags): void {\r\n            if (!this.slickGrid)\r\n                return;\r\n\r\n            if (settings == null) {\r\n                settings = this.getPersistedSettings();\r\n                if (settings == null)\r\n                    return;\r\n            }\r\n\r\n            var columns = this.slickGrid.getColumns();\r\n            var colById: Q.Dictionary<Slick.Column> = null;\r\n            var updateColById = function(cl: Slick.Column[]) {\r\n                colById = {};\r\n                for (var $t1 = 0; $t1 < cl.length; $t1++) {\r\n                    var c = cl[$t1];\r\n                    colById[c.id] = c;\r\n                }\r\n            };\r\n\r\n            this.view.beginUpdate();\r\n            this.restoringSettings++;\r\n            try {\r\n                flags = flags || this.gridPersistanceFlags();\r\n                if (settings.columns != null) {\r\n                    if (flags.columnVisibility !== false) {\r\n                        var visible = {};\r\n                        updateColById(this.allColumns);\r\n                        var newColumns = [];\r\n                        for (var $t2 = 0; $t2 < settings.columns.length; $t2++) {\r\n                            var x = settings.columns[$t2];\r\n                            if (x.id != null && x.visible === true) {\r\n                                var column = colById[x.id];\r\n                                if (this.canShowColumn(column)) {\r\n                                    column.visible = true;\r\n                                    newColumns.push(column);\r\n                                    delete colById[x.id];\r\n                                }\r\n                            }\r\n                        }\r\n                        for (var $t3 = 0; $t3 < this.allColumns.length; $t3++) {\r\n                            var c1 = this.allColumns[$t3];\r\n                            if (colById[c1.id] != null) {\r\n                                c1.visible = false;\r\n                                newColumns.push(c1);\r\n                            }\r\n                        }\r\n                        this.allColumns = newColumns;\r\n                        columns = this.allColumns.filter(function (x1) {\r\n                            return x1.visible === true;\r\n                        });\r\n                    }\r\n                    if (flags.columnWidths !== false) {\r\n                        updateColById(columns);\r\n                        for (var $t4 = 0; $t4 < settings.columns.length; $t4++) {\r\n                            var x2 = settings.columns[$t4];\r\n                            if (x2.id != null && x2.width != null && x2.width !== 0) {\r\n                                var column1 = colById[x2.id];\r\n                                if (column1 != null) {\r\n                                    column1.width = x2.width;\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (flags.sortColumns !== false) {\r\n                        updateColById(columns);\r\n                        var list = [];\r\n                        var sortColumns = settings.columns.filter(function (x3) {\r\n                            return x3.id != null && Q.coalesce(x3.sort, 0) !== 0;\r\n                        });\r\n\r\n                        sortColumns.sort(function (a, b) {\r\n                            return a.sort - b.sort;\r\n                        });\r\n\r\n                        for (var $t5 = 0; $t5 < sortColumns.length; $t5++) {\r\n                            var x4 = sortColumns[$t5];\r\n                            var column2 = colById[x4.id];\r\n                            if (column2 != null) {\r\n                                list.push({\r\n                                    columnId: x4.id,\r\n                                    sortAsc: x4.sort > 0\r\n                                });\r\n                            }\r\n                        }\r\n                        this.view.sortBy = list.map(function (x5) {\r\n                            return x5.columnId + ((x5.sortAsc === false) ? ' DESC' : '');\r\n                        });\r\n                        this.slickGrid.setSortColumns(list);\r\n                    }\r\n                    this.slickGrid.setColumns(columns);\r\n                    this.slickGrid.invalidate();\r\n                }\r\n\r\n                if (settings.filterItems != null &&\r\n                    flags.filterItems !== false &&\r\n                    this.filterBar != null &&\r\n                    this.filterBar.get_store() != null) {\r\n                    (ss as any).clear(this.filterBar.get_store().get_items());\r\n                    (ss as any).arrayAddRange(this.filterBar.get_store().get_items(), settings.filterItems);\r\n                    this.filterBar.get_store().raiseChanged();\r\n                }\r\n\r\n                if (settings.includeDeleted != null &&\r\n                    flags.includeDeleted !== false) {\r\n                    var includeDeletedToggle = this.element.find('.s-IncludeDeletedToggle');\r\n                    if (!!settings.includeDeleted !== includeDeletedToggle.hasClass('pressed')) {\r\n                        includeDeletedToggle.children('a').click();\r\n                    }\r\n                }\r\n\r\n                if (settings.quickFilters != null &&\r\n                    flags.quickFilters !== false &&\r\n                    this.quickFiltersDiv != null &&\r\n                    this.quickFiltersDiv.length > 0) {\r\n                    this.quickFiltersDiv.find('.quick-filter-item').each((i, e) => {\r\n                        var field = $(e).data('qffield');\r\n\r\n                        if (Q.isEmptyOrNull(field)) {\r\n                            return;\r\n                        }\r\n\r\n                        var widget = $('#' + this.uniqueName + '_QuickFilter_' + field).tryGetWidget(Widget);\r\n                        if (widget == null) {\r\n                            return;\r\n                        }\r\n\r\n                        var state = settings.quickFilters[field];\r\n                        var loadState = $(e).data('qfloadstate');\r\n                        if (loadState != null) {\r\n                            loadState(widget, state);\r\n                        }\r\n                        else {\r\n                            Serenity.EditorUtils.setValue(widget, state);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                if (flags.quickSearch === true && (settings.quickSearchField != null || settings.quickSearchText != null)) {\r\n                    var qsInput = this.toolbar.element.find('.s-QuickSearchInput').first();\r\n                    if (qsInput.length > 0) {\r\n                        var qsWidget = qsInput.tryGetWidget(Serenity.QuickSearchInput);\r\n                        if (qsWidget != null) {\r\n                            this.view.populateLock();\r\n                            try {\r\n                                qsWidget.element.addClass('ignore-change');\r\n                                try {\r\n                                    if (settings.quickSearchField != null) {\r\n                                        qsWidget.set_field(settings.quickSearchField);\r\n                                    }\r\n                                    if (settings.quickSearchText != null &&\r\n                                        Q.trimToNull(settings.quickSearchText) !== Q.trimToNull(qsWidget.element.val())) {\r\n                                        qsWidget.element.val(settings.quickSearchText);\r\n                                    }\r\n                                }\r\n                                finally {\r\n                                    qsWidget.element.removeClass('ignore-change');\r\n                                    qsWidget.element.triggerHandler('execute-search');\r\n                                }\r\n                            }\r\n                            finally {\r\n                                this.view.populateUnlock();\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            finally {\r\n                this.restoringSettings--;\r\n                this.view.endUpdate();\r\n            }\r\n        }\r\n\r\n        protected persistSettings(flags?: GridPersistanceFlags): void {\r\n            var storage = this.getPersistanceStorage();\r\n            if (!storage) {\r\n                return;\r\n            }\r\n\r\n            var settings = this.getCurrentSettings(flags);\r\n            storage.setItem(this.getPersistanceKey(), $.toJSON(settings));\r\n        }\r\n\r\n        protected getCurrentSettings(flags?: GridPersistanceFlags) {\r\n            flags = flags || this.gridPersistanceFlags();\r\n            var settings: PersistedGridSettings = {};\r\n            if (flags.columnVisibility !== false || flags.columnWidths !== false || flags.sortColumns !== false) {\r\n                settings.columns = [];\r\n                var sortColumns = this.slickGrid.getSortColumns();\r\n                var $t1 = this.slickGrid.getColumns();\r\n                for (var $t2 = 0; $t2 < $t1.length; $t2++) {\r\n                    var column = { $: $t1[$t2] };\r\n                    var p: PersistedGridColumn = {\r\n                        id: column.$.id\r\n                    };\r\n\r\n                    if (flags.columnVisibility !== false) {\r\n                        p.visible = true;\r\n                    }\r\n                    if (flags.columnWidths !== false) {\r\n                        p.width = column.$.width;\r\n                    }\r\n\r\n                    if (flags.sortColumns !== false) {\r\n                        var sort = Q.indexOf(sortColumns, (ss as any).mkdel({ column: column }, function(x: Slick.ColumnSort) {\r\n                            return x.columnId === this.column.$.id;\r\n                        }));\r\n\r\n                        p.sort = ((sort >= 0) ? ((sortColumns[sort].sortAsc !== false) ? (sort + 1) : (-sort - 1)) : 0);\r\n                    }\r\n                    settings.columns.push(p);\r\n                }\r\n            }\r\n\r\n            if (flags.includeDeleted !== false) {\r\n                settings.includeDeleted = this.element.find('.s-IncludeDeletedToggle').hasClass('pressed');\r\n            }\r\n\r\n            if (flags.filterItems !== false && (this.filterBar != null) && (this.filterBar.get_store() != null)) {\r\n                settings.filterItems = this.filterBar.get_store().get_items().slice();\r\n            }\r\n\r\n            if (flags.quickSearch === true) {\r\n                var qsInput = this.toolbar.element.find('.s-QuickSearchInput').first();\r\n                if (qsInput.length > 0) {\r\n                    var qsWidget = qsInput.tryGetWidget(Serenity.QuickSearchInput);\r\n                    if (qsWidget != null) {\r\n                        settings.quickSearchField = qsWidget.get_field();\r\n                        settings.quickSearchText = qsWidget.element.val();\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (flags.quickFilters !== false && (this.quickFiltersDiv != null) && this.quickFiltersDiv.length > 0) {\r\n                settings.quickFilters = {};\r\n                this.quickFiltersDiv.find('.quick-filter-item').each((i, e) => {\r\n                    var field = $(e).data('qffield');\r\n                    if (Q.isEmptyOrNull(field)) {\r\n                        return;\r\n                    }\r\n\r\n                    var widget = $('#' + this.uniqueName + '_QuickFilter_' + field).tryGetWidget(Widget);\r\n                    if (widget == null) {\r\n                        return;\r\n                    }\r\n\r\n                    var saveState = $(e).data('qfsavestate');\r\n                    var state = (saveState != null) ? saveState(widget) : Serenity.EditorUtils.getValue(widget);\r\n                    settings.quickFilters[field] = state;\r\n                    if (flags.quickFilterText === true && $(e).hasClass('quick-filter-active')) {\r\n\r\n                        var getDisplayText = $(e).data('qfdisplaytext');\r\n                        var filterLabel = $(e).find('.quick-filter-label').text();\r\n\r\n                        var displayText;\r\n                        if (getDisplayText != null) {\r\n                            displayText = getDisplayText(widget, filterLabel);\r\n                        }\r\n                        else {\r\n                            displayText = filterLabel + ' = ' + Serenity.EditorUtils.getDisplayText(widget);\r\n                        }\r\n\r\n                        if (!Q.isEmptyOrNull(displayText)) {\r\n                            if (!Q.isEmptyOrNull(settings.quickFilterText)) {\r\n                                settings.quickFilterText += ' ' + Q.coalesce(Q.tryGetText('Controls.FilterPanel.And'), 'and') + ' ';\r\n                                settings.quickFilterText += displayText;\r\n                            }\r\n                            else {\r\n                                settings.quickFilterText = displayText;\r\n                            }\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n            return settings;\r\n        }\r\n\r\n        getElement(): JQuery {\r\n            return this.element;\r\n        }\r\n\r\n        getGrid(): Slick.Grid {\r\n            return this.slickGrid;\r\n        }\r\n\r\n        getView(): Slick.RemoteView<TItem> {\r\n            return this.view;\r\n        }\r\n\r\n        getFilterStore(): FilterStore {\r\n            return (this.filterBar == null) ? null : this.filterBar.get_store();\r\n        }\r\n    }\r\n}\r\n","namespace Serenity {\r\n\r\n    @Decorators.registerClass('Serenity.EntityGrid')\r\n    export class EntityGrid<TItem, TOptions> extends DataGrid<TItem, TOptions> {\r\n\r\n        constructor(container: JQuery, options?: TOptions) {\r\n            super(container, options);\r\n\r\n            this.element.addClass('route-handler')\r\n                .on('handleroute.' + this.uniqueName, (e: JQueryEventObject, arg: any) => {\r\n                    if (!!arg.handled)\r\n                        return;\r\n\r\n                    if (!!(arg.route === 'new')) {\r\n                        arg.handled = true;\r\n                        this.addButtonClick();\r\n                        return;\r\n                    }\r\n\r\n                    var parts = arg.route.split('/');\r\n                    if (!!(parts.length === 2 && parts[0] === 'edit')) {\r\n                        arg.handled = true;\r\n                        this.editItem(parts[1]);\r\n                        return;\r\n                    }\r\n\r\n                    if (!!(parts.length === 2 && parts[1] === 'new')) {\r\n                        arg.handled = true;\r\n                        this.editItemOfType((ss as any).cast(parts[0], String), null);\r\n                        return;\r\n                    }\r\n\r\n                    if (!!(parts.length === 3 && parts[1] === 'edit')) {\r\n                        arg.handled = true;\r\n                        this.editItemOfType((ss as any).cast(parts[0], String), parts[2]);\r\n                    }\r\n                });\r\n        }\r\n\r\n        protected usePager(): boolean {\r\n            return true;\r\n        }\r\n\r\n        protected createToolbarExtensions(): void {\r\n            this.createIncludeDeletedButton();\r\n            this.createQuickSearchInput();\r\n        }\r\n\r\n        protected getInitialTitle(): string {\r\n            return this.getDisplayName();\r\n        }\r\n\r\n        protected getLocalTextPrefix(): string {\r\n            var result = super.getLocalTextPrefix();\r\n\r\n            if (Q.isEmptyOrNull(result)) {\r\n                return this.getEntityType();\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        private entityType: string;\r\n\r\n        protected getEntityType(): string {\r\n            if (this.entityType != null)\r\n                return this.entityType;\r\n\r\n            var attr = this.attrs(EntityTypeAttribute);\r\n\r\n            if (attr.length === 1) {\r\n                return (this.entityType = attr[0].value);\r\n            }\r\n\r\n            var name = (ss as any).getTypeFullName((ss as any).getInstanceType(this));\r\n\r\n            var px = name.indexOf('.');\r\n            if (px >= 0) {\r\n                name = name.substring(px + 1);\r\n            }\r\n\r\n            if (Q.endsWith(name, 'Grid')) {\r\n                name = name.substr(0, name.length - 4);\r\n            }\r\n            else if (Q.endsWith(name, 'SubGrid')) {\r\n                name = name.substr(0, name.length - 7);\r\n            }\r\n\r\n            this.entityType = name;\r\n\r\n            return this.entityType;\r\n        }\r\n\r\n        private displayName: string;\r\n\r\n        protected getDisplayName(): string {\r\n            if (this.displayName != null)\r\n                return this.displayName;\r\n\r\n            var attr = this.attrs(System.ComponentModel.DisplayNameAttribute);\r\n            if (attr.length >= 1) {\r\n                this.displayName = attr[0].displayName;\r\n                this.displayName = Q.LT.getDefault(this.displayName, this.displayName);\r\n            }\r\n            else {\r\n                this.displayName = Q.tryGetText(this.getLocalTextDbPrefix() + 'EntityPlural');\r\n                if (this.displayName == null)\r\n                    this.displayName = this.getEntityType();\r\n            }\r\n\r\n            return this.displayName;\r\n        }\r\n\r\n        private itemName: string;\r\n\r\n        protected getItemName(): string {\r\n            if (this.itemName != null)\r\n                return this.itemName;\r\n\r\n            var attr = this.attrs(ItemNameAttribute);\r\n            if (attr.length >= 1) {\r\n                this.itemName = attr[0].value;\r\n                this.itemName = Q.LT.getDefault(this.itemName, this.itemName);\r\n            }\r\n            else {\r\n                this.itemName = Q.tryGetText(this.getLocalTextDbPrefix() + 'EntitySingular');\r\n                if (this.itemName == null)\r\n                    this.itemName = this.getEntityType();\r\n            }\r\n\r\n            return this.itemName;\r\n        }\r\n\r\n        protected getAddButtonCaption(): string {\r\n            return Q.format(Q.text('Controls.EntityGrid.NewButton'), this.getItemName());\r\n        }\r\n\r\n        protected getButtons(): ToolButton[] {\r\n\r\n            var buttons: ToolButton[] = [];\r\n            buttons.push({\r\n                title: this.getAddButtonCaption(),\r\n                cssClass: 'add-button',\r\n                hotkey: 'alt+n',\r\n                onClick: () => {\r\n                    this.addButtonClick();\r\n                },\r\n                disabled: () => !this.hasInsertPermission() || this.readOnly\r\n             });\r\n\r\n            buttons.push(this.newRefreshButton(true));\r\n            buttons.push(Serenity.ColumnPickerDialog.createToolButton(this as any));\r\n\r\n            return buttons;\r\n        }\r\n\r\n        protected newRefreshButton(noText?: boolean): ToolButton {\r\n            return {\r\n                title: (noText ? null : Q.text('Controls.EntityGrid.RefreshButton')),\r\n                hint: (noText ? Q.text('Controls.EntityGrid.RefreshButton') : null),\r\n                cssClass: 'refresh-button',\r\n                onClick: () => {\r\n                    this.refresh();\r\n                }\r\n            };\r\n        }\r\n\r\n        protected addButtonClick(): void {\r\n            this.editItem(new Object());\r\n        }\r\n\r\n        protected editItem(entityOrId: any): void {\r\n            this.createEntityDialog(this.getItemType(), dlg => {\r\n                var dialog = (ss as any).safeCast(dlg, Serenity['IEditDialog']);\r\n                if (dialog != null) {\r\n                    dialog.load(entityOrId, () => {\r\n                        dialog.dialogOpen(this.openDialogsAsPanel);\r\n                    });\r\n\r\n                    return;\r\n                }\r\n\r\n                throw new (ss as any).InvalidOperationException(\r\n                    Q.format(\"{0} doesn't implement IEditDialog!\",\r\n                        (ss as any).getTypeFullName((ss as any).getInstanceType(dlg))));\r\n            });\r\n        }\r\n\r\n        protected editItemOfType(itemType: string, entityOrId: any): void {\r\n\r\n            if (itemType === this.getItemType()) {\r\n                this.editItem(entityOrId);\r\n                return;\r\n            }\r\n\r\n            this.createEntityDialog(itemType, dlg => {\r\n                var dialog = (ss as any).safeCast(dlg, Serenity['IEditDialog']);\r\n                if (dialog != null) {\r\n                    dialog.load(entityOrId, () =>\r\n                        dialog.dialogOpen(this.openDialogsAsPanel));\r\n                    return;\r\n                }\r\n\r\n                throw new (ss as any).InvalidOperationException(\r\n                    Q.format(\"{0} doesn't implement IEditDialog!\",\r\n                        (ss as any).getTypeFullName((ss as any).getInstanceType(dlg))));\r\n            });\r\n        }\r\n\r\n        private service: string;\r\n\r\n        protected getService(): string {\r\n            if (this.service != null)\r\n                return this.service;\r\n\r\n            var attr = this.attrs(ServiceAttribute);\r\n            if (attr.length >= 1)\r\n                this.service = attr[0].value;\r\n            else\r\n                this.service = Q.replaceAll(this.getEntityType(), '.', '/');\r\n\r\n            return this.service;\r\n        }\r\n\r\n        protected getViewOptions(): Slick.RemoteViewOptions {\r\n            var opt = super.getViewOptions();\r\n            opt.url = Q.resolveUrl('~/Services/' + this.getService() + '/List');\r\n            return opt;\r\n        }\r\n\r\n        protected getItemType() {\r\n            return this.getEntityType();\r\n        }\r\n\r\n        protected routeDialog(itemType: string, dialog: Widget<any>) {\r\n            Q.Router.dialog(this.element, dialog.element, () => {\r\n                var hash = '';\r\n\r\n                if (itemType !== this.getItemType())\r\n                    hash = itemType + '/';\r\n\r\n                if (!!(dialog != null && (dialog as any).entityId != null))\r\n                    hash += 'edit/' + (dialog as any).entityId.toString();\r\n                else\r\n                    hash += 'new';\r\n\r\n                return hash;\r\n            });\r\n        }\r\n\r\n        protected getInsertPermission(): string {\r\n            return null;\r\n        }\r\n\r\n        protected hasInsertPermission(): boolean {\r\n            var insertPermission = this.getInsertPermission();\r\n            return insertPermission == null || Q.Authorization.hasPermission(this.getInsertPermission());\r\n        }\r\n\r\n        protected transferDialogReadOnly(dialog: Widget<any>) {\r\n            if (this.readOnly)\r\n                Serenity.EditorUtils.setReadOnly(dialog, true);\r\n        }\r\n\r\n        protected initDialog(dialog: Widget<any>): void {\r\n            Serenity.SubDialogHelper.bindToDataChange(dialog, this, (e, dci) => {\r\n                this.subDialogDataChange();\r\n            }, true);\r\n\r\n            this.transferDialogReadOnly(dialog);\r\n            this.routeDialog(this.getItemType(), dialog);\r\n        }\r\n\r\n        protected initEntityDialog(itemType: string, dialog: Widget<any>): void {\r\n            if (itemType === this.getItemType()) {\r\n                this.initDialog(dialog);\r\n                return;\r\n            }\r\n\r\n            Serenity.SubDialogHelper.bindToDataChange(dialog, this, (e, dci) => {\r\n                this.subDialogDataChange();\r\n            }, true);\r\n\r\n            this.transferDialogReadOnly(dialog);\r\n            this.routeDialog(itemType, dialog);\r\n        }\r\n\r\n        protected createEntityDialog(itemType: string, callback?: (dlg: Widget<any>) => void): Widget<any> {\r\n            var dialogClass = this.getDialogTypeFor(itemType);\r\n            var dialog = Serenity.Widget.create({\r\n                type: dialogClass,\r\n                options: this.getDialogOptionsFor(itemType),\r\n                init: d => {\r\n                    this.initEntityDialog(itemType, d);\r\n                    callback && callback(d);\r\n                }\r\n            });\r\n\r\n            return dialog;\r\n        }\r\n\r\n        protected getDialogOptions(): JQueryUI.DialogOptions {\r\n            return {};\r\n        }\r\n\r\n        protected getDialogOptionsFor(itemType: string): JQueryUI.DialogOptions {\r\n            if (itemType === this.getItemType())\r\n                return this.getDialogOptions();\r\n\r\n            return {};\r\n        }\r\n\r\n        protected getDialogTypeFor(itemType: string): { new(...args: any[]): Widget<any> } {\r\n\r\n            if (itemType === this.getItemType()) {\r\n                return this.getDialogType();\r\n            }\r\n\r\n            return Serenity.DialogTypeRegistry.get(itemType) as any;\r\n        }\r\n\r\n        private dialogType: WidgetDialogClass;\r\n\r\n        protected getDialogType(): { new(...args: any[]): Widget<any> } {\r\n\r\n            if (this.dialogType != null)\r\n                return this.dialogType;\r\n\r\n            var attr = this.attrs(DialogTypeAttribute);\r\n            if (attr.length >= 1)\r\n                this.dialogType = attr[0].value;\r\n            else\r\n                this.dialogType = Serenity.DialogTypeRegistry.get(this.getEntityType());\r\n\r\n            return this.dialogType;\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerEditor('Serenity.CheckTreeEditor', [IGetEditValue, ISetEditValue, IReadOnly])\r\n    @Serenity.Decorators.element(\"<div/>\")\r\n    export class CheckTreeEditor<TItem extends CheckTreeItem<any>, TOptions> extends DataGrid<TItem, TOptions>\r\n        implements IGetEditValue, ISetEditValue, IReadOnly {\r\n\r\n        private byId: Q.Dictionary<TItem>;\r\n\r\n        constructor(div: JQuery, opt?: TOptions) {\r\n            super(div, opt);\r\n\r\n            div.addClass('s-CheckTreeEditor');\r\n            this.updateItems();\r\n        }\r\n\r\n        protected getIdProperty() {\r\n            return \"id\";\r\n        }\r\n\r\n        protected getTreeItems(): TItem[] {\r\n            return [];\r\n        }\r\n\r\n        protected updateItems(): void {\r\n            var items = this.getTreeItems();\r\n            var itemById = {};\r\n            for (var i = 0; i < items.length; i++) {\r\n                var item = items[i];\r\n                item.children = [];\r\n                if (!Q.isEmptyOrNull(item.id)) {\r\n                    itemById[item.id] = item;\r\n                }\r\n                if (!Q.isEmptyOrNull(item.parentId)) {\r\n                    var parent = itemById[item.parentId];\r\n                    if (parent != null) {\r\n                        parent.children.push(item);\r\n                    }\r\n                }\r\n            }\r\n            this.view.addData({ Entities: items, Skip: 0, Take: 0, TotalCount: items.length });\r\n            this.updateSelectAll();\r\n            this.updateFlags();\r\n        }\r\n\r\n        getEditValue(property: PropertyItem, target: any): void {\r\n            if (this.getDelimited())\r\n                target[property.name] = this.get_value().join(\",\");\r\n            else\r\n                target[property.name] = this.get_value();\r\n        }\r\n\r\n        setEditValue(source: any, property: PropertyItem): void {\r\n            var value = source[property.name];\r\n            this.set_value(value);\r\n        }\r\n\r\n        protected getButtons(): ToolButton[] {\r\n            var selectAllText = this.getSelectAllText();\r\n            if (Q.isEmptyOrNull(selectAllText)) {\r\n                return null;\r\n            }\r\n\r\n            var self = this;\r\n            var buttons: ToolButton[] = [];\r\n            buttons.push(Serenity.GridSelectAllButtonHelper.define(function () {\r\n                return self;\r\n            }, function (x) {\r\n                return x.id;\r\n            }, function (x1) {\r\n                return x1.isSelected;\r\n            }, (x2, v) => {\r\n                if (x2.isSelected !== v) {\r\n                    x2.isSelected = v;\r\n                    this.itemSelectedChanged(x2);\r\n                }\r\n            }, null, () => {\r\n                this.updateFlags();\r\n            }));\r\n\r\n            return buttons;\r\n        }\r\n\r\n        protected itemSelectedChanged(item: TItem): void {\r\n        }\r\n\r\n        protected getSelectAllText(): string {\r\n            return Q.coalesce(Q.tryGetText('Controls.CheckTreeEditor.SelectAll'), 'Select All');\r\n        }\r\n\r\n        protected isThreeStateHierarchy(): boolean {\r\n            return false;\r\n        }\r\n\r\n        protected createSlickGrid(): Slick.Grid {\r\n            this.element.addClass('slick-no-cell-border').addClass('slick-no-odd-even');\r\n            var result = super.createSlickGrid();\r\n            this.element.addClass('slick-hide-header');\r\n            result.resizeCanvas();\r\n            return result;\r\n        }\r\n\r\n        protected onViewFilter(item: TItem): boolean {\r\n            if (!super.onViewFilter(item)) {\r\n                return false;\r\n            }\r\n\r\n            var items = this.view.getItems();\r\n            var self = this;\r\n            return Serenity.SlickTreeHelper.filterCustom(item, function (x) {\r\n                if (x.parentId == null) {\r\n                    return null;\r\n                }\r\n\r\n                if (self.byId == null) {\r\n                    self.byId = {};\r\n                    for (var i = 0; i < items.length; i++) {\r\n                        var o = items[i];\r\n                        if (o.id != null) {\r\n                            self.byId[o.id] = o;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return self.byId[x.parentId];\r\n            });\r\n        }\r\n\r\n        protected getInitialCollapse(): boolean {\r\n            return false;\r\n        }\r\n\r\n        protected onViewProcessData(response: ListResponse<TItem>): ListResponse<TItem> {\r\n            response = super.onViewProcessData(response);\r\n            this.byId = null;\r\n            Serenity.SlickTreeHelper.setIndents(response.Entities, function (x) {\r\n                return x.id;\r\n            }, function (x1) {\r\n                return x1.parentId;\r\n            }, this.getInitialCollapse());\r\n            return response;\r\n        }\r\n\r\n        protected onClick(e: JQueryEventObject, row: number, cell: number): void {\r\n            super.onClick(e, row, cell);\r\n\r\n            if (!e.isDefaultPrevented()) {\r\n                Serenity.SlickTreeHelper.toggleClick(e, row, cell, this.view, function (x) {\r\n                    return x.id;\r\n                });\r\n            }\r\n\r\n            if (e.isDefaultPrevented()) {\r\n                return;\r\n            }\r\n\r\n            var target = $(e.target);\r\n            if (target.hasClass('check-box')) {\r\n                e.preventDefault();\r\n\r\n                if (this._readOnly)\r\n                    return;\r\n\r\n                var checkedOrPartial = target.hasClass('checked') || target.hasClass('partial');\r\n                var item = this.itemAt(row);\r\n                var anyChanged = item.isSelected !== !checkedOrPartial;\r\n                this.view.beginUpdate();\r\n                try {\r\n                    if (item.isSelected !== !checkedOrPartial) {\r\n                        item.isSelected = !checkedOrPartial;\r\n                        this.view.updateItem(item.id, item);\r\n                        this.itemSelectedChanged(item);\r\n                    }\r\n                    anyChanged = this.setAllSubTreeSelected(item, item.isSelected) || anyChanged;\r\n                    this.updateSelectAll();\r\n                    this.updateFlags();\r\n                }\r\n                finally {\r\n                    this.view.endUpdate();\r\n                }\r\n                if (anyChanged) {\r\n                    this.element.triggerHandler('change');\r\n                }\r\n            }\r\n        }\r\n\r\n        protected updateSelectAll(): void {\r\n            Serenity.GridSelectAllButtonHelper.update(this, function (x) {\r\n                return x.isSelected;\r\n            });\r\n        }\r\n\r\n        protected updateFlags(): void {\r\n            var view = this.view;\r\n            var items = view.getItems();\r\n            var threeState = this.isThreeStateHierarchy();\r\n            if (!threeState) {\r\n                return;\r\n            }\r\n            view.beginUpdate();\r\n            try {\r\n                for (var i = 0; i < items.length; i++) {\r\n                    var item = items[i];\r\n                    if (item.children == null || item.children.length === 0) {\r\n                        var allsel = this.getDescendantsSelected(item);\r\n                        if (allsel !== item.isAllDescendantsSelected) {\r\n                            item.isAllDescendantsSelected = allsel;\r\n                            view.updateItem(item.id, item);\r\n                        }\r\n                        continue;\r\n                    }\r\n                    var allSelected = this.allDescendantsSelected(item);\r\n                    var selected = allSelected || this.anyDescendantsSelected(item);\r\n                    if (allSelected !== item.isAllDescendantsSelected || selected !== item.isSelected) {\r\n                        var selectedChange = item.isSelected !== selected;\r\n                        item.isAllDescendantsSelected = allSelected;\r\n                        item.isSelected = selected;\r\n                        view.updateItem(item.id, item);\r\n                        if (selectedChange) {\r\n                            this.itemSelectedChanged(item);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            finally {\r\n                view.endUpdate();\r\n            }\r\n        }\r\n\r\n        protected getDescendantsSelected(item: TItem): boolean {\r\n            return true;\r\n        }\r\n\r\n        protected setAllSubTreeSelected(item: TItem, selected: boolean): boolean {\r\n            var result = false;\r\n            for (var i = 0; i < item.children.length; i++) {\r\n                var sub = item.children[i];\r\n                if (sub.isSelected !== selected) {\r\n                    result = true;\r\n                    sub.isSelected = selected;\r\n                    this.view.updateItem(sub.id, sub as TItem);\r\n                    this.itemSelectedChanged(sub as TItem);\r\n                }\r\n                if (sub.children.length > 0) {\r\n                    result = this.setAllSubTreeSelected(sub as TItem, selected) || result;\r\n                }\r\n            }\r\n            return result;\r\n        }\r\n\r\n        protected allItemsSelected() {\r\n            for (var i = 0; i < this.rowCount(); i++) {\r\n                var row = this.itemAt(i);\r\n                if (!row.isSelected) {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return this.rowCount() > 0;\r\n        }\r\n\r\n        protected allDescendantsSelected(item: TItem): boolean {\r\n            if (item.children.length > 0) {\r\n                for (var i = 0; i < item.children.length; i++) {\r\n                    var sub = item.children[i];\r\n                    if (!sub.isSelected) {\r\n                        return false;\r\n                    }\r\n\r\n                    if (!this.allDescendantsSelected(sub as TItem)) {\r\n                        return false;\r\n                    }\r\n                }\r\n            }\r\n            return true;\r\n        }\r\n\r\n        protected getDelimited() {\r\n            return !!!!this.options['delimited'];\r\n        }\r\n\r\n        protected anyDescendantsSelected(item: TItem): boolean {\r\n            if (item.children.length > 0) {\r\n                for (var i = 0; i < item.children.length; i++) {\r\n                    var sub = item.children[i];\r\n                    if (sub.isSelected) {\r\n                        return true;\r\n                    }\r\n                    if (this.anyDescendantsSelected(sub as TItem)) {\r\n                        return true;\r\n                    }\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n\r\n        protected getColumns(): Slick.Column[] {\r\n            var self = this;\r\n            var columns = [];\r\n            columns.push({\r\n                field: 'text', name: 'Kayıt', width: 80, format: Serenity.SlickFormatting.treeToggle(function () {\r\n                    return self.view;\r\n                }, function (x) {\r\n                    return x.id;\r\n                }, ctx => {\r\n                    var cls = 'check-box';\r\n                    var item = ctx.item;\r\n                    if (item.hideCheckBox) {\r\n                        return this.getItemText(ctx);\r\n                    }\r\n                    var threeState = this.isThreeStateHierarchy();\r\n                    if (item.isSelected) {\r\n                        if (threeState && !item.isAllDescendantsSelected) {\r\n                            cls += ' partial';\r\n                        }\r\n                        else {\r\n                            cls += ' checked';\r\n                        }\r\n                    }\r\n                    if (this._readOnly)\r\n                        cls += ' readonly';\r\n                    return '<span class=\"' + cls + '\"></span>' + this.getItemText(ctx);\r\n                })\r\n            });\r\n            return columns;\r\n        }\r\n\r\n        protected getItemText(ctx: Slick.FormatterContext): string {\r\n            return Q.htmlEncode(ctx.value);\r\n        }\r\n\r\n        protected getSlickOptions(): Slick.GridOptions {\r\n            var opt = super.getSlickOptions();\r\n            opt.forceFitColumns = true;\r\n            return opt;\r\n        }\r\n\r\n        protected sortItems(): void {\r\n            if (!this.moveSelectedUp()) {\r\n                return;\r\n            }\r\n            var oldIndexes = {};\r\n            var list = this.view.getItems();\r\n            var i = 0;\r\n            for (var $t1 = 0; $t1 < list.length; $t1++) {\r\n                var x = list[$t1];\r\n                oldIndexes[x.id] = i++;\r\n            }\r\n            list.sort(function (x1, y) {\r\n                if (x1.isSelected && !y.isSelected) {\r\n                    return -1;\r\n                }\r\n                if (y.isSelected && !x1.isSelected) {\r\n                    return 1;\r\n                }\r\n                var c = Q.turkishLocaleCompare(x1.text, y.text);\r\n                if (c !== 0) {\r\n                    return c;\r\n                }\r\n                return (ss as any).compare(oldIndexes[x1.id], oldIndexes[y.id]);\r\n            });\r\n\r\n            this.view.setItems(list, true);\r\n        }\r\n\r\n        protected moveSelectedUp(): boolean {\r\n            return false;\r\n        }\r\n\r\n        private _readOnly: boolean;\r\n\r\n        public get_readOnly() {\r\n            return this._readOnly;\r\n        }\r\n\r\n        public set_readOnly(value: boolean) {\r\n            if (!!this._readOnly != !!value) {\r\n                this._readOnly = !!value;\r\n                this.view.refresh();\r\n            }\r\n        }\r\n\r\n        private get_value(): string[] {\r\n            var list = [];\r\n            var items = this.view.getItems();\r\n            for (var i = 0; i < items.length; i++) {\r\n                if (items[i].isSelected) {\r\n                    list.push(items[i].id);\r\n                }\r\n            }\r\n            return list;\r\n        }\r\n\r\n        public get value() {\r\n            return this.get_value();\r\n        }\r\n\r\n        private set_value(value: string | string[]) {\r\n\r\n            var selected = {};\r\n            if (value != null) {\r\n                if (typeof value == \"string\") {\r\n                    value = value.split(',')\r\n                        .map(x => Q.trimToNull(x))\r\n                        .filter(x => x != null);\r\n                }\r\n\r\n                for (var i = 0; i < value.length; i++) {\r\n                    selected[value[i]] = true;\r\n                }\r\n            }\r\n\r\n            this.view.beginUpdate();\r\n            try {\r\n                var items = this.view.getItems();\r\n                for (var i1 = 0; i1 < items.length; i1++) {\r\n                    var item = items[i1];\r\n                    var select = selected[item.id];\r\n                    if (select !== item.isSelected) {\r\n                        item.isSelected = select;\r\n                        this.view.updateItem(item.id, item);\r\n                    }\r\n                }\r\n                this.updateSelectAll();\r\n                this.updateFlags();\r\n                this.sortItems();\r\n            }\r\n            finally {\r\n                this.view.endUpdate();\r\n            }\r\n        }\r\n\r\n        public set value(v: string[]) {\r\n            this.set_value(v);\r\n        }\r\n    }\r\n\r\n    export interface CheckLookupEditorOptions {\r\n        lookupKey?: string;\r\n        checkedOnTop?: boolean;\r\n        showSelectAll?: boolean;\r\n        hideSearch?: boolean;\r\n        delimited?: boolean;\r\n        cascadeFrom?: string;\r\n        cascadeField?: string;\r\n        cascadeValue?: any;\r\n        filterField?: string;\r\n        filterValue?: any;\r\n    }\r\n\r\n    @Decorators.registerEditor(\"Serenity.CheckLookupEditor\")\r\n    export class CheckLookupEditor<TItem = any> extends CheckTreeEditor<Serenity.CheckTreeItem<TItem>, CheckLookupEditorOptions> {\r\n\r\n        private searchText: string;\r\n        private enableUpdateItems: boolean;\r\n\r\n        constructor(div: JQuery, options: CheckLookupEditorOptions) {\r\n            super(div, options);\r\n\r\n            this.enableUpdateItems = true;\r\n            this.setCascadeFrom(this.options.cascadeFrom);\r\n            this.updateItems();\r\n            Q.ScriptData.bindToChange('Lookup.' + this.getLookupKey(), this.uniqueName,\r\n                () => this.updateItems());\r\n        }\r\n\r\n        protected updateItems() {\r\n            if (this.enableUpdateItems)\r\n                super.updateItems();\r\n        }\r\n\r\n        protected getLookupKey() {\r\n            return this.options.lookupKey;\r\n        }\r\n\r\n        protected getButtons(): Serenity.ToolButton[] {\r\n            return Q.coalesce(super.getButtons(), this.options.hideSearch ? null : []);\r\n        }\r\n\r\n        protected createToolbarExtensions() {\r\n            super.createToolbarExtensions();\r\n\r\n            Serenity.GridUtils.addQuickSearchInputCustom(this.toolbar.element, (field, text) => {\r\n                this.searchText = Select2.util.stripDiacritics(text || '').toUpperCase();\r\n                this.view.setItems(this.view.getItems(), true);\r\n            });\r\n        }\r\n\r\n        protected getSelectAllText(): string {\r\n            if (!this.options.showSelectAll)\r\n                return null;\r\n\r\n            return super.getSelectAllText();\r\n        }\r\n\r\n        protected cascadeItems(items: TItem[]) {\r\n\r\n            var val = this.get_cascadeValue();\r\n\r\n            if (val == null || val === '') {\r\n\r\n                if (!Q.isEmptyOrNull(this.get_cascadeField())) {\r\n                    return [];\r\n                }\r\n\r\n                return items;\r\n            }\r\n\r\n            var key = val.toString();\r\n            var fld = this.get_cascadeField();\r\n\r\n            return items.filter(x => {\r\n                var itemKey = Q.coalesce(x[fld], Serenity.ReflectionUtils.getPropertyValue(x, fld));\r\n                return !!(itemKey != null && itemKey.toString() === key);\r\n            });\r\n        }\r\n\r\n        protected filterItems(items: TItem[]) {\r\n            var val = this.get_filterValue();\r\n\r\n            if (val == null || val === '') {\r\n                return items;\r\n            }\r\n\r\n            var key = val.toString();\r\n            var fld = this.get_filterField();\r\n\r\n            return items.filter(x => {\r\n                var itemKey = Q.coalesce(x[fld], Serenity.ReflectionUtils.getPropertyValue(x, fld));\r\n                return !!(itemKey != null && itemKey.toString() === key);\r\n            });\r\n        }\r\n\r\n        protected getLookupItems(lookup: Q.Lookup<TItem>): TItem[] {\r\n            return this.filterItems(this.cascadeItems(lookup.items));\r\n        }\r\n\r\n        protected getTreeItems() {\r\n            var lookup = Q.getLookup<TItem>(this.options.lookupKey);\r\n            var items = this.getLookupItems(lookup);\r\n            return items.map(item => <Serenity.CheckTreeItem<TItem>>{\r\n                id: Q.coalesce(item[lookup.idField], \"\").toString(),\r\n                text: Q.coalesce(item[lookup.textField], \"\").toString(),\r\n                source: item\r\n            });\r\n        }\r\n\r\n        protected onViewFilter(item: CheckTreeItem<TItem>) {\r\n            return super.onViewFilter(item) &&\r\n                (Q.isEmptyOrNull(this.searchText) ||\r\n                    Select2.util.stripDiacritics(item.text || '')\r\n                        .toUpperCase().indexOf(this.searchText) >= 0);\r\n        }\r\n\r\n        protected moveSelectedUp(): boolean {\r\n            return this.options.checkedOnTop;\r\n        }\r\n\r\n        protected get_cascadeFrom(): string {\r\n            return this.options.cascadeFrom;\r\n        }\r\n\r\n        get cascadeFrom(): string {\r\n            return this.get_cascadeFrom();\r\n        }\r\n\r\n        protected getCascadeFromValue(parent: Serenity.Widget<any>) {\r\n            return Serenity.EditorUtils.getValue(parent);\r\n        }\r\n\r\n        protected cascadeLink: Serenity.CascadedWidgetLink<Widget<any>>;\r\n\r\n        protected setCascadeFrom(value: string) {\r\n\r\n            if (Q.isEmptyOrNull(value)) {\r\n                if (this.cascadeLink != null) {\r\n                    this.cascadeLink.set_parentID(null);\r\n                    this.cascadeLink = null;\r\n                }\r\n                this.options.cascadeFrom = null;\r\n                return;\r\n            }\r\n\r\n            this.cascadeLink = new Serenity.CascadedWidgetLink<Widget<any>>(Widget, this, p => {\r\n                this.set_cascadeValue(this.getCascadeFromValue(p));\r\n            });\r\n\r\n            this.cascadeLink.set_parentID(value);\r\n            this.options.cascadeFrom = value;\r\n        }\r\n\r\n        protected set_cascadeFrom(value: string) {\r\n            if (value !== this.options.cascadeFrom) {\r\n                this.setCascadeFrom(value);\r\n                this.updateItems();\r\n            }\r\n        }\r\n\r\n        set cascadeFrom(value: string) {\r\n            this.set_cascadeFrom(value);\r\n        }\r\n\r\n        protected get_cascadeField() {\r\n            return Q.coalesce(this.options.cascadeField, this.options.cascadeFrom);\r\n        }\r\n\r\n        get cascadeField(): string {\r\n            return this.get_cascadeField();\r\n        }\r\n\r\n        protected set_cascadeField(value: string) {\r\n            this.options.cascadeField = value;\r\n        }\r\n\r\n        set cascadeField(value: string) {\r\n            this.set_cascadeField(value);\r\n        }\r\n\r\n        protected get_cascadeValue(): any {\r\n            return this.options.cascadeValue;\r\n        }\r\n\r\n        get cascadeValue(): any {\r\n            return this.get_cascadeValue();\r\n        }\r\n\r\n        protected set_cascadeValue(value: any) {\r\n            if (this.options.cascadeValue !== value) {\r\n                this.options.cascadeValue = value;\r\n                this.value = [];\r\n                this.updateItems();\r\n            }\r\n        }\r\n\r\n        set cascadeValue(value: any) {\r\n            this.set_cascadeValue(value);\r\n        }\r\n\r\n        protected get_filterField() {\r\n            return this.options.filterField;\r\n        }\r\n\r\n        get filterField(): string {\r\n            return this.get_filterField();\r\n        }\r\n\r\n        protected set_filterField(value: string) {\r\n            this.options.filterField = value;\r\n        }\r\n\r\n        set filterField(value: string) {\r\n            this.set_filterField(value);\r\n        }\r\n\r\n        protected get_filterValue(): any {\r\n            return this.options.filterValue;\r\n        }\r\n\r\n        get filterValue(): any {\r\n            return this.get_filterValue();\r\n        }\r\n\r\n        protected set_filterValue(value: any) {\r\n            if (this.options.filterValue !== value) {\r\n                this.options.filterValue = value;\r\n                this.value = null;\r\n                this.updateItems();\r\n            }\r\n        }\r\n\r\n        set filterValue(value: any) {\r\n            this.set_filterValue(value);\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n    export class TemplatedPanel<TOptions> extends TemplatedWidget<TOptions> {\r\n        constructor(container: JQuery, options?: TOptions) {\r\n            super(container, options);\r\n\r\n            this.initValidator();\r\n            this.initTabs();\r\n            this.initToolbar();\r\n        }\r\n\r\n        destroy() {\r\n            if (this.tabs) {\r\n                this.tabs.tabs('destroy');\r\n                this.tabs = null;\r\n            }\r\n\r\n\t\t\tif (this.toolbar) {\r\n                this.toolbar.destroy();\r\n                this.toolbar = null;\r\n            }\r\n\r\n\t\t\tif (this.validator) {\r\n                this.byId('Form').remove();\r\n                this.validator = null;\r\n            }\r\n\r\n            super.destroy();\r\n        }\r\n\r\n        protected tabs: JQuery;\r\n        protected toolbar: Serenity.Toolbar;\r\n        protected validator: JQueryValidation.Validator;\r\n        protected isPanel: boolean;\r\n        protected responsive: boolean;\r\n\r\n        protected arrange(): void {\r\n            this.element.find('.require-layout').filter(':visible').each(function (i, e) {\r\n                $(e).triggerHandler('layout');\r\n            });\r\n        }\r\n\r\n        protected getToolbarButtons(): ToolButton[] {\r\n            return [];\r\n        }\r\n\r\n        protected getValidatorOptions(): JQueryValidation.ValidationOptions {\r\n            return {};\r\n        }\r\n\r\n        protected initTabs(): void {\r\n            var tabsDiv = this.byId('Tabs');\r\n            if (tabsDiv.length === 0) {\r\n                return;\r\n            }\r\n            this.tabs = tabsDiv.tabs({});\r\n        }\r\n\r\n        protected initToolbar(): void {\r\n            var toolbarDiv = this.byId('Toolbar');\r\n            if (toolbarDiv.length === 0) {\r\n                return;\r\n            }\r\n            var opt = { buttons: this.getToolbarButtons() };\r\n            this.toolbar = new Toolbar(toolbarDiv, opt);\r\n        }\r\n\r\n        protected initValidator(): void {\r\n            var form = this.byId('Form');\r\n            if (form.length > 0) {\r\n                var valOptions = this.getValidatorOptions();\r\n                this.validator = form.validate(Q.validateOptions(valOptions));\r\n            }\r\n        }\r\n\r\n        protected resetValidation(): void {\r\n            if (this.validator) {\r\n                (this.validator as any).resetAll();\r\n            }\r\n        }\r\n\r\n        protected validateForm(): boolean {\r\n            return this.validator == null || !!this.validator.form();\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerClass('Serenity.PropertyPanel')\r\n    export class PropertyPanel<TItem, TOptions> extends TemplatedPanel<TOptions> {\r\n\r\n        private _entity: TItem;\r\n        private _entityId: any;\r\n\r\n        constructor(container: JQuery, options?: TOptions) {\r\n            super(container, options);\r\n\r\n            if (!this.isAsyncWidget()) {\r\n                this.initPropertyGrid();\r\n                this.loadInitialEntity();\r\n            }\r\n        }\r\n\r\n        destroy() {\r\n            if (this.propertyGrid) {\r\n                this.propertyGrid.destroy();\r\n                this.propertyGrid = null;\r\n            }\r\n            if (this.validator) {\r\n                this.byId('Form').remove();\r\n                this.validator = null;\r\n            }\r\n            super.destroy();\r\n        }\r\n\r\n        protected initPropertyGrid() {\r\n            var pgDiv = this.byId('PropertyGrid');\r\n            if (pgDiv.length <= 0) {\r\n                return;\r\n            }\r\n            var pgOptions = this.getPropertyGridOptions();\r\n            this.propertyGrid = (new Serenity.PropertyGrid(pgDiv, pgOptions)).init(null);\r\n            if (this.element.closest('.ui-Panel').hasClass('s-Flexify')) {\r\n                this.propertyGrid.element.children('.categories').flexHeightOnly(1);\r\n            }\r\n        }\r\n\r\n        protected initPropertyGridAsync() {\r\n            return Promise.resolve().then(() => {\r\n                var pgDiv = this.byId('PropertyGrid');\r\n                if (pgDiv.length <= 0) {\r\n                    return Promise.resolve();\r\n                }\r\n                return this.getPropertyGridOptionsAsync().then(pgOptions => {\r\n                    this.propertyGrid = new Serenity.PropertyGrid(pgDiv, pgOptions);\r\n                    if (this.element.closest('.ui-Panel').hasClass('s-Flexify')) {\r\n                        this.propertyGrid.element.children('.categories').flexHeightOnly(1);\r\n                    }\r\n                    return this.propertyGrid.initialize();\r\n                });\r\n            });\r\n        }\r\n\r\n        protected loadInitialEntity(): void {\r\n            if (this.propertyGrid) {\r\n                this.propertyGrid.load(new Object());\r\n            }\r\n        }\r\n\r\n        protected initializeAsync(): PromiseLike<void> {\r\n            return super.initializeAsync()\r\n                .then(() => this.initPropertyGridAsync())\r\n                .then(() => this.loadInitialEntity());\r\n        }\r\n\r\n        protected getFormKey(): string {\r\n            var attributes = (ss as any).getAttributes(\r\n                (ss as any).getInstanceType(this), Serenity.FormKeyAttribute, true);\r\n\r\n            if (attributes.length >= 1) {\r\n                return attributes[0].value;\r\n            }\r\n            var name = (ss as any).getTypeFullName((ss as any).getInstanceType(this));\r\n            var px = name.indexOf('.');\r\n            if (px >= 0) {\r\n                name = name.substring(px + 1);\r\n            }\r\n            if (Q.endsWith(name, 'Panel')) {\r\n                name = name.substr(0, name.length - 6);\r\n            }\r\n            else if (Q.endsWith(name, 'Panel')) {\r\n                name = name.substr(0, name.length - 5);\r\n            }\r\n            return name;\r\n        }\r\n\r\n        protected getPropertyGridOptions(): PropertyGridOptions {\r\n            return {\r\n                idPrefix: this.idPrefix,\r\n                items: this.getPropertyItems(),\r\n                mode: 1,\r\n                useCategories: false,\r\n                localTextPrefix: 'Forms.' + this.getFormKey() + '.'\r\n            };\r\n        }\r\n\r\n        protected getPropertyGridOptionsAsync(): PromiseLike<PropertyGridOptions> {\r\n            return this.getPropertyItemsAsync().then(propertyItems => {\r\n                return {\r\n                    idPrefix: this.idPrefix,\r\n                    items: propertyItems,\r\n                    mode: 1,\r\n                    useCategories: false,\r\n                    localTextPrefix: 'Forms.' + this.getFormKey() + '.'\r\n                };\r\n            });\r\n        }\r\n\r\n        protected getPropertyItems(): PropertyItem[] {\r\n            var formKey = this.getFormKey();\r\n            return Q.getForm(formKey);\r\n        }\r\n\r\n        protected getPropertyItemsAsync(): PromiseLike<PropertyItem[]> {\r\n            return Promise.resolve().then(() => {\r\n                var formKey = this.getFormKey();\r\n                return Q.getFormAsync(formKey);\r\n            });\r\n        }\r\n\r\n        protected getSaveEntity(): TItem {\r\n            var entity = new Object();\r\n            if (this.propertyGrid) {\r\n                this.propertyGrid.save(entity);\r\n            }\r\n            return entity as TItem;\r\n        }\r\n\r\n        protected get_entity(): TItem {\r\n            return this._entity;\r\n        }\r\n\r\n        protected get_entityId(): any {\r\n            return this._entityId;\r\n        }\r\n        \r\n        protected set_entity(value: TItem): void {\r\n            this._entity = Q.coalesce(value, new Object());\r\n        }\r\n\r\n        protected set_entityId(value: any): void {\r\n            this._entityId = value;\r\n        }\r\n\r\n        protected validateBeforeSave(): boolean {\r\n            return this.validator.form();\r\n        }\r\n\r\n        protected propertyGrid: Serenity.PropertyGrid;\r\n    }\r\n}","namespace Serenity {\r\n\r\n    @Decorators.registerInterface('Serenity.IEditDialog')\r\n    export class IEditDialog {\r\n    }\r\n\r\n    export interface IEditDialog {\r\n        load(entityOrId: any, done: () => void, fail: (p1: any) => void): void;\r\n    }\r\n\r\n    @Serenity.Decorators.registerClass('Serenity.EntityDialog', [Serenity['IEditDialog'], IReadOnly])\r\n    export class EntityDialog<TItem, TOptions> extends TemplatedDialog<TOptions> implements IEditDialog, IReadOnly {\r\n\r\n        protected entity: TItem;\r\n        protected entityId: any;\r\n        protected propertyGrid: PropertyGrid;\r\n\r\n        protected toolbar: Toolbar;\r\n        protected saveAndCloseButton: JQuery;\r\n        protected applyChangesButton: JQuery;\r\n        protected deleteButton: JQuery;\r\n        protected undeleteButton: JQuery;\r\n        protected cloneButton: JQuery;\r\n        protected editButton: JQuery;\r\n\r\n        protected localizationGrid: PropertyGrid;\r\n        protected localizationButton: JQuery;\r\n        protected localizationPendingValue: any;\r\n        protected localizationLastValue: any;\r\n\r\n        static defaultLanguageList: () => string[][];\r\n\r\n        constructor(opt?: TOptions) {\r\n            super(opt);\r\n\r\n            if (!this.isAsyncWidget()) {\r\n                this.initPropertyGrid();\r\n                this.initLocalizationGrid();\r\n            }\r\n        }\r\n\r\n        protected initializeAsync(): PromiseLike<void> {\r\n            return super.initializeAsync()\r\n                .then(() => this.initPropertyGridAsync())\r\n                .then(() => this.initLocalizationGridAsync());\r\n        }\r\n\r\n        destroy(): void {\r\n\r\n            if (this.propertyGrid) {\r\n                this.propertyGrid.destroy();\r\n                this.propertyGrid = null;\r\n            }\r\n\r\n            if (this.localizationGrid) {\r\n                this.localizationGrid.destroy();\r\n                this.localizationGrid = null;\r\n            }\r\n\r\n            this.undeleteButton = null;\r\n            this.applyChangesButton = null;\r\n            this.deleteButton = null;\r\n            this.saveAndCloseButton = null;\r\n            this.editButton = null;\r\n            this.cloneButton = null;\r\n            this.toolbar = null;\r\n\r\n            super.destroy();\r\n        }\r\n\r\n        protected get_entity(): TItem {\r\n            return this.entity;\r\n        }\r\n\r\n        protected set_entity(entity: any): void {\r\n            this.entity = entity || new Object();\r\n        }\r\n\r\n        protected get_entityId(): any {\r\n            return this.entityId;\r\n        }\r\n\r\n        protected set_entityId(value: any) {\r\n            this.entityId = value;\r\n        }\r\n\r\n        protected getEntityNameFieldValue(): any {\r\n            return Q.coalesce(this.get_entity()[this.getNameProperty()], '').toString();\r\n        }\r\n\r\n        protected getEntityTitle(): string {\r\n            if (!this.isEditMode()) {\r\n                return Q.format(Q.text('Controls.EntityDialog.NewRecordTitle'), this.getEntitySingular());\r\n            }\r\n            else {\r\n                var titleFormat = (this.isViewMode() || this.readOnly || !this.hasSavePermission()) ?\r\n                    Q.text('Controls.EntityDialog.ViewRecordTitle') : Q.text('Controls.EntityDialog.EditRecordTitle');\r\n                var title = Q.coalesce(this.getEntityNameFieldValue(), '');\r\n                return Q.format(titleFormat,\r\n                    this.getEntitySingular(), (Q.isEmptyOrNull(title) ? '' : (' (' + title + ')')));\r\n            }\r\n        }\r\n\r\n        protected updateTitle(): void {\r\n            this.dialogTitle = this.getEntityTitle();\r\n        }\r\n\r\n        protected isCloneMode(): boolean {\r\n            return false;\r\n        }\r\n\r\n        protected isEditMode(): boolean {\r\n            return this.get_entityId() != null && !this.isCloneMode();\r\n        }\r\n\r\n        protected isDeleted(): boolean {\r\n            if (this.get_entityId() == null) {\r\n                return false;\r\n            }\r\n\r\n            var isDeletedProperty = this.getIsDeletedProperty();\r\n            if (isDeletedProperty) {\r\n                return !!this.get_entity()[isDeletedProperty];\r\n            }\r\n\r\n            var value = this.get_entity()[this.getIsActiveProperty()];\r\n            if (value == null) {\r\n                return false;\r\n            }\r\n\r\n            return value < 0;\r\n        }\r\n\r\n        protected isNew(): boolean {\r\n            return this.get_entityId() == null;\r\n        }\r\n\r\n        protected isNewOrDeleted(): boolean {\r\n            return this.isNew() || this.isDeleted();\r\n        }\r\n\r\n        protected getDeleteOptions(callback: (response: DeleteResponse) => void): ServiceOptions<DeleteResponse> {\r\n            return {};\r\n        }\r\n\r\n        protected deleteHandler(options: ServiceOptions<DeleteResponse>, callback: (response: DeleteResponse) => void): void {\r\n            Q.serviceCall(options);\r\n        }\r\n\r\n        protected doDelete(callback: (response: DeleteResponse) => void): void {\r\n            var self = this;\r\n\r\n            var request: DeleteRequest = {\r\n                EntityId: this.get_entityId()\r\n            };\r\n\r\n            var baseOptions: Q.ServiceOptions<DeleteResponse> = {\r\n                service: this.getService() + '/Delete',\r\n                request: request,\r\n                onSuccess: response => {\r\n                    self.onDeleteSuccess(response);\r\n                    if (callback != null) {\r\n                        callback(response);\r\n                    }\r\n                    self.element.triggerHandler('ondatachange', [{\r\n                        entityId: request.EntityId,\r\n                        entity: this.entity,\r\n                        type: 'delete'\r\n                    }]);\r\n                }\r\n            };\r\n\r\n            var thisOptions = this.getDeleteOptions(callback);\r\n            var finalOptions = $.extend(baseOptions, thisOptions);\r\n\r\n            this.deleteHandler(finalOptions, callback);\r\n        }\r\n\r\n        protected onDeleteSuccess(response: DeleteResponse): void {\r\n        }\r\n\r\n        protected attrs<TAttr>(attrType: { new(...args: any[]): TAttr }): TAttr[] {\r\n            return (ss as any).getAttributes((ss as any).getInstanceType(this), attrType, true);\r\n        }\r\n\r\n        private entityType: string;\r\n\r\n        protected getEntityType(): string {\r\n\r\n            if (this.entityType != null)\r\n                return this.entityType;\r\n\r\n            var typeAttributes = this.attrs(EntityTypeAttribute);\r\n\r\n            if (typeAttributes.length === 1)\r\n                return (this.entityType = typeAttributes[0].value);\r\n\r\n            // remove global namespace\r\n            var name = (ss as any).getTypeFullName((ss as any).getInstanceType(this));\r\n            var px = name.indexOf('.');\r\n            if (px >= 0)\r\n                name = name.substring(px + 1);\r\n\r\n            // don't like this kind of convention, make it obsolete soon...\r\n            if (Q.endsWith(name, 'Dialog') || Q.endsWith(name, 'Control'))\r\n                name = name.substr(0, name.length - 6);\r\n            else if (Q.endsWith(name, 'Panel'))\r\n                name = name.substr(0, name.length - 5);\r\n\r\n            return (this.entityType = name);\r\n        }\r\n\r\n        private formKey: string;\r\n\r\n        protected getFormKey(): string {\r\n            if (this.formKey != null)\r\n                return this.formKey;\r\n\r\n            var attributes = this.attrs(FormKeyAttribute);\r\n\r\n            if (attributes.length >= 1)\r\n                return (this.formKey = attributes[0].value);\r\n\r\n            return (this.formKey = this.getEntityType());\r\n        }\r\n\r\n        private localTextDbPrefix: string;\r\n\r\n        protected getLocalTextDbPrefix(): string {\r\n            if (this.localTextDbPrefix != null)\r\n                return this.localTextDbPrefix;\r\n\r\n            this.localTextDbPrefix = Q.coalesce(this.getLocalTextPrefix(), '');\r\n\r\n            if (this.localTextDbPrefix.length > 0 && !Q.endsWith(this.localTextDbPrefix, '.'))\r\n                this.localTextDbPrefix = 'Db.' + this.localTextDbPrefix + '.';\r\n\r\n            return this.localTextDbPrefix;\r\n        }\r\n\r\n        protected getLocalTextPrefix(): string {\r\n            var attributes = this.attrs(LocalTextPrefixAttribute);\r\n\r\n            if (attributes.length >= 1)\r\n                return attributes[0].value;\r\n\r\n            return this.getEntityType();\r\n        }\r\n\r\n        private entitySingular: string;\r\n\r\n        protected getEntitySingular(): string {\r\n            if (this.entitySingular != null)\r\n                return this.entitySingular;\r\n\r\n            var attributes = this.attrs(ItemNameAttribute);\r\n\r\n            if (attributes.length >= 1) {\r\n                this.entitySingular = attributes[0].value;\r\n                this.entitySingular = Q.LT.getDefault(this.entitySingular, this.entitySingular);\r\n            }\r\n            else {\r\n                var es = Q.tryGetText(this.getLocalTextDbPrefix() + 'EntitySingular');\r\n                if (es == null) \r\n                    es = this.getEntityType();\r\n                this.entitySingular = es;\r\n            }\r\n\r\n            return this.entitySingular;\r\n        }\r\n\r\n        private nameProperty: string;\r\n\r\n        protected getNameProperty(): string {\r\n            if (this.nameProperty != null)\r\n                return this.nameProperty;\r\n\r\n            var attributes = this.attrs(NamePropertyAttribute);\r\n\r\n            if (attributes.length >= 1)\r\n                this.nameProperty = attributes[0].value;\r\n            else\r\n                this.nameProperty = 'Name';\r\n\r\n            return this.nameProperty;\r\n        }\r\n\r\n        private idProperty: string;\r\n\r\n        protected getIdProperty(): string {\r\n            if (this.idProperty != null)\r\n                return this.idProperty;\r\n\r\n            var attributes = this.attrs(IdPropertyAttribute);\r\n            if (attributes.length >= 1)\r\n                this.idProperty = attributes[0].value;\r\n            else\r\n                this.idProperty = 'ID';\r\n\r\n            return this.idProperty;\r\n        }\r\n\r\n        protected isActiveProperty: string;\r\n\r\n        protected getIsActiveProperty(): string {\r\n            if (this.isActiveProperty != null)\r\n                return this.isActiveProperty;\r\n\r\n            var attributes = this.attrs(IsActivePropertyAttribute)\r\n            if (attributes.length >= 1)\r\n                this.isActiveProperty = attributes[0].value;\r\n            else\r\n                this.isActiveProperty = 'IsActive';\r\n\r\n            return this.isActiveProperty;\r\n        }\r\n\r\n        protected getIsDeletedProperty(): string {\r\n            return null;\r\n        }\r\n\r\n        protected service: string;\r\n\r\n        protected getService() {\r\n            if (this.service != null)\r\n                return this.service;\r\n\r\n            var attributes = this.attrs(ServiceAttribute);\r\n            if (attributes.length >= 1)\r\n                this.service = attributes[0].value;\r\n            else\r\n                this.service = Q.replaceAll(this.getEntityType(), '.', '/');\r\n\r\n            return this.service;\r\n        }\r\n\r\n        load(entityOrId: any, done: () => void, fail: (ex: ss.Exception) => void): void {\r\n\r\n            var action = () => {\r\n\r\n                if (entityOrId == null) {\r\n                    this.loadResponse({});\r\n                    done && done();\r\n                    return;\r\n                }\r\n\r\n                var scriptType = typeof (entityOrId);\r\n                if (scriptType === 'string' || scriptType === 'number') {\r\n                    var entityId = entityOrId;\r\n\r\n                    this.loadById(entityId, function (response) {\r\n                        if (done)\r\n                            window.setTimeout(done, 0);\r\n                    }, null);\r\n\r\n                    return;\r\n                }\r\n\r\n                var entity = entityOrId || new Object();\r\n                this.loadResponse({ Entity: entity });\r\n                done && done();\r\n            };\r\n\r\n            if (fail == null) {\r\n                action();\r\n                return;\r\n            }\r\n\r\n            try {\r\n                action();\r\n            }\r\n            catch (ex1) {\r\n                var ex = (ss.Exception as any).wrap(ex1);\r\n                fail(ex);\r\n            }\r\n        }\r\n\r\n        loadNewAndOpenDialog(asPanel?: boolean): void {\r\n            this.loadResponse({});\r\n            this.dialogOpen(asPanel);\r\n        }\r\n\r\n        loadEntityAndOpenDialog(entity: TItem, asPanel?: boolean): void {\r\n            this.loadResponse({ Entity: entity });\r\n            this.dialogOpen(asPanel);\r\n        }\r\n\r\n        protected loadResponse(data: any): void {\r\n            data = data || {};\r\n            this.onLoadingData(data);\r\n            var entity = data.Entity || new Object();\r\n            this.beforeLoadEntity(entity);\r\n            this.loadEntity(entity);\r\n            this.set_entity(entity);\r\n            this.afterLoadEntity();\r\n        }\r\n\r\n        protected loadEntity(entity: TItem): void {\r\n            var idField = this.getIdProperty();\r\n\r\n            if (idField != null)\r\n                this.set_entityId(entity[idField]);\r\n            \r\n            this.set_entity(entity);\r\n\r\n            if (this.propertyGrid != null) {\r\n                this.propertyGrid.set_mode((this.isEditMode() ?\r\n                    PropertyGridMode.update : PropertyGridMode.insert));\r\n                this.propertyGrid.load(entity);\r\n            }\r\n        }\r\n\r\n        protected beforeLoadEntity(entity: TItem): void {\r\n            this.localizationPendingValue = null;\r\n            this.localizationLastValue = null;\r\n        }\r\n\r\n        protected afterLoadEntity(): void {\r\n            this.updateInterface();\r\n            this.updateTitle();\r\n        }\r\n\r\n        public loadByIdAndOpenDialog(entityId: any, asPanel?: boolean) {\r\n            this.loadById(entityId,\r\n                response => window.setTimeout(() => this.dialogOpen(asPanel), 0),\r\n                () => {\r\n                    if (!this.element.is(':visible')) {\r\n                        this.element.remove();\r\n                    }\r\n                });\r\n        }\r\n\r\n        protected onLoadingData(data: RetrieveResponse<TItem>): void {\r\n        }\r\n\r\n        protected getLoadByIdOptions(id: any, callback: (response: RetrieveResponse<TItem>) => void): ServiceOptions<RetrieveResponse<TItem>> {\r\n            return {};\r\n        }\r\n\r\n        protected getLoadByIdRequest(id: any): RetrieveRequest {\r\n            var request: RetrieveRequest = {};\r\n            request.EntityId = id;\r\n            return request;\r\n        }\r\n\r\n        protected reloadById(): void {\r\n            this.loadById(this.get_entityId());\r\n        }\r\n\r\n        loadById(id: any, callback?: (response: RetrieveResponse<TItem>) => void, fail?: () => void) {\r\n            var baseOptions: Q.ServiceOptions<RetrieveResponse<TItem>> = {\r\n                service: this.getService() + '/Retrieve',\r\n                blockUI: true,\r\n                request: this.getLoadByIdRequest(id),\r\n                onSuccess: response => {\r\n                    this.loadResponse(response);\r\n                    callback && callback(response);\r\n                },\r\n                onCleanup: () => {\r\n                    if (this.validator != null) {\r\n                        Q.validatorAbortHandler(this.validator);\r\n                    }\r\n                }\r\n            };\r\n\r\n            var thisOptions = this.getLoadByIdOptions(id, callback);\r\n            var finalOptions = $.extend(baseOptions, thisOptions);\r\n            this.loadByIdHandler(finalOptions, callback, fail);\r\n        }\r\n\r\n        protected loadByIdHandler(options: ServiceOptions<RetrieveResponse<TItem>>, callback: (response: RetrieveResponse<TItem>) => void, fail: () => void): void {\r\n            var request = Q.serviceCall(options);\r\n            fail && request.fail(fail);\r\n        }\r\n\r\n        protected initLocalizationGrid(): void {\r\n            var pgDiv = this.byId('PropertyGrid');\r\n            if (pgDiv.length <= 0) {\r\n                return;\r\n            }\r\n            var pgOptions = this.getPropertyGridOptions();\r\n            this.initLocalizationGridCommon(pgOptions);\r\n        }\r\n\r\n        protected initLocalizationGridAsync(): PromiseLike<void> {\r\n            return Promise.resolve().then(() => {\r\n\r\n                var pgDiv = this.byId('PropertyGrid');\r\n                if (pgDiv.length <= 0) {\r\n                    return Promise.resolve();\r\n                }\r\n\r\n                return this.getPropertyGridOptionsAsync().then(pgOptions => {\r\n                    this.initLocalizationGridCommon(pgOptions);\r\n                });\r\n            });\r\n        }\r\n\r\n        protected initLocalizationGridCommon(pgOptions: PropertyGridOptions) {\r\n            var pgDiv = this.byId('PropertyGrid');\r\n\r\n            if (!Q.any(pgOptions.items, x => x.localizable === true))\r\n                return;\r\n\r\n            var localGridDiv = $('<div/>')\r\n                .attr('id', this.idPrefix + 'LocalizationGrid')\r\n                .hide().insertAfter(pgDiv);\r\n\r\n            pgOptions.idPrefix = this.idPrefix + 'Localization_';\r\n\r\n            var items: PropertyItem[] = [];\r\n            for (var item1 of pgOptions.items) {\r\n                var langs = null;\r\n\r\n                if (item1.localizable === true) {\r\n                    var copy = $.extend({}, item1);\r\n                    copy.oneWay = true;\r\n                    copy.readOnly = true;\r\n                    copy.required = false;\r\n                    copy.defaultValue = null;\r\n                    items.push(copy);\r\n\r\n                    if (langs == null)\r\n                        langs = this.getLangs();\r\n\r\n                    for (var lang of langs) {\r\n                        copy = $.extend({}, item1);\r\n                        copy.name = lang[0] + '$' + copy.name;\r\n                        copy.title = lang[1];\r\n                        copy.cssClass = [copy.cssClass, 'translation'].join(' ');\r\n                        copy.insertable = true;\r\n                        copy.updatable = true;\r\n                        copy.oneWay = false;\r\n                        copy.required = false;\r\n                        copy.localizable = false;\r\n                        copy.defaultValue = null;\r\n                        items.push(copy);\r\n                    }\r\n                }\r\n            }\r\n\r\n            pgOptions.items = items;\r\n\r\n            this.localizationGrid = (new Serenity.PropertyGrid(localGridDiv, pgOptions)).init(null);\r\n            localGridDiv.addClass('s-LocalizationGrid');\r\n        }\r\n\r\n        protected isLocalizationMode(): boolean {\r\n            return this.localizationButton != null && this.localizationButton.hasClass('pressed');\r\n        }\r\n\r\n        protected isLocalizationModeAndChanged(): boolean {\r\n            if (!this.isLocalizationMode()) {\r\n                return false;\r\n            }\r\n\r\n            var newValue = this.getLocalizationGridValue();\r\n            return $.toJSON(this.localizationLastValue) !=  $.toJSON(newValue);\r\n        }\r\n\r\n        protected localizationButtonClick(): void {\r\n            if (this.isLocalizationMode() && !this.validateForm()) {\r\n                return;\r\n            }\r\n\r\n            if (this.isLocalizationModeAndChanged()) {\r\n                var newValue = this.getLocalizationGridValue();\r\n                this.localizationLastValue = newValue;\r\n                this.localizationPendingValue = newValue;\r\n            }\r\n\r\n            this.localizationButton.toggleClass('pressed');\r\n            this.updateInterface();\r\n            if (this.isLocalizationMode()) {\r\n                this.loadLocalization();\r\n            }\r\n        }\r\n\r\n        protected getLanguages(): any[] {\r\n            if (Serenity.EntityDialog.defaultLanguageList != null)\r\n                return Serenity.EntityDialog.defaultLanguageList() || [];\r\n\r\n            return [];\r\n        }\r\n\r\n        // for compatibility with older getLanguages methods written in Saltaralle\r\n        private getLangs(): any {\r\n\r\n            var langsTuple = this.getLanguages();\r\n            var langs = (ss as any).safeCast(langsTuple, Array);\r\n            if (langs == null || langs.length === 0 ||\r\n                langs[0] == null || !Q.isArray(langs[0])) {\r\n                langs = Array.prototype.slice.call(langsTuple.map(function (x: any) {\r\n                    return [x.item1, x.item2];\r\n                }));\r\n            }\r\n\r\n            return langs;\r\n        }\r\n\r\n        protected loadLocalization(): void {\r\n            if (this.localizationLastValue == null && this.isNew()) {\r\n                this.localizationGrid.load({});\r\n                this.setLocalizationGridCurrentValues();\r\n                this.localizationLastValue = this.getLocalizationGridValue();\r\n                return;\r\n            }\r\n\r\n            if (this.localizationLastValue != null) {\r\n                this.localizationGrid.load(this.localizationLastValue);\r\n                this.setLocalizationGridCurrentValues();\r\n                return;\r\n            }\r\n\r\n            var opt = <Q.ServiceOptions<any>>{\r\n                service: this.getService() + '/Retrieve',\r\n                blockUI: true,\r\n                request: {\r\n                    EntityId: this.get_entityId(),\r\n                    ColumnSelection: 'keyOnly',\r\n                    IncludeColumns: ['Localizations']\r\n                },\r\n                onSuccess: response => {\r\n                    var copy = $.extend(new Object(), this.get_entity());\r\n                    if (response.Localizations) {\r\n                        for (var language of Object.keys(response.Localizations)) {\r\n                            var entity = response.Localizations[language];\r\n                            for (var key of Object.keys(entity)) {\r\n                                copy[language + '$' + key] = entity[key];\r\n                            }\r\n                        }\r\n                    }\r\n                    \r\n                    this.localizationGrid.load(copy);\r\n                    this.setLocalizationGridCurrentValues();\r\n                    this.localizationPendingValue = null;\r\n                    this.localizationLastValue = this.getLocalizationGridValue();\r\n                }\r\n            };\r\n\r\n            Q.serviceCall(opt);\r\n        }\r\n\r\n        protected setLocalizationGridCurrentValues(): void {\r\n            var valueByName = {};\r\n\r\n            this.localizationGrid.enumerateItems((item, widget) => {\r\n                if (item.name.indexOf('$') < 0 && widget.element.is(':input')) {\r\n                    valueByName[item.name] = this.byId(item.name).val();\r\n                    widget.element.val(valueByName[item.name]);\r\n                }\r\n            });\r\n\r\n            this.localizationGrid.enumerateItems((item1, widget1) => {\r\n                var idx = item1.name.indexOf('$');\r\n                if (idx >= 0 && widget1.element.is(':input')) {\r\n                    var hint = valueByName[item1.name.substr(idx + 1)];\r\n                    if (hint != null && hint.length > 0) {\r\n                        widget1.element.attr('title', hint).attr('placeholder', hint);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        protected getLocalizationGridValue(): any {\r\n            var value = {};\r\n            this.localizationGrid.save(value);\r\n\r\n            for (var k of Object.keys(value)) {\r\n                if (k.indexOf('$') < 0) {\r\n                    delete value[k];\r\n                }\r\n            }\r\n\r\n            return value;\r\n        }\r\n\r\n        protected getPendingLocalizations(): any {\r\n            if (this.localizationPendingValue == null) {\r\n                return null;\r\n            }\r\n\r\n            var result: Q.Dictionary<any> = {};\r\n            var idField = this.getIdProperty();\r\n            var langs = this.getLangs();\r\n\r\n            for (var pair of langs) {\r\n                var language = pair[0];\r\n                var entity: any = {};\r\n\r\n                if (idField != null) {\r\n                    entity[idField] = this.get_entityId();\r\n                }\r\n\r\n                var prefix = language + '$';\r\n\r\n                for (var k of Object.keys(this.localizationPendingValue)) {\r\n                    if (Q.startsWith(k, prefix)) \r\n                        entity[k.substr(prefix.length)] = this.localizationPendingValue[k];\r\n                }\r\n\r\n                result[language] = entity;\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        protected initPropertyGrid(): void {\r\n            var pgDiv = this.byId('PropertyGrid');\r\n            if (pgDiv.length <= 0) {\r\n                return;\r\n            }\r\n            var pgOptions = this.getPropertyGridOptions();\r\n            this.propertyGrid = (new Serenity.PropertyGrid(pgDiv, pgOptions)).init(null);\r\n            if (this.element.closest('.ui-dialog').hasClass('s-Flexify')) {\r\n                this.propertyGrid.element.children('.categories').flexHeightOnly(1);\r\n            }\r\n        }\r\n\r\n        protected initPropertyGridAsync(): PromiseLike<void> {\r\n\r\n            return Promise.resolve().then(() => {\r\n\r\n                var pgDiv = this.byId('PropertyGrid');\r\n                if (pgDiv.length <= 0) {\r\n                    return Promise.resolve();\r\n                }\r\n\r\n                return this.getPropertyGridOptionsAsync().then(pgOptions => {\r\n                    this.propertyGrid = new Serenity.PropertyGrid(pgDiv, pgOptions);\r\n\r\n                    if (this.element.closest('.ui-dialog').hasClass('s-Flexify'))\r\n                        this.propertyGrid.element.children('.categories').flexHeightOnly(1);\r\n\r\n                    return this.propertyGrid.init() as any;\r\n                });\r\n            });\r\n        }\r\n\r\n        protected getPropertyItems() {\r\n            var formKey = this.getFormKey();\r\n            return Q.getForm(formKey);\r\n        }\r\n\r\n        protected getPropertyGridOptions(): PropertyGridOptions {\r\n            return {\r\n                idPrefix: this.idPrefix,\r\n                items: this.getPropertyItems(),\r\n                mode: PropertyGridMode.insert,\r\n                localTextPrefix: 'Forms.' + this.getFormKey() + '.',\r\n                useCategories: true\r\n            };\r\n        }\r\n\r\n        protected getPropertyGridOptionsAsync(): PromiseLike<PropertyGridOptions> {\r\n\r\n            return this.getPropertyItemsAsync().then(propertyItems => {\r\n                return <PropertyGridOptions>{\r\n                    idPrefix: this.idPrefix,\r\n                    items: propertyItems,\r\n                    mode: 1,\r\n                    localTextPrefix: 'Forms.' + this.getFormKey() + '.',\r\n                    useCategories: true\r\n                };\r\n            });\r\n\r\n        }\r\n\r\n        protected getPropertyItemsAsync(): PromiseLike<PropertyItem[]> {\r\n            return Promise.resolve().then(() => {\r\n                var formKey = this.getFormKey();\r\n                return Q.getFormAsync(formKey);\r\n            });\r\n        }\r\n\r\n        protected validateBeforeSave(): boolean {\r\n            return true;\r\n        }\r\n\r\n        protected getSaveOptions(callback: (response: SaveResponse) => void): ServiceOptions<SaveResponse> {\r\n\r\n            var opt: Q.ServiceOptions<SaveResponse> = {};\r\n\r\n            opt.service = this.getService() + '/' + (this.isEditMode() ? 'Update' : 'Create'),\r\n\r\n            opt.onSuccess = response => {\r\n                this.onSaveSuccess(response);\r\n\r\n                callback && callback(response);\r\n\r\n                var typ = (this.isEditMode() ? 'update' : 'create');\r\n\r\n                var ent = opt.request == null ? null : opt.request.Entity;\r\n                var eid: any = this.isEditMode() ? this.get_entityId() :\r\n                    (response == null ? null : response.EntityId);\r\n\r\n                var dci = {\r\n                    type: typ,\r\n                    entity: ent,\r\n                    entityId: eid\r\n                };\r\n\r\n                this.element.triggerHandler('ondatachange', [dci]);\r\n            };\r\n\r\n            opt.onCleanup = () => {\r\n                this.validator && Q.validatorAbortHandler(this.validator);\r\n            };\r\n\r\n            opt.request = this.getSaveRequest();\r\n\r\n            return opt;\r\n        }\r\n\r\n        protected getSaveEntity(): TItem {\r\n\r\n            var entity: TItem = new Object() as any;\r\n\r\n            if (this.propertyGrid != null) {\r\n                this.propertyGrid.save(entity);\r\n            }\r\n\r\n            if (this.isEditMode()) {\r\n                var idField = this.getIdProperty();\r\n                if (idField != null && entity[idField] == null) {\r\n                    entity[idField] = this.get_entityId();\r\n                }\r\n            }\r\n\r\n            return entity;\r\n        }\r\n\r\n        protected getSaveRequest(): SaveRequest<TItem> {\r\n\r\n            var entity = this.getSaveEntity();\r\n            var req: SaveRequest<TItem> = {};\r\n            req.Entity = entity;\r\n\r\n            if (this.isEditMode()) {\r\n                var idField = this.getIdProperty();\r\n                if (idField != null) {\r\n                    req.EntityId = this.get_entityId();\r\n                }\r\n            }\r\n\r\n            if (this.localizationPendingValue != null) {\r\n                req.Localizations = this.getPendingLocalizations();\r\n            }\r\n\r\n            return req;\r\n        }\r\n\r\n        protected onSaveSuccess(response: SaveResponse): void {\r\n        }\r\n\r\n        protected save_submitHandler(callback: (response: SaveResponse) => void): void {\r\n            var options = this.getSaveOptions(callback);\r\n            this.saveHandler(options, callback);\r\n        }\r\n\r\n        protected save(callback?: (response: SaveResponse) => void): void | boolean {\r\n            return Serenity.ValidationHelper.submit(this.byId('Form'),\r\n                () => this.validateBeforeSave(),\r\n                () => this.save_submitHandler(callback));\r\n        }\r\n\r\n        protected saveHandler(options: ServiceOptions<SaveResponse>,\r\n            callback: (response: SaveResponse) => void): void {\r\n            Q.serviceCall(options);\r\n        }\r\n\r\n        protected initToolbar(): void {\r\n\r\n            super.initToolbar();\r\n\r\n            if (!this.toolbar)\r\n                return;\r\n\r\n            this.saveAndCloseButton = this.toolbar.findButton('save-and-close-button');\r\n            this.applyChangesButton = this.toolbar.findButton('apply-changes-button');\r\n            this.deleteButton = this.toolbar.findButton('delete-button');\r\n            this.undeleteButton = this.toolbar.findButton('undo-delete-button');\r\n            this.editButton = this.toolbar.findButton('edit-button');\r\n            this.cloneButton = this.toolbar.findButton('clone-button');\r\n            this.localizationButton = this.toolbar.findButton('localization-button');\r\n        }\r\n\r\n        protected showSaveSuccessMessage(response: SaveResponse): void {\r\n            Q.notifySuccess(Q.text('Controls.EntityDialog.SaveSuccessMessage'), '', null);\r\n        }\r\n\r\n        protected getToolbarButtons(): ToolButton[] {\r\n            var list: ToolButton[] = [];\r\n\r\n            list.push({\r\n                title: Q.text('Controls.EntityDialog.SaveButton'),\r\n                cssClass: 'save-and-close-button',\r\n                hotkey: 'alt+s',\r\n                onClick: () => {\r\n                    this.save(response => {\r\n                        this.dialogClose();\r\n                    });\r\n                },\r\n                visible: () => !this.isDeleted() && !this.isViewMode(),\r\n                disabled: () => !this.hasSavePermission() || this.readOnly\r\n            });\r\n\r\n            list.push({\r\n                title: '',\r\n                hint: Q.text('Controls.EntityDialog.ApplyChangesButton'),\r\n                cssClass: 'apply-changes-button',\r\n                hotkey: 'alt+a',\r\n                onClick: () => {\r\n                    this.save(response1 => {\r\n\r\n                        if (this.isEditMode()) {\r\n                            var id1 = response1.EntityId;\r\n                            if (id1 == null) {\r\n                                id1 = this.get_entityId();\r\n                            }\r\n                            this.loadById(id1);\r\n                        }\r\n                        else {\r\n                            this.loadById(response1.EntityId);\r\n                        }\r\n\r\n                        this.showSaveSuccessMessage(response1);\r\n                    });\r\n                },\r\n                visible: () => !this.isDeleted() && !this.isViewMode(),\r\n                disabled: () => !this.hasSavePermission() || this.readOnly\r\n            });\r\n\r\n            list.push({\r\n                title: Q.text('Controls.EntityDialog.DeleteButton'),\r\n                cssClass: 'delete-button',\r\n                hotkey: 'alt+x',\r\n                onClick: () => {\r\n                    Q.confirm(Q.text('Controls.EntityDialog.DeleteConfirmation'), () => {\r\n                        this.doDelete(() => this.dialogClose());\r\n                    });\r\n                },\r\n                visible: () => this.isEditMode() && !this.isDeleted() && !this.isViewMode(),\r\n                disabled: () => !this.hasDeletePermission() || this.readOnly\r\n            });\r\n\r\n            list.push({\r\n                title: Q.text('Controls.EntityDialog.UndeleteButton'),\r\n                cssClass: 'undo-delete-button',\r\n                onClick: () => {\r\n                    if (this.isDeleted()) {\r\n                        Q.confirm(Q.text('Controls.EntityDialog.UndeleteConfirmation'), () => {\r\n                            this.undelete(() => this.loadById(this.get_entityId()));\r\n                        });\r\n                    }\r\n                },\r\n                visible: () => this.isEditMode() && this.isDeleted() && !this.isViewMode(),\r\n                disabled: () => !this.hasDeletePermission() || this.readOnly\r\n            });\r\n\r\n            if (this.useViewMode()) {\r\n                list.push({\r\n                    title: Q.text('Controls.EntityDialog.EditButton'),\r\n                    cssClass: 'edit-button',\r\n                    icon: 'fa-edit',\r\n                    onClick: () => {\r\n                        if (!this.isEditMode())\r\n                            return;\r\n\r\n                        this.editClicked = true;\r\n                        this.updateInterface();\r\n                        this.updateTitle();\r\n                    },\r\n                    visible: () => this.isViewMode(),\r\n                    disabled: () => !this.hasSavePermission() || this.readOnly\r\n                });\r\n            }\r\n\r\n            list.push({\r\n                title: Q.text('Controls.EntityDialog.LocalizationButton'),\r\n                cssClass: 'localization-button',\r\n                onClick: () => this.localizationButtonClick()\r\n            });\r\n\r\n            list.push({\r\n                title: Q.text('Controls.EntityDialog.CloneButton'),\r\n                cssClass: 'clone-button',\r\n                onClick: () => {\r\n\r\n                    if (!this.isEditMode()) {\r\n                        return;\r\n                    }\r\n\r\n                    var cloneEntity = this.getCloningEntity();\r\n\r\n                    Serenity.Widget.create({\r\n                        type: (ss as any).getInstanceType(this),\r\n                        init: w => Serenity.SubDialogHelper.bubbleDataChange(\r\n                            Serenity.SubDialogHelper.cascade(w, this.element), this, true)\r\n                            .loadEntityAndOpenDialog(cloneEntity, null)\r\n                    });\r\n                },\r\n                visible: () => false,\r\n                disabled: () => !this.hasInsertPermission() || this.readOnly\r\n            });\r\n\r\n            return list;\r\n        }\r\n\r\n        protected getCloningEntity(): TItem {\r\n\r\n            var clone: TItem = new Object() as any;\r\n            clone = $.extend(clone, this.get_entity());\r\n\r\n            var idField = this.getIdProperty();\r\n            if (!Q.isEmptyOrNull(idField)) {\r\n                delete clone[idField];\r\n            }\r\n\r\n            var isActiveField = this.getIsActiveProperty();\r\n            if (!Q.isEmptyOrNull(isActiveField)) {\r\n                delete clone[isActiveField];\r\n            }\r\n\r\n            var isDeletedField = this.getIsDeletedProperty();\r\n            if (!Q.isEmptyOrNull(isDeletedField)) {\r\n                delete clone[isDeletedField];\r\n            }\r\n\r\n            return clone;\r\n        }\r\n\r\n        protected updateInterface(): void {\r\n\r\n            Serenity.EditorUtils.setContainerReadOnly(this.byId('Form'), false);\r\n\r\n            var isDeleted = this.isDeleted();\r\n            var isLocalizationMode = this.isLocalizationMode();\r\n            var hasSavePermission = this.hasSavePermission();\r\n            var viewMode = this.isViewMode();\r\n            var isDeleted = this.isDeleted();\r\n            var readOnly = this.readOnly;\r\n\r\n            this.toolbar.updateInterface();\r\n\r\n            if (this.tabs != null) {\r\n                Serenity.TabsExtensions.setDisabled(this.tabs, 'Log', this.isNewOrDeleted());\r\n            }\r\n\r\n            if (this.propertyGrid != null) {\r\n                this.propertyGrid.element.toggle(!isLocalizationMode);\r\n            }\r\n\r\n            if (this.localizationGrid != null) {\r\n                this.localizationGrid.element.toggle(isLocalizationMode);\r\n            }\r\n\r\n            if (this.localizationButton != null) {\r\n                this.localizationButton.toggle(this.localizationGrid != null);\r\n                this.localizationButton.find('.button-inner')\r\n                    .text((this.isLocalizationMode() ?\r\n                        Q.text('Controls.EntityDialog.LocalizationBack') :\r\n                        Q.text('Controls.EntityDialog.LocalizationButton')));\r\n            }\r\n\r\n            if (isLocalizationMode) {\r\n\r\n                if (this.toolbar != null)\r\n                    this.toolbar.findButton('tool-button')\r\n                        .not('.localization-hidden')\r\n                        .addClass('.localization-hidden').hide();\r\n\r\n                this.localizationButton && this.localizationButton.show();\r\n\r\n                return;\r\n            }\r\n\r\n            this.toolbar.findButton('localization-hidden')\r\n                .removeClass('localization-hidden').show();\r\n\r\n            this.saveAndCloseButton && this.saveAndCloseButton\r\n                    .find('.button-inner').text(Q.text((this.isNew() ? 'Controls.EntityDialog.SaveButton' :\r\n                        'Controls.EntityDialog.UpdateButton')));\r\n\r\n            if (!hasSavePermission || viewMode || readOnly)\r\n                Serenity.EditorUtils.setContainerReadOnly(this.byId(\"Form\"), true);\r\n        }\r\n\r\n        protected getUndeleteOptions(callback?: (response: UndeleteResponse) => void): ServiceOptions<UndeleteResponse> {\r\n            return {}\r\n        }\r\n\r\n        protected undeleteHandler(options: ServiceOptions<UndeleteResponse>, callback: (response: UndeleteResponse) => void): void {\r\n            Q.serviceCall(options);\r\n        }\r\n\r\n        protected undelete(callback?: (response: UndeleteResponse) => void): void {\r\n            var baseOptions: Q.ServiceOptions<UndeleteResponse> = {};\r\n            baseOptions.service = this.getService() + '/Undelete';\r\n\r\n            var request: UndeleteRequest = {};\r\n            request.EntityId = this.get_entityId();\r\n\r\n            baseOptions.request = request;\r\n            baseOptions.onSuccess = response => {\r\n                callback && callback(response);\r\n                this.element.triggerHandler('ondatachange', [{\r\n                    entityId: this.get_entityId(),\r\n                    entity: this.entity,\r\n                    type: 'undelete'\r\n                }]);\r\n            };\r\n\r\n            var thisOptions = this.getUndeleteOptions(callback);\r\n            var finalOptions = $.extend(baseOptions, thisOptions);\r\n            this.undeleteHandler(finalOptions, callback);\r\n        }\r\n\r\n        private _readonly: boolean;\r\n\r\n        public get readOnly(): boolean {\r\n            return this.get_readOnly();\r\n        }\r\n\r\n        public set readOnly(value: boolean) {\r\n            this.set_readOnly(value);\r\n        }\r\n\r\n        public get_readOnly() {\r\n            return !!this._readonly;\r\n        }\r\n\r\n        public set_readOnly(value: boolean) {\r\n            if (!!this._readonly != !!value) {\r\n                this._readonly = !!value;\r\n                this.updateInterface();\r\n                this.updateTitle();\r\n            }\r\n        }\r\n\r\n        protected getInsertPermission(): string {\r\n            return null;\r\n        }\r\n\r\n        protected getUpdatePermission(): string {\r\n            return null;\r\n        }\r\n\r\n        protected getDeletePermission(): string {\r\n            return null;\r\n        }\r\n\r\n        protected hasDeletePermission() {\r\n            var deletePermission = this.getDeletePermission();\r\n            return deletePermission == null || Q.Authorization.hasPermission(deletePermission);\r\n        }\r\n\r\n        protected hasInsertPermission() {\r\n            var insertPermission = this.getInsertPermission();\r\n            return insertPermission == null || Q.Authorization.hasPermission(insertPermission);\r\n        }\r\n\r\n        protected hasUpdatePermission() {\r\n            var updatePermission = this.getUpdatePermission();\r\n            return updatePermission == null || Q.Authorization.hasPermission(updatePermission);\r\n        }\r\n\r\n        protected hasSavePermission(): boolean {\r\n            return this.isNew() ? this.hasInsertPermission() : this.hasUpdatePermission();\r\n        }\r\n\r\n        protected editClicked: boolean;\r\n\r\n        protected isViewMode() {\r\n            return this.useViewMode() && this.isEditMode() && !this.editClicked;\r\n        }\r\n\r\n        protected useViewMode() {\r\n            return false;\r\n        }\r\n    }\r\n}","namespace Serenity {\r\n    export namespace Reporting {\r\n        export interface ReportDialogOptions {\r\n            reportKey?: string;\r\n        }\r\n\r\n        @Decorators.registerClass('Serenity.Reporting.ReportDialog')\r\n        export class ReportDialog extends TemplatedDialog<ReportDialogOptions> {\r\n            constructor(opt: ReportDialogOptions) {\r\n                super(opt);\r\n\r\n                if (opt.reportKey) {\r\n                    this.loadReport(opt.reportKey);\r\n                }\r\n            }\r\n\r\n            protected propertyGrid: Serenity.PropertyGrid;\r\n            protected propertyItems: Serenity.PropertyItem[];\r\n            protected reportKey: string;\r\n\r\n            protected createPropertyGrid(): void {\r\n                if (this.propertyGrid) {\r\n                    this.byId('PropertyGrid').html('').attr('class', '');\r\n                    this.propertyGrid = null;\r\n                }\r\n                this.propertyGrid = (new Serenity.PropertyGrid(this.byId('PropertyGrid'), {\r\n                    idPrefix: this.idPrefix,\r\n                    useCategories: true,\r\n                    items: this.propertyItems\r\n                })).init(null);\r\n            }\r\n\r\n            loadReport(reportKey: string): void {\r\n                Q.serviceCall({\r\n                    service: 'Report/Retrieve', request: { ReportKey: reportKey },\r\n                    onSuccess: (response: ReportRetrieveResponse) => {\r\n                        this.reportKey = Q.coalesce(response.ReportKey, reportKey);\r\n                        this.propertyItems = response.Properties || [];\r\n                        this.dialogTitle = response.Title;\r\n                        this.createPropertyGrid();\r\n                        var set = response.InitialSettings;\r\n                        if (set == null) {\r\n                            set = new Object();\r\n                        }\r\n                        this.propertyGrid.load(set);\r\n                        this.toolbar.findButton('print-preview-button').toggle(!response.IsDataOnlyReport);\r\n                        this.toolbar.findButton('export-pdf-button').toggle(!response.IsDataOnlyReport);\r\n                        this.toolbar.findButton('export-docx-button').toggle(!response.IsDataOnlyReport);\r\n                        this.dialogOpen(null);\r\n                    }\r\n                });\r\n            }\r\n\r\n            executeReport(targetFrame: string, exportType: string): void {\r\n                if (!this.validateForm()) {\r\n                    return;\r\n                }\r\n                var parameters = new Object();\r\n                this.propertyGrid.save(parameters);\r\n                Q.postToService({\r\n                    service: 'Report/Execute',\r\n                    request: {\r\n                        ReportKey: this.reportKey,\r\n                        DesignId: 'Default',\r\n                        ExportType: exportType,\r\n                        Parameters: parameters\r\n                    }, target: targetFrame\r\n                });\r\n\r\n            }\r\n\r\n            protected getToolbarButtons() {\r\n                var buttons = [];\r\n                buttons.push({\r\n                    title: 'Önizleme', cssClass: 'print-preview-button', onClick: () => {\r\n                        this.executeReport('_blank', null);\r\n                    }\r\n                });\r\n                buttons.push({\r\n                    title: 'PDF', cssClass: 'export-pdf-button', onClick: () => {\r\n                        this.executeReport('', 'Pdf');\r\n                    }\r\n                });\r\n                buttons.push({\r\n                    title: 'Excel', cssClass: 'export-xlsx-button', onClick: () => {\r\n                        this.executeReport('', 'Xlsx');\r\n                    }\r\n                });\r\n                buttons.push({\r\n                    title: 'Word', cssClass: 'export-docx-button', onClick: () => {\r\n                        this.executeReport('', 'Docx');\r\n                    }\r\n                });\r\n                return buttons;\r\n            }\r\n        }\r\n\r\n        export interface ReportExecuteRequest extends ServiceRequest {\r\n            ExportType?: string;\r\n            ReportKey?: string;\r\n            DesignId?: string;\r\n            Parameters?: any;\r\n        }\r\n\r\n        @Decorators.registerClass('Serenity.Reporting.ReportPage')\r\n        export class ReportPage extends Serenity.Widget<any> {\r\n            constructor(div: JQuery) {\r\n                super(div);\r\n\r\n                $('.report-link').click((e) => this.reportLinkClick(e));\r\n                $('div.line').click((e) => this.categoryClick(e));\r\n                var self = this;\r\n                new Serenity.QuickSearchInput($('#QuickSearchInput'), {\r\n                    onSearch: function (field, text, done) {\r\n                        self.updateMatchFlags(text);\r\n                        done(true);\r\n                    }\r\n                });\r\n            }\r\n\r\n            protected updateMatchFlags(text: string) {\r\n                var liList = $('#ReportList').find('li').removeClass('non-match');\r\n                text = Q.trimToNull(text);\r\n                if (text == null) {\r\n                    liList.children('ul').hide();\r\n                    liList.show().removeClass('expanded');\r\n                    return;\r\n                }\r\n                var parts = (ss as any).netSplit(text, [44, 32].map(function (i) {\r\n                    return String.fromCharCode(i);\r\n                }), null, 1);\r\n                for (var i = 0; i < parts.length; i++) {\r\n                    parts[i] = Q.trimToNull(Select2.util.stripDiacritics(parts[i]).toUpperCase());\r\n                }\r\n                var reportItems = liList.filter('.report-item');\r\n                reportItems.each(function (i1, e) {\r\n                    var x = $(e);\r\n                    var title = Select2.util.stripDiacritics(Q.coalesce(x.text(), '').toUpperCase());\r\n                    for (var $t1 = 0; $t1 < parts.length; $t1++) {\r\n                        var p = parts[$t1];\r\n                        if (p != null && !(title.indexOf(p) !== -1)) {\r\n                            x.addClass('non-match');\r\n                            break;\r\n                        }\r\n                    }\r\n                });\r\n                var matchingItems = reportItems.not('.non-match');\r\n                var visibles = matchingItems.parents('li').add(matchingItems);\r\n                var nonVisibles = liList.not(visibles);\r\n                nonVisibles.hide().addClass('non-match');\r\n                visibles.show();\r\n                if (visibles.length <= 100) {\r\n                    liList.children('ul').show();\r\n                    liList.addClass('expanded');\r\n                }\r\n            }\r\n\r\n            protected categoryClick(e: JQueryEventObject) {\r\n                var li = $(e.target).closest('li');\r\n                if (li.hasClass('expanded')) {\r\n                    li.find('ul').hide('fast');\r\n                    li.removeClass('expanded');\r\n                    li.find('li').removeClass('expanded');\r\n                }\r\n                else {\r\n                    li.addClass('expanded');\r\n                    li.children('ul').show('fast');\r\n                    if (li.children('ul').children('li').length === 1 && !li.children('ul').children('li').hasClass('expanded')) {\r\n                        li.children('ul').children('li').children('.line').click();\r\n                    }\r\n                }\r\n            }\r\n\r\n            protected reportLinkClick(e: JQueryEventObject) {\r\n                e.preventDefault();\r\n                var dialog = new ReportDialog({ reportKey: $(e.target).data('key') });\r\n            }\r\n        }\r\n\r\n        export interface ReportRetrieveRequest extends ServiceRequest {\r\n            ReportKey?: string;\r\n        }\r\n\r\n        export interface ReportRetrieveResponse extends ServiceResponse {\r\n            ReportKey?: string;\r\n            Properties?: PropertyItem[];\r\n            Title?: string;\r\n            InitialSettings?: any;\r\n            IsDataOnlyReport?: boolean;\r\n        }\r\n    }\r\n}","\r\nnamespace Serenity {\r\n\r\n    @Decorators.registerClass()\r\n    @Decorators.resizable()\r\n    @Decorators.responsive()\r\n    export class ColumnPickerDialog extends Serenity.TemplatedDialog<any> {\r\n\r\n        private ulVisible: JQuery;\r\n        private ulHidden: JQuery;\r\n        private colById: Q.Dictionary<Slick.Column>;\r\n\r\n        public allColumns: Slick.Column[];\r\n        public visibleColumns: string[];\r\n        public defaultColumns: string[];\r\n        public done: () => void;\r\n\r\n        constructor() {\r\n            super();\r\n\r\n            new Serenity.QuickSearchInput(this.byId(\"Search\"), {\r\n                onSearch: (fld, txt, done) => {\r\n                    txt = Q.trimToNull(txt);\r\n                    if (txt != null)\r\n                        txt = Select2.util.stripDiacritics(txt.toLowerCase());\r\n\r\n                    this.element.find('li').each((x, e) => {\r\n                        $(e).toggle(!txt || Select2.util.stripDiacritics(\r\n                            $(e).text().toLowerCase()).indexOf(txt) >= 0);\r\n                    });\r\n                    done && done(true);\r\n                }\r\n            });\r\n\r\n            this.ulVisible = this.byId(\"VisibleCols\");\r\n            this.ulHidden = this.byId(\"HiddenCols\");\r\n        }\r\n\r\n        public static createToolButton(grid: DataGrid<any, any>): ToolButton {\r\n            function onClick() {\r\n                var picker = new Serenity.ColumnPickerDialog();\r\n                picker.allColumns = (grid as any).allColumns;\r\n                if ((grid as any).initialSettings) {\r\n                    var initialSettings = (grid as any).initialSettings as PersistedGridSettings;\r\n                    if (initialSettings.columns && initialSettings.columns.length)\r\n                        picker.defaultColumns = initialSettings.columns.map(x => x.id);\r\n                }\r\n                picker.visibleColumns = grid.slickGrid.getColumns().map(x => x.id);\r\n                picker.done = () => {\r\n                    (grid as any).allColumns = picker.allColumns;\r\n                    var visible = picker.allColumns.filter(x => x.visible === true);\r\n                    grid.slickGrid.setColumns(visible);\r\n                    (grid as any).persistSettings();\r\n                    grid.refresh();\r\n                };\r\n\r\n                Q.Router.dialog(grid.element, picker.element, () => \"columns\");\r\n                picker.dialogOpen();\r\n            }\r\n\r\n            grid.element.on('handleroute.' + (grid as any).uniqueName, (e, arg) => {\r\n                if (arg && !arg.handled && arg.route == \"columns\") {\r\n                    onClick();\r\n                }\r\n            });\r\n\r\n            return {\r\n                hint: Q.text(\"Controls.ColumnPickerDialog.Title\"),\r\n                cssClass: \"column-picker-button\",\r\n                onClick: onClick\r\n            }\r\n        }\r\n\r\n        protected getDialogOptions() {\r\n            var opt = super.getDialogOptions();\r\n            opt.title = Q.text(\"Controls.ColumnPickerDialog.Title\");\r\n            opt.width = 600;\r\n            opt.buttons = [\r\n                {\r\n                    text: Q.text(\"Controls.ColumnPickerDialog.RestoreDefaults\"),\r\n                    click: () => {\r\n                        let liByKey: Q.Dictionary<JQuery> = {};\r\n                        this.ulVisible.children().add(this.ulHidden.children()).each((x, e) => {\r\n                            let el = $(e);\r\n                            liByKey[el.data('key')] = el;\r\n                        });\r\n\r\n                        let last: JQuery = null;\r\n                        for (let id of this.defaultColumns) {\r\n                            let li = liByKey[id];\r\n                            if (!li)\r\n                                continue;\r\n\r\n                            if (last == null)\r\n                                li.prependTo(this.ulVisible);\r\n                            else\r\n                                li.insertAfter(last);\r\n\r\n                            last = li;\r\n                            let key: string = li.data('key');\r\n                            delete liByKey[key];\r\n                        }\r\n\r\n                        for (let key in liByKey)\r\n                            liByKey[key].appendTo(this.ulHidden);\r\n\r\n                        this.updateListStates();\r\n                    }\r\n                },\r\n                {\r\n                    text: Q.text(\"Dialogs.OkButton\"),\r\n                    click: () => {\r\n                        let newColumns: Slick.Column[] = [];\r\n\r\n                        for (var col of this.allColumns)\r\n                            col.visible = false;\r\n\r\n                        this.visibleColumns = this.ulVisible.children().toArray().map(x => {\r\n                            let id = $(x).data(\"key\");\r\n                            var col = this.colById[id];\r\n                            col.visible = true;\r\n                            newColumns.push(col);\r\n                            return id;\r\n                        });\r\n\r\n                        for (var col of this.allColumns) {\r\n                            if (!col.visible)\r\n                                newColumns.push(col);\r\n                        }\r\n\r\n                        this.allColumns = newColumns;\r\n                        this.done && this.done();\r\n                        this.dialogClose()\r\n                    }\r\n                },\r\n                {\r\n                    text: Q.text(\"Dialogs.CancelButton\"),\r\n                    click: () => {\r\n                        this.dialogClose()\r\n                    }\r\n                }\r\n            ];\r\n\r\n            return opt;\r\n        }\r\n\r\n        private getTitle(col: Slick.Column) {\r\n            if (col.id == \"__select__\")\r\n                return \"[x]\";\r\n\r\n            return col.name || col.toolTip || col.id;\r\n        }\r\n\r\n        private allowHide(col: Slick.Column): boolean {\r\n            return col.sourceItem == null || col.sourceItem.allowHide == null || col.sourceItem.allowHide;\r\n        }\r\n\r\n        private createLI(col: Slick.Column): JQuery {\r\n            var allowHide = this.allowHide(col);\r\n            return $(`\r\n<li data-key=\"${col.id}\" class=\"${allowHide ? \"\" : \"cant-hide\"}\">\r\n  <span class=\"drag-handle\">☰</span>\r\n  ${ Q.htmlEncode(this.getTitle(col)) }\r\n  ${ allowHide ? `<i class=\"js-hide\" title=\"${ Q.text(\"Controls.ColumnPickerDialog.HideHint\") }\">✖</i>` : '' }\r\n  <i class=\"js-show fa fa-eye\" title=\"${ Q.text(\"Controls.ColumnPickerDialog.ShowHint\") }\"></i>\r\n</li>`);\r\n        }\r\n\r\n        private updateListStates() {\r\n            this.ulVisible.children().removeClass(\"bg-info\").addClass(\"bg-success\");\r\n            this.ulHidden.children().removeClass(\"bg-success\").addClass(\"bg-info\");\r\n        }\r\n\r\n        protected setupColumns(): void {\r\n            this.allColumns = this.allColumns || [];\r\n            this.visibleColumns = this.visibleColumns || [];\r\n\r\n            let visible: Q.Dictionary<boolean> = {};\r\n            for (let id of this.visibleColumns) {\r\n                visible[id] = true;\r\n            }\r\n\r\n            this.colById = {};\r\n            for (let c of this.allColumns) {\r\n                this.colById[c.id] = c;\r\n            }\r\n\r\n            if (this.defaultColumns == null)\r\n                this.defaultColumns = this.visibleColumns.slice(0);\r\n\r\n            let hidden: Slick.Column[] = [];\r\n\r\n            for (let c of this.allColumns) {\r\n                if (!visible[c.id] && (!c.sourceItem ||\r\n                    (c.sourceItem.filterOnly !== true &&\r\n                        (c.sourceItem.readPermission == null || Q.Authorization.hasPermission(c.sourceItem.readPermission))))) {\r\n                    hidden.push(c);\r\n                }\r\n            }\r\n\r\n            let hiddenColumns = hidden.sort((a, b) => Q.turkishLocaleCompare(this.getTitle(a), this.getTitle(b)));\r\n\r\n            for (let id of this.visibleColumns) {\r\n                var c = this.colById[id];\r\n                if (!c)\r\n                    continue;\r\n\r\n                this.createLI(c).appendTo(this.ulVisible);\r\n            }\r\n\r\n            for (let c of hiddenColumns) {\r\n                this.createLI(c).appendTo(this.ulHidden);\r\n            }\r\n\r\n            this.updateListStates();\r\n\r\n            if (typeof Sortable !== \"undefined\" &&\r\n                Sortable.create) {\r\n\r\n                Sortable.create(this.ulVisible[0], {\r\n                    group: this.uniqueName + \"_group\",\r\n                    filter: '.js-hide',\r\n                    onFilter: evt => {\r\n                        $(evt.item).appendTo(this.ulHidden);\r\n                        this.updateListStates();\r\n                    },\r\n                    onMove: x => {\r\n                        if ($(x.dragged).hasClass('cant-hide') &&\r\n                            x.from == this.ulVisible[0] &&\r\n                            x.to !== x.from)\r\n                            return false;\r\n                        return true;\r\n                    },\r\n                    onEnd: evt => this.updateListStates()\r\n                });\r\n\r\n                Sortable.create(this.ulHidden[0], {\r\n                    group: this.uniqueName + \"_group\",\r\n                    sort: false,\r\n                    filter: '.js-show',\r\n                    onFilter: evt => {\r\n                        $(evt.item).appendTo(this.ulVisible);\r\n                        this.updateListStates();\r\n                    },\r\n                    onEnd: evt => this.updateListStates()\r\n                });\r\n            }\r\n        }\r\n\r\n        protected onDialogOpen(): void {\r\n            super.onDialogOpen();\r\n            this.element.find(\"input\").removeAttr(\"disabled\")\r\n            this.element.closest('.ui-dialog').children(\".ui-dialog-buttonpane\")\r\n                .find('button').eq(0).addClass(\"restore-defaults\")\r\n                .next().focus();\r\n\r\n            this.setupColumns();\r\n            Q.centerDialog(this.element);\r\n        }\r\n\r\n        protected getTemplate() {\r\n            return `\r\n<div class=\"search\"><input id=\"~_Search\" type=\"text\" disabled /></div>\r\n<div class=\"columns-container\">\r\n<div class=\"column-list visible-list bg-success\">\r\n  <h5><i class=\"fa fa-eye\"></i> ${ Q.text(\"Controls.ColumnPickerDialog.VisibleColumns\") }</h5>\r\n  <ul id=\"~_VisibleCols\"></ul>\r\n</div>\r\n<div class=\"column-list hidden-list bg-info\">\r\n  <h5><i class=\"fa fa-list\"></i> ${ Q.text(\"Controls.ColumnPickerDialog.HiddenColumns\") }</h5>\r\n  <ul id=\"~_HiddenCols\"></ul>\r\n</div>\r\n</div>`;\r\n        }\r\n    }\r\n}\r\n","namespace Serenity {\r\n\r\n    /**\r\n     * A mixin that can be applied to a DataGrid for tree functionality\r\n     */\r\n    export class TreeGridMixin<TItem> {\r\n\r\n        private dataGrid: DataGrid<TItem, any>;\r\n        private getId: (item: TItem) => any;\r\n\r\n        constructor(private options: TreeGridMixinOptions<TItem>) {\r\n            var dg = this.dataGrid = options.grid;\r\n            var idProperty = (dg as any).getIdProperty();\r\n            var getId = this.getId = (item: TItem) => (item as any)[idProperty];\r\n\r\n            dg.element.find('.grid-container').on('click', e => {\r\n                if ($(e.target).hasClass('s-TreeToggle')) {\r\n                    var src = dg.slickGrid.getCellFromEvent(e);\r\n                    if (src.cell >= 0 &&\r\n                        src.row >= 0) {\r\n                        SlickTreeHelper.toggleClick<TItem>(e, src.row, src.row, dg.view, getId);\r\n                    }\r\n                }\r\n            });\r\n\r\n            var oldViewFilter = (dg as any).onViewFilter;\r\n            (dg as any).onViewFilter = function (item: TItem) {\r\n                if (!oldViewFilter.apply(this, [item]))\r\n                    return false;\r\n\r\n                return SlickTreeHelper.filterById(item, dg.view, options.getParentId);\r\n            };\r\n\r\n            var oldProcessData = (dg as any).onViewProcessData;\r\n            (dg as any).onViewProcessData = function (response: ListResponse<TItem>) {\r\n\r\n                response = oldProcessData.apply(this, [response]);\r\n                response.Entities = TreeGridMixin.applyTreeOrdering(response.Entities, getId, options.getParentId);\r\n                SlickTreeHelper.setIndents(response.Entities, getId, options.getParentId,\r\n                    (options.initialCollapse && options.initialCollapse()) || false);\r\n                return response;\r\n            };\r\n\r\n            if (options.toggleField) {\r\n                var col = Q.tryFirst(dg['allColumns'] || dg.slickGrid.getColumns() || [], x => x.field == options.toggleField);\r\n                if (col) {\r\n                    col.format = SlickFormatting.treeToggle(() => dg.view, getId,\r\n                        col.format || (ctx => Q.htmlEncode(ctx.value)));\r\n                    col.formatter = SlickHelper.convertToFormatter(col.format);\r\n                }\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Expands / collapses all rows in a grid automatically\r\n         */\r\n        toggleAll(): void {\r\n            SlickTreeHelper.setCollapsed(this.dataGrid.view.getItems(),\r\n                !this.dataGrid.view.getItems().every(x => (x as any)._collapsed == true));\r\n\r\n            this.dataGrid.view.setItems(this.dataGrid.view.getItems(), true);\r\n        }\r\n\r\n        collapseAll(): void {\r\n            SlickTreeHelper.setCollapsed(this.dataGrid.view.getItems(), true);\r\n            this.dataGrid.view.setItems(this.dataGrid.view.getItems(), true);\r\n        }\r\n        \r\n        expandAll(): void {\r\n            SlickTreeHelper.setCollapsed(this.dataGrid.view.getItems(), false);\r\n            this.dataGrid.view.setItems(this.dataGrid.view.getItems(), true);\r\n        }\r\n        \r\n        /**\r\n         * Reorders a set of items so that parents comes before their children.\r\n         * This method is required for proper tree ordering, as it is not so easy to perform with SQL.\r\n         * @param items list of items to be ordered\r\n         * @param getId a delegate to get ID of a record (must return same ID with grid identity field)\r\n         * @param getParentId a delegate to get parent ID of a record\r\n         */\r\n        static applyTreeOrdering<TItem>(items: TItem[], getId: (item: TItem) => any, getParentId: (item: TItem) => any): TItem[] {\r\n            var result: TItem[] = [];\r\n\r\n            var byId = Q.toGrouping(items, getId);\r\n            var byParentId = Q.toGrouping(items, getParentId);\r\n            var visited = {};\r\n\r\n            function takeChildren(theParentId: any) {\r\n                if (visited[theParentId])\r\n                    return;\r\n\r\n                visited[theParentId] = true;\r\n                for (var child of (byParentId[theParentId] || [])) {\r\n                    result.push(child);\r\n                    takeChildren(getId(child));\r\n                }\r\n            }\r\n\r\n            for (var item of items)\r\n            {\r\n                var parentId = getParentId(item);\r\n                if (parentId == null ||\r\n                    !((byId[parentId] || []).length)) {\r\n                    result.push(item);\r\n                    takeChildren(getId(item));\r\n                }\r\n            }\r\n\r\n            return result;\r\n        }\r\n    }\r\n\r\n    export interface TreeGridMixinOptions<TItem> {\r\n        // data grid object\r\n        grid: Serenity.DataGrid<TItem, any>;\r\n        // a function to get parent id\r\n        getParentId: (item: TItem) => any;\r\n        // where should the toggle button be placed\r\n        toggleField: string;\r\n        // a delegate that should return initial collapsing state\r\n        initialCollapse?: () => boolean;\r\n    }\r\n}\r\n","interface JQuery {\r\n    flexHeightOnly(flexY?: number): JQuery;\r\n    flexWidthOnly(flexX?: number): JQuery;\r\n    flexWidthHeight(flexX: number, flexY: number): JQuery;\r\n    flexX(flexX: number): JQuery;\r\n    flexY(flexY: number): JQuery;\r\n}\r\n\r\nif ($.fn.button && ($.fn.button as any).noConflict) {\r\n    let btn = ($.fn.button as any).noConflict();\r\n    ($.fn as any).btn = btn;\r\n}\r\n\r\n$.fn.flexHeightOnly = function (flexY = 1) {\r\n    return this.flexWidthHeight(0, flexY);\r\n}\r\n\r\n$.fn.flexWidthOnly = function (flexX = 1) {\r\n    return this.flexWidthHeight(flexX, 0);\r\n}\r\n\r\n$.fn.flexWidthHeight = function (flexX = 1, flexY = 1) {\r\n    return this.addClass('flexify').data('flex-x', flexX).data('flex-y', flexY);\r\n}\r\n\r\n$.fn.flexX = function (flexX: number): JQuery {\r\n    return this.data('flex-x', flexX);\r\n}\r\n\r\n$.fn.flexY = function (flexY: number): JQuery {\r\n    return this.data('flex-y', flexY);\r\n}","interface JQuery {\r\n    getWidget<TWidget>(widgetType: { new (...args: any[]): TWidget }): TWidget;\r\n    tryGetWidget<TWidget>(widgetType: { new (...args: any[]): TWidget }): TWidget;\r\n}","if ($.fn.button && ($.fn.button as any).noConflict) {\r\n    let btn = ($.fn.button as any).noConflict();\r\n    ($.fn as any).btn = btn;\r\n}","\r\ninterface JQuery {\r\n    slickPager(options: Slick.PagerOptions): JQuery;\r\n}\r\n\r\n// PAGER -----\r\n(function ($: JQueryStatic) {\r\n\r\n$.widget(\"ui.slickPager\", {\r\n    options: {\r\n        view: null,\r\n        showRowsPerPage: true,\r\n        rowsPerPageOptions: [20, 100, 500, 2000]\r\n    },\r\n\r\n    _create: function () {\r\n        var self = this;\r\n        var o = self.options;\r\n        var v = o.view;\r\n\r\n        if (!v)\r\n            throw \"SlickPager requires view option to be set!\";\r\n\r\n        this.element.addClass('s-SlickPager slick-pg')\r\n            .html(\r\n                '<div class=\"slick-pg-in\">' + \r\n                    '<div class=\"slick-pg-grp\">' +\r\n                        '<div class=\"slick-pg-first slick-pg-btn\"><span class=\"slick-pg-btn-span\"></span></div>' + \r\n                        '<div class=\"slick-pg-prev slick-pg-btn\"><span class=\"slick-pg-btn-span\"></span></div>' + \r\n                     '</div><div class=\"slick-pg-sep\"></div><div class=\"slick-pg-grp\">' + \r\n                         '<span class=\"slick-pg-control\">&nbsp;' + Q.text(\"Controls.Pager.Page\") +\r\n                         '&nbsp;<input class=\"slick-pg-current\" type=\"text\" size=\"4\" value=\"1\" /> / ' +\r\n                         '<span class=\"slick-pg-total\"> 1 </span></span>' + \r\n                     '</div><div class=\"slick-pg-sep\"></div><div class=\"slick-pg-grp\">' + \r\n                        '<div class=\"slick-pg-next slick-pg-btn\"><span class=\"slick-pg-btn-span\"></span></div>' + \r\n                        '<div class=\"slick-pg-last slick-pg-btn\"><span class=\"slick-pg-btn-span\"></span></div>' + \r\n                    '</div><div class=\"slick-pg-sep\"></div><div class=\"slick-pg-grp\">' + \r\n                        '<div class=\"slick-pg-reload slick-pg-btn\"><span class=\"slick-pg-btn-span\"></span></div>' + \r\n                    '</div><div class=\"slick-pg-sep\"></div>' + \r\n                    '<div class=\"slick-pg-grp\"><span class=\"slick-pg-stat\"></span></div></div>');\r\n\r\n        $('.slick-pg-reload', this.element).click(function () { v.populate() });\r\n        $('.slick-pg-first', this.element).click(function () { self._changePage('first') });\r\n        $('.slick-pg-prev', this.element).click(function () { self._changePage('prev') });\r\n        $('.slick-pg-next', this.element).click(function () { self._changePage('next') });\r\n        $('.slick-pg-last', this.element).click(function () { self._changePage('last') });\r\n        $('.slick-pg-current', this.element).keydown(function (e) { if (e.keyCode == 13) self._changePage('input') });\r\n\r\n        if (self.options.showRowsPerPage) {\r\n            var opt: string, sel = \"\";\r\n            for (var nx = 0; nx < o.rowsPerPageOptions.length; nx++) {\r\n                if (v.rowsPerPage == o.rowsPerPageOptions[nx]) \r\n                    sel = 'selected=\"selected\"'; else sel = '';\r\n                opt += \"<option value='\" + o.rowsPerPageOptions[nx] + \"' \" + sel + \" >\" + o.rowsPerPageOptions[nx] + \"&nbsp;&nbsp;</option>\";\r\n            };\r\n            $('.slick-pg-in', this.element).prepend('<div class=\"slick-pg-grp\"><select class=\"slick-pg-size\" name=\"rp\">' + opt + '</select></div><div class=\"slick-pg-sep\"></div>');\r\n            $('select.slick-pg-size', this.element).change(\r\n                function () {\r\n                    if (o.onRowsPerPageChange)\r\n                        o.onRowsPerPageChange(+this.value);\r\n                    else {\r\n                        v.newp = 1;\r\n                        v.setPagingOptions({\r\n                            page: 1,\r\n                            rowsPerPage: +this.value \r\n                        });\r\n                    }\r\n                }\r\n            );\r\n        }\r\n\r\n        v.onPagingInfoChanged.subscribe(function() {\r\n            self._updatePager();\r\n        });\r\n    },\r\n    \r\n    destroy: function () {\r\n        $.Widget.prototype.destroy.apply(this, arguments);\r\n    },\r\n    \r\n    _changePage: function (ctype: string) { //change page\r\n\r\n        var view = this.options.view;\r\n\r\n        if (!view || view.loading)\r\n            return true;\r\n\r\n        var info = view.getPagingInfo();\r\n        var pages = (!info.rowsPerPage || !info.totalCount) ? 1 : Math.ceil(info.totalCount / info.rowsPerPage);\r\n\r\n        var newp: number;\r\n\r\n        switch (ctype) {\r\n            case 'first': newp = 1; break;\r\n            case 'prev': if (info.page > 1) newp = parseInt(info.page) - 1; break;\r\n            case 'next': if (info.page < pages) newp = parseInt(info.page) + 1; break;\r\n            case 'last': newp = pages; break;\r\n            case 'input':\r\n                var nv = parseInt($('input.slick-pg-current', this.element).val());\r\n                if (isNaN(nv)) \r\n                    nv = 1;\r\n                else if (nv < 1) \r\n                    nv = 1;\r\n                else if (nv > pages) \r\n                    nv = pages;\r\n\r\n                $('.slick-pg-current', this.element).val(nv);\r\n\r\n                newp = nv;\r\n                break;\r\n        }\r\n\r\n        if (newp == info.page)\r\n            return false;\r\n\r\n        if (this.options.onChangePage)\r\n            this.options.onChangePage(newp);\r\n        else {\r\n            view.setPagingOptions({ page: newp });\r\n        }\r\n    },\r\n\r\n    _updatePager: function () { \r\n\r\n        var view = this.options.view;\r\n        var info = view.getPagingInfo();\r\n        var pages = (!info.rowsPerPage || !info.totalCount) ? 1 : Math.ceil(info.totalCount / info.rowsPerPage);\r\n\r\n        $('.slick-pg-current', this.element).val(info.page);\r\n        $('.slick-pg-total', this.element).html(pages as any);\r\n\r\n        var r1 = (info.page - 1) * info.rowsPerPage + 1;\r\n        var r2 = r1 + info.rowsPerPage - 1;\r\n\r\n        if (info.totalCount < r2) \r\n            r2 = info.totalCount;\r\n\r\n        var stat: string;\r\n\r\n        if (info.loading) {\r\n            stat = Q.text(\"Controls.Pager.LoadingStatus\");\r\n        }\r\n        else if (info.error) {\r\n            stat = info.error;\r\n        }\r\n        else if (info.totalCount > 0) {\r\n            stat = Q.text(\"Controls.Pager.PageStatus\");\r\n            stat = stat.replace(/{from}/, <any>r1);\r\n            stat = stat.replace(/{to}/, <any>r2);\r\n            stat = stat.replace(/{total}/, info.totalCount);\r\n        }\r\n        else\r\n            stat = Q.text(\"Controls.Pager.NoRowStatus\");\r\n\r\n        $('.slick-pg-stat', this.element).html(stat);\r\n        $('.slick-pg-size', this.element).val((info.rowsPerPage || 0).toString());\r\n    },\r\n\r\n    _setOption: function (key: string, value: any) {\r\n        $.Widget.prototype._setOption.apply(this, arguments);\r\n    }\r\n});\r\n\r\n})(jQuery); \r\n\r\ndeclare namespace Slick.Data {\r\n    class GroupItemMetadataProvider {\r\n        constructor();\r\n    }\r\n}\r\n\r\ndeclare namespace Slick {\r\n    interface PagerOptions {\r\n        view?: Slick.RemoteView<any>;\r\n        showRowsPerPage?: boolean;\r\n        rowsPerPage?: number;\r\n        rowsPerPageOptions?: number[],\r\n        onChangePage?: (newPage: number) => void\r\n    }\r\n\r\n    interface FormatterContext {\r\n        row?: number;\r\n        cell?: number;\r\n        value?: any;\r\n        column?: any;\r\n        item?: any;\r\n    }\r\n\r\n    interface Formatter {\r\n        format(ctx: FormatterContext): string;\r\n    }\r\n\r\n    export type Format = (ctx: Slick.FormatterContext) => string;\r\n\r\n    export interface IEventData {\r\n        isPropagationStopped(): boolean;\r\n        isImmediatePropagationStopped(): boolean;\r\n    }\r\n\r\n    class Event<TArgs = any> {\r\n        subscribe(handler: Handler<TArgs>): void;\r\n        unsubscribe(handler: Handler<TArgs>): void;\r\n        notify(args?: TArgs, e?: IEventData, scope?: any): void;\r\n        clear(): void;\r\n    }\r\n\r\n    interface PositionInfo {\r\n        bottom: number;\r\n        height: number;\r\n        left: number;\r\n        right: number;\r\n        top: number;\r\n        visible: boolean;\r\n        width: number;\r\n    }\r\n\r\n    interface SlickRangeInfo {\r\n        top: number;\r\n        bottom: number;\r\n        leftPx: number;\r\n        rightPx: number;\r\n    }\r\n\r\n    class EventData {\r\n        constructor();\r\n        isPropagationStopped(): boolean;\r\n        isImmediatePropagationStopped(): boolean;\r\n    }\r\n\r\n    type AsyncPostRender = (cellNode: any, row: number, item: any, column: Slick.Column, clean?: boolean) => void;\r\n    type CancellableViewCallback<TEntity> = (view: Slick.RemoteView<TEntity>) => boolean;\r\n    type ColumnFormatter = (row: number, cell: number, value: any, column: Slick.Column, item: any) => string;\r\n    type RemoteViewAjaxCallback<TEntity> = (view: Slick.RemoteView<TEntity>, options: JQueryAjaxSettings) => boolean;\r\n    type RemoteViewFilter<TEntity> = (item: TEntity, view: Slick.RemoteView<TEntity>) => boolean;\r\n    type RemoteViewProcessCallback<TEntity> = (data: Serenity.ListResponse<TEntity>, view: Slick.RemoteView<TEntity>) => Serenity.ListResponse<TEntity>;\r\n    type Handler<TArgs> = (e: JQueryEventObject, args: TArgs) => void;\r\n\r\n    class EventHandler<TArgs = any> {\r\n        subscribe<TArgs>(event: Event<TArgs>, handler: Handler<TArgs>): EventHandler<TArgs>;\r\n        unsubscribe<TArgs>(event: Event<TArgs>, handler: Handler<TArgs>): EventHandler<TArgs>;\r\n        unsubscribeAll(): EventHandler<TArgs>;\r\n    }\r\n\r\n    interface Column {\r\n        asyncPostRender?: Slick.AsyncPostRender;\r\n        behavior?: any;\r\n        cannotTriggerInsert?: boolean;\r\n        cssClass?: string;\r\n        defaultSortAsc?: boolean;\r\n        editor?: Function;\r\n        field: string;\r\n        focusable?: boolean;\r\n        formatter?: Slick.ColumnFormatter;\r\n        headerCssClass?: string;\r\n        id?: string;\r\n        maxWidth?: any;\r\n        minWidth?: number;\r\n        name?: string;\r\n        rerenderOnResize?: boolean;\r\n        resizable?: boolean;\r\n        selectable?: boolean;\r\n        sortable?: boolean;\r\n        toolTip?: string;\r\n        width?: number;\r\n        format?: (ctx: Slick.FormatterContext) => string;\r\n        referencedFields?: string[];\r\n        sourceItem?: Serenity.PropertyItem;\r\n        sortOrder?: number;\r\n        groupTotalsFormatter?: (p1?: GroupTotals<any>, p2?: Column) => string;\r\n        visible?: boolean;\r\n    }\r\n\r\n    class RowMoveManager {\r\n        constructor(options: Slick.RowMoveManagerOptions);\r\n        onBeforeMoveRows: Slick.Event;\r\n        onMoveRows: Slick.Event;\r\n    }\r\n\r\n    class RowSelectionModel {\r\n    }\r\n\r\n    class AutoTooltips {\r\n        constructor(options: Slick.AutoTooltipsOptions);\r\n    }\r\n\r\n    export interface AutoTooltipsOptions {\r\n        enableForHeaderCells?: boolean;\r\n        enableForCells?: boolean;\r\n        maxToolTipLength?: number;\r\n    }\r\n\r\n    interface GroupInfo<TItem> {\r\n        getter?: any;\r\n        formatter?: (p1: Slick.Group<TItem>) => string;\r\n        comparer?: (a: Slick.Group<TItem>, b: Slick.Group<TItem>) => number;\r\n        aggregators?: any[];\r\n        aggregateCollapsed?: boolean;\r\n        lazyTotalsCalculation?: boolean;\r\n    }\r\n\r\n    interface RowCell {\r\n        row: number;\r\n        cell: number;\r\n    }\r\n\r\n    interface RowMoveManagerOptions {\r\n        cancelEditOnDrag: boolean;\r\n    }\r\n\r\n    interface SummaryOptions {\r\n        aggregators: any[];\r\n    }\r\n\r\n    class Group<TEntity> {\r\n        isGroup: boolean;\r\n        level: number;\r\n        count: number;\r\n        value: any;\r\n        title: string;\r\n        collapsed: boolean;\r\n        totals: any;\r\n        rows: any;\r\n        groups: Group<TEntity>[];\r\n        groupingKey: string;\r\n    }\r\n\r\n    class GroupTotals<TEntity> {\r\n        isGroupTotals: boolean;\r\n        group: Group<TEntity>;\r\n        initialized: boolean;\r\n        sum: any;\r\n        avg: any;\r\n        min: any;\r\n        max: any;\r\n    }\r\n\r\n    interface GridOptions {\r\n        asyncEditorLoading?: boolean;\r\n        asyncEditorLoadDelay?: number;\r\n        asyncPostRenderDelay?: number;\r\n        asyncPostRenderCleanupDelay?: number;\r\n        autoEdit?: boolean;\r\n        autoHeight?: boolean;\r\n        cellFlashingCssClass?: string;\r\n        cellHighlightCssClass?: string;\r\n        dataItemColumnValueExtractor?: () => void;\r\n        groupingPanel?: boolean,\r\n        groupingPanelHeight?: number;\r\n        setGroupingPanelVisibility?: (value: boolean) => void;\r\n        defaultColumnWidth?: number;\r\n        defaultFormatter?: () => void;\r\n        editable?: boolean;\r\n        editCommandHandler?: () => void;\r\n        editorFactory?: () => void;\r\n        editorLock?: any;\r\n        enableAddRow?: boolean;\r\n        enableAsyncPostRender?: boolean;\r\n        enableAsyncPostRenderCleanup?: boolean;\r\n        enableCellRangeSelection?: boolean;\r\n        enableCellNavigation?: boolean;\r\n        enableColumnReorder?: boolean;\r\n        enableRowReordering?: boolean;\r\n        enableTextSelectionOnCells?: boolean;\r\n        explicitInitialization?: boolean;\r\n        forceFitColumns?: boolean;\r\n        forceSyncScrolling?: boolean;\r\n        formatterFactory?: () => void;\r\n        fullWidthRows?: boolean;\r\n        frozenColumn?: number;\r\n        frozenRow?: number;\r\n        frozenBottom?: boolean;\r\n        headerRowHeight?: number;\r\n        leaveSpaceForNewRows?: boolean;\r\n        minBuffer?: number;\r\n        multiColumnSort?: boolean;\r\n        multiSelect?: boolean;\r\n        renderAllCells?: boolean;\r\n        rowHeight?: number;\r\n        selectedCellCssClass?: string;\r\n        showHeaderRow?: boolean;\r\n        showFooterRow?: boolean;\r\n        syncColumnCellResize?: boolean;\r\n        topPanelHeight?: number;\r\n    }\r\n\r\n    interface RemoteView<TEntity> {\r\n        constructor(options: RemoteViewOptions): void;\r\n        onSubmit: Slick.CancellableViewCallback<TEntity>;\r\n        onDataChanged: Slick.Event;\r\n        onDataLoaded: Slick.Event;\r\n        onAjaxCall: Slick.RemoteViewAjaxCallback<TEntity>;\r\n        onProcessData: Slick.RemoteViewProcessCallback<TEntity>;\r\n        addData(data: Serenity.ListResponse<TEntity>): void;\r\n        beginUpdate(): void;\r\n        endUpdate(): void;\r\n        deleteItem(id: any): void;\r\n        getItems(): TEntity[];\r\n        setFilter(filter: RemoteViewFilter<TEntity>): void;\r\n        setItems(items: any[], fullReset: boolean): void;\r\n        getItemById(id: any): TEntity;\r\n        getRowById(id: any): number;\r\n        updateItem(id: any, item: TEntity): void;\r\n        addItem(item: TEntity): void;\r\n        getIdxById(id: any): any;\r\n        getItemByIdx(index: number): any;\r\n        setGrouping(groupInfo: Slick.GroupInfo<TEntity>[]): void;\r\n        collapseAllGroups(level: number): void;\r\n        expandAllGroups(level: number): void;\r\n        expandGroup(keys: any[]): void;\r\n        collapseGroup(keys: any[]): void;\r\n        setSummaryOptions(options: Slick.SummaryOptions): void;\r\n        refresh(): void;\r\n        populate(): void;\r\n        populateLock(): void;\r\n        populateUnlock(): void;\r\n        getItem(row: number): any;\r\n        getLength(): number;\r\n        params: any;\r\n        sortBy: string[];\r\n        url: string;\r\n        seekToPage?: number;\r\n    }\r\n\r\n    interface RemoteViewOptions {\r\n        autoLoad?: boolean;\r\n        idField?: string;\r\n        contentType?: string;\r\n        dataType?: string;\r\n        filter?: any;\r\n        params?: any;\r\n        onSubmit?: Slick.Event;\r\n        url?: string;\r\n        sortBy?: any;\r\n        rowsPerPage?: number;\r\n        seekToPage?: number;\r\n        onProcessData?: Slick.Event;\r\n        method?: string;\r\n        getItemMetadata?: (p1?: any, p2?: number) => any;\r\n        errorMsg?: string;\r\n    }\r\n\r\n    interface ColumnSort {\r\n        columnId?: string;\r\n        sortAsc?: boolean;\r\n    }\r\n\r\n    interface RangeInfo {\r\n        top?: number;\r\n        bottom?: number;\r\n        leftPx?: number;\r\n        rightPx?: number;\r\n    }\r\n\r\n    class Grid {\r\n        constructor(container: JQuery, data: any, columns: Column[], options: GridOptions);\r\n    }\r\n\r\n    interface Grid {\r\n        init(): void;\r\n        destroy(): void;\r\n        getData(): any[];\r\n        getDataItem(index: number): any;\r\n        setData(data: any[], scrollToTop: boolean): void;\r\n        getDataLength(): number;\r\n        getOptions(): GridOptions;\r\n        setOptions(options: GridOptions): void;\r\n        getSelectedRows(): any;\r\n        getSelectionModel(): any;\r\n        setSelectionModel(model: any): any;\r\n        setSelectedRows(rows: any): void;\r\n        autoSizeColumns(): void;\r\n        getColumnIndex(id: string): number;\r\n        getColumns(): Column[];\r\n        getUID(): string;\r\n        setColumns(columns: Column[]): void;\r\n        setSortColumn(columnId: string, ascending: boolean): void;\r\n        setSortColumns(cols: Slick.ColumnSort[]): void;\r\n        updateColumnHeader(columnId: string, title: string, toolTip: string): void;\r\n        addCellCssStyles(key: string, hash: any): void;\r\n        canCellBeActive(row: number, col: number): boolean;\r\n        canCellBeSelected(row: number, col: number): boolean;\r\n        editActiveCell(editor: Function): void;\r\n        flashCell(row: number, cell: number, speed: number): void;\r\n        getActiveCell(): Slick.RowCell;\r\n        getActiveCellNode(): any;\r\n        getActiveCellPosition(): Slick.PositionInfo;\r\n        getCellCssStyles(key: string): any;\r\n        getCellEditor(): any;\r\n        getCellFromEvent(e: any): Slick.RowCell;\r\n        getCellFromPoint(x: number, y: number): Slick.RowCell;\r\n        getCellNode(row: number, cell: number): any;\r\n        getCellNodeBox(row: number, cell: number): Slick.PositionInfo;\r\n        goToCell(row: number, cell: number, forceEdit: boolean): void;\r\n        navigateDown(): void;\r\n        navigateLeft(): void;\r\n        navigateNext(): void;\r\n        navigatePrev(): void;\r\n        navigateRight(): void;\r\n        navigateUp(): void;\r\n        removeCellCssStyles(key: string): void;\r\n        resetActiveCell(): void;\r\n        registerPlugin(plugin: any): void;\r\n        setActiveCell(row: number, cell: number): void;\r\n        setCellCssStyles(key: string, hash: any): void;\r\n        getCanvasNode(): any;\r\n        getGridPosition(): Slick.PositionInfo;\r\n        getRenderedRange(viewportTop: number, viewportLeft: number): Slick.RangeInfo;\r\n        getViewport(viewportTop: number, viewportLeft: number): Slick.RangeInfo;\r\n        getViewport(): Slick.RangeInfo;\r\n        invalidate(): void;\r\n        invalidateAllRows(): void;\r\n        invalidateRow(row: number): void;\r\n        invalidateRows(rows: any): void;\r\n        render(): void;\r\n        resizeCanvas(): void;\r\n        scrollCellIntoView(row: number, cell: number): void;\r\n        scrollRowIntoView(row: number, doPaging: boolean): void;\r\n        scrollRowToTop(row: number): void;\r\n        updateCell(row: number, cell: number): void;\r\n        updateRow(row: number): void;\r\n        updateRowCount(): void;\r\n        updateColumnHeader(columnId: string, title?: string, toolTip?: string): void;\r\n        getGroupingPanel(): HTMLDivElement;\r\n        getHeaderRow(): any;\r\n        getEditorLock(): any;\r\n        getHeaderRowColumn(columnId: string): any;\r\n        getSortColumns(): any;\r\n        getTopPanel(): any;\r\n        setHeaderRowVisibility(visible: boolean): void;\r\n        onScroll?: Slick.Event;\r\n        onSort?: Slick.Event;\r\n        onHeaderContextMenu?: Slick.Event;\r\n        onHeaderClick?: Slick.Event;\r\n        onMouseEnter?: Slick.Event;\r\n        onMouseLeave?: Slick.Event;\r\n        onClick?: Slick.Event;\r\n        onDblClick?: Slick.Event;\r\n        onContextMenu?: Slick.Event;\r\n        onKeyDown?: Slick.Event;\r\n        onAddNewRow?: Slick.Event;\r\n        onValidationError?: Slick.Event;\r\n        onViewportChanged?: Slick.Event;\r\n        onColumnsReordered?: Slick.Event;\r\n        onColumnsResized?: Slick.Event;\r\n        onCellChange?: Slick.Event;\r\n        onBeforeEditCell?: Slick.Event;\r\n        onBeforeCellEditorDestroy?: Slick.Event;\r\n        onHeaderCellRendered?: Slick.Event;\r\n        onBeforeHeaderCellDestroy?: Slick.Event;\r\n        onBeforeDestroy?: Slick.Event;\r\n        onActiveCellChanged?: Slick.Event;\r\n        onActiveCellPositionChanged?: Slick.Event;\r\n        onDragInit?: Slick.Event;\r\n        onDragStart?: Slick.Event;\r\n        onDrag?: Slick.Event;\r\n        onDragEnd?: Slick.Event;\r\n        onSelectedRowsChanged?: Slick.Event;\r\n        onCellCssStylesChanged?: Slick.Event;\r\n    }\r\n}\r\n\r\nnamespace Slick.Data {\r\n    var GroupItemMetadataProvider: any;\r\n}\r\n\r\nnamespace Slick {\r\n    export class RemoteView<TEntity> {\r\n        constructor(options: any) {\r\n            var self = this;\r\n\r\n            var defaults = {\r\n                groupItemMetadataProvider: <any>null,\n                inlineFilters: false\n            }\r\n\r\n            var idProperty: string;\r\n            var items: any[] = [];\r\n            var rows: any[] = [];\r\n            var idxById = {};\r\n            var rowsById: any = null;\r\n            var filter: any = null;\r\n            var updated: any = null;\r\n            var suspend = 0;\r\n\r\n            var sortAsc = true;\r\n            var fastSortField: string;\r\n            var sortComparer: any;\r\n            var refreshHints: any = {};\n            var prevRefreshHints: any = {};\n            var filterArgs: any;\n            var filteredItems: any = [];\n            var compiledFilter: any;\n            var compiledFilterWithCaching: any;\n            var filterCache: any[] = [];\n\n            var groupingInfoDefaults = {\n                getter: <any>null,\n                formatter: <any>null,\n                comparer: function (a: any, b: any) {\n                    return (a.value === b.value ? 0 :\n                        (a.value > b.value ? 1 : -1)\n                    );\n                },\n                predefinedValues: <any[]>[],\n                aggregateEmpty: false,\n                aggregateCollapsed: false,\n                aggregateChildGroups: false,\n                collapsed: false,\n                displayTotalsRow: true,\n                lazyTotalsCalculation: false\n            };\n            var summaryOptions: any = {};\n            var groupingInfos: any[] = [];\n            var groups: any[] = [];\n            var toggledGroupsByLevel: any[] = [];\n            var groupingDelimiter = ':|:';\n\r\n            var page = 1;\r\n            var totalRows = 0;\r\n\r\n            var onRowCountChanged = new Event();\r\n            var onRowsChanged = new Event();\r\n            var onPagingInfoChanged = new Event();\r\n\r\n            var loading: any = false;\r\n            var errorMessage: string = null;\r\n            var populateLocks = 0;\r\n            var populateCalls = 0;\r\n            var contentType: string;\r\n            var dataType: string;\r\n            var totalCount: number = null;\r\n            var onDataChanged = new Event();\r\n            var onDataLoading = new Event();\r\n            var onDataLoaded = new Event();\r\n            var onClearData = new Event();\r\n            var intf: any;\r\n\r\n            function beginUpdate() {\r\n                suspend++;\r\n            }\r\n\r\n            function endUpdate() {\r\n                suspend--;\r\n                if (suspend <= 0)\r\n                    refresh();\r\n            }\r\n\r\n            function setRefreshHints(hints: any) {\n                refreshHints = hints;\n            }\n\n            function setFilterArgs(args: any) {\n                filterArgs = args;\n            }\n\r\n            function updateIdxById(startingIndex?: number) {\r\n                startingIndex = startingIndex || 0;\n                var id: any;\r\n                for (var i = startingIndex, l = items.length; i < l; i++) {\n                    id = items[i][idProperty];\n                    if (id === undefined) {\n                        var msg = \"Each data element must implement a unique '\" +\r\n                            idProperty + \"' property. Object at index '\" + i + \"' \" +\r\n                            \"has no identity value: \";\r\n\r\n                        msg += (<any>$).toJSON(items[i]);\r\n                        throw msg;\r\n                    }\r\n                    idxById[id] = i;\r\n                }\r\n            }\r\n\r\n            function ensureIdUniqueness() {\n                var id: any;\n                for (var i = 0, l = items.length; i < l; i++) {\n                    id = items[i][idProperty];\n                    if (id === undefined || idxById[id] !== i) {\n                        var msg = \"Each data element must implement a unique '\" +\r\n                            idProperty + \"' property. Object at index '\" + i + \"' \";\r\n\r\n                        if (id == undefined)\r\n                            msg += \"has no identity value: \";\r\n                        else\r\n                            msg += \"has repeated identity value '\" + id + \"': \";\r\n\r\n                        msg += (<any>$).toJSON(items[i]);\r\n                        throw msg;\n                    }\n                }\n            }\r\n\r\n            function getItems() {\r\n                return items;\r\n            }\r\n\r\n            function setItems(data: any[]) {\r\n                items = filteredItems = data;\r\n                idxById = {};\r\n                rowsById = null;\r\n                summaryOptions.totals = {};\r\n                updateIdxById();\r\n                ensureIdUniqueness();\r\n\r\n                if (suspend) {\r\n                    recalc(items);\r\n                }\r\n                else {\r\n                    refresh();\r\n                }\r\n\r\n                onDataChanged.notify({ dataView: self }, null, self);\r\n            }\r\n\r\n            function setPagingOptions(args: any) {\r\n                var anyChange = false;\r\n\r\n                if (args.rowsPerPage != undefined &&\r\n                    intf.rowsPerPage != args.rowsPerPage) {\r\n                    intf.rowsPerPage = args.rowsPerPage;\r\n                    anyChange = true;\r\n                }\r\n\r\n                if (args.page != undefined) {\r\n                    var newPage: number;\r\n                    if (!intf.rowsPerPage)\r\n                        newPage = 1;\r\n                    else if (totalCount == null)\r\n                        newPage = args.page;\r\n                    else\r\n                        newPage = Math.min(args.page, Math.ceil(totalCount / intf.rowsPerPage) + 1);\r\n\r\n                    if (newPage < 1)\r\n                        newPage = 1;\r\n\r\n                    if (newPage != page) {\r\n                        intf.seekToPage = newPage;\r\n                        anyChange = true;\r\n                    }\r\n                }\r\n\r\n                if (anyChange)\r\n                    populate();\r\n            }\r\n\r\n            function getPagingInfo() {\r\n                return {\r\n                    rowsPerPage: intf.rowsPerPage,\r\n                    page: page,\r\n                    totalCount: totalCount,\r\n                    loading: loading,\r\n                    error: errorMessage,\r\n                    dataView: self\r\n                };\r\n            }\r\n\r\n            function sort(comparer: any, ascending: boolean) {\n                sortAsc = ascending;\n                sortComparer = comparer;\n                fastSortField = null;\n                if (ascending === false) {\n                    items.reverse();\n                }\n                items.sort(comparer);\n                if (ascending === false) {\n                    items.reverse();\n                }\n                idxById = {};\n                updateIdxById();\n                refresh();\n            }\n\n            /***\n             * Provides a workaround for the extremely slow sorting in IE.\n             * Does a [lexicographic] sort on a give column by temporarily overriding Object.prototype.toString\n             * to return the value of that field and then doing a native Array.sort().\n             */\n            function fastSort(field: any, ascending: boolean) {\n                sortAsc = ascending;\n                fastSortField = field;\n                sortComparer = null;\n                var oldToString = Object.prototype.toString;\n                Object.prototype.toString = (typeof field === \"function\") ? field : function () {\n                    return this[field]\n                };\n                // an extra reversal for descending sort keeps the sort stable\n                // (assuming a stable native sort implementation, which isn't true in some cases)\n                if (ascending === false) {\n                    items.reverse();\n                }\n                items.sort();\n                Object.prototype.toString = oldToString;\n                if (ascending === false) {\n                    items.reverse();\n                }\n                idxById = {};\n                updateIdxById();\n                refresh();\n            }\n\n            function reSort() {\n                if (sortComparer) {\n                    sort(sortComparer, sortAsc);\n                } else if (fastSortField) {\n                    fastSort(fastSortField, sortAsc);\n                }\n            }\n\n            function setFilter(filterFn: any) {\n                filter = filterFn;\n                if (options.inlineFilters) {\n                    compiledFilter = compileFilter();\n                    compiledFilterWithCaching = compileFilterWithCaching();\n                }\n                refresh();\n            }\r\n\r\n            function getGrouping() {\n                return groupingInfos;\n            }\n\n            function setSummaryOptions(summary: any) {\n                summary = summary || {};\n                summaryOptions.aggregators = summary.aggregators || [];\n                summaryOptions.compiledAccumulators = [];\n                summaryOptions.totals = {};\n                var idx = summaryOptions.aggregators.length;\n                while (idx--) {\n                    summaryOptions.compiledAccumulators[idx] = compileAccumulatorLoop(summaryOptions.aggregators[idx]);\n                }\n                setGrouping(groupingInfos || []);\n            }\n\n            function getGrandTotals() {\n                summaryOptions.totals = summaryOptions.totals || {};\n\n                if (!summaryOptions.totals.initialized) {\n                    summaryOptions.aggregators = summaryOptions.aggregators || [];\n                    summaryOptions.compiledAccumulators = summaryOptions.compiledAccumulators || [];\n                    var agg: any, idx = summaryOptions.aggregators.length;\n\n                    while (idx--) {\n                        agg = summaryOptions.aggregators[idx];\n                        agg.init();\n                        summaryOptions.compiledAccumulators[idx].call(agg, items);\n                        agg.storeResult(summaryOptions.totals);\n                    }\n                    summaryOptions.totals.initialized = true;\n                }\n\n                return summaryOptions.totals;\n            }\n\n            function setGrouping(groupingInfo: any) {\n                if (!options.groupItemMetadataProvider) {\n                    options.groupItemMetadataProvider = new Slick.Data.GroupItemMetadataProvider();\n                }\n\n                groups = [];\n                toggledGroupsByLevel = [];\n                groupingInfo = groupingInfo || [];\n                groupingInfos = (groupingInfo instanceof Array) ? groupingInfo : [groupingInfo];\n\n                for (var i = 0; i < groupingInfos.length; i++) {\n                    var gi = groupingInfos[i] = $.extend(true, {}, groupingInfoDefaults, groupingInfos[i]);\n                    gi.aggregators = gi.aggregators || summaryOptions.aggregators || [];\n                    gi.getterIsAFn = typeof gi.getter === \"function\";\n\n                    // pre-compile accumulator loops\n                    gi.compiledAccumulators = [];\n                    var idx = gi.aggregators.length;\n                    while (idx--) {\n                        gi.compiledAccumulators[idx] = compileAccumulatorLoop(gi.aggregators[idx]);\n                    }\n\n                    toggledGroupsByLevel[i] = {};\n                }\n\n                refresh();\n            }\n\r\n            function getItemByIdx(i: number) {\r\n                return items[i];\r\n            }\r\n\r\n            function getIdxById(id: any) {\r\n                return idxById[id];\r\n            }\r\n\r\n            function ensureRowsByIdCache() {\n                if (!rowsById) {\n                    rowsById = {};\n                    for (var i = 0, l = rows.length; i < l; i++) {\n                        rowsById[rows[i][idProperty]] = i;\n                    }\n                }\n            }\n\n            function getRowById(id: any) {\n                ensureRowsByIdCache();\n                return rowsById[id];\n            }\n\n            function getItemById(id: any) {\n                return items[idxById[id]];\n            }\n\r\n            function mapIdsToRows(idArray: any[]) {\n                var rows: any[] = [];\n                ensureRowsByIdCache();\n                for (var i = 0, l = idArray.length; i < l; i++) {\n                    var row = rowsById[idArray[i]];\n                    if (row != null) {\n                        rows[rows.length] = row;\n                    }\n                }\n                return rows;\n            }\n\n            function mapRowsToIds(rowArray: any[]) {\n                var ids: any[] = [];\n                for (var i = 0, l = rowArray.length; i < l; i++) {\n                    if (rowArray[i] < rows.length) {\n                        ids[ids.length] = rows[rowArray[i]][idProperty];\n                    }\n                }\n                return ids;\n            }\n\n            function updateItem(id: any, item: any) {\n                if (idxById[id] === undefined || id !== item[idProperty]) {\n                    throw \"Invalid or non-matching id\";\n                }\n                items[idxById[id]] = item;\n                if (!updated) {\n                    updated = {};\n                }\n                updated[id] = true;\n                refresh();\n            }\n\n            function insertItem(insertBefore: number, item: any) {\n                items.splice(insertBefore, 0, item);\n                updateIdxById(insertBefore);\n                refresh();\n            }\n\n            function addItem(item: any) {\n                items.push(item);\n                updateIdxById(items.length - 1);\n                refresh();\n            }\n\n            function deleteItem(id: any) {\n                var idx = idxById[id];\n                if (idx === undefined) {\n                    throw \"Invalid id\";\n                }\n                delete idxById[id];\n                items.splice(idx, 1);\n                updateIdxById(idx);\n                refresh();\n            }\n\n            function getRows() {\n                return rows;\n            }\n\n            function getLength() {\n                return rows.length;\n            }\n\n            function getItem(i: number) {\n                var item = rows[i];\n\n                // if this is a group row, make sure totals are calculated and update the title\n                if (item && item.__group && item.totals && !item.totals.initialized) {\n                    var gi = groupingInfos[item.level];\n                    if (!gi.displayTotalsRow) {\n                        calculateTotals(item.totals);\n                        item.title = gi.formatter ? gi.formatter(item) : item.value;\n                    }\n                }\n                // if this is a totals row, make sure it's calculated\n                else if (item && item.__groupTotals && !item.initialized) {\n                    calculateTotals(item);\n                }\n\n                return item;\n            }\n\r\n            function getItemMetadata(i: number) {\n                var item = rows[i];\n                if (item === undefined) {\n                    return null;\n                }\n\n                // overrides for grouping rows\n                if (item.__group) {\n                    return options.groupItemMetadataProvider.getGroupRowMetadata(item);\n                }\n\n                // overrides for totals rows\n                if (item.__groupTotals) {\n                    return options.groupItemMetadataProvider.getTotalsRowMetadata(item);\n                }\n\n                return (options.getItemMetadata && options.getItemMetadata(item, i)) || null;\n            }\n\n            function expandCollapseAllGroups(level: number, collapse: boolean) {\n                if (level == null) {\n                    for (var i = 0; i < groupingInfos.length; i++) {\n                        toggledGroupsByLevel[i] = {};\n                        groupingInfos[i].collapsed = collapse;\n                    }\n                } else {\n                    toggledGroupsByLevel[level] = {};\n                    groupingInfos[level].collapsed = collapse;\n                }\n                refresh();\n            }\n\r\n            /**\n             * @param level {Number} Optional level to collapse.  If not specified, applies to all levels.\n             */\n            function collapseAllGroups(level: number) {\n                expandCollapseAllGroups(level, true);\n            }\n\n            /**\n             * @param level {Number} Optional level to expand.  If not specified, applies to all levels.\n             */\n            function expandAllGroups(level: number) {\n                expandCollapseAllGroups(level, false);\n            }\n\n            function resolveLevelAndGroupingKey(args: any) {\n                var arg0 = args[0];\n                if (args.length === 1 && arg0.indexOf(groupingDelimiter) !== -1) {\n                    return { level: arg0.split(groupingDelimiter).length - 1, groupingKey: arg0 };\n                } else {\n                    return { level: args.length - 1, groupingKey: args.join(groupingDelimiter) };\n                }\n            }\n\n            function expandCollapseGroup(args: any, collapse: any) {\n                var opts = resolveLevelAndGroupingKey(args);\n                toggledGroupsByLevel[opts.level][opts.groupingKey] = groupingInfos[opts.level].collapsed ^ collapse;\n                refresh();\n            }\n\n            /**\n             * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\n             *     variable argument list of grouping values denoting a unique path to the row.  For\n             *     example, calling collapseGroup('high', '10%') will collapse the '10%' subgroup of\n             *     the 'high' group.\n             */\n            function collapseGroup(varArgs: any[]) {\n                var args = Array.prototype.slice.call(arguments);\n                expandCollapseGroup(args, true);\n            }\n\n            /**\n             * @param varArgs Either a Slick.Group's \"groupingKey\" property, or a\n             *     variable argument list of grouping values denoting a unique path to the row.  For\n             *     example, calling expandGroup('high', '10%') will expand the '10%' subgroup of\n             *     the 'high' group.\n             */\n            function expandGroup(varArgs: any[]) {\n                var args = Array.prototype.slice.call(arguments);\n                expandCollapseGroup(args, false);\n            }\n\n            function getGroups() {\n                return groups;\n            }\n\n            function getOrCreateGroup(groupsByVal: any, val: any, level: number, parentGroup: any, groups: any[]) {\n                var group = groupsByVal[val];\n\n                if (!group) {\n                    group = new Slick.Group<any>();\n                    group.value = val;\n                    group.level = level;\n                    group.groupingKey = (parentGroup ? parentGroup.groupingKey + groupingDelimiter : '') + val;\n                    groups[groups.length] = group;\n                    groupsByVal[val] = group;\n                }\n\n                return group;\n            }\n\n            function extractGroups(rows: any[], parentGroup?: any) {\n                var group: any;\n                var val: any;\n                var groups: any[] = [];\n                var groupsByVal = {};\n                var r: any;\n                var level = parentGroup ? parentGroup.level + 1 : 0;\n                var gi = groupingInfos[level];\n\n                for (var i = 0, l: number = gi.predefinedValues.length; i < l; i++) {\n                    val = gi.predefinedValues[i];\n                    group = getOrCreateGroup(groupsByVal, val, level, parentGroup, groups);\n                }\n\n                for (var i = 0, l = rows.length; i < l; i++) {\n                    r = rows[i];\n                    val = gi.getterIsAFn ? gi.getter(r) : r[gi.getter];\n                    group = getOrCreateGroup(groupsByVal, val, level, parentGroup, groups);\n\n                    group.rows[group.count++] = r;\n                }\n\n                if (level < groupingInfos.length - 1) {\n                    for (var i = 0; i < groups.length; i++) {\n                        group = groups[i];\n                        group.groups = extractGroups(group.rows, group);\n                    }\n                }\n\n                groups.sort(groupingInfos[level].comparer);\n\n                return groups;\n            }\n\n            function calculateTotals(totals: any) {\n                var group = totals.group;\n                var gi = groupingInfos[group.level];\n                var isLeafLevel = (group.level == groupingInfos.length);\n                var agg: any, idx = gi.aggregators.length;\n\n                if (!isLeafLevel && gi.aggregateChildGroups) {\n                    // make sure all the subgroups are calculated\n                    var i = group.groups.length;\n                    while (i--) {\n                        if (!group.groups[i].totals.initialized) {\n                            calculateTotals(group.groups[i].totals);\n                        }\n                    }\n                }\n\n                while (idx--) {\n                    agg = gi.aggregators[idx];\n                    agg.init();\n                    if (!isLeafLevel && gi.aggregateChildGroups) {\n                        gi.compiledAccumulators[idx].call(agg, group.groups);\n                    } else {\n                        gi.compiledAccumulators[idx].call(agg, group.rows);\n                    }\n                    agg.storeResult(totals);\n                }\n                totals.initialized = true;\n            }\n\n            function addGroupTotals(group: any) {\n                var gi = groupingInfos[group.level];\n                var totals = new Slick.GroupTotals<TEntity>();\n                totals.group = group;\n                group.totals = totals;\n                if (!gi.lazyTotalsCalculation) {\n                    calculateTotals(totals);\n                }\n            }\n\n            function addTotals(groups: any[], level?: number) {\n                level = level || 0;\n                var gi = groupingInfos[level];\n                var groupCollapsed = gi.collapsed;\n                var toggledGroups = toggledGroupsByLevel[level];\n                var idx = groups.length, g: any;\n                while (idx--) {\n                    g = groups[idx];\n\n                    if (g.collapsed && !gi.aggregateCollapsed) {\n                        continue;\n                    }\n\n                    // Do a depth-first aggregation so that parent group aggregators can access subgroup totals.\n                    if (g.groups) {\n                        addTotals(g.groups, level + 1);\n                    }\n\n                    if (gi.aggregators.length && (\n                        gi.aggregateEmpty || g.rows.length || (g.groups && g.groups.length))) {\n                        addGroupTotals(g);\n                    }\n\n                    g.collapsed = groupCollapsed ^ toggledGroups[g.groupingKey];\n                    g.title = gi.formatter ? gi.formatter(g) : g.value;\n                }\n            }\n\n            function flattenGroupedRows(groups: any[], level?: number) {\n                level = level || 0;\n                var gi = groupingInfos[level];\n                var groupedRows: any[] = [], rows: any[], gl = 0, g: any;\n                for (var i = 0, l = groups.length; i < l; i++) {\n                    g = groups[i];\n                    groupedRows[gl++] = g;\n\n                    if (!g.collapsed) {\n                        rows = g.groups ? flattenGroupedRows(g.groups, level + 1) : g.rows;\n                        for (var j = 0, jj = rows.length; j < jj; j++) {\n                            groupedRows[gl++] = rows[j];\n                        }\n                    }\n\n                    if (g.totals && gi.displayTotalsRow && (!g.collapsed || gi.aggregateCollapsed)) {\n                        groupedRows[gl++] = g.totals;\n                    }\n                }\n                return groupedRows;\n            }\n\r\n            function getFunctionInfo(fn: any) {\n                var fnRegex = /^function[^(]*\\(([^)]*)\\)\\s*{([\\s\\S]*)}$/;\n                var matches = fn.toString().match(fnRegex);\n                return {\n                    params: matches[1].split(\",\"),\n                    body: matches[2]\n                };\n            }\n\n            function compileAccumulatorLoop(aggregator: any) {\n                var accumulatorInfo = getFunctionInfo(aggregator.accumulate);\n                var fn: any = new Function(\n                    \"_items\",\n                    \"for (var \" + accumulatorInfo.params[0] + \", _i=0, _il=_items.length; _i<_il; _i++) {\" +\n                    accumulatorInfo.params[0] + \" = _items[_i]; \" +\n                    accumulatorInfo.body +\n                    \"}\"\n                );\n                fn.displayName = fn.name = \"compiledAccumulatorLoop\";\n                return fn;\n            }\n\r\n            function compileFilter() {\n                var filterInfo = getFunctionInfo(filter);\n\n                var filterBody = filterInfo.body\n                    .replace(/return false\\s*([;}]|$)/gi, \"{ continue _coreloop; }$1\")\n                    .replace(/return true\\s*([;}]|$)/gi, \"{ _retval[_idx++] = $item$; continue _coreloop; }$1\")\n                    .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\n                    \"{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2\");\n\n                // This preserves the function template code after JS compression,\n                // so that replace() commands still work as expected.\n                var tpl = [\n                    //\"function(_items, _args) { \",\n                    \"var _retval = [], _idx = 0; \",\n                    \"var $item$, $args$ = _args; \",\n                    \"_coreloop: \",\n                    \"for (var _i = 0, _il = _items.length; _i < _il; _i++) { \",\n                    \"$item$ = _items[_i]; \",\n                    \"$filter$; \",\n                    \"} \",\n                    \"return _retval; \"\n                    //\"}\"\n                ].join(\"\");\n                tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\n                tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\n                tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\n\n                var fn: any = new Function(\"_items,_args\", tpl);\n                fn.displayName = fn.name = \"compiledFilter\";\n                return fn;\n            }\n\n            function compileFilterWithCaching() {\n                var filterInfo = getFunctionInfo(filter);\n\n                var filterBody = filterInfo.body\n                    .replace(/return false\\s*([;}]|$)/gi, \"{ continue _coreloop; }$1\")\n                    .replace(/return true\\s*([;}]|$)/gi, \"{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1\")\n                    .replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\n                    \"{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2\");\n\n                // This preserves the function template code after JS compression,\n                // so that replace() commands still work as expected.\n                var tpl = [\n                    //\"function(_items, _args, _cache) { \",\n                    \"var _retval = [], _idx = 0; \",\n                    \"var $item$, $args$ = _args; \",\n                    \"_coreloop: \",\n                    \"for (var _i = 0, _il = _items.length; _i < _il; _i++) { \",\n                    \"$item$ = _items[_i]; \",\n                    \"if (_cache[_i]) { \",\n                    \"_retval[_idx++] = $item$; \",\n                    \"continue _coreloop; \",\n                    \"} \",\n                    \"$filter$; \",\n                    \"} \",\n                    \"return _retval; \"\n                    //\"}\"\n                ].join(\"\");\n                tpl = tpl.replace(/\\$filter\\$/gi, filterBody);\n                tpl = tpl.replace(/\\$item\\$/gi, filterInfo.params[0]);\n                tpl = tpl.replace(/\\$args\\$/gi, filterInfo.params[1]);\n\n                var fn: any = new Function(\"_items,_args,_cache\", tpl);\n                fn.displayName = fn.name = \"compiledFilterWithCaching\";\n                return fn;\n            }\n\n            function uncompiledFilter(items: any[], args: any) {\n                var retval: any[] = [], idx = 0;\n\n                for (var i = 0, ii = items.length; i < ii; i++) {\n                    if (filter(items[i], args)) {\n                        retval[idx++] = items[i];\n                    }\n                }\n\n                return retval;\n            }\n\n            function uncompiledFilterWithCaching(items: any[], args: any, cache: any) {\n                var retval: any[] = [], idx = 0, item: any;\n\n                for (var i = 0, ii = items.length; i < ii; i++) {\n                    item = items[i];\n                    if (cache[i]) {\n                        retval[idx++] = item;\n                    } else if (filter(item, args)) {\n                        retval[idx++] = item;\n                        cache[i] = true;\n                    }\n                }\n\n                return retval;\n            }\n\n            function getFilteredAndPagedItems(items: any[]) {\n                if (filter) {\n                    var batchFilter = options.inlineFilters ? compiledFilter : uncompiledFilter;\n                    var batchFilterWithCaching = options.inlineFilters ? compiledFilterWithCaching : uncompiledFilterWithCaching;\n\n                    if (refreshHints.isFilterNarrowing) {\n                        filteredItems = batchFilter(filteredItems, filterArgs);\n                    } else if (refreshHints.isFilterExpanding) {\n                        filteredItems = batchFilterWithCaching(items, filterArgs, filterCache);\n                    } else if (!refreshHints.isFilterUnchanged) {\n                        filteredItems = batchFilter(items, filterArgs);\n                    }\n                } else {\n                    // special case:  if not filtering and not paging, the resulting\n                    // rows collection needs to be a copy so that changes due to sort\n                    // can be caught\n                    filteredItems = items.concat();\n                }\n\n                // get the current page\n                return { totalRows: filteredItems.length, rows: filteredItems };\n            }\n\n            function getRowDiffs(rows: any[], newRows: any[]) {\n                var item: any, r: any, eitherIsNonData: boolean, diff: any[] = [];\n                var from = 0, to = newRows.length;\n\n                if (refreshHints && refreshHints.ignoreDiffsBefore) {\n                    from = Math.max(0,\n                        Math.min(newRows.length, refreshHints.ignoreDiffsBefore));\n                }\n\n                if (refreshHints && refreshHints.ignoreDiffsAfter) {\n                    to = Math.min(newRows.length,\n                        Math.max(0, refreshHints.ignoreDiffsAfter));\n                }\n\n                for (var i = from, rl = rows.length; i < to; i++) {\n                    if (i >= rl) {\n                        diff[diff.length] = i;\n                    } else {\n                        item = newRows[i];\n                        r = rows[i];\n\n                        if ((groupingInfos.length && (eitherIsNonData = (item.__nonDataRow) || (r.__nonDataRow)) &&\n                            item.__group !== r.__group ||\n                            item.__group && !item.equals(r))\n                            || (eitherIsNonData &&\n                                // no good way to compare totals since they are arbitrary DTOs\n                                // deep object comparison is pretty expensive\n                                // always considering them 'dirty' seems easier for the time being\n                                (item.__groupTotals || r.__groupTotals))\n                            || item[idProperty] != r[idProperty]\n                            || (updated && updated[item[idProperty]])\n                        ) {\n                            diff[diff.length] = i;\n                        }\n                    }\n                }\n                return diff;\n            }\n\n            function recalc(_items: any[]) {\n                rowsById = null;\n\n                if (refreshHints.isFilterNarrowing != prevRefreshHints.isFilterNarrowing ||\n                    refreshHints.isFilterExpanding != prevRefreshHints.isFilterExpanding) {\n                    filterCache = [];\n                }\n\n                var filteredItems = getFilteredAndPagedItems(_items);\n                totalRows = filteredItems.totalRows;\n                var newRows = filteredItems.rows;\n\n                summaryOptions.totals = {};\n\n                groups = [];\n                if (groupingInfos.length) {\n                    groups = extractGroups(newRows);\n                    if (groups.length) {\n                        addTotals(groups);\n                        newRows = flattenGroupedRows(groups);\n                    }\n                }\n\n                var diff = getRowDiffs(rows, newRows);\n\n                rows = newRows;\n\n                return diff;\n            }\n\n            function refresh() {\n                if (suspend) {\n                    return;\n                }\n\n                var countBefore = rows.length;\n                var totalRowsBefore = totalRows;\n\n                var diff = recalc(items); // pass as direct refs to avoid closure perf hit\n\n                updated = null;\n                prevRefreshHints = refreshHints;\n                refreshHints = {};\n\n                if (totalRowsBefore !== totalRows) {\n                    onPagingInfoChanged.notify(getPagingInfo(), null, self);\n                }\n                if (countBefore !== rows.length) {\n                    onRowCountChanged.notify({ previous: countBefore, current: rows.length, dataView: self }, null, self);\n                }\n                if (diff.length > 0) {\n                    onRowsChanged.notify({ rows: diff, dataView: self }, null, self);\n                }\n            }\n\r\n            /***\n             * Wires the grid and the DataView together to keep row selection tied to item ids.\n             * This is useful since, without it, the grid only knows about rows, so if the items\n             * move around, the same rows stay selected instead of the selection moving along\n             * with the items.\n             *\n             * NOTE:  This doesn't work with cell selection model.\n             *\n             * @param grid {Slick.Grid} The grid to sync selection with.\n             * @param preserveHidden {Boolean} Whether to keep selected items that go out of the\n             *     view due to them getting filtered out.\n             * @param preserveHiddenOnSelectionChange {Boolean} Whether to keep selected items\n             *     that are currently out of the view (see preserveHidden) as selected when selection\n             *     changes.\n             * @return {Slick.Event} An event that notifies when an internal list of selected row ids\n             *     changes.  This is useful since, in combination with the above two options, it allows\n             *     access to the full list selected row ids, and not just the ones visible to the grid.\n             * @method syncGridSelection\n             */\n            function syncGridSelection(grid: any, preserveHidden: boolean, preserveHiddenOnSelectionChange: boolean) {\n                var self = this;\n                var inHandler: any;\n                var selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\n                var onSelectedRowIdsChanged = new Slick.Event();\n\n                function setSelectedRowIds(rowIds: any[]) {\n                    if (selectedRowIds.join(\",\") == rowIds.join(\",\")) {\n                        return;\n                    }\n\n                    selectedRowIds = rowIds;\n\n                    onSelectedRowIdsChanged.notify({\n                        \"grid\": grid,\n                        \"ids\": selectedRowIds,\n                        \"dataView\": self\n                    }, new Slick.EventData(), self);\n                }\n\n                function update() {\n                    if (selectedRowIds.length > 0) {\n                        inHandler = true;\n                        var selectedRows = self.mapIdsToRows(selectedRowIds);\n                        if (!preserveHidden) {\n                            setSelectedRowIds(self.mapRowsToIds(selectedRows));\n                        }\n                        grid.setSelectedRows(selectedRows);\n                        inHandler = false;\n                    }\n                }\n\n                grid.onSelectedRowsChanged.subscribe(function (e: any, args: any) {\n                    if (inHandler) { return; }\n                    var newSelectedRowIds = self.mapRowsToIds(grid.getSelectedRows());\n                    if (!preserveHiddenOnSelectionChange || !grid.getOptions().multiSelect) {\n                        setSelectedRowIds(newSelectedRowIds);\n                    } else {\n                        // keep the ones that are hidden\n                        var existing = $.grep(selectedRowIds, function (id) { return self.getRowById(id) === undefined; });\n                        // add the newly selected ones\n                        setSelectedRowIds(existing.concat(newSelectedRowIds));\n                    }\n                });\n\n                this.onRowsChanged.subscribe(update);\n                this.onRowCountChanged.subscribe(update);\n\n                return onSelectedRowIdsChanged;\n            }\n\n            function syncGridCellCssStyles(grid: Slick.Grid, key: string) {\n                var hashById: any;\n                var inHandler: any;\n\n                // since this method can be called after the cell styles have been set,\n                // get the existing ones right away\n                storeCellCssStyles(grid.getCellCssStyles(key));\n\n                function storeCellCssStyles(hash: any) {\n                    hashById = {};\n                    for (var row in hash) {\n                        var id: any = rows[row][idProperty];\n                        hashById[id] = hash[row];\n                    }   \n                }\n\n                function update() {\n                    if (hashById) {\n                        inHandler = true;\n                        ensureRowsByIdCache();\n                        var newHash = {};\n                        for (var id in hashById) {\n                            var row = rowsById[id];\n                            if (row != undefined) {\n                                newHash[row] = hashById[id];\n                            }\n                        }\n                        grid.setCellCssStyles(key, newHash);\n                        inHandler = false;\n                    }\n                }\n\n                grid.onCellCssStylesChanged.subscribe(function (e, args) {\n                    if (inHandler) { return; }\n                    if (key != args.key) { return; }\n                    if (args.hash) {\n                        storeCellCssStyles(args.hash);\n                    }\n                });\n\n                this.onRowsChanged.subscribe(update);\n                this.onRowCountChanged.subscribe(update);\n            }\r\n\r\n            function addData(data: any) {\r\n\r\n                if (intf.onProcessData && data)\r\n                    data = intf.onProcessData(data, intf) || data;\r\n\r\n                errorMessage = null;\r\n                loading && loading.abort();\r\n                loading = false;\r\n\r\n                if (!data) {\r\n                    errorMessage = intf.errormsg;\r\n                    onPagingInfoChanged.notify(getPagingInfo());\r\n                    return false;\r\n                }\r\n\r\n                var theData = data;\r\n                data.TotalCount = data.TotalCount || 0;\r\n                data.Entities = data.Entities || [];\r\n\r\n                if (!data.Skip || (!intf.rowsPerPage && !data.Take))\r\n                    data.Page = 1;\r\n                else\r\n                    data.Page = Math.ceil(data.Skip / (data.Take || intf.rowsPerPage)) + 1;\r\n\r\n                page = data.Page;\r\n                totalCount = data.TotalCount;\r\n\r\n                setItems(data.Entities);\r\n\r\n                onPagingInfoChanged.notify(getPagingInfo());\r\n            }\r\n\r\n            function populate() {\r\n                if (populateLocks > 0) {\r\n                    populateCalls++;\r\n                    return;\r\n                }\r\n\r\n                populateCalls = 0;\r\n\r\n                loading && loading.abort();\r\n\r\n                if (intf.onSubmit) {\r\n                    var gh = intf.onSubmit(intf);\r\n                    if (gh === false)\r\n                        return false;\r\n                }\r\n\r\n                onDataLoading.notify(this);\r\n\r\n                if (!intf.url)\r\n                    return false;\r\n\r\n                // set loading event\r\n            \r\n                if (!intf.seekToPage)\r\n                    intf.seekToPage = 1;\r\n\r\n                var request: Serenity.ListRequest = {};\r\n\r\n                var skip = (intf.seekToPage - 1) * intf.rowsPerPage;\r\n                if (skip)\r\n                    request.Skip = skip;\r\n                if (intf.rowsPerPage)\r\n                    request.Take = intf.rowsPerPage;\r\n\r\n                if (intf.sortBy && intf.sortBy.length) {\r\n                    if ($.isArray(intf.sortBy))\r\n                        request.Sort = intf.sortBy;\r\n                    else {\r\n                        request.Sort = [intf.sortBy];\r\n                    }\r\n                }\r\n\r\n                if (intf.params) {\r\n                    request = $.extend(request, intf.params);\r\n                }\r\n\r\n                var dt = dataType;\r\n\r\n                var self = this;\r\n                var ajaxOptions = {\r\n                    cache: false,\r\n                    type: intf.method,\r\n                    contentType: contentType,\r\n                    url: intf.url,\r\n                    data: request,\r\n                    dataType: dt,\r\n                    success: function (response: Serenity.ServiceResponse) {\r\n                        loading = false;\r\n                        if (response.Error)\r\n                            Q.notifyError(response.Error.Message || response.Error.Code);\r\n                        else\r\n                            addData(response);\r\n                        onDataLoaded.notify(this);\r\n                    },\r\n                    error: function (xhr: any, status: any, ev: any) {\r\n                        loading = false;\r\n\r\n                        if ((xhr.getResponseHeader(\"content-type\") || '').toLowerCase().indexOf(\"application/json\") >= 0) {\r\n                            var json = $.parseJSON(xhr.responseText);\r\n                            if (json != null && json.Error != null) {\r\n                                Q.notifyError(json.Error.Message || json.Error.Code);\r\n                                onPagingInfoChanged.notify(getPagingInfo());\r\n                                onDataLoaded.notify(this);\r\n                                return;\r\n                            }\r\n                        }\r\n\r\n                        errorMessage = xhr.errormsg;\r\n                        onPagingInfoChanged.notify(getPagingInfo());\r\n                        onDataLoaded.notify(this);\r\n                    },\r\n                    complete: function () {\r\n                        loading = false;\r\n                    }\r\n                }\r\n\r\n                if (intf.onAjaxCall) {\r\n                    var ah = intf.onAjaxCall(this, ajaxOptions);\r\n                    if (ah === false) {\r\n                        loading = false;\r\n                        onPagingInfoChanged.notify(getPagingInfo());\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n                ajaxOptions.data = (<any>$).toJSON(ajaxOptions.data);\r\n\r\n                onPagingInfoChanged.notify(getPagingInfo());\r\n                loading = $.ajax(ajaxOptions);\r\n            }\r\n\r\n            function populateLock() {\r\n                if (populateLocks == 0)\r\n                    populateCalls = 0;\r\n                populateLocks++;\r\n            }\r\n\r\n            function populateUnlock() {\r\n                if (populateLocks > 0) {\r\n                    populateLocks--;\r\n                    if (populateLocks == 0 && populateCalls > 0)\r\n                        populate();\r\n                }\r\n            }\r\n\r\n            intf = {\r\n                // methods\r\n                \"beginUpdate\": beginUpdate,\r\n                \"endUpdate\": endUpdate,\r\n                \"setPagingOptions\": setPagingOptions,\r\n                \"getPagingInfo\": getPagingInfo,\r\n                \"getRows\": getRows,\r\n                \"getItems\": getItems,\r\n                \"setItems\": setItems,\r\n                \"setFilter\": setFilter,\r\n                \"sort\": sort,\n                \"fastSort\": fastSort,\n                \"reSort\": reSort,\n                \"setSummaryOptions\": setSummaryOptions,\n                \"getGrandTotals\": getGrandTotals,\n                \"setGrouping\": setGrouping,\n                \"getGrouping\": getGrouping,\n                \"collapseAllGroups\": collapseAllGroups,\n                \"expandAllGroups\": expandAllGroups,\n                \"collapseGroup\": collapseGroup,\n                \"expandGroup\": expandGroup,\n                \"getGroups\": getGroups,\n                \"getIdxById\": getIdxById,\r\n                \"getRowById\": getRowById,\r\n                \"getItemById\": getItemById,\r\n                \"getItemByIdx\": getItemByIdx,\r\n                \"mapRowsToIds\": mapRowsToIds,\n                \"mapIdsToRows\": mapIdsToRows,\n                \"setRefreshHints\": setRefreshHints,\n                \"setFilterArgs\": setFilterArgs,\n                \"refresh\": refresh,\r\n                \"updateItem\": updateItem,\r\n                \"insertItem\": insertItem,\r\n                \"addItem\": addItem,\r\n                \"deleteItem\": deleteItem,\r\n                \"syncGridSelection\": syncGridSelection,\n                \"syncGridCellCssStyles\": syncGridCellCssStyles,\n\n                \"getLength\": getLength,\n                \"getItem\": getItem,\n                \"getItemMetadata\": getItemMetadata,\n\n                \"onRowCountChanged\": onRowCountChanged,\r\n                \"onRowsChanged\": onRowsChanged,\r\n                \"onPagingInfoChanged\": onPagingInfoChanged,\r\n\n                \"addData\": addData,\r\n                \"populate\": populate,\r\n                \"populateLock\": populateLock,\r\n                \"populateUnlock\": populateUnlock,\r\n                \"onDataChanged\": onDataChanged,\r\n                \"onDataLoaded\": onDataLoaded,\r\n                \"onDataLoading\": onDataLoading\r\n            };\r\n\r\n            idProperty = options.idField || 'id';\r\n            contentType = options.contentType || \"application/json\";\r\n            dataType = options.dataType || 'json';\r\n            filter = options.filter || null;\r\n\r\n            intf.params = options.params || {};\r\n            intf.onSubmit = options.onSubmit || null;\r\n            intf.url = options.url || null;\r\n            intf.rowsPerPage = options.rowsPerPage || 0;\r\n            intf.seekToPage = options.seekToPage || 1;\r\n            intf.onAjaxCall = options.onAjaxCall || null;\r\n            intf.onProcessData = options.onProcessData || null;\r\n            intf.method = options.method || 'POST';\r\n            intf.errormsg = intf.errormsg || Q.text(\"Controls.Pager.DefaultLoadError\");\r\n            intf.sortBy = options.sortBy || [];\r\n            intf.idField = idProperty;\r\n\r\n            if (options.url && options.autoLoad) {\r\n                populate();\r\n            }\r\n\r\n            return intf;\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Slick.Aggregators\r\n{\r\n    export function Avg(field: string): void {\n        this.field_ = field;\n\n        this.init = function () {\n            this.count_ = 0;\n            this.nonNullCount_ = 0;\n            this.sum_ = 0;\n        };\n\n        this.accumulate = function (item: any) {\n            var val = item[this.field_];\n            this.count_++;\n            if (val != null && val !== \"\" && !isNaN(val)) {\n                this.nonNullCount_++;\n                this.sum_ += parseFloat(val);\n            }\n        };\n\n        this.storeResult = function (groupTotals: any) {\n            if (!groupTotals.avg) {\n                groupTotals.avg = {};\n            }\n            if (this.nonNullCount_ != 0) {\n                groupTotals.avg[this.field_] = this.sum_ / this.nonNullCount_;\n            }\n        };\n    }\n\n    export function WeightedAvg(field: string, weightedField: string) {\n        this.field_ = field;\n        this.weightedField_ = weightedField;\n\n        this.init = function () {\n            this.sum_ = 0;\n            this.weightedSum_ = 0;\n        };\n\n        this.accumulate = function (item: any) {\n            var val = item[this.field_];\n            var valWeighted = item[this.weightedField_];\n            if (this.isValid(val) && this.isValid(valWeighted)) {\n                this.weightedSum_ += parseFloat(valWeighted);\n                this.sum_ += parseFloat(val) * parseFloat(valWeighted);\n            }\n        };\n\n        this.storeResult = function (groupTotals: any) {\n            if (!groupTotals.avg) {\n                groupTotals.avg = {};\n            }\n\n            if (this.sum_ && this.weightedSum_) {\n                groupTotals.avg[this.field_] = this.sum_ / this.weightedSum_;\n            }\n        };\n\n        this.isValid = function (val: any) {\n            return val !== null && val !== \"\" && !isNaN(val);\n        };\n    }\n\n    export function Min(field: string): void {\n        this.field_ = field;\n\n        this.init = function () {\n            this.min_ = null;\n        };\n\n        this.accumulate = function (item: any) {\n            var val = item[this.field_];\n            if (val != null && val !== \"\" && !isNaN(val)) {\n                if (this.min_ == null || val < this.min_) {\n                    this.min_ = val;\n                }\n            }\n        };\n\n        this.storeResult = function (groupTotals: any) {\n            if (!groupTotals.min) {\n                groupTotals.min = {};\n            }\n            groupTotals.min[this.field_] = this.min_;\n        }\n    }\n\n    export function Max(field: string): void {\n        this.field_ = field;\n\n        this.init = function () {\n            this.max_ = null;\n        };\n\n        this.accumulate = function (item: any) {\n            var val = item[this.field_];\n            if (val != null && val !== \"\" && !isNaN(val)) {\n                if (this.max_ == null || val > this.max_) {\n                    this.max_ = val;\n                }\n            }\n        };\n\n        this.storeResult = function (groupTotals: any) {\n            if (!groupTotals.max) {\n                groupTotals.max = {};\n            }\n            groupTotals.max[this.field_] = this.max_;\n        }\n    }\n\n    export function Sum(field: string): void {\n        this.field_ = field;\n\n        this.init = function () {\n            this.sum_ = null;\n        };\n\n        this.accumulate = function (item: any) {\n            var val = item[this.field_];\n            if (val != null && val !== \"\" && !isNaN(val)) {\n                this.sum_ += parseFloat(val);\n            }\n        };\n\n        this.storeResult = function (groupTotals: any) {\n            if (!groupTotals.sum) {\n                groupTotals.sum = {};\n            }\n            groupTotals.sum[this.field_] = this.sum_;\n        }\n    }\n}","declare var Vue: any;\r\n\r\nnamespace Q {\r\n\r\n    let oldShowLabel: (e: HTMLElement, message: string) => void;\r\n\r\n    function validateShowLabel(element: HTMLElement, message: string) {\r\n        oldShowLabel.call(this, element, message);\r\n        this.errorsFor(element).each(function (i: number, e: any) {\r\n\r\n            if ($(element).hasClass('error'))\r\n                $(e).removeClass('checked');\r\n\r\n            $(e).attr('title', $(e).text());\r\n        });\r\n    };\r\n\r\n    function registerCustomValidationMethods() {\r\n        if ($.validator.methods['customValidate'] == null) {\r\n            ($.validator as any).addMethod('customValidate', function (value: any, element: any) {\r\n                var result = this.optional(element);\r\n                if (element == null || !!result) {\r\n                    return result;\r\n                }\r\n                var events = ($ as any)._data(element, 'events');\r\n                if (!events) {\r\n                    return true;\r\n                }\r\n                var handlers = events.customValidate;\r\n                if (handlers == null || handlers.length === 0) {\r\n                    return true;\r\n                }\r\n\r\n                var el = $(element);\r\n                for (var i = 0; !!(i < handlers.length); i++) {\r\n                    var handler = (ss as any).safeCast(handlers[i].handler, Function);\r\n                    if (handler) {\r\n                        var message = handler(el);\r\n                        if (message != null) {\r\n                            el.data('customValidationMessage', message);\r\n                            return false;\r\n                        }\r\n                    }\r\n                }\r\n                return true;\r\n            }, function (o: any, e: any) {\r\n                return $(e).data('customValidationMessage');\r\n            });\r\n        }\r\n    }\r\n\r\n    function jQueryValidationInitialization() {\r\n        registerCustomValidationMethods();\r\n\r\n        let p: any = $.validator;\r\n        p = p.prototype;\r\n        oldShowLabel = p.showLabel;\r\n        p.showLabel = validateShowLabel;\r\n\r\n        $.validator.addMethod(\"dateQ\", function (value, element) {\r\n            var o = this.optional(element);\r\n            if (o)\r\n                return o;\r\n\r\n            var d = parseDate(value);\r\n            if (!d)\r\n                return false;\r\n\r\n            var z = new Date(d);\r\n            z.setHours(0, 0, 0, 0);\r\n            return z.getTime() === d.getTime();\r\n        });\r\n\r\n        $.validator.addMethod(\"hourAndMin\", function (value, element) {\r\n            return this.optional(element) || !isNaN(parseHourAndMin(value));\r\n        });\r\n\r\n        $.validator.addMethod(\"dayHourAndMin\", function (value, element) {\r\n            return this.optional(element) || !isNaN(parseDayHourAndMin(value));\r\n        });\r\n\r\n        $.validator.addMethod(\"decimalQ\", function (value, element) {\r\n            return this.optional(element) || !isNaN(parseDecimal(value));\r\n        });\r\n\r\n        $.validator.addMethod(\"integerQ\", function (value, element) {\r\n            return this.optional(element) || !isNaN(parseInteger(value));\r\n        });\r\n\r\n        let oldEmail = $.validator.methods['email'];\r\n        $.validator.addMethod(\"email\", function (value, element) {\r\n            if (!Q.Config.emailAllowOnlyAscii)\r\n                return oldEmail.call(this, value, element);\r\n            return this.optional(element) || /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(value);\r\n        });\r\n\r\n        $.validator.addMethod(\"emailMultiple\", function (value, element) {\r\n            let result = this.optional(element);\r\n            if (result)\r\n                return result;\r\n            if (value.indexOf(';') >= 0)\r\n                value = value.split(';');\r\n            else\r\n                value = value.split(',');\r\n            for (let i = 0; i < value.length; i++) {\r\n                result = $.validator.methods['email'].call(this, value[i], element);\r\n                if (!result)\r\n                    return result;\r\n            }\r\n            return result;\r\n        });\r\n\r\n        $.validator.addMethod(\"anyvalue\", function (value, element) {\r\n            return true;\r\n        });\r\n\r\n        let d = (<any>$.validator).defaults;\r\n\r\n        d.ignoreTitle = true;\r\n        d.onchange = function (element: any) {\r\n            this.element(element);\r\n        };\r\n        p.oldinit = p.init;\r\n        p.init = function () {\r\n            p.oldinit.call(this);\r\n            function changeDelegate(event: any) {\r\n                if (this.form == null)\r\n                    return;\r\n                let validator = $.data(this.form, \"validator\"), eventType = \"on\" + event.type.replace(/^validate/, \"\");\r\n                validator && validator.settings[eventType] && validator.settings[eventType].call(validator, this);\r\n            }\r\n            function delegate(event: any) {\r\n                let el = this[0];\r\n                if (!$.data(el, 'changebound')) {\r\n                    $(el).change(changeDelegate);\r\n                    $.data(el, 'changebound', true);\r\n                }\r\n            }\r\n            $(this.currentForm)\r\n                .on(\":text, :password, :file, select, textarea\", \"focusin.validate\", delegate);\r\n        };\r\n        p.oldfocusInvalid = p.focusInvalid;\r\n        p.focusInvalid = function () {\r\n            if (this.settings.abortHandler)\r\n                this.settings.abortHandler(this);\r\n            this.oldfocusInvalid.call(this);\r\n        };\r\n        p.oldstopRequest = p.focusInvalid;\r\n        p.stopRequest = function (element: any, valid: boolean) {\r\n            let formSubmitted = this.formSubmitted;\r\n            this.oldfocusInvalid.call(this, [element, valid]);\r\n            if (!valid && this.pendingRequest == 0 && formSubmitted && this.settings.abortHandler) {\r\n                this.settings.abortHandler(this);\r\n            }\r\n        };\r\n        p.resetAll = function () {\r\n            this.submitted = {};\r\n            this.prepareForm();\r\n            this.hideErrors();\r\n            this.elements().removeClass(this.settings.errorClass);\r\n        };\r\n        jQuery(function () {\r\n            $.extend($.validator.messages, {\r\n                email: Q.text(\"Validation.Email\"),\r\n                required: Q.text(\"Validation.Required\"),\r\n                minlength: Q.text(\"Validation.MinLength\"),\r\n                maxlength: Q.text(\"Validation.MaxLength\"),\r\n                digits: Q.text(\"Validation.Digits\"),\r\n                range: Q.text(\"Validation.Range\"),\r\n                xss: Q.text(\"Validation.Xss\"),\r\n                dateQ: Q.text(\"Validation.DateInvalid\"),\r\n                decimalQ: Q.text(\"Validation.Decimal\"),\r\n                integerQ: Q.text(\"Validation.Integer\"),\r\n                url: Q.text(\"Validation.Url\")\r\n            });\r\n        });\r\n    };\r\n\r\n    export function validatorAbortHandler(validator: any) {\r\n        validator.settings.abortHandler = null;\r\n        validator.settings.submitHandler = function () {\r\n            return false;\r\n        };\r\n    };\r\n\r\n    export function validateOptions(options: JQueryValidation.ValidationOptions) {\r\n        return $.extend({\r\n            ignore: \":hidden\",\r\n            meta: 'v',\r\n            errorClass: 'error',\r\n            errorPlacement: function (error: any, element: any) {\r\n                let field: any = null;\r\n                let vx = element.attr('data-vx-id');\r\n                if (vx) {\r\n                    field = $('#' + vx);\r\n                    if (!field.length)\r\n                        field = null;\r\n                    else\r\n                        field = field[0];\r\n                }\r\n                if (field == null) {\r\n                    field = element.parents('div.field');\r\n                    if (field.length) {\r\n                        let inner = $('div.vx', field[0]);\r\n                        if (inner.length)\r\n                            field = inner[0];\r\n                    }\r\n                    else\r\n                        field = element.parent();\r\n                }\r\n                error.appendTo(field);\r\n            },\r\n            submitHandler: function () {\r\n                return false;\r\n            },\r\n            invalidHandler: function (event: any, validator: JQueryValidation.Validator) {\r\n                Q.notifyError(Q.text(\"Validation.InvalidFormMessage\"));\r\n\r\n                $(validator.errorList.map(x => x.element))\r\n                    .closest('.category.collapsed')\r\n                    .children('.category-title')\r\n                    .each((i, x) => {\r\n                        $(x).click();\r\n                        return true;\r\n                    });\r\n\r\n                if (validator.errorList.length)\r\n                {\r\n                    var el = validator.errorList[0].element;\r\n                    if (el) {\r\n                        var bsPane = $(el).closest('.tab-pane');\r\n                        if (!bsPane.hasClass(\"active\") &&\r\n                            bsPane.parent().hasClass('tab-content')) {\r\n                            var bsPaneId = bsPane.attr('id');\r\n                            if (bsPaneId) {\r\n                                $('a[href=\"#' + bsPaneId + '\"]').click();\r\n                            }\r\n                        }\r\n\r\n                        if ($.fn.tooltip) {\r\n                            $.fn.tooltip && ($(el) as any).tooltip({\r\n                                title: validator.errorList[0].message,\r\n                                trigger: 'manual'\r\n                            }).tooltip('show');\r\n\r\n                            window.setTimeout(function () {\r\n                                $(el).tooltip('destroy');\r\n                            }, 1500);\r\n                        }\r\n                    }\r\n                }\r\n            },\r\n            success: function (label: JQuery) {\r\n                label.addClass('checked');\r\n            }\r\n        }, options);\r\n    };\r\n\r\n    if (window['jQuery'] && window['jQuery']['validator'])\r\n        jQueryValidationInitialization();\r\n    else if (window['jQuery']) {\r\n        jQuery(function ($) {\r\n            if ($.validator)\r\n                jQueryValidationInitialization();\r\n        });\r\n    }\r\n\r\n    function jQueryDatepickerInitialization(): void {\r\n        let order = Q.Culture.dateOrder;\r\n        let s = Q.Culture.dateSeparator;\r\n        let culture = ($('html').attr('lang') || 'en').toLowerCase();\r\n        if (!$.datepicker.regional[culture]) {\r\n            culture = culture.split('-')[0];\r\n            if (!$.datepicker.regional[culture]) {\r\n                culture = 'en';\r\n            }\r\n        }\r\n        $.datepicker.setDefaults($.datepicker.regional['en']);\r\n        $.datepicker.setDefaults($.datepicker.regional[culture]);\r\n        $.datepicker.setDefaults({\r\n            dateFormat: (order == 'mdy' ? 'mm' + s + 'dd' + s + 'yy' :\r\n                (order == 'ymd' ? 'yy' + s + 'mm' + s + 'dd' :\r\n                    'dd' + s + 'mm' + s + 'yy')),\r\n            buttonImage: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuNvyMY98AAAHNSURBVEhLtZU/S8NAGIf7FfpJHDoX136ADp3s4qDgUpeCDlJEEIcubk7ZFJ06OBRcdJAOdhCx6CAWodJFrP8KFexrnhcv3sVLVYyBp/fLXe75hbSkGRFxaLVaEgSBMMbXkpi0Rz8eVlbkrlhUdnM56XQ6Opq57/DtwRkVMCFMhJzn89JoNHQ0c9/h26NOU3BdKMh4eVneFhflcGpK1rNZHTn/CfE9uHA6BSyMFhZkODsrt2E7I+c/Ib4Hl1NwOT0dXcgx2N6Wh+FQx16vp/O/ARdO3FrAs2PhcWZGm3l+9sj8b8Cl34ddwMKgVEoFXE5BUK9zkurx4fwseBuPUyWxYKfZTCQIf+txtvb2HLwFm7WaTg5fX1V0cnWlxPPR2ZmC2GSkB+22QsaBC6dTwMLzaPTnAhy4vhSwcP/yEl1s2D8+ngjFNjhwJRZwt9wB2Jm79WVuws4TC3qDgUrJYGekvozUzjjITsFGtarNpsBw2u0654ghnhEbcODCmVjAewjsjMyXkdo5seDm6Uku+n2VcgHYGakvI7UzDlxOwWql4hT4QOoDqY0pwBkVLM3NRQVpgAtnVFApl3UyTXBGBWvhX9x8+JpNE5xRwf8hmXe+7B9dZrOuOwAAAABJRU5ErkJggg==',\r\n            buttonImageOnly: true,\r\n            showOn: 'both',\r\n            showButtonPanel: true,\r\n            changeMonth: true,\r\n            changeYear: true\r\n        });\r\n    };\r\n\r\n    if (window['jQuery'] &&\r\n        window['jQuery']['datepicker'] &&\r\n        window['jQuery']['datepicker']['regional'] &&\r\n        window['jQuery']['datepicker']['regional']['en']) {\r\n        jQueryDatepickerInitialization();\r\n    }\r\n    else {\r\n        jQuery(function ($) {\r\n            if ($.datepicker)\r\n                jQueryDatepickerInitialization();\r\n        });\r\n    }\r\n\r\n    function jQueryUIInitialization(): void {\r\n        $.ui.dialog.prototype._allowInteraction = function (event: any) {\r\n            if ($(event.target).closest(\".ui-dialog\").length) {\r\n                return true;\r\n            }\r\n            return !!$(event.target).closest(\".ui-datepicker, .select2-drop, .cke, .cke_dialog, #support-modal\").length;\r\n        };\r\n\r\n        (function (orig) {\r\n            $.ui.dialog.prototype._focusTabbable = function () {\r\n                if ($(document.body).hasClass('mobile-device')) {\r\n                    this.uiDialog && this.uiDialog.focus();\r\n                    return;\r\n                }\r\n                orig.call(this);\r\n            }\r\n        })($.ui.dialog.prototype._focusTabbable);\r\n\r\n        (function (orig) {\r\n            $.ui.dialog.prototype._createTitlebar = function () {\r\n                orig.call(this);\r\n                this.uiDialogTitlebar.find('.ui-dialog-titlebar-close').html('<i class=\"fa fa-times\" />');\r\n            }\r\n        })($.ui.dialog.prototype._createTitlebar);\r\n    };\r\n\r\n    if (jQuery.ui) {\r\n        jQueryUIInitialization();\r\n    }\r\n    else {\r\n        jQuery(function () {\r\n            if (jQuery.ui)\r\n                jQueryUIInitialization();\r\n        });\r\n    }\r\n\r\n    (jQuery as any).cleanData = (function (orig) {\n        return function (elems: any[]) {\n            var events, elem, i, e;\n            var cloned = elems;\n            for (i = 0; (elem = cloned[i]) != null; i++) {\n                try {\n                    events = ($ as any)._data(elem, \"events\");\n                    if (events && events.remove) {\n                        // html collection might change during remove event, so clone it!\n                        if (cloned === elems)\n                            cloned = Array.prototype.slice.call(elems);\n                        $(elem).triggerHandler(\"remove\");\n                        delete events.remove;\n                    }\n                } catch (e) { }\n            }\n            orig(elems);\n        };\n    })((jQuery as any).cleanData);\n\r\n    function ssExceptionInitialization() {\r\n        ss.Exception.prototype.toString = function () {\r\n            return this.get_message();\r\n        };\r\n    };\r\n\r\n    if (ss && ss.Exception)\r\n        ssExceptionInitialization();\r\n    else {\r\n        jQuery(function ($) {\r\n            if (ss && ss.Exception)\r\n                ssExceptionInitialization();\r\n        });\r\n    }\r\n\r\n    function vueInitialization() {\r\n        Vue.component('editor', {\r\n            props: {\r\n                type: {\r\n                    type: String,\r\n                    required: true,                    \r\n                },\r\n                id: {\r\n                    type: String,\r\n                    required: false\r\n                },\r\n                name: {\r\n                    type: String,\r\n                    required: false\r\n                },\r\n                placeholder: {\r\n                    type: String,\r\n                    required: false\r\n                },\r\n                value: {\r\n                    required: false\r\n                },\r\n                options: {\r\n                    required: false\r\n                },\r\n                maxLength: {\r\n                    required: false\r\n                }\r\n            },\r\n            render: function (createElement: any) {\r\n                var editorType = Serenity.EditorTypeRegistry.get(this.type);\r\n                var elementAttr = (ss as any).getAttributes(editorType, Serenity.ElementAttribute, true);\r\n                var elementHtml = ((elementAttr.length > 0) ? elementAttr[0].value : '<input/>') as string;\r\n                var domProps: any = {};\r\n                var element = $(elementHtml)[0];\r\n                var attrs = element.attributes;\r\n                for (var i = 0; i < attrs.length; i++) {\r\n                    var attr = attrs.item(i);\r\n                    domProps[attr.name] = attr.value;\r\n                }\r\n\r\n                if (this.id != null)\r\n                    domProps.id = this.id;\r\n\r\n                if (this.name != null)\r\n                    domProps.name = this.name;\r\n\r\n                if (this.placeholder != null)\r\n                    domProps.placeholder = this.placeholder;\r\n\r\n                var editorParams = this.options;\r\n                var optionsType: any = null;\r\n\r\n                var self = this\r\n                var el = createElement(element.tagName, {\r\n                    domProps: domProps\r\n                });\r\n\r\n                this.$editorType = editorType;\r\n\r\n                return el;\r\n            },\r\n            watch: {\r\n                value: function (v: any) {\r\n                    Serenity.EditorUtils.setValue(this.$widget, v);\r\n                }\r\n            },\r\n            mounted: function () {\r\n                var self = this;\r\n\r\n                this.$widget = new this.$editorType($(this.$el), this.options);\r\n                this.$widget.initialize();\r\n\r\n                if (this.maxLength) {\r\n                    (Serenity.PropertyGrid as any).$setMaxLength(this.$widget, this.maxLength);\r\n                }\r\n\r\n                if (this.options)\r\n                    Serenity.ReflectionOptionsSetter.set(this.$widget, this.options);\r\n\r\n                if (this.value != null)\r\n                    Serenity.EditorUtils.setValue(this.$widget, this.value);\r\n\r\n                if ($(this.$el).data('select2'))\r\n                    Serenity.WX.changeSelect2(this.$widget, function () {\r\n                        self.$emit('input', Serenity.EditorUtils.getValue(self.$widget));\r\n                    });\r\n                else\r\n                    Serenity.WX.change(this.$widget, function () {\r\n                        self.$emit('input', Serenity.EditorUtils.getValue(self.$widget));\r\n                    });\r\n            },\r\n            destroyed: function () {\r\n                if (this.$widget) {\r\n                    this.$widget.destroy();\r\n                    this.$widget = null;\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    window['Vue'] ? vueInitialization() : $(function () { window['Vue'] && vueInitialization(); });\r\n}\r\n","namespace Serenity {\r\n\r\n    @Serenity.Decorators.registerEditor('Serenity.AsyncLookupEditor',\r\n        [Serenity.ISetEditValue, Serenity.IGetEditValue, Serenity.IStringValue, Serenity.IReadOnly, Serenity.IAsyncInit])\r\n    export class AsyncLookupEditor extends LookupEditorBase<LookupEditorOptions, any> {\r\n        constructor(hidden: JQuery, opt: LookupEditorOptions) {\r\n            super(hidden, opt);\r\n        }\r\n\r\n        getLookupKey() {\r\n            return Q.coalesce(this.options.lookupKey, super.getLookupKey());\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Serenity {\r\n    @Serenity.Decorators.registerClass('Serenity.CascadedWidgetLink')\r\n    export class CascadedWidgetLink<TParent extends Widget<any>> {\r\n\r\n        constructor(private parentType: { new(...args: any[]): TParent },\r\n            private widget: Serenity.Widget<any>,\r\n            private parentChange: (p1: TParent) => void) {\r\n            this.bind();\r\n            this.widget.element.bind('remove.' + (widget as any).uniqueName + 'cwh', e => {\r\n                this.unbind();\r\n                this.widget = null;\r\n                this.parentChange = null;\r\n            });\r\n        }\r\n\r\n        private _parentID: string;\r\n\r\n        bind() {\r\n\r\n            if (Q.isEmptyOrNull(this._parentID)) {\r\n                return null;\r\n            }\r\n\r\n            var parent = Q.findElementWithRelativeId(this.widget.element, this._parentID)\r\n                .tryGetWidget(this.parentType);\r\n\r\n            if (parent != null) {\r\n                parent.element.bind('change.' + (this.widget as any).uniqueName, () => {\r\n                    this.parentChange(parent);\r\n                });\r\n                return parent;\r\n            }\r\n\t\t\telse {\r\n                Q.notifyError(\"Can't find cascaded parent element with ID: \" + this._parentID + '!', '', null);\r\n                return null;\r\n            }\r\n        }\r\n\r\n        unbind() {\r\n\r\n            if (Q.isEmptyOrNull(this._parentID)) {\r\n                return null;\r\n            }\r\n\r\n\t\t\tvar parent = Q.findElementWithRelativeId(this.widget.element, this._parentID).tryGetWidget(this.parentType);\r\n\r\n            if (parent != null) {\r\n                parent.element.unbind('.' + (this.widget as any).uniqueName);\r\n            }\r\n\r\n\t\t\treturn parent;\r\n        }\r\n\r\n        get_parentID() {\r\n            return this._parentID;\r\n        }\r\n\r\n        set_parentID(value: string) {\r\n\r\n            if (this._parentID !== value) {\r\n                this.unbind();\r\n                this._parentID = value;\r\n                this.bind();\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\nnamespace Serenity.DialogExtensions {\r\n    export function dialogFlexify(dialog: JQuery): JQuery {\r\n        var flexify = new Serenity.Flexify(dialog.closest('.ui-dialog'), {});\r\n        return dialog;\r\n    }\r\n\r\n    export function dialogResizable(dialog: JQuery, w?: any, h?: any, mw?: any, mh?: any): JQuery {\r\n        var dlg = dialog.dialog();\r\n        dlg.dialog('option', 'resizable', true);\r\n        if (mw != null) {\r\n            dlg.dialog('option', 'minWidth', mw);\r\n        }\r\n        if (w != null) {\r\n            dlg.dialog('option', 'width', w);\r\n        }\r\n        if (mh != null) {\r\n            dlg.dialog('option', 'minHeight', mh);\r\n        }\r\n        if (h != null) {\r\n            dlg.dialog('option', 'height', h);\r\n        }\r\n        return dialog;\r\n    }\r\n\r\n    export function dialogMaximizable(dialog: JQuery): JQuery {\r\n        (dialog as any).dialogExtend({\r\n            closable: true,\r\n            maximizable: true,\r\n            dblclick: 'maximize',\r\n            icons: { maximize: 'ui-icon-maximize-window' }\r\n        });\r\n\r\n        return dialog;\r\n    }\r\n\r\n    export function dialogCloseOnEnter(dialog: JQuery): JQuery {\r\n        dialog.bind('keydown', function (e) {\r\n            if (e.which !== 13) {\r\n                return;\r\n            }\r\n            var tagName = e.target.tagName.toLowerCase();\r\n            if (tagName === 'button' || tagName === 'select' || tagName === 'textarea' ||\r\n                tagName === 'input' && e.target.getAttribute('type') === 'button') {\r\n                return;\r\n            }\r\n            var dlg = $(this);\r\n            if (!dlg.hasClass('ui-dialog')) {\r\n                dlg = dlg.closest('.ui-dialog');\r\n            }\r\n            var buttons = dlg.children('.ui-dialog-buttonpane').find('button');\r\n            if (buttons.length > 0) {\r\n                var defaultButton = buttons.find('.default-button');\r\n                if (defaultButton.length > 0) {\r\n                    buttons = defaultButton;\r\n                }\r\n            }\r\n            var button = buttons.eq(0);\r\n            if (!button.is(':disabled')) {\r\n                e.preventDefault();\r\n                button.trigger('click');\r\n            }\r\n        });\r\n        return dialog;\r\n    }\r\n}\r\n\r\nnamespace Serenity.DialogTypeRegistry {\r\n    function search(typeName: string) {\r\n\r\n        var dialogType = (ss as any).getType(typeName);\r\n        if (dialogType != null && (ss as any).isAssignableFrom(Serenity.IDialog, dialogType)) {\r\n            return dialogType;\r\n        }\r\n\r\n        for (var ns of Q.Config.rootNamespaces) {\r\n            dialogType = (ss as any).getType(ns + '.' + typeName);\r\n            if (dialogType != null && (ss as any).isAssignableFrom(Serenity.IDialog, dialogType)) {\r\n                return dialogType;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    var knownTypes: Q.Dictionary<WidgetDialogClass> = {};\r\n\r\n    export function tryGet(key: string): WidgetDialogClass {\r\n        if (knownTypes[key] == null) {\r\n            var typeName = key;\r\n            var dialogType = search(typeName);\r\n\r\n            if (dialogType == null && !Q.endsWith(key, 'Dialog')) {\r\n                typeName = key + 'Dialog';\r\n                dialogType = search(typeName);\r\n            }\r\n\r\n            if (dialogType == null) {\r\n                return null;\r\n            }\r\n\r\n            knownTypes[key] = dialogType;\r\n            return dialogType;\r\n        }\r\n\r\n        return knownTypes[key];\r\n    }\r\n\r\n    export function get(key: string): WidgetDialogClass {\r\n\r\n        var type = tryGet(key);\r\n\r\n        if (type == null) {\r\n            var message = key + ' dialog class is not found! Make sure there is a dialog class with this name, ' +\r\n                'it is under your project root namespace, and your namespace parts start with capital letters, ' +\r\n                'e.g. MyProject.Pascal.Cased namespace. If you got this error from an editor with InplaceAdd option ' +\r\n                'check that lookup key and dialog type name matches (case sensitive, excluding Dialog suffix). ' +\r\n                \"You need to change lookup key or specify DialogType property in LookupEditor attribute if that's not the case.\";\r\n\r\n            Q.notifyError(message, '', null);\r\n\r\n            throw new ss.Exception(message);\r\n        }\r\n\r\n        return type;\r\n    }\r\n}"]}