diff --git a/documents/CLodopPrint_Setup_for_Win32NT_2.042.exe b/documents/CLodopPrint_Setup_for_Win32NT_2.042.exe new file mode 100644 index 0000000..661afe2 Binary files /dev/null and b/documents/CLodopPrint_Setup_for_Win32NT_2.042.exe differ diff --git a/documents/haixian.pdm b/documents/haixian.pdm new file mode 100644 index 0000000..5476ba8 --- /dev/null +++ b/documents/haixian.pdm @@ -0,0 +1,8549 @@ + + + + + + + + + +7A5F12AC-80F5-4D0A-8715-B17926B78762 +order +order +1458094228 +Administrator +1459093351 +Administrator +[FolderOptions] + +[FolderOptions\Physical Objects] +GenerationCheckModel=Yes +GenerationPath= +GenerationOptions= +GenerationTasks= +GenerationTargets= +GenerationSelections= +RevPkey=Yes +RevFkey=Yes +RevAkey=Yes +RevCheck=Yes +RevIndx=Yes +RevOpts=Yes +RevViewAsTabl=No +RevViewOpts=Yes +RevSystAsTabl=Yes +RevTablPerm=No +RevViewPerm=No +RevProcPerm=No +RevDbpkPerm=No +RevSqncPerm=No +RevAdtPerm=No +RevUserPriv=No +RevUserOpts=No +RevGrpePriv=No +RevRolePriv=No +RevDtbsOpts=Yes +RevDtbsPerm=No +RevViewIndx=Yes +RevJidxOpts=Yes +RevStats=No +RevTspcPerm=No +RevCaseSensitive=No +GenTrgrStdMsg=Yes +GenTrgrMsgTab= +GenTrgrMsgNo= +GenTrgrMsgTxt= +TrgrPreserve=No +TrgrIns=Yes +TrgrUpd=Yes +TrgrDel=Yes +TrgrC2Ins=Yes +TrgrC2Upd=Yes +TrgrC3=Yes +TrgrC4=Yes +TrgrC5=Yes +TrgrC6=Yes +TrgrC7=Yes +TrgrC8=Yes +TrgrC9=Yes +TrgrC10=Yes +TrgrC11=Yes +TrgrC1=Yes +TrgrC12Ins=Yes +TrgrC12Upd=Yes +TrgrC13=Yes +UpdateTableStatistics=Yes +UpdateColumnStatistics=Yes + +[FolderOptions\Physical Objects\Database Generation] +GenScriptName=order.sql +GenScriptName0= +GenScriptName1= +GenScriptName2= +GenScriptName3= +GenScriptName4= +GenScriptName5= +GenScriptName6= +GenScriptName7= +GenScriptName8= +GenScriptName9= +GenPathName=E:\项目\海鲜配送系统\ +GenSingleFile=Yes +GenODBC=No +GenCheckModel=Yes +GenScriptPrev=Yes +GenArchiveModel=No +GenUseSync=No +GenSyncChoice=0 +GenSyncArch= +GenSyncRmg=0 + +[FolderOptions\Physical Objects\Database Generation\Format] +GenScriptTitle=Yes +GenScriptNamLabl=No +GenScriptQDtbs=No +GenScriptQOwnr=Yes +GenScriptCase=0 +GenScriptEncoding=ANSI +GenScriptNAcct=No +IdentifierDelimiter=" + +[FolderOptions\Physical Objects\Database Generation\Database] +Create=Yes +Open=Yes +Close=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Database\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Tablespace] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Tablespace\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Storage] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\User] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\User\Create] +Physical Options=No + +[FolderOptions\Physical Objects\Database Generation\Group] +Create=Yes +Drop=Yes +Comment=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\Role] +Create=Yes +Drop=Yes +Privilege=No + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\UserDefinedDataType\Create] +Default value=Yes +Check=Yes + +[FolderOptions\Physical Objects\Database Generation\AbstractDataType] +Create=Yes +Header=Yes +Footer=Yes +Drop=Yes +Comment=Yes +Install JAVA class=Yes +Remove JAVA class=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Rule] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Default] +Create=Yes +Comment=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Sequence] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create] +Check=Yes +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Table\Create\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column] +User datatype=No +Default value=Yes +Check=Yes +Physical Options=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Column\Check] +Constraint declaration=No + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key] + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Primary key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Key\Alternate key\Create] +Constraint declaration=No +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Foreign key\Create] +Constraint declaration=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Create] +Constraint declaration=Yes +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Index\Filter] +Primary key=No +Foreign key=No +Alternate key=No +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Table&&Column\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\View] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\View\Create] +Force Column list=No +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewColumn] +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Create] +Physical Options=Yes + +[FolderOptions\Physical Objects\Database Generation\View\ViewIndex\Filter] +Cluster=Yes +Other=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\View\Trigger\Filter] +For insert=Yes +For update=Yes +For delete=Yes +For other=Yes + +[FolderOptions\Physical Objects\Database Generation\DBMSTrigger] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synonym\Filter] +Table=Yes +View=Yes +Proc=Yes +Synonym=Yes +Database Package=Yes +Sequence=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\JoinIndex\Create] +Physical Options=Yes +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\Procedure] +Create=Yes +Drop=Yes +Comment=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\Procedure\Create] +Header=Yes +Footer=Yes + +[FolderOptions\Physical Objects\Database Generation\DatabasePackage] +Create=Yes +Drop=Yes +Permission=No + +[FolderOptions\Physical Objects\Database Generation\WebService] +Create=Yes +Drop=Yes +Comment=Yes + +[FolderOptions\Physical Objects\Database Generation\Dimension] +Create=Yes +Drop=Yes + +[FolderOptions\Physical Objects\Database Generation\Synchronization] +GenBackupTabl=1 +GenKeepBackTabl=1 +GenTmpTablDrop=No +GenKeepTablOpts=No + +[FolderOptions\Physical Objects\Test Data] +GenDataPathName= +GenDataSinglefile=Yes +GenDataScriptName=testdata +GenDataScriptName0= +GenDataScriptName1= +GenDataScriptName2= +GenDataScriptName3= +GenDataScriptName4= +GenDataScriptName5= +GenDataScriptName6= +GenDataScriptName7= +GenDataScriptName8= +GenDataScriptName9= +GenDataOdbc=0 +GenDataDelOld=No +GenDataTitle=No +GenDataDefNumRows=20 +GenDataCommit=0 +GenDataPacket=0 +GenDataOwner=No +GenDataProfNumb= +GenDataProfChar= +GenDataProfDate= +GenDataCSVSeparator=, +GenDataFileFormat=CSV +GenDataUseWizard=No + +[FolderOptions\Pdm] +IndxIQName=%COLUMN%_%INDEXTYPE% +IndxPK=Yes +IndxFK=Yes +IndxAK=Yes +IndxPKName=%TABLE%_PK +IndxFKName=%REFR%_FK +IndxAKName=%AKEY%_AK +IndxPreserve=No +IndxThreshold=0 +IndxStats=No +RefrPreserve=No +JidxPreserve=No +RbldMultiFact=Yes +RbldMultiDim=Yes +RbldMultiJidx=Yes +CubePreserve=No +TablStProcPreserve=No +ProcDepPreserve=Yes +TrgrDepPreserve=Yes +CubeScriptPath= +CubeScriptCase=0 +CubeScriptEncoding=ANSI +CubeScriptNacct=No +CubeScriptHeader=No +CubeScriptExt=csv +CubeScriptExt0=txt +CubeScriptExt1= +CubeScriptExt2= +CubeScriptSep=, +CubeScriptDeli=" +EstimationYears=0 +DfltDomnName=D_%.U:VALUE% +DfltColnName=D_%.U:VALUE% +DfltReuse=Yes +DfltDrop=Yes + +[FolderOptions\CheckModel] + +[FolderOptions\CheckModel\Package] + +[FolderOptions\CheckModel\Package\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CheckPackageMissTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\DefaultCheckPackageMissTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CircularReference] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\ConstraintName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CnstMaxLen] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\CircularDependency] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Package\ShortcutUniqCode] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Table] + +[FolderOptions\CheckModel\Table\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\UniqIndex] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\MaxLen - NAME] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - COLNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - INDXCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - KEYCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\SerialColumnNumber] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyCollYesYes] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\TableIndexes] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\Mapping] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\MappingSFMap] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\EmptyColl - PERMCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Table\CheckTablePartitionKey] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableStartDate] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableRefNoLifecycle] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableSourceMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTablePartialColumnMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableKeyColumnMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\CheckTableNotOnLifecycleTablespace] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table\MYSQL50_Table_Table_storage_type] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column] + +[FolderOptions\CheckModel\Table.Column\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\DomainDivergence] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColumnMandatory] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckNumParam] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckPrecSupLng] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckUndefDttp] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\FkeyDttpDivergence] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\FkeyCheckDivergence] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColnSqncNoKey] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColnSqncDttp] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\SerialColumnFK] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\ColumnCompExpr] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckColumnOneToOneMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckColumnDataTypeMapping] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckColumnNoMapping] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\CheckDttpIncompatibleFormat] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\MYSQL50_Column_Auto_increment_key] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Column\MYSQL50_Column_Datatype_attributes] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index] + +[FolderOptions\CheckModel\Table.Index\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\EmptyColl - CIDXCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\UndefIndexType] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\IndexColumnCount] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\IQIndxHNGUniq] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\CheckIncludeColl - Tabl] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Index\MYSQL50_Index_Fulltext_indexes_validity] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key] + +[FolderOptions\CheckModel\Table.Key\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\EmptyColl - COLNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\CheckIncludeColl - Tabl] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Key\MultiKeySqnc] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger] + +[FolderOptions\CheckModel\Table.Trigger\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table.Trigger\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index] + +[FolderOptions\CheckModel\Join Index\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Join Index\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View] + +[FolderOptions\CheckModel\View\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View\EmptyColl - PERMCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\View.View Index] + +[FolderOptions\CheckModel\View.View Index\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\EmptyColl - CIDXCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\IndexColumnCount] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View.View Index\CheckIncludeColl - Tabl] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference] + +[FolderOptions\CheckModel\Reference\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\Reflexive] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\EmptyColl - RFJNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\IncompleteJoin] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Reference\JoinOrder] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference] + +[FolderOptions\CheckModel\View Reference\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\View Reference\EmptyColl - VRFJNCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain] + +[FolderOptions\CheckModel\Domain\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckNumParam] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckPrecSupLng] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckUndefDttp] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Domain\CheckDttpIncompatibleFormat] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default] + +[FolderOptions\CheckModel\Default\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DfltValeEmpty] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Default\DfltSameVale] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User] + +[FolderOptions\CheckModel\User\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\User\UniquePassword] +CheckSeverity=No +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Group] + +[FolderOptions\CheckModel\Group\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\EmptyColl - USERCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Group\UniquePassword] +CheckSeverity=No +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Role] + +[FolderOptions\CheckModel\Role\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Role\EmptyColl - USERCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure] + +[FolderOptions\CheckModel\Procedure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\ProcBodyEmpty] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Procedure\EmptyColl - PERMCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\DBMS Trigger] + +[FolderOptions\CheckModel\DBMS Trigger\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\DBMS Trigger\DbmsTriggerEvent] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source] + +[FolderOptions\CheckModel\Data Source\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\EmptyColl - MODLSRC] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\DtscTargets] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Source\CheckDataSourceModels] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning] + +[FolderOptions\CheckModel\Horizontal Partitioning\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning\EmptyColl - PARTCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Horizontal Partitioning\TargetTables] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning] + +[FolderOptions\CheckModel\Vertical Partitioning\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning\EmptyColl - PARTCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Vertical Partitioning\TargetTables] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing] + +[FolderOptions\CheckModel\Table Collapsing\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing\EmptyColl - TargetTable] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Table Collapsing\TargetTables] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact] + +[FolderOptions\CheckModel\Fact\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\EmptyColl - MEASCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\Mapping] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\MappingSFMap] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\EmptyColl - ALLOLINKCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact\CubeDupAssociation] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension] + +[FolderOptions\CheckModel\Dimension\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\EmptyColl - DATTRCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\EmptyColl - HIERCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DimnDupHierarchy] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\DimnDefHierarchy] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\Mapping] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\MappingSFMap] +CheckSeverity=No +FixRequested=Yes +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension\SerialColumnNumber] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association] + +[FolderOptions\CheckModel\Association\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Association\EmptyColl - Hierarchy] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute] + +[FolderOptions\CheckModel\Dimension.Attribute\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Attribute\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure] + +[FolderOptions\CheckModel\Fact.Measure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Fact.Measure\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy] + +[FolderOptions\CheckModel\Dimension.Hierarchy\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Dimension.Hierarchy\EmptyColl - DATTRCOL] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym] + +[FolderOptions\CheckModel\Synonym\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\MaxLen - NAME] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Synonym\EmptyColl - BASEOBJ] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type] + +[FolderOptions\CheckModel\Abstract Data Type\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\AdtInstantiable] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type\AdtAbstractUsed] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure] + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\AdtProcUniqName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Abstract Data Type.Abstract Data Type Procedure\ReturnDataType] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package] + +[FolderOptions\CheckModel\Database Package\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\MaxLen - NAME] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\EmptyColl - PROCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package\EmptyColl - CURCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package\EmptyColl - VARCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package\EmptyColl - TYPCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package\EmptyColl - EXCCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package.Database Package Procedure] + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\EmptyColl - PARM] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package.Database Package Procedure\ReturnDataType] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence] + +[FolderOptions\CheckModel\Sequence\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Sequence\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor] + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\ReturnDataType] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Cursor\EmptyColl - PARM] +CheckSeverity=Yes +FixRequested=No +CheckRequested=No + +[FolderOptions\CheckModel\Database Package.Database Package Variable] + +[FolderOptions\CheckModel\Database Package.Database Package Variable\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Variable\CheckUndefDttp] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type] + +[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Type\UniqueDefinition] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception] + +[FolderOptions\CheckModel\Database Package.Database Package Exception\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database Package.Database Package Exception\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace] + +[FolderOptions\CheckModel\Tablespace\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Tablespace\IsObjectUsed] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage] + +[FolderOptions\CheckModel\Storage\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Storage\IsObjectUsed] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database] + +[FolderOptions\CheckModel\Database\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Database\IsObjectUsed] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service] + +[FolderOptions\CheckModel\Web Service\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation] + +[FolderOptions\CheckModel\Web Service.Web Operation\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Web Service.Web Operation\MaxLen - CODE] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle] + +[FolderOptions\CheckModel\Lifecycle\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckLifecyclePhase] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckLifecycleRetention] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle\CheckPartitionRange] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase] + +[FolderOptions\CheckModel\Lifecycle.Phase\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseTbspace] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseIQTbspace] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseDuplicateTbspace] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseTbspaceCurrency] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseRetention] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseIdlePeriod] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseDataSource] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Lifecycle.Phase\CheckPhaseExternalOnFirst] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Replication] + +[FolderOptions\CheckModel\Replication\PartialReplication] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule] + +[FolderOptions\CheckModel\Business Rule\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Business Rule\EmptyColl - OBJCOL] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object] + +[FolderOptions\CheckModel\Extended Object\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Object\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link] + +[FolderOptions\CheckModel\Extended Link\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Extended Link\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File] + +[FolderOptions\CheckModel\File\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\File\CheckPathExists] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format] + +[FolderOptions\CheckModel\Data Format\CheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\CheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\DefaultCheckUseOnlyTerms] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\DefaultCheckUseTermBySynonym] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\NotApprovedTerms] +CheckSeverity=Yes +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\UniqueName] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\UniqueCode] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes + +[FolderOptions\CheckModel\Data Format\CheckDataFormatNullExpression] +CheckSeverity=No +FixRequested=No +CheckRequested=Yes +[ModelOptions] + +[ModelOptions\Physical Objects] +CaseSensitive=No +DisplayName=Yes +EnableTrans=No +UseTerm=No +EnableRequirements=No +EnableFullShortcut=Yes +DefaultDttp= +IgnoreOwner=No +RebuildTrigger=Yes +RefrUnique=No +RefrAutoMigrate=Yes +RefrMigrateReuse=Yes +RefrMigrateDomain=Yes +RefrMigrateCheck=Yes +RefrMigrateRule=Yes +RefrMigrateExtd=No +RefrMigrDefaultLink=No +RefrDfltImpl=D +RefrPrgtColn=No +RefrMigrateToEnd=No +RebuildTriggerDep=No +ColnFKName=%.3:PARENT%_%COLUMN% +ColnFKNameUse=No +DomnCopyDttp=Yes +DomnCopyChck=No +DomnCopyRule=No +DomnCopyMand=No +DomnCopyExtd=No +DomnCopyProf=No +Notation=0 +DomnDefaultMandatory=No +ColnDefaultMandatory=No +TablDefaultOwner= +ViewDefaultOwner= +TrgrDefaultOwnerTabl= +TrgrDefaultOwnerView= +IdxDefaultOwnerTabl= +IdxDefaultOwnerView= +JdxDefaultOwner= +DBPackDefaultOwner= +SeqDefaultOwner= +ProcDefaultOwner= +DBMSTrgrDefaultOwner= +Currency=USD +RefrDeleteConstraint=1 +RefrUpdateConstraint=1 +RefrParentMandatory=No +RefrParentChangeAllow=Yes +RefrCheckOnCommit=No + +[ModelOptions\Physical Objects\NamingOptionsTemplates] + +[ModelOptions\Physical Objects\ClssNamingOptions] + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG] + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMPCKG\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN] + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\PDMDOMN\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\TABL] + +[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\TABL\Code] +Template= +MaxLen=64 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\COLN] + +[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\COLN\Code] +Template= +MaxLen=64 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\INDX] + +[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\INDX\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\REFR] + +[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\REFR\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VREF] + +[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VREF\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEW] + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEW\Code] +Template= +MaxLen=64 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC] + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\VIEWC\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV] + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBSERV\Code] +Template= +MaxLen=254 +Case=M +ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()" +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP] + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WEBOP\Code] +Template= +MaxLen=254 +Case=M +ValidChar='a'-'z','A'-'Z','0'-'9',"/-_.!~*'()" +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM] + +[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\WPARAM\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FACT] + +[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FACT\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DIMN] + +[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DIMN\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\MEAS] + +[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\MEAS\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DATTR] + +[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DATTR\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FILO] + +[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FILO\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ] + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMEOBJ\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK] + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\FRMELNK\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass] + +[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Name] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Physical Objects\ClssNamingOptions\DefaultClass\Code] +Template= +MaxLen=254 +Case=M +ValidChar= +InvldChar= +AllValid=Yes +NoAccent=No +DefaultChar= +Script= +ConvTable= +ConvTablePath=%_HOME%\Resource Files\Conversion Tables + +[ModelOptions\Connection] + +[ModelOptions\Pdm] + +[ModelOptions\Generate] + +[ModelOptions\Generate\Xsm] +GenRootElement=Yes +GenComplexType=No +GenAttribute=Yes +CheckModel=Yes +SaveLinks=Yes +ORMapping=No +NameToCode=No + +[ModelOptions\Generate\Pdm] +RRMapping=No + +[ModelOptions\Generate\Cdm] +CheckModel=Yes +SaveLinks=Yes +NameToCode=No +Notation=2 + +[ModelOptions\Generate\Oom] +CheckModel=Yes +SaveLinks=Yes +ORMapping=No +NameToCode=Yes +ClassPrefix= + +[ModelOptions\Generate\Ldm] +CheckModel=Yes +SaveLinks=Yes +NameToCode=No + +[ModelOptions\Default Opts] + +[ModelOptions\Default Opts\TABL] +PhysOpts= + +[ModelOptions\Default Opts\COLN] +PhysOpts= + +[ModelOptions\Default Opts\INDX] +PhysOpts= + +[ModelOptions\Default Opts\AKEY] +PhysOpts= + +[ModelOptions\Default Opts\PKEY] +PhysOpts= + +[ModelOptions\Default Opts\STOR] +PhysOpts= + +[ModelOptions\Default Opts\TSPC] +PhysOpts= + +[ModelOptions\Default Opts\SQNC] +PhysOpts= + +[ModelOptions\Default Opts\DTBS] +PhysOpts= + +[ModelOptions\Default Opts\USER] +PhysOpts= + +[ModelOptions\Default Opts\JIDX] +PhysOpts= +{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,62={6EBD0427-31BE-44D4-BA6D-77622CBC4F1E},DatabaseType,6=InnoDB + + + + +25EA4AB1-5940-4980-A5A7-6396620CD841 +MySQL 5.0 +MYSQL50 +1458094227 +Administrator +1458094227 +Administrator + +F4F16ECD-F2F1-4006-AF6F-638D5C65F35E +4BA9F647-DAB1-11D1-9944-006097355D9B + + + + +485D3CB5-05EB-41BC-8B86-9BAF0C7C61DE +PhysicalDiagram_1 +PhysicalDiagram_1 +1458094228 +Administrator +1459093351 +Administrator +[DisplayPreferences] + +[DisplayPreferences\PDM] + +[DisplayPreferences\General] +Adjust to text=Yes +Snap Grid=No +Constrain Labels=Yes +Display Grid=No +Show Page Delimiter=Yes +Show Links intersections=Yes +Activate automatic link routing=Yes +Grid size=0 +Graphic unit=2 +Window color=255, 255, 255 +Background image= +Background mode=8 +Watermark image= +Watermark mode=8 +Show watermark on screen=No +Gradient mode=0 +Gradient end color=255, 255, 255 +Show Swimlane=No +SwimlaneVert=Yes +TreeVert=No +CompDark=0 + +[DisplayPreferences\Object] +Show Icon=No +Mode=2 +Trunc Length=40 +Word Length=40 +Word Text=!"#$%&')*+,-./:;=>?@\]^_`|}~ +Shortcut IntIcon=Yes +Shortcut IntLoct=Yes +Shortcut IntFullPath=No +Shortcut IntLastPackage=Yes +Shortcut ExtIcon=Yes +Shortcut ExtLoct=No +Shortcut ExtFullPath=No +Shortcut ExtLastPackage=Yes +Shortcut ExtIncludeModl=Yes +EObjShowStrn=Yes +ExtendedObject.Comment=No +ExtendedObject.IconPicture=No +ExtendedObject.TextStyle=No +ExtendedObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Object Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +ELnkShowStrn=Yes +ELnkShowName=Yes +ExtendedLink_SymbolLayout=<Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Source" >[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] </Form>[CRLF]</Form> +FileObject.Stereotype=No +FileObject.DisplayName=Yes +FileObject.LocationOrName=No +FileObject.IconPicture=No +FileObject.TextStyle=No +FileObject.IconMode=Yes +FileObject_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Location" Attribute="LocationOrName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Package.Stereotype=Yes +Package.Comment=No +Package.IconPicture=No +Package.TextStyle=No +Package_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Display Model Version=Yes +Table.Stereotype=Yes +Table.DisplayName=Yes +Table.OwnerDisplayName=No +Table.Columns=Yes +Table.Columns._Filter="All Columns" PDMCOLNALL +Table.Columns._Columns=Stereotype DataType KeyIndicator +Table.Columns._Limit=-5 +Table.Keys=No +Table.Keys._Columns=Stereotype Indicator +Table.Indexes=No +Table.Indexes._Columns=Stereotype +Table.Triggers=No +Table.Triggers._Columns=Stereotype +Table.Comment=No +Table.IconPicture=No +Table.TextStyle=No +Table_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="Stereotype No\r\nDisplayName Yes\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nDomain No\r\nKeyIndicator No\r\nIndexIndicator No\r\nNullStatus No" Filters="&quot;All Columns&quot; PDMCOLNALL &quot;&quot;\r\n&quot;PK Columns&quot; PDMCOLNPK &quot;\&quot;PRIM \&quot;TRUE\&quot; TRUE\&quot;&quot;\r\n&quot;Key Columns&quot; PDMCOLNKEY &quot;\&quot;KEYS \&quot;TRUE\&quot; TRUE\&quot;&quot;" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Keys" Collection="Keys" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="Stereotype No\r\nDisplayName Yes\r\nIndicator No" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Triggers" Collection="Triggers" Columns="Stereotype No\r\nDisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +View.Stereotype=Yes +View.DisplayName=Yes +View.OwnerDisplayName=No +View.Columns=Yes +View.Columns._Columns=DisplayName +View.Columns._Limit=-5 +View.TemporaryVTables=Yes +View.Indexes=No +View.Comment=No +View.IconPicture=No +View.TextStyle=No +View_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardCollection Name="Columns" Collection="Columns" Columns="DisplayName No\r\nExpression No\r\nDataType No\r\nSymbolDataType No &quot;Domain or Data type&quot;\r\nIndexIndicator No" HasLimit="Yes" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Tables" Collection="TemporaryVTables" Columns="Name Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardCollection Name="Indexes" Collection="Indexes" Columns="DisplayName Yes" HasLimit="No" HideEmpty="No" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Procedure.Stereotype=No +Procedure.DisplayName=Yes +Procedure.OwnerDisplayName=No +Procedure.Comment=No +Procedure.IconPicture=No +Procedure.TextStyle=No +Procedure_SymbolLayout=<Form>[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="Yes" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Owner and Name" Attribute="OwnerDisplayName" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <Separator Name="Separator" />[CRLF] <StandardAttribute Name="Comment" Attribute="Comment" Prefix="" Suffix="" Alignment="LEFT" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Icon" Attribute="IconPicture" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF] <StandardAttribute Name="Force top align" Attribute="TextStyle" Prefix="" Suffix="" Alignment="CNTR" Caption="" Mandatory="Yes" />[CRLF]</Form> +Reference.Cardinality=No +Reference.ImplementationType=No +Reference.ChildRole=Yes +Reference.Stereotype=Yes +Reference.DisplayName=No +Reference.ForeignKeyConstraintName=No +Reference.JoinExpression=No +Reference.Integrity=No +Reference.ParentRole=Yes +Reference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Cardinality" Attribute="Cardinality" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Implementation" Attribute="ImplementationType" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Cons&amp;traint Name" Attribute="ForeignKeyConstraintName" Prefix="" Suffix="" Caption="Cons&amp;traint Name" Mandatory="No" />[CRLF] <StandardAttribute Name="Join" Attribute="JoinExpression" Prefix="" Suffix="" Caption="Join" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] <StandardAttribute Name="Referential integrity" Attribute="Integrity" Prefix="" Suffix="" Caption="Referential integrity" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> +ViewReference.ChildRole=Yes +ViewReference.Stereotype=Yes +ViewReference.DisplayName=No +ViewReference.JoinExpression=No +ViewReference.ParentRole=Yes +ViewReference_SymbolLayout=<Form>[CRLF] <Form Name="Source" >[CRLF] <StandardAttribute Name="Child Role" Attribute="ChildRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF] <Form Name="Center" >[CRLF] <StandardAttribute Name="Stereotype" Attribute="Stereotype" Prefix="&lt;&lt;" Suffix="&gt;&gt;" Caption="" Mandatory="No" />[CRLF] <ExclusiveChoice Name="Exclusive Choice" Mandatory="No" Display="HorizontalRadios" >[CRLF] <StandardAttribute Name="Name" Attribute="DisplayName" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] <StandardAttribute Name="Join Expression" Attribute="JoinExpression" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </ExclusiveChoice>[CRLF] </Form>[CRLF] <Form Name="Destination" >[CRLF] <StandardAttribute Name="Parent Role" Attribute="ParentRole" Prefix="" Suffix="" Caption="" Mandatory="No" />[CRLF] </Form>[CRLF]</Form> + +[DisplayPreferences\Symbol] + +[DisplayPreferences\Symbol\FRMEOBJ] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=6000 +Height=2000 +Brush color=255 255 255 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=64 +Brush gradient color=192 192 192 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 255 128 128 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FRMELNK] +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\FILO] +OBJSTRNFont=新宋体,8,N +OBJSTRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LCNMFont=新宋体,8,N +LCNMFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=3600 +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 0 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\PDMPCKG] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 178 178 178 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\TABL] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +ColumnsFont=新宋体,8,N +ColumnsFont color=0, 0, 0 +TablePkColumnsFont=新宋体,8,U +TablePkColumnsFont color=0, 0, 0 +TableFkColumnsFont=新宋体,8,N +TableFkColumnsFont color=0, 0, 0 +KeysFont=新宋体,8,N +KeysFont color=0, 0, 0 +IndexesFont=新宋体,8,N +IndexesFont color=0, 0, 0 +TriggersFont=新宋体,8,N +TriggersFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=178 214 252 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VIEW] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +ColumnsFont=新宋体,8,N +ColumnsFont color=0, 0, 0 +TablePkColumnsFont=新宋体,8,U +TablePkColumnsFont color=0, 0, 0 +TableFkColumnsFont=新宋体,8,N +TableFkColumnsFont color=0, 0, 0 +TemporaryVTablesFont=新宋体,8,N +TemporaryVTablesFont color=0, 0, 0 +IndexesFont=新宋体,8,N +IndexesFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4800 +Height=4000 +Brush color=208 208 255 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\PROC] +STRNFont=新宋体,8,N +STRNFont color=0, 0, 0 +DISPNAMEFont=新宋体,8,N +DISPNAMEFont color=0, 0, 0 +OWNRDISPNAMEFont=新宋体,8,N +OWNRDISPNAMEFont color=0, 0, 0 +LABLFont=新宋体,8,N +LABLFont color=0, 0, 0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Width=4000 +Height=1000 +Brush color=255 255 192 +Fill Color=Yes +Brush style=6 +Brush bitmap mode=12 +Brush gradient mode=65 +Brush gradient color=255 255 255 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 108 0 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\REFR] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\VREF] +SOURCEFont=新宋体,8,N +SOURCEFont color=0, 0, 0 +CENTERFont=新宋体,8,N +CENTERFont color=0, 0, 0 +DESTINATIONFont=新宋体,8,N +DESTINATIONFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 128 128 192 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\USRDEPD] +OBJXSTRFont=新宋体,8,N +OBJXSTRFont color=0, 0, 0 +Line style=1 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=2 0 128 128 255 +Shadow color=192 192 192 +Shadow=0 + +[DisplayPreferences\Symbol\Free Symbol] +Free TextFont=新宋体,8,N +Free TextFont color=0, 0, 0 +Line style=0 +AutoAdjustToText=Yes +Keep aspect=No +Keep center=No +Keep size=No +Brush color=255 255 255 +Fill Color=Yes +Brush style=1 +Brush bitmap mode=12 +Brush gradient mode=0 +Brush gradient color=118 118 118 +Brush background image= +Custom shape= +Custom text mode=0 +Pen=1 0 0 0 255 +Shadow color=192 192 192 +Shadow=0 +(8268, 11693) +((315,354), (433,354)) +1 +7 + + +1458095981 +1459042267 +((-54924,22422), (-32915,26863)) +((-33315,26463),(-45514,26463),(-45514,23047),(-54524,23047)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N +4 + + + + + + + + + + + +1458096239 +1458682239 +((-54792,11904), (-43912,17507)) +((-44312,12304),(-54167,12304),(-54167,17107)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458115348 +1458836906 +((-63575,5772), (-58435,7022)) +((-63175,6397),(-58835,6397)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458115352 +1459083463 +((-68582,263), (-67332,4206)) +((-67957,3806),(-67957,663)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458116048 +1459083463 +((-47161,2004), (-39460,10753)) +((-39860,10353),(-39860,2629),(-46761,2629)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458116101 +1458739276 +((-65670,-9126), (-55717,-7876)) +((-56117,-8501),(-65270,-8501)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N +4 + + + + + + + + + + + +1458116394 +1458835392 +((-79662,28428), (-74996,29678)) +((-79262,29053),(-75396,29053)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458680260 +1458682043 +((-78148,-2323), (-72818,-1073)) +((-77748,-1698),(-73218,-1698)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458680262 +1458682046 +((-90276,-1363), (-86720,-113)) +((-87120,-738),(-89876,-738)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458680464 +1458835392 +((-79607,37830), (-74996,39080)) +((-75396,38455),(-79207,38455)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458680782 +1459042267 +((-49959,30401), (-38506,31651)) +((-49559,31026),(-38906,31026)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458680784 +1458739707 +((-54792,23079), (-53542,28681)) +((-54167,28281),(-54167,23479)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458681970 +1458739707 +((-55850,35903), (-54600,42106)) +((-55225,41706),(-55225,36303)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1459041851 +1459041851 +((-63774,42266), (-60357,43516)) +((-60757,42891),(-63374,42891)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1459046368 +1459093317 +((-88750,18433), (-82694,19683)) +((-88350,19058),(-83094,19058)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1459047135 +1459047240 +((-28384,-1144), (-21300,106)) +((-27984,-519),(-21700,-519)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1459047243 +1459047243 +((-47161,-1934), (-36964,-684)) +((-37364,-1309),(-46761,-1309)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1459093351 +1459093351 +((-108891,6479), (-107633,10064)) +((-108245,6879),(-108266,9662)) +1 +1 +12615680 +12632256 +CENTER 0 新宋体,8,N +SOURCE 0 新宋体,8,N +DESTINATION 0 新宋体,8,N + + + + + + + + + + + +1458094412 +1459042267 +-1 +((-38906,23549), (-25484,38503)) +0 +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 +1 + + + + + +1458094568 +1458835424 +-1 +((-75396,23621), (-63374,43491)) +0 +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 +1 + + + + + +1458094586 +1459083588 +-1 +((-44312,10353), (-34940,14352)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458094587 +1459083588 +-1 +((-60011,17107), (-48323,23479)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458094589 +1459083588 +-1 +((-73218,-4060), (-62688,663)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458115154 +1459083588 +-1 +((-72547,3806), (-63175,8529)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458115155 +1459083588 +-1 +((-58835,-2883), (-46761,9265)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458115156 +1459083588 +-1 +((-21700,-2881), (-10782,1843)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458115758 +1459083588 +-1 +((-74234,-11105), (-63318,-6382)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458115812 +1459083588 +-1 +((-57867,-11253), (-47337,-4881)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458116324 +1459083588 +-1 +((-89792,26281), (-79262,31829)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458680040 +1459083588 +-1 +((-100792,-3100), (-89876,1623)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458680041 +1458682043 +-1 +((-87120,-2812), (-77748,1917)) +0 +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 +1 + + + + + +1458680379 +1458680533 +-1 +((-89781,36456), (-79207,40455)) +0 +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 +1 + + + + + +1458680558 +1458739707 +-1 +((-60892,28281), (-49559,36303)) +0 +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 +1 + + + + + +1458680910 +1459093317 +-1 +((-83094,10054), (-71792,21376)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1458681746 +1458739307 +-1 +((-60757,41706), (-49393,46429)) +0 +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 +1 + + + + + +1458836895 +1459047206 +-1 +((-37364,-4652), (-27984,2032)) +0 +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 +1 + + + + + +1459046007 +1459093316 +-1 +((-98880,16284), (-88350,21832)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1459091827 +1459093314 +-1 +((-114679,9662), (-101831,25110)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + +1459092908 +1459093351 +-1 +((-114207,-1145), (-102905,6879)) +12615680 +16570034 +12632256 +STRN 0 新宋体,8,N +DISPNAME 0 新宋体,8,N +OWNRDISPNAME 0 新宋体,8,N +Columns 0 新宋体,8,N +TablePkColumns 0 新宋体,8,U +TableFkColumns 0 新宋体,8,N +Keys 0 新宋体,8,N +Indexes 0 新宋体,8,N +Triggers 0 新宋体,8,N +LABL 0 新宋体,8,N +6 +65 +16777215 + + + + + + + + + +AB9FF73F-1255-4FAC-A6A4-7B1A22C6E691 +订单模型 +订单模型 +1458183081 +Administrator +1459094461 +Administrator +Administrator +%DATE% +LightBlue_Theme.css +Header_LightBlue.html +Footer_LightBlue.html +54 +18 +4 +0 +Home_LightBlue.html +Light Blue +Professional +1 + + +343A54AC-A718-4469-9F22-C0F79D83E3AB +1458183081 +Administrator +1458183081 +Administrator +新宋体 +10 +1 +4 +423 +106 +15 +0 + + +9FFDF099-6679-4E4F-8950-83823C724D48 +1458183081 +Administrator +1458183081 +Administrator +Microsoft Sans Serif +10 +4 +0 + + + + +E63B9B5E-8949-4BF5-B789-6386AAC64029 +订单管理表模型 +1458183081 +Administrator +1458683698 +Administrator +7A5F12AC-80F5-4D0A-8715-B17926B78762 +1 +TEMPLATE +PDM +订单管理模型 +页脚 +((800,900), (1100,900)) +(21000, 29700) +1 + + +C68B4726-6DE6-4272-B07B-4140AEE86221 +1458683481 +Administrator +1458683481 +Administrator +1 +1 +PDM_MODEL_TABL_LIST +PDM +List of tables +List of tables +List of tables +Tables +1 +-50 Name +-50 Code + + + +A2F46272-FD8B-48CB-9E09-96D2B14E31F7 +1458683481 +Administrator +1458683481 +Administrator +新宋体 +10 +5 +353 +106 +0 + + +0CD82B2B-B9F3-4DB8-A721-98FEDB22C17B +1458683481 +Administrator +1458683481 +Administrator +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +982B1819-F5E8-4332-BEB5-AB253E685DC8 +1458683481 +Administrator +1458683481 +Administrator +Microsoft Sans Serif +10 +1 +1 + + + + +6D1D5772-15FB-426F-8DC0-7932ECE6FA2E +1458683481 +Administrator +1458683481 +Administrator + + + + +53FF7570-95AC-4765-A094-934CA35E69A3 +1458683485 +Administrator +1458683485 +Administrator +1 +1 +PDM_TABL_TITLE +PDM +Table %ITEM% +Table %ITEM% +Table %ITEM% +Tables + + +8B0820A5-5EEB-4AC4-925E-E9E1144B0993 +1458683485 +Administrator +1459094350 +Administrator +1 +1 +PDM_TABL_COLN_LIST +PDM +List of columns of the table %PARENT% +List of columns of the table %PARENT% +List of columns of the table %PARENT% +Columns +1 +-25 Name +-25 Code +-30 Comment +-20 DataType + + + +1D966AA0-82C4-4C40-AAEB-D066CCF755D5 +1458683485 +Administrator +1458683485 +Administrator +新宋体 +10 +5 +353 +106 +0 + + +E63D3440-2B13-4F89-A177-03DCC9AB42AA +1458683485 +Administrator +1458683485 +Administrator +Microsoft Sans Serif +10 +2 +4 +1 +1 + + +6227D5DC-6199-4C25-BCF8-BB416C965443 +1458683485 +Administrator +1458683485 +Administrator +Microsoft Sans Serif +10 +1 +1 + + + + +4F97DFCB-7E06-4217-81CD-A70D2CD2FAED +1458683485 +Administrator +1458683485 +Administrator + + + + + + +37B0ABE9-F1F4-4AB6-8C2A-5E006761D0C7 +1458683485 +Administrator +1458683485 +Administrator +新宋体 +10 +5 +353 +106 +0 + + + + + + +8779F459-F68C-4CA2-AE71-E97A870572CA +1458183081 +Administrator +1458183081 +Administrator +Microsoft Sans Serif +10 +8 +0 + + +ADE62904-C8E2-46A4-80E6-57DF6855CE2A +1458183081 +Administrator +1458183081 +Administrator +19100 +3 + + + + +9C6BB0D3-FA1E-4F74-8B93-5AA053F71914 +1458183081 +Administrator +1458183081 +Administrator +Microsoft Sans Serif +10 +2 +0 + + +F891AC6D-732A-4EB3-B8AA-A29213B26546 +1458183081 +Administrator +1458183081 +Administrator +9550 +2 + + +E451C6E2-78D6-4DE0-9A97-1369A99E8461 +1458183081 +Administrator +1458183081 +Administrator +19100 +3 + + + + + + + + + + + +71AA1BAE-5803-4DF4-BDDF-B23536FA4A75 +Simplified Chinese +ZH-CN +1458183081 +Administrator +1458183081 +Administrator + +F3A0BF0F-7536-11D5-A4D6-0008C79B4501 +585CBB37-C940-11D1-BD0D-00A02478ECC9 + + + + +00E477CD-D8A8-4813-AD25-988290FDFBC8 +order +order +1458183081 +Administrator +1459094449 +Administrator +file:///. +7A5F12AC-80F5-4D0A-8715-B17926B78762 +CDE44E21-9669-11D1-9914-006097355D9B +1459094461 + + + + + + + + + +107E38D7-5E20-4435-969F-C58651D8932F +客户会员表 +cd_member +1458094412 +Administrator +1459083926 +Administrator +客户会员表基础表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +D5493C40-5F7C-4614-8E47-947C32A9C8DF +主键ID +主键ID +1458095911 +Administrator +1459082891 +Administrator +int(11) +11 +1 +1 + + +9FC35B6A-0FB7-4235-A273-26A0C098F200 +会员编号 +MEMBER_CODE +1459042223 +Administrator +1459045165 +Administrator +会员编号 +VARCHAR(50) +50 + + +CEC08BA9-0CE0-4AE4-8E9A-F07ABB1D6F2F +姓名 +NAME +1458095645 +Administrator +1459045165 +Administrator +姓名 +VARCHAR(50) +50 + + +0BF770FF-FC51-4C9C-837D-EC77DF27A6D3 +手机号 +PHONE_NUMBER +1458095645 +Administrator +1459084280 +Administrator +手机号 +VARCHAR(20) +20 + + +1DE0DF1B-DD74-4358-A1CD-459FF951478C +备用手机号1 +SPARE_TEL +1458095645 +Administrator +1459082023 +Administrator +备用手机号1 +VARCHAR(20) +20 + + +68417D96-051D-4C01-9E8E-997805CB1D41 +备用手机号2 +SPARE_TEL2 +1458095645 +Administrator +1459082023 +Administrator +备用手机号2 +VARCHAR(20) +20 + + +F063B5A2-FD1A-455D-B04B-26BF593083DA +家庭固话 +TEL_NUMBER +1458095645 +Administrator +1459082023 +Administrator +家庭固话 +VARCHAR(20) +20 + + +F7D2441E-F9B4-4CB0-966D-D96951DD3EE7 +办公室电话 +OFFICE_TEL +1458095645 +Administrator +1459082023 +Administrator +办公室电话 +VARCHAR(20) +20 + + +6944544C-384D-4BFA-896C-EC05A5487EAF +收货地址 +ADDRESS +1458095645 +Administrator +1459082023 +Administrator +收货地址 +VARCHAR(255) +255 + + +EE52EA27-730D-4BED-AACA-7224334497A6 +备用地址1 +SPARE_ADDRESS +1458095645 +Administrator +1459084280 +Administrator +备用地址1 +VARCHAR(255) +255 + + +BC74DB2E-034C-4425-A634-D6A36BE8AE21 +备用地址2 +SPARE_ADDRESS2 +1458095645 +Administrator +1459082023 +Administrator +备用地址2 +VARCHAR(255) +255 + + +6BD7D3EF-95F1-4474-8D11-207AFFD1BA43 +客户类型 +MEMBER_TYPE +1458106430 +Administrator +1459082806 +Administrator +1-潜在客户,2-普通客户,3-优质客户 +int(1) +1 + + +120CD710-5DC1-4105-9E56-5014012726A8 +所属单位 +CD_COMPANY_ID +1458106430 +Administrator +1459082806 +Administrator +所属单位 +int(11) +11 + + +B929C444-8332-49B0-BBF8-4E25E0C7CEC7 +所属客服经理 +CD_USER_ID +1458679843 +Administrator +1459082806 +Administrator +所属客服经理 +int(11) +11 + + + + +93288780-D2F0-4856-A7A4-C1B0B53364C6 +Key_1 +Key_1 +1459042223 +Administrator +1459042258 +Administrator + + + + + + + + + + +83CF4D43-ED98-47EA-9747-81145154C7B1 +产品表 +cd_item +1458094568 +Administrator +1459083971 +Administrator +产品基础表 +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + +{F4F16ECD-F2F1-4006-AF6F-638D5C65F35E},MYSQL50,58={31D066BE-2F61-4B4D-B7B4-230D38F22B99},Temporary,5=false + + + + +225E558B-058D-4F3A-BB8A-02765D8F72FE +主键id +CD_ITEM_ID +1458106186 +Administrator +1459082733 +Administrator +int(11) +11 +1 +1 + + +20E8F4F2-158F-42FA-998A-8CFCDAA23258 +产品编号 +ITEM_CODE +1458106186 +Administrator +1458835389 +Administrator +产品编号 +varchar(30) +30 + + +E32DC5D3-FDFD-4F66-A16A-AEA061AC021B +产品类别 +CD_CATEGORY_ID +1458680425 +Administrator +1459082760 +Administrator +产品归属的类别 +int(11) +11 + + +CCB621C7-7C0D-4E95-B279-903D212D392D +产品名称 +ITEM_NAME +1458106186 +Administrator +1458835389 +Administrator +产品名称 +VARCHAR(50) +50 + + +6FC5999F-04CF-4D95-AB85-BD4EC8F6CDC8 +产品描述 +ITEM_DESCRIBE +1458116428 +Administrator +1458835389 +Administrator +产品描述 +VARCHAR(255) +255 + + +23A03DDA-797E-418D-8F0C-E99164C1F519 +产品类型 +ITEM_TYPE +1458106186 +Administrator +1458835389 +Administrator +产品类型 +VARCHAR(30) +30 + + +389EF0B5-BAEB-4D84-8FAA-896913AD8D42 +生产地 +YIELDLY +1458107062 +Administrator +1458835389 +Administrator +生产地 +VARCHAR(30) +30 + + +7F23A5BB-C099-4C84-8A4A-90643A53D871 +产品规格 +SPEC +1458107335 +Administrator +1459081996 +Administrator +产品规格 +VARCHAR(20) +20 + + +4800B165-4490-42FE-B252-55673FFA2C8A +基础价格 +BASE_PRICE +1458106186 +Administrator +1459081996 +Administrator +基础价格 +decimal(10,2) +10 +2 + + +7FBC26EC-754C-4C0A-B4FC-D9C88F4401C1 +会员价格 +MEMBER_PRICE +1458680584 +Administrator +1459081996 +Administrator +会员价格 +DECIMAL(10,2) +10 +2 + + +06E742E5-161F-4883-A400-488D57F9BAE4 +计价方式 +PRICING_MANNER +1458106186 +Administrator +1459081996 +Administrator +计价方式 +VARCHAR(10) +10 + + +A3FE3AC0-98C1-48C4-8D48-E0BC7F3EAC8E +销售状态 +SELL_STATUS +1458107062 +Administrator +1459082760 +Administrator +0-下架 1-上架 +INT(1) +1 + + +0F53E110-C69D-4D55-905B-CD291FBD608C +销售单位 +SELL_UNIT +1458107062 +Administrator +1459083691 +Administrator +销售单位 +VARCHAR(20) +20 + + +12824C16-4CAE-4A96-90AF-2FB1282694B6 +销售金额 +SELL_PRICE +1458107062 +Administrator +1459081996 +Administrator +销售金额 +DECIMAL(10,2) +10 +2 + + +A8E9FDFE-C854-4577-80CF-D0BCD5F0CC0C +是否组合 +IS_COMBINATION +1458107062 +Administrator +1459082760 +Administrator +0-未组合,1-组合 +INT(1) +1 + + +7C75AC83-EFD9-4350-8D06-8C82BEEE5AC9 +父产品ID +PARENT_ITEM_ID +1458107062 +Administrator +1459082760 +Administrator +组合产品的父id +INT(11) +11 + + +FF43AA44-EF92-4DC8-AE53-C503EB697BEF +是否审核 +IS_AUDIT +1458680735 +Administrator +1459082760 +Administrator +0-未审核,1-审核 +INT(1) +1 + + +C50DBBB1-24A4-4B1D-9078-E198854D74BE +录入时间 +CREATE_DATE_TIME +1458834144 +Administrator +1458835389 +Administrator +录入时间 +datetime + + +2FCD6114-FA49-4B46-95FC-CFBB0C808A22 +录入人 +CREATE_USER_CODE +1458834144 +Administrator +1458835389 +Administrator +录入人 +VARCHAR(20) +20 + + + + +E0AF5D07-3AFE-4EA6-AE86-BB3558F12ED7 +Key_1 +Key_1 +1458835408 +Administrator +1458835416 +Administrator + + + + + + + + + + +D322CB56-EA3C-4FB5-982B-F5CBB001B556 +客服经理单位关联表 +cd_manager_company +1458094586 +Administrator +1459083926 +Administrator +记录客户经理和单位关联关系表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +0ED449A6-D138-4B60-BD4D-3E6C308745E4 +主键ID +CD_MANAGER_COMPANY_ID +1458096079 +Administrator +1459082827 +Administrator +int(11) +11 +1 +1 + + +B5449C35-C102-4F50-B057-10B1BE29CAB9 +单位 +CD_COMPANY_ID +1458096079 +Administrator +1459082820 +Administrator +单位 +int(11) +11 + + +219E1691-6F72-47B3-8A73-3A0A366E76CD +客户经理 +CD_MANAGER_ID +1458096079 +Administrator +1459082820 +Administrator +客户经理 +int(11) +11 + + + + +380821BB-5462-41A4-A03A-EBF27CBBF829 +Key_1 +Key_1 +1459081749 +Administrator +1459081795 +Administrator + + + + + + + + + + +D6B4105F-0BAF-4FA7-BD07-23E5DED74B1D +单位公司表 +cd_company +1458094587 +Administrator +1459083926 +Administrator +记录签约单位、公司 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +801C4062-FDDA-47A9-B8ED-E4C89497A543 +主键ID +CD_COMPANY_ID +1458096703 +Administrator +1459083209 +Administrator +int(11) +11 +1 +1 + + +CC843943-B17C-4E9A-B547-F542C51E68B2 +单位编号 +COMPANY_CODE +1458095841 +Administrator +1459082059 +Administrator +单位编号 +VARCHAR(30) +30 + + +05E54D4C-ABDB-444B-8C60-F2FDD784793D +单位名称 +COMPANY_NAME +1458095841 +Administrator +1459082059 +Administrator +单位名称 +VARCHAR(100) +100 + + +0658D5B0-6F3B-4EDC-A353-B6506F322C8F +单位地址 +COMPANY_ADDRESS +1458095841 +Administrator +1459082059 +Administrator +单位地址 +VARCHAR(255) +255 + + +30B761A6-E23D-4652-AEF9-E043739BB5AA +单位联系人 +COMPANY_LEADER +1458095841 +Administrator +1459082059 +Administrator +单位联系人 +VARCHAR(20) +20 + + +D2F040C5-2EA1-480B-B883-32FE0E0BDFB6 +联系人电话 +COMPANY_LEADER_TEL +1459045228 +Administrator +1459082059 +Administrator +联系人电话 +VARCHAR(20) +20 + + + + +3FB00543-5F8C-44C7-A3C7-35B5E4CA806B +Key_1 +Key_1 +1459045171 +Administrator +1459045227 +Administrator + + + + + + + + + + +95A2D5CF-7362-440E-8FD9-2B30D8A2A28B +角色 +sys_roles +1458094589 +Administrator +1459083926 +Administrator +角色表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +60222991-1E0E-4603-A796-1E707B6410AC +ID +ID +1458114833 +Administrator +1459084185 +Administrator +int(11) +11 +1 + + +CC3548C8-0D18-403C-9872-6F729CE2B0C4 +角色 +ROLE +1458114833 +Administrator +1459082174 +Administrator +角色 +VARCHAR(30) +30 + + +4E070867-2135-4E8F-BCF2-719EC0225F84 +角色描述 +DESCRIPTION +1458114833 +Administrator +1459082174 +Administrator +角色描述 +VARCHAR(50) +50 + + +BA642724-56F3-4261-970C-304C42C95D22 +是否启用 +AVAILABLE +1458114833 +Administrator +1459084185 +Administrator +0-禁用,1-启用 +INT(1) +1 + + + + +E3462014-32A5-43AC-8E20-434F528A77B7 +Key_1 +Key_1 +1459081060 +Administrator +1459081064 +Administrator + + + + + + + + + + +DB55C20A-0703-4876-BCBD-4DA363543B07 +用户角色关联表 +sys_users_roles +1458115154 +Administrator +1459083926 +Administrator +用户角色关联表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +86E945E3-2418-4E9B-B793-1BAC9761E187 +ID +ID +1458115197 +Administrator +1459083224 +Administrator +int(11) +11 +1 +1 + + +DE934176-F6FD-48A4-998A-09BB9291B968 +用户 +USER_ID +1458115197 +Administrator +1459083224 +Administrator +用户 +int(11) +11 + + +EEB4DAA9-DA46-4A90-8770-CF0FF0430A7E +角色 +ROLE_ID +1458115197 +Administrator +1459083224 +Administrator +角色 +int(11) +11 + + +80772C7B-4C22-4621-93FF-6C6C4A59F5B0 +是否启用 +AVAILABLE +1458115960 +Administrator +1459083224 +Administrator +0-禁用,1-启用 +INT(1) +1 + + + + +F7AD7700-D72E-4B96-83BE-1461BA30C4E8 +Key_1 +Key_1 +1459047706 +Administrator +1459047747 +Administrator + + + + + + + + + + +BEA180C5-2118-486C-8D73-0D2432ACD74A +用户表 +sys_users +1458115155 +Administrator +1459083926 +Administrator +用户表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +88088BC6-4F26-468A-930A-E6263F72AD3F +ID +ID +1458115268 +Administrator +1459083170 +Administrator +int(11) +11 +1 +1 + + +BAB33074-95E6-4D19-93D9-2E4243B4501F +登陆用户名 +USERNAME +1458115268 +Administrator +1459082133 +Administrator +登陆用户名 +VARCHAR(30) +30 + + +793DDC49-0194-4F4C-A5C4-8124F5BBA220 +真实姓名 +REALNAME +1458115268 +Administrator +1459082133 +Administrator +真实姓名 +VARCHAR(20) +20 + + +594088E6-DAB3-4DE2-83A6-10FBD20D217F +密码盐值 +SALT +1459046593 +Administrator +1459082133 +Administrator +密码盐值 +VARCHAR(50) +50 + + +90C6ECC1-4878-4B4B-AC80-D584CBF957DA +登陆密码 +PASSWORD +1458115540 +Administrator +1459084594 +Administrator +登陆密码 +VARCHAR(50) +50 + + +9F267C78-64B7-43A4-9099-B3B1181DC522 +年龄 +AGE +1458115556 +Administrator +1459083170 +Administrator +年龄 +int(2) +2 + + +5FD2DB8E-65E1-4178-8F4C-00D07FE666A0 +性别 +SEX +1458115556 +Administrator +1459083170 +Administrator +1-男,2女 +int(1) +1 + + +FA850832-3FB9-4B6A-84E6-16D9F6D2C638 +邮箱 +EMAIL +1458115268 +Administrator +1459082133 +Administrator +邮箱 +varchar(30) +30 + + +F48C571C-BEDE-47E7-8A93-0CA07EED83AC +QQ +QQ +1458115268 +Administrator +1459082133 +Administrator +QQ +varchar(30) +30 + + +7EF13DE3-E8C9-4AAF-8C22-AF61646649EE +手机号 +IPHONE_NUMBER +1458115268 +Administrator +1459082133 +Administrator +手机号 +varchar(20) +20 + + +1FF54B6A-496D-4ADE-8133-DD01D83DEFA1 +办公室电话 +OFFICE_TEL +1458115268 +Administrator +1459082133 +Administrator +办公室电话 +varchar(20) +20 + + +1972E676-6C50-437B-A2D3-D7A710714179 +是否锁定 +LOCKED +1458115579 +Administrator +1459083170 +Administrator +0-禁用,1-启用 +int(1) +1 + + +1F30C383-4C34-4AC4-856D-882F6AD711B1 +是否客户经理 +IS_MANAGE +1459047009 +Administrator +1459083170 +Administrator +1-经理 +int(1) +1 + + + + +6D45DE09-05F0-4078-B658-3401D5028B98 +Key_1 +Key_1 +1459046593 +Administrator +1459046893 +Administrator + + + + + + + + + + +AB0B876D-9ED3-4718-85FC-7BA425D1DA09 +部门表 +sys_organization +1458115156 +Administrator +1459084413 +Administrator +部门表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +E6A31C70-EACD-4C4A-8B9D-19921E14D943 +主键ID +ID +1459047162 +Administrator +1459083201 +Administrator +int(11) +11 +1 +1 + + +CAA39DB5-F843-48F8-B828-B90F53F1D164 +部门名称 +NAME +1459048078 +Administrator +1459082160 +Administrator +部门名称 +VARCHAR(30) +30 + + +9700DFDB-459B-43CD-89CE-2F4F933AACF0 +部门描述 +DESCRIPTION +1458115415 +Administrator +1459082160 +Administrator +部门描述 +VARCHAR(100) +100 + + +3806EF22-D790-424E-80A2-634A802DA326 +上级组织 +PARENT_ID +1459047983 +Administrator +1459083201 +Administrator +上级组织 +int(11) +11 + + + + +64CF7E84-3216-4D5F-AE88-BBFB38239479 +Key_1 +Key_1 +1459047162 +Administrator +1459047200 +Administrator + + + + + + + + + + +5393BB6C-8AB9-478A-87A4-225CB243BD53 +数据字典 +sys_dictionary +1458115758 +Administrator +1459083926 +Administrator +数据字典 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +8910FC46-6D4B-4470-A757-FA2D6DBB45C3 +ID +SYS_DICTIONARY_ID +1458115759 +Administrator +1459083139 +Administrator +int(11) +11 +1 +1 + + +DB1ED129-934D-4D7A-A6E0-39BC47C3CCBD +字典编号 +DICTIONARY_CODE +1458115759 +Administrator +1459082184 +Administrator +字典编号 +varchar(30) +30 + + +0601C6B9-8025-4D0F-8946-B27995C1D235 +字典描述 +DICTIONARY_DESC +1458115759 +Administrator +1459082184 +Administrator +字典描述 +varchar(255) +255 + + +17E5C182-F5A3-4CA6-90AF-E785D43F7EE2 +是否启用 +AVAILABLE +1458115903 +Administrator +1459083139 +Administrator +是否启用 +int(1) +1 + + + + +3BA60E0C-581C-4A23-B5B4-5688A7890716 +Key_1 +Key_1 +1459081079 +Administrator +1459081119 +Administrator + + + + + + + + + + +D01C7E4B-8A72-4AC9-839A-17D721B3ABFF +数据字典参数表 +sys_dictionary_parameter +1458115812 +Administrator +1459083926 +Administrator +数据字典参数表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +846C8088-DB0D-4052-85E2-793FA6C16B72 +主键ID +SYS_DICTIONARY_PARAMETER_ID +1458115813 +Administrator +1459083154 +Administrator +int(11) +11 +1 +1 + + +513C4F79-7AA0-4A83-BD6E-63F85C2C6107 +字典 +SYS_DICTIONARY_ID +1458115813 +Administrator +1459083154 +Administrator +字典 +INT(11) +11 + + +C3CA971F-27B7-4BD0-AC90-648EB76B07FE +显示值 +SHOW_VALUE +1458115813 +Administrator +1459082198 +Administrator +显示值 +VARCHAR(50) +50 + + +F5748421-6200-4183-8C8B-FF6113CF8F7C +实际值 +REAL_VALUE +1458115813 +Administrator +1459082198 +Administrator +实际值 +VARCHAR(50) +50 + + +04CCB3B6-4B49-49B4-B15A-736B1EC6E403 +排位 +SORT_VALUE +1458115850 +Administrator +1459083154 +Administrator +排位 +INT(3) +3 + + +3C084302-1C2E-4935-866B-E201091627B3 +是否启用 +AVAILABLE +1458115890 +Administrator +1459083154 +Administrator +0-禁用,1-启用 +INT(1) +1 + + + + +496CE5D0-8DF9-4DD1-AD63-816E2B3760A0 +Key_1 +Key_1 +1459081249 +Administrator +1459081389 +Administrator + + + + + + + + + + +A7A55C93-850E-430F-8721-6BAB9A0B0EFD +产品拓展表 +cd_item_ref +1458116324 +Administrator +1459083966 +Administrator +产品拓展表 +如果产品有额外属性可添加在拓展表中 +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +BA4C41F9-A621-4E72-B7C8-AF9E7E27AA46 +主键ID +CD_ITEM_REF_ID +1458116327 +Administrator +1459083248 +Administrator +int(11) +11 +1 +1 + + +5D03C170-C285-49CE-B8E9-361057BD770D +拓展类型 +REF_TYPE +1458116327 +Administrator +1459042073 +Administrator +拓展类型 +VARCHAR(50) +50 + + +ECAC1942-68A0-4618-AF2D-25BF573B2B11 +拓展描述 +REF_NAME +1459041954 +Administrator +1459042073 +Administrator +拓展描述 +VARCHAR(50) +50 + + +48F404E1-A2F3-4C29-AD30-B59CBE6D98FF +拓展值 +REF_VALUE +1458116327 +Administrator +1459046314 +Administrator +拓展值 +VARCHAR(50) +50 + + +F3544AD9-9D29-43CB-9108-10C62C844384 +对应产品 +CD_ITEM_ID +1458116327 +Administrator +1459083248 +Administrator +对应产品 +INT(11) +11 + + + + +0D2E702F-72F0-429A-8D40-1F4F258F0070 +Key_1 +Key_1 +1459045635 +Administrator +1459045640 +Administrator + + + + + + + + + + +C3939E38-44D5-45DA-9D18-79EB932DBB91 +权限表 +sys_permissions +1458680040 +Administrator +1459083926 +Administrator +权限表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +8D95515A-76A7-4BCA-AA82-8565107C8A23 +ID +ID +1458680053 +Administrator +1459083115 +Administrator +int(11) +11 +1 +1 + + +C8E40D0B-DA6A-4F0D-820D-F6A9C16A852D +权限 +PERMISSION +1458680199 +Administrator +1459082208 +Administrator +权限 +VARCHAR(50) +50 + + +CA861B8D-0F02-40B8-825F-BD81977EEBE1 +权限描述 +DESCRIPTION +1458680053 +Administrator +1459082208 +Administrator +权限描述 +VARCHAR(100) +100 + + +76306C52-9FE9-4A96-AF1F-9A2D73AF4791 +是否启用 +AVAILABLE +1458680053 +Administrator +1459083115 +Administrator +0-禁用,1-启用 +INT(1) +1 + + + + +68AABFB1-E710-4A51-89EE-0AA601D280BA +Key_1 +Key_1 +1459081072 +Administrator +1459081075 +Administrator + + + + + + + + + + +99C8B3BA-2CB8-4244-A15E-D56A3DAA35DC +角色权限关联表 +sys_roles_permissions +1458680041 +Administrator +1459083926 +Administrator +角色权限关联表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +5BE54FAA-B3EE-4667-BCF0-E2C41C993CAC +ID +ID +1458680226 +Administrator +1459083129 +Administrator +int(11) +11 +1 +1 + + +BC5756F4-4F0A-48C6-86D1-91438CEBE19F +角色 +ROLE_ID +1458680226 +Administrator +1459083129 +Administrator +角色 +INT(11) +11 + + +8C82F7E1-51EA-4A16-B467-C03F008D8F2D +权限 +PERMISSION_ID +1458680226 +Administrator +1459083129 +Administrator +权限 +INT(11) +11 + + + + +477CBFAB-2594-4809-A214-CF42BA92FC3E +Key_1 +Key_1 +1459081066 +Administrator +1459081071 +Administrator + + + + + + + + + + +4E371F29-D7F3-48C6-811D-0BC741A51A37 +产品类别表 +cd_category +1458680379 +Administrator +1459083961 +Administrator +产品类别表 +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +8AE288DD-97FE-4B9B-B071-6C55829DC2A6 +主键id +CD_CATEGORY_ID +1458680381 +Administrator +1459083237 +Administrator +int(11) +11 +1 +1 + + +65EB4E91-00FB-4F78-B3D6-D4D988ACAEA2 +类别名称 +CATEGORY_NAME +1458680381 +Administrator +1459082071 +Administrator +类别名称 +varchar(30) +30 + + + + +7C300379-3DD6-434B-B852-B2F47FE9A523 +Key_1 +Key_1 +1459041899 +Administrator +1459041902 +Administrator + + + + + + + + + + +A15B7DA3-66CE-4A24-B6A0-41488CCA1BCE +产品合同 +cd_contract +1458680558 +Administrator +1459083926 +Administrator +合同价格表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +9935B9E3-5D3E-40B4-BEDC-CF5C36DB05CC +主键ID +CD_CONTRACT_ID +1458680607 +Administrator +1459082898 +Administrator +int(11) +11 +1 +1 + + +5A7A888D-6661-4FD8-8821-610310CE2652 +所属客户 +CD_MEMBER_ID +1458680607 +Administrator +1459082792 +Administrator +合同价的客户 +int(11) +11 + + +9FC7DADD-1DC3-4D0C-ABBC-C9DB2955F858 +所属单位 +CD_COMPANY_ID +1458680662 +Administrator +1459082792 +Administrator +合同价的单位 +int(11) +11 + + +47D55BEF-94E3-4B2C-9D5C-F6595202BA9D +适用范围 +SCOPE +1458681553 +Administrator +1459082792 +Administrator +1-部分产品,2-全部产品 +int(1) +1 + + +D4CE2D4E-FB84-480A-9E61-109DA4CF4E65 +合同价格 +CONTRACT_PRICE +1458681905 +Administrator +1459045577 +Administrator +仅当适用范围为全部产品时适用 +decimal(10,2) +10 +2 + + +7B0E2A18-380B-46C4-BC0B-F23F95A34437 +开始时间 +BENGIN_TIME +1458681821 +Administrator +1459045577 +Administrator +合同开始时间 +datetime + + +3C3D4126-59E6-4461-B1B5-89F025F52AF3 +结束时间 +END_TIME +1458681821 +Administrator +1459045577 +Administrator +合同结束时间 +datetime + + +634A3735-05D2-45A5-9B05-99E63F9004BB +是否审核 +IS_AUDITOR +1458681994 +Administrator +1459082792 +Administrator +0-未审核,1-审核 +int(1) +1 + + + + +4E22C30D-1AA5-44B9-8D37-317B21DF87A7 +Key_1 +Key_1 +1459041892 +Administrator +1459041896 +Administrator + + + + + + + + + + +1A40C1C3-12D0-4985-872E-158BDC3F5BE1 +卡劵表 +cd_coupon +1458680910 +Administrator +1459083926 +Administrator +卡劵维护表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +A8EEB08D-FC6C-447C-9466-A373D0F78254 +主键ID +CD_COUPON_ID +1458680911 +Administrator +1459083104 +Administrator +int(11) +11 +1 +1 + + +84A6FF62-72D5-437A-A853-7C8576641C47 +种类 +COUPON_TYPE +1458680911 +Administrator +1459083104 +Administrator +卡或者劵,1-卡,2-劵 +INT(1) +1 + + +A0831223-1F38-4A79-A308-2FAEEAF60A0C +卡号 +COUPON_NUMBER +1458744193 +Administrator +1459082080 +Administrator +卡号 +VARCHAR(50) +50 + + +FE8E12A8-944E-46FD-87AE-2F90A7AD9261 +密码 +COUPON_PASSWORD +1458744193 +Administrator +1459082080 +Administrator +密码 +VARCHAR(20) +20 + + +DA4AB407-39DD-4D4B-9A79-8C9458BCA770 +开始日期 +BEGIN_TIME +1458680911 +Administrator +1459045993 +Administrator +有效开始时间 +DATETIME + + +1DE75394-FAAB-4898-8731-E2228F67BC62 +结束日期 +END_TIME +1458680911 +Administrator +1459045993 +Administrator +有效结束时间 +DATETIME + + +9D51A0DC-ABA3-44BD-AB4B-44ABD51D037B +金额 +PRICE +1458680911 +Administrator +1459045993 +Administrator +固定金额 +DECIMAL(10,2) +10 +2 + + +28DDB978-D9AA-47C8-B5A5-B0D02D6B2699 +次数 +COUNT +1458680911 +Administrator +1459083104 +Administrator +固定次数 +INT(11) +11 + + +986CD827-F7DC-4179-B3A0-CAED9A1C6315 +是否使用 +IS_USED +1458680911 +Administrator +1459083104 +Administrator +0-未使用,1-已使用 +INT(1) +1 + + +715E8D14-0CBE-44F0-ACAD-8CFC5B5A1C33 +是否有效 +IS_USEFUL +1458680911 +Administrator +1459083104 +Administrator +0-无效,1-有效 +INT(1) +1 + + +7B804384-6E12-471C-BA0A-5FDE8E77A3F3 +是否回馈 +IS_FEEDBACK +1458738848 +Administrator +1459083104 +Administrator +0-否,1-是 +INT(1) +1 + + +39684FC3-B2D9-46BF-9322-99042A084D66 +备注 +NOTES +1458739238 +Administrator +1459045993 +Administrator +VARCHAR(255) +255 + + + + +02CDE9F4-6422-4505-95F3-79BB27BE151E +Key_1 +Key_1 +1459045645 +Administrator +1459045661 +Administrator + + + + + + + + + + +465AA41C-4A3A-4B83-91B0-CFD2A247055A +产品合同明细 +cd_item_contract_item +1458681746 +Administrator +1459083926 +Administrator +产品合同明细 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +8B9AC003-CA36-4566-9F19-7E25EF677AAC +主键id +CD_ITEM_CONTRACT_ITEM_ID +1458681751 +Administrator +1459082880 +Administrator +int(11) +11 +1 +1 + + +2CA7427E-F464-416B-BBE8-D4031A512FDB +产品合同 +CD_CONTRACT_ID +1458681751 +Administrator +1459082775 +Administrator +产品合同 +int(11) +11 + + +4C2A166F-C75C-4663-93AF-1D5317E29DFA +对应产品 +CD_ITEM_ID +1458681751 +Administrator +1459082775 +Administrator +当合同适用范围为1的时候,每种产品要设定对应的合同价 +int(11) +11 + + +A69EA4CD-6495-4C6E-B6BA-0CDF47A22990 +合同价 +CONTRACT_PRICE +1458681751 +Administrator +1459041799 +Administrator +合同价格 +decimal(10,2) +10 +2 + + + + +BD72A87C-CCC3-4445-8535-161061843949 +Key_1 +Key_1 +1459041884 +Administrator +1459041891 +Administrator + + + + + + + + + + +5C4F0A91-0CCB-434C-8C99-EA584DD1E85A +部门用户关联表 +sys_user_organization +1458836895 +Administrator +1459083926 +Administrator +部门用户关联表 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +BE602C0C-DA45-48D4-9389-A2241D904399 +ID +ID +1458836915 +Administrator +1459083188 +Administrator +int(11) +11 +1 +1 + + +9DAF2754-776C-4FD3-ABB3-373B536DEE1F +部门 +ORGANIZATION_ID +1458836915 +Administrator +1459083188 +Administrator +部门 +int(11) +11 + + +3FDF386A-4694-4178-B0E0-CD35DA4FD394 +用户 +USER_ID +1458836915 +Administrator +1459083188 +Administrator +用户 +int(11) +11 + + + + +8B61A0F5-FA29-41DB-A5C8-7CA25B31966C +Key_1 +Key_1 +1459046975 +Administrator +1459046979 +Administrator + + + + + + + + + + +0EAC3354-B326-460D-A896-AF0C06C2BDA7 +卡劵拓展 +cd_coupon_ref +1459046007 +Administrator +1459083926 +Administrator +卡劵拓展 +type = InnoDB ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +D4F5A78C-5F94-41D0-AF7D-B667D9286742 +主键ID +主键ID +1459046008 +Administrator +1459083257 +Administrator +int(11) +11 +1 +1 + + +529A3DE3-C515-4FBC-9D8E-63CCE227C319 +对应卡劵 +CD_COUPON_ID +1459046008 +Administrator +1459083257 +Administrator +卡劵 +INT(11) +11 + + +B2A1BD79-A400-46E7-AED2-607DBBE3514E +拓展类型 +REF_TYPE +1459046170 +Administrator +1459082087 +Administrator +拓展类型 +VARCHAR(50) +50 + + +A72D6295-8B5C-4A55-8614-45871D211FEF +拓展描述 +REF_NAME +1459046170 +Administrator +1459082087 +Administrator +拓展描述 +VARCHAR(30) +30 + + +51D761DE-B2A1-4A85-B466-898BC1499D26 +拓展值 +REF_VALUE +1459046170 +Administrator +1459082087 +Administrator +拓展值 +VARCHAR(50) +50 + + + + +BA2F2714-096B-4C28-82B8-8B512A948EC5 +Key_1 +Key_1 +1459046008 +Administrator +1459046155 +Administrator + + + + + + + + + + +49BB4333-5B4E-4D44-8EFF-B3EFDC243457 +订单表 +tb_order +1459091827 +Administrator +1459093408 +Administrator +订单表 +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +975492BC-EA05-4B22-BF95-9D90B12FB7D9 +主键ID +TB_ORDER_ID +1459091828 +Administrator +1459092328 +Administrator +INT(11) +11 +1 + + +F1744295-0B71-469A-89D4-48B643365986 +订单编号 +ORDER_CODE +1459091959 +Administrator +1459093908 +Administrator +varchar(30) +30 + + +9E49766A-1500-4DCD-866F-600DA3EC22BD +订单类型 +ORDER_TYPE +1459091959 +Administrator +1459093908 +Administrator +1-卡,2-劵,3-常规 +int(1) +1 + + +6952F05C-A305-45EE-8D6D-D39B9374C8F0 +卡号 +COUPON_NUMBER +1459093023 +Administrator +1459094047 +Administrator +卡号(订单类型为卡时记录卡号) +varchar(50) +50 + + +E99B1ECA-95F6-4433-B89B-1C9545AA773F +卡密码 +COUPON_PASSWORD +1459093023 +Administrator +1459094047 +Administrator +卡密码(订单类型为卡时记录密码) +varchar(50) +50 + + +7BEBAB62-E43A-43B9-A294-0575ACE3E310 +订单来源 +ORDER_SOURCE +1459091959 +Administrator +1459093908 +Administrator +1-微信订单,2-商城订单,3-客服下单,4-采摘订单 +int(1) +1 + + +13E7DFB4-FFAC-4A54-B5C3-32F0F66F233D +付款方式 +PAYMENT_MODE +1459091959 +Administrator +1459093908 +Administrator +1-预付款,2-后付款,3-免费 +int(1) +1 + + +AF8C064F-9789-467A-AD4E-0C4B686E72CC +订单状态 +ORDER_STATUS +1459092344 +Administrator +1459093908 +Administrator +订单状态 +varchar(30) +30 + + +E647BAAE-319E-4989-96BA-A91371829BC6 +收货人手机 +CONSIGNEE_PHONE +1459092344 +Administrator +1459093908 +Administrator +收货人手机 +varchar(11) +11 + + +41881411-A2B6-432C-A230-23C8A8435C1F +收货人姓名 +CONSIGNEE_NAME +1459092344 +Administrator +1459093908 +Administrator +收货人姓名 +varchar(30) +30 + + +070B849E-A8E9-481C-BCDD-EAD4D60D0D2B +收货人地址 +CONSIGNEE_ADDRESS +1459092344 +Administrator +1459093908 +Administrator +收货人地址 +varchar(200) +200 + + +C8C3E0B1-A617-4F30-A4CD-4B50523D9F2D +邮政编码 +POSTCODE +1459092344 +Administrator +1459093908 +Administrator +邮政编码 +varchar(10) +10 + + +573B9CAE-86EA-4A51-BACC-C780AC0AC279 +运送方式 +TRANSPORT_MODE +1459092344 +Administrator +1459093908 +Administrator +运送方式 1-快递,2-自提 +int(1) +1 + + +90C8690A-DDC6-49C4-AC5B-DE5EFE8CE8CC +订单备注 +REMARK +1459092344 +Administrator +1459093908 +Administrator +订单备注 +varchar(300) +300 + + +124681BC-31F5-4789-98E5-B10103D9C8ED +订单总金额 +TOTAL_AMOUNT +1459092344 +Administrator +1459093908 +Administrator +订单总金额 +decimal(10,2) +10 +2 + + +D20FCAA8-3667-48F6-9B53-81F9764D018A +订单创建时间 +CREATE_TIME +1459092344 +Administrator +1459093908 +Administrator +订单创建时间 +datetime + + +BF5175BD-CD6D-4F30-8FB3-F3B3E88DD025 +订单创建人 +CREATE_USER +1459092344 +Administrator +1459093908 +Administrator +订单创建人 +varchar(30) +30 + + + + +71C1B03B-65DA-42AB-BB0F-0D2EDC9198F0 +Key_1 +Key_1 +1459091959 +Administrator +1459092328 +Administrator + + + + + + + + + + +08FAB88E-D406-415E-9FB3-54F2F0988CEF +订单明细表 +tb_order_item +1459092908 +Administrator +1459093929 +Administrator +订单明细表 +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8 +COLLATE = utf8_general_ci + + + +FC875333-4424-4AC5-BB4B-A7D1E39EFD4F +主键ID +TB_ORDER_ITEM_ID +1459092930 +Administrator +1459093919 +Administrator +int(11) +11 +1 + + +E5BE145D-AA63-4229-A954-E076A3A24EB3 +订单 +TB_ORDER_ID +1459092930 +Administrator +1459093408 +Administrator +订单ID +int(11) +11 + + +5068C03F-DCE4-4B5F-8A94-5B4462383DEA +订单编号 +ORDER_NO +1459092930 +Administrator +1459093010 +Administrator +订单编号 +varchar(30) +30 + + +4713A2C7-7DB0-43DA-AE6B-D9680B43BA65 +商品编码 +ITEM_CODE +1459093129 +Administrator +1459093431 +Administrator +商品编码 +varchar(30) +30 + + +B9824870-BA15-4A09-8A64-1EA32D6A6723 +商品名称 +ITEM_NAME +1459093129 +Administrator +1459093431 +Administrator +商品名称 +varchar(50) +50 + + +A2EBE921-A513-4CDB-A40D-8228FA6E5C0F +商品单价 +ITEM_PRICE +1459093129 +Administrator +1459093474 +Administrator +商品单价 +decimal(10,2) +10 +2 + + +DCC65E6F-4F3F-408D-B8B1-F350FBB42ECB +商品数量 +ITEM_QTY +1459093129 +Administrator +1459093474 +Administrator +商品数量 +int(5) +5 + + +A674FD6E-9F1E-47BD-8607-A1D3E8ADF48A +商品单位 +ITEM_UNIT +1459093129 +Administrator +1459093474 +Administrator +商品单位 +varchar(30) +30 + + + + +50FEC9A1-0AA9-4699-96D2-D809D42CAC38 +Key_1 +Key_1 +1459093911 +Administrator +1459093919 +Administrator + + + + + + + + + + + + +AFD905A0-8990-474C-89A8-D82883968AA6 +单位客户关联 +单位客户关联 +1458095981 +Administrator +1458106495 +Administrator +0..* +1 +1 + + + + + + + + +BE3EC5FD-5E47-4E4F-BC84-603D6F0E6B17 +1458106475 +Administrator +1458106495 +Administrator + + + + + + + + + + +8B519CF3-6729-4C29-917C-78E9A51482AB +单位客户经理关联 +单位客户经理关联 +1458096239 +Administrator +1458096724 +Administrator +0..* +1 +1 + + + + + + + + +86BD3BCF-4B55-4B9F-A8C0-299C63ADDD67 +1458096715 +Administrator +1458096724 +Administrator + + + + + + + + + + +31064A9B-2A83-4ECE-8140-4F70A356E5ED +用户关联 +用户关联 +1458115348 +Administrator +1458115379 +Administrator +0..* +1 +1 + + + + + + + + +47F055B5-41D7-4267-8BE3-0DBD56AE9B66 +1458115358 +Administrator +1458115379 +Administrator + + + + + + + + + + +8A39F934-985E-4A9F-A0D9-3588ACC9FE35 +角色关联 +角色关联 +1458115352 +Administrator +1458115398 +Administrator +0..* +1 +1 + + + + + + + + +C64844F2-71FA-4EAA-A26F-EBF379976C9E +1458115384 +Administrator +1458115398 +Administrator + + + + + + + + + + +A8A1AFA2-4426-4B8C-A898-0A75D572C516 +客户经理关联 +客户经理关联 +1458116048 +Administrator +1458116068 +Administrator +0..* +1 +1 + + + + + + + + +8DB30E7E-583D-46CE-8FD1-CC366B77B107 +1458116051 +Administrator +1458116068 +Administrator + + + + + + + + + + +8063EB56-3DE8-4642-BF0C-3A60DC3A7EBD +字典关联 +字典关联 +1458116101 +Administrator +1458116127 +Administrator +0..* +1 +1 + + + + + + + + +E1F7DF0F-7CC9-45FC-94F6-871DECD091A0 +1458116104 +Administrator +1458116114 +Administrator + + + + + + + + + + +792DCDE1-6F04-44F6-9684-ACAB2C787239 +产品拓展关联 +产品拓展关联 +1458116394 +Administrator +1458116415 +Administrator +0..* +1 +1 + + + + + + + + +81332F98-0A94-4D44-BBB5-2FE612E04913 +1458116395 +Administrator +1458116415 +Administrator + + + + + + + + + + +F1348F0D-BCB2-494D-9030-F860DC49726B +角色关联关系 +角色关联关系 +1458680260 +Administrator +1458680316 +Administrator +0..* +1 +1 + + + + + + + + +74BBA4A2-C902-40F2-AED2-4482C02E6F87 +1458680298 +Administrator +1458680316 +Administrator + + + + + + + + + + +64C2B9F5-B045-460D-92A9-51EFB0C58A92 +权限关联 +权限关联 +1458680262 +Administrator +1458680292 +Administrator +0..* +1 +1 + + + + + + + + +8CC998C0-48C9-41DB-A94F-777B9BE4060A +1458680264 +Administrator +1458680292 +Administrator + + + + + + + + + + +DBF473C4-94B3-4842-B11F-73EA4933660C +商品类别关联 +商品类别关联 +1458680464 +Administrator +1458680487 +Administrator +0..* +1 +1 + + + + + + + + +C48D54D9-27BB-42A1-8682-E7385B82A71E +1458680467 +Administrator +1458680487 +Administrator + + + + + + + + + + +71ED9917-DD9C-4B67-9903-4D8BE2C62B53 +合同客户关联 +合同客户关联 +1458680782 +Administrator +1458680818 +Administrator +0..* +1 +1 + + + + + + + + +403C30EF-8341-4F0B-842F-939D564DA95C +1458680789 +Administrator +1458680818 +Administrator + + + + + + + + + + +A9F62EF8-5870-43D2-9597-6A9F31DAA244 +合同单位关联 +合同单位关联 +1458680784 +Administrator +1458680840 +Administrator +0..* +1 +1 + + + + + + + + +EEE1246F-163F-4D42-BE86-D382A77EEA70 +1458680831 +Administrator +1458680840 +Administrator + + + + + + + + + + +5CFDBB7A-632C-460B-B1E8-BADFFC2506E5 +合同关联关系 +合同关联关系 +1458681970 +Administrator +1458681991 +Administrator +0..* +1 +1 + + + + + + + + +C80FD851-15D0-4BD4-92BE-3170E1A0B80D +1458681971 +Administrator +1458681991 +Administrator + + + + + + + + + + +47082CE3-E015-4F1C-8546-DEA3C67F4448 +合同明细产品关联关系 +合同明细产品关联关系 +1459041851 +Administrator +1459041881 +Administrator +0..* +1 +1 + + + + + + + + + + + +390377A5-324E-452B-A252-8809207A1A3D +1459041851 +Administrator +1459041851 +Administrator + + + + + + + + + + +1A49CDAD-8746-42FB-85EE-610FB82A06A3 +卡劵拓展关联 +卡劵拓展关联 +1459046368 +Administrator +1459046393 +Administrator +0..* +1 +1 + + + + + + + + + + + +27DAF631-A2BC-4066-8CA3-0373EBC053F4 +1459046368 +Administrator +1459046393 +Administrator + + + + + + + + + + +F55985AD-CF79-4175-BE9E-2F3D9829C114 +部门用户关联表 +部门用户关联表 +1459047135 +Administrator +1459047312 +Administrator +0..* +1 +1 + + + + + + + + + + + +4294BD78-B817-46D1-882D-FCB80200FCB4 +1459047162 +Administrator +1459047234 +Administrator + + + + + + + + + + +B3A6D4F9-241A-4A57-8A99-0ED801C6CC3C +用户部门关联 +用户部门关联 +1459047243 +Administrator +1459047323 +Administrator +0..* +1 +1 + + + + + + + + + + + +D57319BF-343C-40E3-82A9-400A44F4BC8E +1459047243 +Administrator +1459047323 +Administrator + + + + + + + + + + +35430E53-7D00-4025-9885-E772F1BD1DD1 +订单明细关联 +订单明细关联 +1459093351 +Administrator +1459093408 +Administrator +0..* +1 +1 + + + + + + + + + + + +CABC91C4-53B9-4C7A-8238-3CA65605FEBB +1459093351 +Administrator +1459093408 +Administrator + + + + + + + + + + + + +533E135D-FE04-4F4A-8A3E-2DC0E0841A62 +PUBLIC +PUBLIC +1458094227 +Administrator +1458094227 +Administrator + + + + +2E6DE9D7-C007-42D8-81D0-411F1B26EF66 +MySQL 5.0 +MYSQL50 +1458094227 +Administrator +1459083590 +Administrator +file:///%_DBMS%/mysql50.xdb +F4F16ECD-F2F1-4006-AF6F-638D5C65F35E +4BA9F647-DAB1-11D1-9944-006097355D9B +1459083588 + + + + + +566708BC-EA46-4C93-8472-CAE6109591B5 +Simplified Chinese +ZH-CN +1458183081 +Administrator +1458183081 +Administrator +file:///%_RTPLANG%/Chinese.xrl +F3A0BF0F-7536-11D5-A4D6-0008C79B4501 +585CBB37-C940-11D1-BD0D-00A02478ECC9 +1310116582 + + + + + + + + + + \ No newline at end of file diff --git a/documents/生鲜配送管理系统功能概要(二版).docx b/documents/生鲜配送管理系统功能概要(二版).docx new file mode 100644 index 0000000..476e85b Binary files /dev/null and b/documents/生鲜配送管理系统功能概要(二版).docx differ diff --git a/documents/订单业务属性.doc b/documents/订单业务属性.doc new file mode 100644 index 0000000..6d6626f Binary files /dev/null and b/documents/订单业务属性.doc differ diff --git a/documents/订单管理表模型2.0.rtf b/documents/订单管理表模型2.0.rtf new file mode 100644 index 0000000..837660d --- /dev/null +++ b/documents/订单管理表模型2.0.rtf @@ -0,0 +1,3619 @@ +{\rtf1\adeflang1025\ansi\ansicpg936\uc2\adeff38\deff0\stshfdbch31505\stshfloch38\stshfhich38\stshfbi38\deflang1033\deflangfe2052\themelang1033\themelangfe2052\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f38\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304} Times New Roman{\*\falt Times New Roman};} +{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204} Arial{\*\falt Arial};}{\f40\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101} SimSun{\*\falt \'cb\'ce\'cc\'e5};} +{\f42\fbidi \fswiss\fcharset0\fprq0{\*\panose 00000000000000000000} Arial Bold{\*\falt Arial};}{\f45\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Microsoft Sans Serif;} +{\f350\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@ SimSun;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbmajor\f31501\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt ??????????????????????????????\'a8\'ac};}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} +{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fdbminor\f31505\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt ??????????????????????????????\'a8\'ac};}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f351\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f352\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f354\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f355\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f356\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f357\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f358\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f359\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f361\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f362\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\f364\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f365\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f366\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f367\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} +{\f368\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f369\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f691\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f692\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} +{\f694\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f695\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f698\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f699\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} +{\f801\fbidi \fswiss\fcharset238\fprq2 Microsoft Sans Serif CE;}{\f802\fbidi \fswiss\fcharset204\fprq2 Microsoft Sans Serif Cyr;}{\f804\fbidi \fswiss\fcharset161\fprq2 Microsoft Sans Serif Greek;} +{\f805\fbidi \fswiss\fcharset162\fprq2 Microsoft Sans Serif Tur;}{\f806\fbidi \fswiss\fcharset177\fprq2 Microsoft Sans Serif (Hebrew);}{\f807\fbidi \fswiss\fcharset178\fprq2 Microsoft Sans Serif (Arabic);} +{\f808\fbidi \fswiss\fcharset186\fprq2 Microsoft Sans Serif Baltic;}{\f809\fbidi \fswiss\fcharset163\fprq2 Microsoft Sans Serif (Vietnamese);}{\f810\fbidi \fswiss\fcharset222\fprq2 Microsoft Sans Serif (Thai);} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbmajor\f31520\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??????????????????????????????\'a8\'ac};}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31560\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ??????????????????????????????\'a8\'ac};}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}} +{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0; +\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red230\green230\blue230;\red255\green255\blue255;\red0\green176\blue80;}{\*\defchp \fs21\kerning2\loch\af38\hich\af38\dbch\af31505 } +{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 +\ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \snext0 \sqformat \spriority0 Normal;}{\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 \b\fs40\lang1033\langfe2052\kerning32\loch\f42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \slink15 \sqformat \styrsid1707220 heading 1;}{\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 +\ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\f42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink16 \sqformat \styrsid3878410 heading 2;}{\s3\ql \fi-720\li720\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl2\outlinelevel2\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \ai\af39\afs28\alang1025 \ltrch\fcs0 \i\fs28\lang1033\langfe2052\loch\f39\hich\af39\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \slink17 \sqformat \styrsid9314071 heading 3;}{\s4\ql \fi-864\li864\ri0\sb240\sa60\keepn\widctlpar\jclisttab\tx864\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl3\outlinelevel3\adjustright\rin0\lin864\itap0 \rtlch\fcs1 +\af38\afs28\alang1025 \ltrch\fcs0 \fs28\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink18 \sqformat \styrsid3878410 heading 4;}{\s5\ql \fi-1008\li1008\ri0\sb240\sa60\widctlpar +\jclisttab\tx1008\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl4\outlinelevel4\adjustright\rin0\lin1008\itap0 \rtlch\fcs1 \ab\ai\af38\afs26\alang1025 \ltrch\fcs0 \b\i\fs26\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \slink19 \sqformat \styrsid1638633 heading 5;}{\s6\ql \fi-1152\li1152\ri0\sb240\sa60\widctlpar\jclisttab\tx1152\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl5\outlinelevel5\adjustright\rin0\lin1152\itap0 \rtlch\fcs1 +\ab\af38\afs22\alang1025 \ltrch\fcs0 \b\fs22\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink20 \sqformat \styrsid1638633 heading 6;}{\s7\ql \fi-1296\li1296\ri0\sb240\sa60\widctlpar +\jclisttab\tx1296\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl6\outlinelevel6\adjustright\rin0\lin1296\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \slink21 \sqformat \styrsid1638633 heading 7;}{\s8\ql \fi-1440\li1440\ri0\sb240\sa60\widctlpar\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl7\outlinelevel7\adjustright\rin0\lin1440\itap0 \rtlch\fcs1 +\ai\af38\afs24\alang1025 \ltrch\fcs0 \i\fs24\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \slink22 \sqformat \styrsid1638633 heading 8;}{\s9\ql \fi-1584\li1584\ri0\sb240\sa60\widctlpar +\jclisttab\tx1584\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl8\outlinelevel8\adjustright\rin0\lin1584\itap0 \rtlch\fcs1 \af39\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f39\hich\af39\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \slink23 \sqformat \styrsid1638633 heading 9;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv +\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs22\alang1025 \ltrch\fcs0 \fs21\lang1033\langfe2052\kerning2\loch\f38\hich\af38\dbch\af31505\cgrid\langnp1033\langfenp2052 +\snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs44 \ltrch\fcs0 \b\fs44\kerning44\dbch\af40 \sbasedon10 \slink1 \slocked \spriority9 \'b1\'ea\'cc\'e2 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af31503\afs32 +\ltrch\fcs0 \b\fs32\kerning0\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink2 \slocked \ssemihidden \spriority9 \'b1\'ea\'cc\'e2 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\kerning0\dbch\af40 +\sbasedon10 \slink3 \slocked \ssemihidden \spriority9 \'b1\'ea\'cc\'e2 3 Char;}{\*\cs18 \additive \rtlch\fcs1 \ab\af31503\afs28 \ltrch\fcs0 \b\fs28\kerning0\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink4 \slocked \ssemihidden \spriority9 +\'b1\'ea\'cc\'e2 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \ab\af0\afs28 \ltrch\fcs0 \b\fs28\kerning0\dbch\af40 \sbasedon10 \slink5 \slocked \ssemihidden \spriority9 \'b1\'ea\'cc\'e2 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \ab\af31503\afs24 \ltrch\fcs0 +\b\fs24\kerning0\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink6 \slocked \ssemihidden \spriority9 \'b1\'ea\'cc\'e2 6 Char;}{\*\cs21 \additive \rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\fs24\kerning0\dbch\af40 +\sbasedon10 \slink7 \slocked \ssemihidden \spriority9 \'b1\'ea\'cc\'e2 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af31503\afs24 \ltrch\fcs0 \fs24\kerning0\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink8 \slocked \ssemihidden \spriority9 +\'b1\'ea\'cc\'e2 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af31503\afs21 \ltrch\fcs0 \fs21\kerning0\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink9 \slocked \ssemihidden \spriority9 \'b1\'ea\'cc\'e2 9 Char;}{\s24\ql \li0\ri0\widctlpar +\tqc\tx4153\tqr\tx8306\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext29 \slink25 \styrsid13965460 header;}{\*\cs25 \additive \rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\kerning0\dbch\af40 \sbasedon10 \slink24 \slocked \ssemihidden \'d2\'b3\'c3\'bc Char;}{\s26\ql \li0\ri0\widctlpar +\tqc\tx4153\tqr\tx8306\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext30 \slink27 \styrsid13965460 footer;}{\*\cs27 \additive \rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\kerning0\dbch\af40 \sbasedon10 \slink26 \slocked \ssemihidden \'d2\'b3\'bd\'c5 Char;}{ +\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af38\afs20\alang1025 \ltrch\fcs0 \b\caps\fs20\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 1;}{\s29\ql \li240\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin240\itap0 \rtlch\fcs1 \af38\afs20\alang1025 \ltrch\fcs0 +\scaps\fs20\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 2;}{\s30\ql \li480\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin480\itap0 +\rtlch\fcs1 \ai\af38\afs20\alang1025 \ltrch\fcs0 \i\fs20\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 3;}{ +\s31\ql \li720\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af38\afs18\alang1025 \ltrch\fcs0 \fs18\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 4;}{\s32\ql \li960\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin960\itap0 \rtlch\fcs1 \af38\afs18\alang1025 \ltrch\fcs0 +\fs18\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 5;}{\s33\ql \li1200\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1200\itap0 +\rtlch\fcs1 \af38\afs18\alang1025 \ltrch\fcs0 \fs18\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 6;}{ +\s34\ql \li1440\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1440\itap0 \rtlch\fcs1 \af38\afs18\alang1025 \ltrch\fcs0 \fs18\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 +\sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 7;}{\s35\ql \li1680\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1680\itap0 \rtlch\fcs1 \af38\afs18\alang1025 \ltrch\fcs0 +\fs18\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 8;}{\s36\ql \li1920\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1920\itap0 +\rtlch\fcs1 \af38\afs18\alang1025 \ltrch\fcs0 \fs18\lang1033\langfe2052\loch\f38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext0 \sautoupd \ssemihidden \styrsid5928154 toc 9;}}{\*\listtable{\list\listtemplateid-565164130{\listlevel +\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\'00;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s1\fi-432\li432\jclisttab\tx432\lin432 }{\listlevel\levelnfc0\levelnfcn0\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03\'00.\'01;}{\levelnumbers\'01\'03;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s2\fi-576\li576\jclisttab\tx576\lin576 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'05\'00.\'01.\'02;}{\levelnumbers\'01\'03\'05;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s3\fi-720\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'07\'00.\'01.\'02.\'03;}{\levelnumbers\'01\'03\'05\'07;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s4\fi-864\li864\jclisttab\tx864\lin864 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'09\'00.\'01.\'02.\'03.\'04;}{\levelnumbers\'01\'03\'05\'07\'09;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s5\fi-1008\li1008\jclisttab\tx1008\lin1008 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'0b\'00.\'01.\'02.\'03.\'04.\'05;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s6\fi-1152\li1152\jclisttab\tx1152\lin1152 }{\listlevel\levelnfc0\levelnfcn0\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0d\'00.\'01.\'02.\'03.\'04.\'05.\'06;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s7\fi-1296\li1296\jclisttab\tx1296\lin1296 }{\listlevel +\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'0f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \s8\fi-1440\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\rtlch\fcs1 +\af0 \ltrch\fcs0 \fbias0 \s9\fi-1584\li1584\jclisttab\tx1584\lin1584 }{\listname ;}\listid325517324}{\list\listtemplateid67698717{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01);}{\levelnumbers\'01;}\rtlch\fcs1 +\af0 \ltrch\fcs0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1080 +\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'03);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc2\levelnfcn2\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'05);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;} +\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listname ;}\listid391467813}{\list\listtemplateid67698717{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'00);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01);}{\levelnumbers\'01;}\rtlch\fcs1 +\af0 \ltrch\fcs0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02);}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1080 +\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'03);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'04);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc2\levelnfcn2\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'03(\'05);}{\levelnumbers\'02;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'08.;}{\levelnumbers\'01;} +\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listname ;}\listid946230203}}{\*\listoverridetable{\listoverride\listid325517324\listoverridecount0\ls1}{\listoverride\listid946230203\listoverridecount0\ls2} +{\listoverride\listid391467813\listoverridecount0\ls3}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid93858\rsid226287\rsid339454\rsid410171\rsid419884\rsid474716\rsid550578\rsid659613\rsid661150\rsid665833\rsid1191376\rsid1325476 +\rsid1408820\rsid1579352\rsid1638633\rsid1660463\rsid1665810\rsid1707220\rsid1713711\rsid1771538\rsid1911231\rsid1985331\rsid2114067\rsid2295059\rsid2295120\rsid2429433\rsid2899502\rsid2959144\rsid2977652\rsid3090370\rsid3110633\rsid3374631\rsid3422426 +\rsid3622777\rsid3630106\rsid3637040\rsid3701221\rsid3739968\rsid3820916\rsid3869862\rsid3878410\rsid4025644\rsid4345272\rsid4484060\rsid4616449\rsid4731321\rsid4795471\rsid4853839\rsid4930012\rsid5393391\rsid5515278\rsid5601452\rsid5705775\rsid5714291 +\rsid5928154\rsid5994975\rsid6231172\rsid6233925\rsid6303063\rsid6444461\rsid6513726\rsid6515019\rsid6556251\rsid6646052\rsid6754445\rsid6957012\rsid7101740\rsid7226532\rsid7274583\rsid7276168\rsid7298884\rsid7413393\rsid7630480\rsid7806314\rsid7827759 +\rsid7889197\rsid7896551\rsid7958185\rsid8139879\rsid8342456\rsid8476797\rsid8542176\rsid8602007\rsid8666985\rsid8717646\rsid8920541\rsid9057957\rsid9314071\rsid9316643\rsid9318094\rsid9437852\rsid9445281\rsid9520968\rsid9527051\rsid9642678\rsid9706587 +\rsid9965382\rsid10052933\rsid10166129\rsid10176861\rsid10373212\rsid10435884\rsid10446388\rsid10516073\rsid10580407\rsid10617031\rsid10713943\rsid10821095\rsid10828774\rsid10911521\rsid11075665\rsid11084382\rsid11218523\rsid11233620\rsid11603568 +\rsid11610615\rsid11612058\rsid12065202\rsid12074284\rsid12205969\rsid12347611\rsid12585157\rsid12589058\rsid12589505\rsid12598887\rsid12728675\rsid12985307\rsid13003843\rsid13111318\rsid13196287\rsid13200352\rsid13439306\rsid13525250\rsid13581728 +\rsid13655427\rsid13697744\rsid13790921\rsid13898085\rsid13965460\rsid13991160\rsid14094794\rsid14104020\rsid14183836\rsid14228061\rsid14234738\rsid14247152\rsid14357588\rsid14703814\rsid14763118\rsid15013806\rsid15218787\rsid15237069\rsid15290439 +\rsid15471213\rsid15597730\rsid15624028\rsid15678480\rsid15755255\rsid15945847\rsid16058883\rsid16080776\rsid16211490\rsid16285161\rsid16405595\rsid16539997}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1 +\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\title Sybase PowerDesigner}{\author Sybase}{\operator Administrator}{\creatim\yr2005\mo7\dy3\hr12\min24}{\revtim\yr2016\mo3\dy23\hr9\min32}{\version6}{\edmins3}{\nofpages9}{\nofwords365}{\nofchars2083} +{\*\company Sybase}{\nofcharsws2444}{\vern49255}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12242\paperh15842\margl1134\margr1134\margt1440\margb1440\gutter0\ltrsect +\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1134\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\viewnobound1\nojkernpunct\rsidroot12728675 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0{\*\ftnsep +\ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6556251 \chftnsep +\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6556251 \chftnsepc +\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6556251 \chftnsep +\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid6556251 \chftnsepc +\par }}\ltrpar \sectd \ltrsect\psz1\linex0\headery709\footery709\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3374631\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta \dbch .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta \dbch .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta \dbch )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl6 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}{\*\pnseclvl9 +\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb \dbch (}{\pntxta \dbch )}}\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \dbch\af1\insrsid6556251 \hich\af38\dbch\af1\loch\f38 + }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid9965382\charrsid3374631 +\par +\par +\par +\par +\par +\par }\pard \ltrpar\qc \li0\ri974\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin974\lin0\itap0\pararsid7413393 {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid9965382\charrsid10828774 +\par }\pard \ltrpar\qr \li0\ri74\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin74\lin0\itap0\pararsid7276168 \cbpat17 {\rtlch\fcs1 \ab\af39\afs40 \ltrch\fcs0 \b\f39\fs40\insrsid15945847\charrsid7413393 \hich\af39\dbch\af40\loch\f39 +Sybase PowerDesigner +\par }{\rtlch\fcs1 \ab\af39\afs36 \ltrch\fcs0 \b\f39\fs36\insrsid9965382\charrsid7413393 \hich\af39\dbch\af40\loch\f39 Physical Data Model Report +\par }\pard \ltrpar\qc \li0\ri974\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin974\lin0\itap0\pararsid7413393 {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid9965382\charrsid10828774 +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid9965382\charrsid3374631 +\par }\pard \ltrpar\qr \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7413393 {\rtlch\fcs1 \ab\ai\af39\afs32 \ltrch\fcs0 \b\i\f39\fs32\insrsid9965382\charrsid7413393 \hich\af39\dbch\af40\loch\f39 Model:}{\rtlch\fcs1 +\ab\ai\af39\afs32 \ltrch\fcs0 \b\i\f39\fs32\insrsid7413393\charrsid7413393 \hich\af39\dbch\af40\loch\f39 }{\rtlch\fcs1 \ab\ai\af39\afs32 \ltrch\fcs0 \b\i\f39\fs32\insrsid9965382\charrsid7413393 \hich\af39\dbch\af40\loch\f39 order +\par \hich\af39\dbch\af40\loch\f39 Report:}{\rtlch\fcs1 \ab\ai\af39\afs32 \ltrch\fcs0 \b\i\f39\fs32\insrsid7413393\charrsid7413393 \hich\af39\dbch\af40\loch\f39 }{\rtlch\fcs1 \ab\ai\af39\afs32 \ltrch\fcs0 \b\i\f39\fs32\insrsid9965382\charrsid7413393 +\hich\af39\dbch\af40\loch\f39 WORD +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7413393 {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid9965382 +\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid7413393 +\par +\par }\pard \ltrpar\qr \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7413393 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10713943 {\*\shppict{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fillColor}{\sv 0}{\*\hsv \caccentone\ctint255\cshade0}}{\sp{\sn fillBackColor}{\sv 0}{\*\hsv \cmaindarkone\ctint255\cshade0}}{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fUseShapeAnchor}{\sv 0}} +{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn shadowColor}{\sv 0}{\*\hsv \cmaindarktwo\ctint255\cshade0}}{\sp{\sn fShadow}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}} +{\sp{\sn fBehindDocument}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex168\picscaley168\piccropl0\piccropr0\piccropt0\piccropb0\picw5556\pich3334\picwgoal3150\pichgoal1890\pngblip\bliptag1644798458{\*\blipuid 6209a1faf2af192a234a8f34ac7b753e} +89504e470d0a1a0a0000000d49484452000000d20000007e080600000051474fd7000000017352474200aece1ce9000000097048597300000ec400000ec40195 +2b0e1b0000001974455874536f667477617265004d6963726f736f6674204f66666963657fed35710000ff9049444154785e6cfd059ca55795b60faf7277ed6a +779774c7dddd08098440082481e0320c3203030cc330f8e0ee920011e2eeae9da43b6977efea72f7faae6b9f6a98f7fffb2a145d75ea9c47f6b3f45ef75a3bf7 +d8dfbf3c5e303c101db50d3156581055f97c97e4444fef403496144633ff16e7e64643714ee4678dc74864c7a9b58571e781be9855981b23e3c3f1dc8edd71d1 +e81391dddd1ad9f9b99195931363a3a3115959fc8fef6cbfb3d3ef31c6310686a3bbf1b4289bb23c1697e7c61b9d03d15498179dc3a3e9f82579d9f1bdcd1d71 +667551bcd0dc1533cb0aa32c46e385f6c128c9e530834391939f1fe3c38391cfb12b0af2a2a3bb3f96d496c5ced6b618c9ce4be71cee1f88d1c2c2c819e8e7f7 +9c18c9c98a7c3e3bcc7de60c0e46764e6e0ce5e6445e6f5f54d454c65b964e8f43fdc331ad242ff6f60d476d81f7371e2d836331b72c2f36740dc59cb2fce818 +cd8ad1f1882d0fdf17b7fff8fbd173687fe4b16ebcc4d7788c0d0f476171692c7bdbbbe3e4775e13936aaa624f734b6cbee50ff1d09ffe10834383515050c852 +8cc5c8d848b03a51909b1f454d33a3e6ed1f8cc2a5abe2f4babc181819e62fe33199b5691d1c49f75accf51e60fd8ab997327fe6f562d6bb28372b5a0646581f +7ee66f87b8cf3ceeb994df3b865dd5acf473f7c828471ce7b37931c833eae3bbd267c67f2d4323bccefaf33e3f3f321651cfb98746c7623fe7f16f35f939b17f +c0cf8d4703eb33c6b176f77b4cdecbefbd3cf67d83a351ccb5d6156447ebd0581ce4bb82633616e4c4c1e1b1d8cde7ab798ed38a7263ffd0786ce5f7f29cec98 +c3fbbb918f75fdae4924f9e2b6620bf7dbc6719b944364633fd7b36380fbcbca8e193cfb42deb395eb6de382ab39ce949292e8f9c3f7a3edefbf8a31d626f354 +bc428fca4f3c53bf94cdc3af2539e578232343e9a5f4ceb1b1282a2a8bfc7ffd41e4ce3d3a8ad63e1f39dce3c1c9336290d74791e9be51e4687c2472a75595c7 +9ceadab86d4b6be41417c5684d41f4b380a32cfd0807cbe1e0793c981e2eb285059b5e9e1777eceb8dcabcac6842e13a46b2635a455e641f1a4479c6223b298e +8f6d3ce94d160be86ba12271fde32a63767e6c1caf8a39635908d378f0b128e7616eef1be1df88275bfba3cccff0d08739eff4e2bc78fd605f14f1d96c7ecf4e +8bc2370fb300a5e81b40d9b9c1f1b1e1f420ab787f574f5f8c72ee5104259f05192a407986108ebc3c75397239ef080f2677700005cb8d2553ea105c1e280f6a +9837f81e05673dca33ad243f76f58e44451ecac81f0ef50dc5dcf2c2183dfbc2b866ea8cb8ff87df8acdafbc14f928adf79e93571003037df1e2ef7f16c32d07 +62e57b3e1493a74c8ed3dfff91c8abaa8d877efea3e8ede9e2fdc528470ef73818831885f13d5b62e877df8ed9effe583cbbeac4a8cc1e8b93781e2a8e0fb616 +216ee6e742cea112350f0ea334d949890ea144c54909b2e320afe765e746197fd338f934cab8ef2e149ca5e6d9e5453ff7da3f368ae1cc6719c7a31d25aacccf +4ecab6a77f28dd7f0342dacf7aefe3d835ac6f05e7d9ce3a0cf2b7a945283a6bbd8bbfe5f3ac9a10fa6614660f4a54cb1ad6f13c77a37c6d28ce24aebb9ab5db +8291eae47853786f7dfa7d242959237f9f8a92ede4b37b8646a302e19f5d88128e8cc79bbc677c3c2b1616e64401f7b19163768c8ca4cfcfe49a0e71fcd739ae +323193eb5591f6a0544317bc2bf237bf11836b9f8b71ee978364646642810e2bd3e1d7c690911c3e9b832c8c62dcd2fb783603dd1d91f5e76f47de677f1e63d5 +8d18c1bec0f4f23d1603431868f503a3949b8f06d62064453cf8a2c1de086e68a0a43646589c61cedbcdca63dff91ee3e1a01e5c5017375c99971b8fa33ce5dc +d0a4dc81c81a1fc513653c9017979489f767f3ad12258fc4f17c5f7f14c72b7d85d1d9c943419986b0f04b39c7a6fef1286521371fea8d9978c3eee1210480cf +a220dd2cce180b328e30040a30ce75733a16702cfab1b8336bcba303cf92cd4d0db028a33cb0b1a2423cd0000b89f9e3bcd9bc3ec2f5e6a5d70a92d9717d6b6a +2a627a4551742014b3f0383b7a87631282b21fa155b87251e05e14725e71416cef194e42d389451ce4412f59b92246bef03f51f3fb9fc7ea7befe021f040b8be +1cae43affcca9db7c4a1fd07e2b24f7d2e3aa6ce8e232fbf2a26354e8a1bbff9d5683f78208a4a4ab91d8499fb19e23e7931b6fefe7b51d9d119d5e75d14aff7 +8c4509d7390b577c0081c9653d6bb8a6fd5c6b1e6b5ac5bdede75a54a82aee6d1fd79cc733d00874b25639fc5ccab5b4ab44dc6c657e5ef4a15cde8f3f8fe015 +3bf4441c474fb6a77f506b8737c98f369e451b6bdb8010e773ae4dac8b4f5745684338f6720d1a9706ae67f7c018823f8657ca8b721ef5463c7a1f8a369375d4 +abbcd1cb7a214bb3f95d5178b97b3806b89ed9c52828e7dd88c2b4a3dcd3502a95643b0ab33b295556cce698ed5caf4a8464a154f951caeb5bb9d783dc4b098a +3707c51d61edb762047a386e557965d45ffb9968f9da47a3b7752fb2890c2899130a9591d37f7ef97b469934c8f859d605618dc0d00c6e5e1bb9b7ff3cb2dffd +f918dfbf376af66d8bbecacae8abae8ffc1cb40365ca1ded6a8ffd87c6a272b03bf2b050fdfbd1f8aaeae43607314b27d61663454678c884502581901a7ea150 +fe9dd083a7193923bdc829ee5d45e1011ed6fa14d24d78a374d94676bcaf232a23673c2766e48dc7d3cd033c8c3c1efc4012d22578b961166c6a4d4ebc7aa887 +87981f877a07513e3c9b66d2c5e0dc59789702167c8c075d80152dc3836feb23f42b2a8a3e42ba6c5e73d1f48c43086a2ea1dcb84f5093cce7473967360a358a +90adc41b8d2004953cc44e1e9ec100b785f08dc7fcb2dcd8c9754d2fce8f1e1e9a42aa07d8868599599a17dbdbbaa3615263bcfd735f88dcbac6587bf39ff036 +dd29f4cce601676515c49e979f8e3ffec767e3ec8f7d3a9a8e3f2ef28f3935aefd5a65dcf28dff8a6debd7456979050f3a1f078c3211668f773447d76dbf8c4d +2857dec917c6490d84d8781905712a42d5c2cf0a678da15252a89ca4f01925ca845f877ccf84a21d623df53a1abf5e9ee50021404552a271423dc3c1dca428bb +5154bd4b1de1dc2194ab8335a9e37c3eb8cd78a202de33c9d086356fe662ea394f090abc8148826025856aaef91bfcce9dc70c7e1fe6f7cd284901b2b010a5e9 +4148d7756742bf15a584d6c8d5eb3d4814f7b30025d358af4719da315233508e3a6e7407e7dbcf73a942b6a6700f8693ebb9d72e2212bd501dafefe5d93473cd +b9acc52cde53923516cdd3e746bce5bac8fdcd7fa364a61a19d93c1ccefd3f9a3411f68d196a738c949aa48097e884e738f0f0df226fd9f15131e7c8c8dab715 +0f941f590d45913b3684d71e8adceee71f88ade535d1585d93dc79f140778ced2c8d96fac9d1925f1427d5e6c773ed5c60561e96683c9e69cb42b9b07c3c9cbc +2c970b0731dc8bd74091525e941cd2446e84c355990e5f318bea423767d7102ee661791068166d2e0bfafc819e281bc74df2908bf8405ef678f4a118475415c7 +9a969ee4d1b2bd4916436b91e3c5a610aa371a8af2a3b56f20ddb87a3cceb50ce717462eb9888b97c5c3cb23581dc823f462b1c738778c625d3104931aea0857 +0b526ea4b5dcdc3d145309e514aa062caf216dc6aa0739d268cc2acd8fbdfcad1e2bada119e2bb296b347611ef5c72c38763ce9cd9f1f7ef7f277a9bf7a14c04 +23867a0545d1b6795ddcf7b52f44db07fe254e38e79c285971645cf8a5ff89c7befb3fb1e1d597a2a0b80ce38255e5ba868650a6ced63878ebafa28987b4facc +cba29c4539a95a01c7b223405351ec762203ec68f21e7acf5cae7312d76528a60133673998942808b5c82311c85ed6b78a9f0759137fafc2a0a083b187cf979a +d7b006fbd08a013e3409851ae0feb613ca56a06cb5865f28451b423b43a1e71c1bf03c635cc55cc2e96e8ebd1137548e1133546bc6101d60bd6b78ce5350ba03 +2883a15b033fcf646d0ff2f34ee24343c6595cf721d67a3d0aeb71179193bbeeeb596b9c5d4ce35e2671dc6d1c4f452e44d897266f371e9bb8c75eae53efdcc8 +b7f7b68508863c20aacf784b146f5b172d2882c2917225b5366393335fc90364a454d9ca42aeb3098dc788629240b32e2318ddfe3f7d3bc63ff78b189fbd3c86 +badba3bc1d83575a4a8ec4a1f73e7d5fb29cc535f5915358126593a6c754bc532556b165e6c2689d3c29f68eb23058ff5e04d464f7e8eaecb8757fc469f505b1 +be67307246fb638c1bcce6e6d2e518ce4de471fe638e848e10968dc730c73a985315852c4cbf82c8e29944f7a234cbeb4a6217a081497e2b2186b9402e2ebc17 +25c99a08d3c8d25158ce953c0e1e829f271595c6e6d6ae2821f41a46d0d2c951ea1c167498f76713d68ca83c2a140b358a0266eba110f0a3a7d644270fa21eeb +d98c609a63b898638437d5e4819b0941669516c44ec21a95476b6e9e642eb5a527933f1de273053c8cbcb1c16838e9acf8c094a9f1d76f7e2d76ae594d1e5494 +1e520ee042e7817df1c477be1259ed8762f64557c4d4790be38afffc7adcf1bfdf8c2d2fbd10b908ee783fb91dc9eb107953f475c6fedb7f179d5dddb1e06def +893584796508ce4c94484fe4f36fc2ca1f4409b4b593b9877d8479de7f23426628a81733d76947f8fab8f66a2ca900430fbf97b026a418dc37b9a94002c2bf0d +ef6b483f956375f14741865a144f8fbf81bf65c2b1fcf4ec36b026953c87c9e433fb590373a246bc483d9ab983eb539166b06615782dbd5227e79fcd3d56a138 +86721d789de97cd6506e2befdfcbf96a79de2acd413ce52ef2a7020ce152c25aede646ded3c6b537f1fe460c402b3f1fe4bce3acef02eeb1887f0f621c5b384f +39b25887f267a358ad577e280a51a6fe6d6f44561e20d5ffa345ffd0a67f78ab64a8599b71ae6f228489712297a15d9b23e7e61f44ce0ddf887272df92cefdd1 +3b6b418c16949073b390633c9cae7dbb932be9d8b9290ade7c214aaa1aa26aeef26829ba0434243f1aea6b620f9adacf8d758e64b1a0d9c4ed39b111379d3dd2 +1f435a44c38009f793014454289528f3a26e92d4341aeb1b41eb0a53d258c8a228e0e358c052acd4defdc371545d69ece8ea8d26ded3257ac445669be3a034a3 +59f991373098d038dc116116a10e42a16728419a3a0869c658ac3c112fa5cbb87742a10cef46f012b82c7299f198d6501193b0a487b08a855ce35e2ce41c3c8e +39d2645ef72199030e0b56f06d4eb1a96b386680ea35f3992a2cab8baed79a074ab20d6f568fdee42d5a1c177df16bf1d2af7e182f3ffc40c69b62ac7251eaa1 +de9e78f067df8be33a3aa2e69aeba2abb231aef8f72fc5eddffa46ecdeb01e63d416fd7d78782e7d881c31b27aa2ffd15b622bdeb8e8c277c6b1932b5208637e +36d56be43af4385310fc0308da30a192399c4ad4cf7b9a5028433b3d511d02dac71ab6e3512a5937c5e450fa59902297f04d25cc2864336b7108416ee2337aba +75ac492e0b3a8f737692cbecc06be9590c23b7712e11b3597c4ee3b7092511f15b8c57f11c6bf152021e8b5040bffcdd647d09ebe855bc815713245ac07517e7 +8cc736d69df4398571f55c9bf9d14eaec563ace0fc1e750f6b90bc107f6fe07dfd3c9fed1a7364790af75285f21a461ec43065136d55bee3a331f6fdcf20a7ae +6d06aefa875b9ac8ebff61fd0de7586ff3a531f3d609a1360d187ae6de285c74740c1e7351f4ef1d8f420d5a0e6b33d8df93de67726c169883b20c93b4b7756d +8ed8b1316e79f5f1c8af9d1c878e3d3986a6ce8ad286a9b1a7bc1e6b407c8dd5ee6551278d9a23710c15094ba0f930844b681d37f60f2fcac31cce25b1af2cc7 +62e6c42ec085e39bca630801cf377e1f1a4e895e250bda756028164e2e898d873ab006c455296ccc206a4508581fb9508e307879491ce8e80323c90645e1012a +80dc47b1b99c712cd737c6bd1904193288e4e5a080595ceb114d55d1a615e57c2dfc6b68d08d553417c8e7d23b7978b3c883b4d2b351b06616ad0a6b2bd8ab45 +369cd980f22c001af7f326fcc2d25bdbbb63e5fc1951fbd92f463e79d3eadbfe42b886627b6e51430cc80b7ffa55b4b7b6c6251ffa58129491a2f228053dcd45 +59c75b9a63b08fe7c2c2993309938f3d726b2a3fbc79c93551c4359d50892744d8f58e331148cf6fa8a912e945fa53f8e7eba309f2ae23d7ece4de5af9aee71c +a0ce492155ae623d068a22d8301d65d88e9274a28433cd79cc8f10f442dee3dff6f03743b2e97a1abcf21bac8dcf77119e7900257e9330b0081998579c1d5d68 +d336d6ac082362e8a632efd238f1fb7c43531ed61a94ceb55ea0d271a07549e922e62694309bd02fe3856a39ff64bc5d173f6f338fe559ce4089051d34067aa7 +7243539eb5caa467d2db96f02c2b91a9b1634e8eb14bae8d43377e1f79faff847613663ee39232d29a011eccf15526a52a83460ff3ec726ffd690c2d3a869247 +714cdab931ba2635456e1e5a3748fc972d58205297d58f3e0903724108705f6b4bf41d3a18ab37bd1ef9a51551376771f42c5d11e593e6c6f6d265d1dcd313f3 +470dbd882b0db73865d27713fbff7381664aa32a52613d17944bc2695810d48008f5b04b4737f1d0bb7bb1e8840d5cac49a7717e0b0f7180f0a8ac1f656591f2 +f138e39c47c5ca37c44361b2c985c62bca63a017d4918794cd228e718e11bef3d170f1fe7cde3386a26429b45cd79c866ace95176d3c2891b03e05070fbb1560 +631642b187585d656fe7a195b0f06214dd842a73001fb6a03cb341f7f66389ebb87eafb303a55b8c70afef1c8ae908766b775f0c91935df7a97f89126a744ffe +fac7318472e4e02d45900c4b37dc7b6b0cecdf15654d3362acaf3f0a2a006180f30d913ba94d0de0bd3450a3dce7d0605f1c7ce8b6e8c71bcfbfeafdf13a6b50 +4170be80e46d0f6b2470308d306f2f82695e330d25da471da38bfb9a6c0ec97d58d349790fc73c80620b51b35af126c97eb5790c0599cd0005bd28e11c3e6fad +683bc7abc578f8de2d285b0fafcd27d41ac188beda3d920479364ab08f187217c98c5eaa896f3dc6015e9b8cc13217d6dba7dc0a85121edf85b237a3cd93f8b9 +114ddac37bf7b3be7a92e9ac6917f7b011a55461e672cd1ac143441eedc8905eaa86fbd798ede13e449567737d02183dbcd6c279b4e1b5bcaf10e3dbc5fa75a2 +c0f9e7bf3dcadf78393a5e7f8aa426e31dffdf6469e21541aa0914cf5ce9705eae51c912153eb83b4a6efe5e8c5dfbf58896bd912d9abaf0535f237e7c3d5e7b +8683fba089df4710bae11cc42de53ad64548eaf879a0ab2d76bdf878ec5efd4c54344c8ab6a79745f5b4c991bb08255448157e3439f3b97fc67809b9e306752a +c345b5d42144fd32a8c4a65ee2591e46218bb7b5793c96537cddddd58f55e31abb7a42c0552023574431af388a863aa39ffa8b5ec5506994c5cd1584c0ea66a3 +8086750518866142bf6c9276af498b9ecfe20c22c039fc2d977ce5a8491524eb43e457f92939afc7922b6c225be6417a9d6214e8201658a5d97538dce3bdd55c +ab50ab567f168ab5b66328e6f19e83089db073199f7bb373381655909c23e4a7bce39dd154571db77cff7fa3f7d08184e8890cb10cb1ed9517a27aef9e98bcf8 +08b013c0105665a4a42c0a401e458eb28739178083ca1494277a9eba3bf650eccd3ffbad513eb93a855886517aa5dd28411f3f5b77dba557c1245bef39801075 +f0b385dd1e144b4fd488c5f7116c229c6be07e2c9e6ec07868c5e7a1282dac858a319575f17e36726c2f78017febb120caf1eb500251bced08523b1f9c8de1a9 +e4bd5b5907a16f3db65e743b61bfd7381f4517bd13e533b2d04b1561e4cca75ccb191cab06e36a6dc870dddcca22aed7b49b6b363598a507d5c0721f7aaa323e +af5219f774f2bb5ed950d5e32a5f42eabdd8f552becbcacaa2e43d9f8cc1afef8cfe437b32d1d3ff9fafc3a29bf14c99106f44843a8112fc9342bcfb63f43d5f +8ed639cb22efd0dec85d76c18551957d76ec3ef7bd7154766fac7fe999687dfdb518dffe2679d3de5485cfc52c127d61498df58d99b9e883fba27dcfcec85e30 +2bb2179f9410917fc0ddff80eed4eccc0d19b28d8ce7456f41ad694bb214035c649e583ddf1bc8b57a40f076835675c24cc82199ebc61315e652e3a2583966f5 +1d44cba46e90ef42eb48e5d531d8d11e054525a07f3da94e32a6d2713e13e63c1676a8a83841df09eee6e178ee99f5550934e9f34de66dbc66587680447d0105 +67f3a02908c17e04c27a523716ae5037cf7bf55cb3519e8dbc6721689ff9542d42a802b461611755e895f06a2896c5d07ebcc00c2c76ffe9e7c53b0174eef8e6 +7fc5fe6d9b519a223e43de8435ee38b42fc6df202758bc22b2b9e7d9cb56445d6951dcffab9fc400f9927526c30a156a00cfd4fcf0cd51dbdf159b8076874b4b +e28c5ac24f245761d443ed42500d9be6a05cfbacef705dd3b90f85ddbc671a3f0b875b005750ad4bbd817751c8f536bb050a0c6b5903c3f337015512b2c6f1f6 +e0cecc9fac0fe9a9cdab5c46f31dbdf6568e2972ba38291cac05944c885c6456c5de81619139311fefcf234fac8502ce31dfdc874554290d3bf54aa544172a94 +307c25c7a84580cd970de586b8fe29e4af7a4415bb9b67adc1f67d42f9e64c3d1310761d325b80f7ee460efa672f88f2b7be2f867ef69f690d94d9545acad445 +fe4f14e58b1963af4c65bcd2448987f30c5936b8eb973174e567a26c8f70787f37352762638a920b78d0fb1ba6c5bc8bae449077c78babdf88c69d6b63fdb3cf +4476ebc118efeb8ee16c720e8ba27a1d0087629811595c89611bf7902c83229701bd7dcfc405713183b995d195571e4b102c8573788c85e0fd2dc32c86351a84 +a403c5c82e23c4c1020ca274852d588e92ca94ec1790d40d2a80849c792ca2379325c242f830d2d31903a0777908de108082a1aa619e0552719a210d0054a13c +0aa0e66542c786427b78f053100a1903295742502c029be389dc71a90826390139d276c2d19908c43e14ac01ebebc3e4478ab9b9f1e68457d273c930502877e1 +6d975414c41614ab044f37e9d8a363e83fbe164fc284d8bafaa50c3c2ea2878074b6ec8fd1d78762fe4967c6f1175c10fd6555711e4c937bbefb3572a9362847 +c52c3929ba05edbeae38f8c4dd096099f3ce0fc5f31d509f58fb55e46adb52684601977b3307ed9e6086585c5500a7b056866c7bbd7fee57a17b15a3508f0c58 +07dac887f56a0bc9c3f45e7a8b2684dabf6f35cc260f5a84d29882ab4405e643840f2ae93ed64ef6854c05616f73b8e99cc39ce8008a29cb412a580d68a875aa +83601b75ac4b5301c684ebf43352896af936f392fe646460a8280d4aefe2fdb8b693ac2771ff168c0dd53d878091752b8bcd16e545fc0a795db0c890d0e75540 +7e5d7efa4531fac64bd1fae49dc8b121de6125ca284ee6fb9f4a65bea403d1e667f225e403191cbde77791b5f8e8e89d7f3cc6c3f88213e4103a084f17e0151a +4a0ba3a76172cc3d67762c2cba20dacedd1f47b66f8d871f7d2c0a776c88ce6d1ba9f1f4a51316a048266516ad525c994992d275a44b49ee939fc8a3da47cbe2 +d07821892f611c0f650548d76ee2605122738a3e10155df2906e948438071858846d4c1a4cc7c11845b88685bca388101115246f2a42b18609d7ac65a4ebe1b3 +5dfcad040f358cf015584bd2f58bf8712dcb41ea8ca5357fd64a32516886a654296d05887906d674274262ae93e1dce5004ac8044031b93f3f370d88f0cd8ee1 +588c07da41c2ad12aaec0ae902eecb5c694e0221440fa9e9907faca378bb7cf9d2a8fef7afc4eddffd66ec78e1c9f440449154a69e8e96d8f6f233f1ea6ba7c4 +cc634f8a65679f1f5928dbddb0203a0e35e3c5401c7decacc9305ebae3a97b622bc25279d9b531795215ec01439bac588cb20b18f45ad414cd4b549d51c2b47c +2c378938426dcd2c072b2d843d198fda040cbd96dc4fe3b198ebb6feb4176f26f3208576d67778ae8b581b693efe6d12da2b6a676d49687b0eef15b8d0d399b3 +cd67fdfcb246a5422ce0efcac82edeefeff37c3fcf7b2fe71ae29eac0155f1ac548e169446e5a9e1353dc7218cb76baf922a237d18e60ece29a25825222af2cc +1bac21e9452b6432f0afb5ad015937fc5746be63cda797e791ff0e388d5bd74240d899b8a119aff44f05fabf7c3cafd9882a37e5b6084acaa19083deee28bbf9 +4731f6f92389943801a29a2ad199c3a0547ce772e11558fc6c046e6e636dcc5b3a35d6cd3f2e4ecee98ebb9e783e166e591d5b5e7836aa26d5a7f7c86848be28 +295126d4c95c1aaf268fc54d5258cd2d3c10edf533201e528f62d1f5464714678152916c53941ca2089cdbdd966a3c395c68e48127531b4a742316afa4851cae +b28e1c0eafa4faa02c239d40c68444e63f8670398440bed7a8ba84cff6e597a75a523e61dea2bab284be89c2199699949ba037a93413e081c85d991e0fab90c3 +794b91a07684744122d80ec77cc23fc18826bc52170fdcb87ca68208a976211e68d78462090e599b9a431d6a3b425a4b783adcdf1f854d93e3c35ffdaff8e557 +bf1aeb1e7b10ef2adac9ff50aab6bdbbe3d1effe775cf4e92f44efcae3a3e6b8d3e36d9fcb8e9bbefac5e86a6b218c2d4e4f6cd4c22d86afeda9bba2b2bc34f6 +9effce38905310a7a7306f046f021246f86488d6c1cf33b8cf76622643a559e4850af2168c85394e051ee2952eeb4ac0db022e78e00e8ebd8835ca812120ab41 +6048d4ce7cb2d5fa103f13e1a673992f2e44c1b4d8bb26684c124e07103ac34c8feb790441543a1c500a35559edd84d3020ad33056b2329a53290368ddb04dc2 +2deb6b886cad515455016e53a9b87e89ae16660d052da5f86f01ca2230e1b9f44ca3285131efc9c79bf7f15a17eb36822c664d9a16756ffb70ecfbd11732dcba +94181df648fefb7f43bd14e0f13ed042d28e5188aae68be3d45dfbd6bd14150ffe9174824b12f5c89110ca1f558142d4b61de1f7e26508179b97004434f25a39 +09dbd453cf8db32ebb20fef8eaa6281b5943a8b72d09fae1684e654c6002df1319128552281b103bc7d7ee8ad5ad2747c99439d15c3525bab884561e4e674f3f +16343bcab5b6d9104c730ba3b0ab2386aaea22b7ed002b84a290178c0134e4f2af7cb9b1ca9a186e6b4d5e6f8cef12bd5169799480760da258f9784daf230beb +9dcb035a3c7b7242030504acea4bf5d1822584d0bc8ab52b43a8762338d341eeb6ffc32b217c843afbb1f2f5586fc10897d904fd4d3c8f35a48d846f5351466b +2cdabf5a146b3d4a270341744f5e9ce0c52e3cdc9c529265e0ee0b50969aea8a78fab69b53426b0e9a8327eed9bf276efbef2fc6891ffe742c3be7fc685f7e72 +5cf2f9afc6fddffecf3874e0402af2e62030490080c7b7def3d76880afb8e06dd7c433ed432977917e23e296c2bfc4b21ecdd06e10600bebe63953410895fe37 +085965444ce17e366130647bafc02bf5702fc2d716676b5833435c0554a5d1e36c270614289accda084eec07796be01812542d52b74f10544b788fdc3cc33719 +0f7ab856944305112d4c6507fe262a27143e09a686f9aee19f399154244b12fd5c9790ba625e05a54aaa503ff2d96f788f125a84f5baf45616a27994b03532a5 +0f15c8d04e7a59319076168ad777e2d951ba7e7574de77236fce78cfe47d12bbe170ee947108494284509527590f528ef81aa1b8df77fb2f134490e06ab1f714 +8e6181d409dd28a500980824e2bca0d591919d45885435021a369c1f4d931ba3ac7d638c1aec4ed0d5ffe11d0f7b25b37bbe8608050eedd81badfb5e8902b867 +0d8b96c74b2b4f89d1598b632db9c03896090612972095a780dc0985aaac4ebfeb79c60d1df1502330707380dc47c9a3b20985a4098da25ca55a1a7ecee5fa64 +630db0f06508590fe4c542b86f79e5e5b1b8b62471e9662208d6862cacee46b0a5fdf86f930247686beb80454cc396de09e6850a67e1d5704de5119490f53093 +cfb6f1d4e4bba9989bb1ec8b2b0b50aca15473eae333c8140c04422014534f98c8a0847c33eb2aa3f77d9f8871c09297fef6a794672665429006db0ec60b3ffe +7a4ad0979c757e141d7b4a1cf5c92fc54bff8b321ddc0fc1034fad90e07db3c6fba3e5c1bf253430e7accba3aeba38d6620c8c04e65afbe15e84bc0de7643858 +4b52a17ca686593309b1cc5bd6703f86662bf4b83c2fc3c185ac9188ad75a652a44550a10d0197c9a0f2f939c3402173810a85d750cec73e03af64d86c5d4bb9 +1052372cdaa782f0776b5e8238a2a5aeb3a4db52d6d0daa49e482f620ee597e19e8a2041d5705020c130da03eb7172796f0fcf5e902185f8ac4d21f2da27ba4a +8a901c040a642693940d5e633fc6abf8f2f7c5f886d7a273c7fa947b1f569b8c526562aa7fbe86345a5f529154cfe4c4507001a1845cf08a9640c8d9ca74726c +bc8e514d71b69654cba62519412bedffd06a150d53081d46b811be5c9421c58e87af40ed9dc88fe80688deaec1e8a34e5442ad641c4bba7fcd4b116fbe16a553 +6645c9d263a370ca7c5c25611ad75d4835799c073a6e4c8be60f94d5467e4f077283a0a030e93c5c4faa7d95110a761ca2fd6312e1db5014e3df078087736d99 +b0c82ce8c031274f6ee09aa95320dc0a67354ad2c7c33284933aa3c53bbc6026ee92301b5880edc448b34a73509a115a27f052296cc3e22299f9a2981c5c4110 +5458d3319094723f4a992fa4cff74e045a6f2608d18082bade8215f341fcde6ceb8b4ad6ed9c0f7c143a0e79c86d7f24ecc090b16ed91885eef69678f3a75f4f +fd4223c79c19b38f3b354e2760bd0bce5e5f67c704f2079ac79a8c0ff4c4fe7b6e8c855595b1f79873a29b6b3ba90ab605a1d5287993d0f37e04d89c6101ca60 +ae245fd2d78950632ded2272f366f1cb1641053cdc328c865e601b5ecade23a940bb13b40d9303a511a8d88bd2189acd07a51c66ad0d9315f47a8ea3e149b42b +84df568a0efe6e2f93a0802460bd896c0c575e98ddaf56ae5168dc1c47c53574b690ab47305f5278bb44438d24f8a590f7093074625084014400f3e08592ed25 +24cfbf650b3a704dea5d177229f8e059cbf550750d51f0f60f44ee773f3d11e24d24f8e96a26929d090f957945102a033e8c599248ba04c733b53170e15e94a1 +9c87b1c2ed174844424faa4443789f8aa5cbd4559b700b0664a14ca31635e5faeb0e3db0ffe9bd3c71321a58805e227b8a673968a17ca77c2cc608eeb517fed2 +c0815d9157d310158b8e8a9c994ba208cbda03a0900fbda357081c05c9015d440be929ea4f5e280b60621c8549d024c71b239e2ec08a0f57d4f137149c9bed2e +298f62bc580e10f1929a92749ff9c6e13cdcd908b73992289c689ccd7c22788667fbf8d7fc672fffd6635d0ec97436e69767c7edc85ed889109a0fe99d6cfadb +81b7a9e33d83dcab167f7e6a0424914f2450c3487a7d30d7af9347cd45e8b6a2908694a544006ff64078fdf047e261b8822ffce15789749b3c13f735003bff89 +1f7d234e44107ae1f11d587a725cf4a9ff88fbbefd95e8eeee4e2c64d7c0beab2cd0bc8d7ff9654c07895a70ea79f13c3c1bd9018b78367ba40f250f8547e1fa +3a10466b427a868dacc374eed7b06c6b2a82462ce5faf53ce65873799f7994a1aef2319fb51358b17d438046a44e0550c02d50cb64d04ba98493f53adca7b52b +c3b749fc5d24cdf7eb55cc736ce1d00bb96ebe57c6b9a05542e44c2784b4115c15aadb1206d720c549b196b5d1c7b396be542caac96b86ae7ecef7a9680228fd +2890cfdf68ab08d9a3a09042c25e40a9c1952744d9e96f8dce076e842e7758913291d461e3fa7f7f32c4cbc6bbfdf34b4c81139a2c7be1ac594ad80ce544438c +3b7d9df54ddc27176d002db40ea05095644196845c2973c05ea4a4355ea95fbc96f2246fc8e32e3c3e165d3d9f46abe76327ad0326dd895babd79275803235b7 +ec8bc2379ea51b715954cc984fa85248be0494cccdda4ba4c06483d48d9411f2e185c626cf8c6cfa7746c9a3f261e20e11eed17e8b57a2b6616723ef5520e7cf +98922844e263e6305a3a2da15ea9c3222c2ec887e47d198a15884262380ed38a9a796d6e29f9c304fc2d4aa7e7117050707a1100a1623dd83a2cbba8dd46de2b +b15582a8167c0980c32b6d925c331c3e93f93908e41af32894d566ca29575c0bf7303f9ef9ddcf92b53316d7488cb435c78b3ffc9f988d975871fa59d175fcd9 +b1f4fd7db1e6e7df8c5ee85cb9207b166c53ab0040cd3e58e36324c205cb8f217f013cc0bd0af25a2095326498ba98735ba43557d243691cb7705f555cb3d7b3 +972803f41ea5a16cc0670d85055d1af08e9d08b3f98d055e434189b2cad02450411ff93e3eab21b518ac1790496f5f9a7d4cfe6ebb875f8d288c808c8d88d6c0 +4445cb65d3606033a15dc60bf999569f29822ffd48ba92e7134cd0b0596f92a3616e24bfcef70bcb2bbfaadd00118eb266f8a75c2be383bcb72fa17918381930 +57dc10c31b5f8d1e5069fbddfea94099d02eb5e46462bdf4250c6ee4e0bf361ee61af389d90d72d0d410c7e2f97e2fc69b4c5a8c6752718ae189b6279a89dc34 +3dd2508c9bf4a7cf64923353ad8c03cc7826e1eb61da033aebe7c7ace533e3109ca79a0dafc681671e8d3d6b5e43a1faa0f2085971e37ca89fca7fff81bdb4f5 +be1095f396440da15f8e1c27ce310ae23e0ea0908d77ca96ec4a9c9b33113e4a4c1d04f12b401947ea9a220fe1cb1505d4f371a38710a5d9b9a3c93b4c235f91 +ec5927950521b3af4876b700834a32dddf27fedd8d159e4cf8a3f792fdad20961916b21ee605be2692b7882ee1351d83e9bd86375a413d8e0a7544655ebc0c08 +60139c0ab713ad59cefb5f69cf1cd3db5f87675b564598fad677c7029ef4163ccb20464ab26b3689706f6b73ecfcc5373937713eb9e5bc0b2fa3e03c18cffcf8 +dba9ae27fb4464d4d6f55e6a52fbfffad338a2a63a36652d403941f050889d08b4a18f219b86c4da8f9e67946724643d05af548d51712db487730d015118db1f +84f7edca3dac04a29d226736021a1637da952c2381f75aec36bf3417f41cb65554913bd8df65186ce82782a98732dc54b8ad2f2977f65d0930782e15448f23c0 +e0578d3c44d65584ce22ac4ae5fbcc9dba08edfa317e761ceb0874107dac85d7281c6ecb8ff2299268415f7a6e295e458a549f8cf1ca8a28b9fcfac8fbe117e0 +d3891267fad9fccac8f6e15ce91fbac4eb967c6c02947983b0cb2e50690ccc5c40c33ce3c0a448e9f3820d267019af6568638f085ce6a4483ec009bd4deffd07 +8c682cc95f46b298b9904f57201e62477671ac3cf9dc685b7a7c9cbe6f53bc7cfbadd1fcfa8b310ed236ea4a5a38c50af7b6b747eff38f4771f9ab51418f7cf5 +bcc520872810b5a4b1de8e18ada8490cee71c23773a131bc5201795460894136128a370e543cf6e8edf1e4dd3746d3655747eb91ab6219d640eb5645cc2f75c6 +90ed80055604dab908f2eb5a79bd8a9b35b4d14bc9b4b6b2add39553379d5067338ab610cfb31605b0b0abc5b6e8eac3dc09ba2591751da19d9e4bd68021a5b9 +f6eaf6517aacf2e20d40894a2cbc56fe758ab92ad60e5a52603ac689d75c0be7112f70d3cf0113b0b92a13219c6c92977ff8b538f55f0149969f10a5675f1117 +f220eff9f17712d294903cf2a561befbe183bdfeebefc4921bfe2d8ae7cd8b5780df9b5012c3b954d761ed56022a184e799f7352ce43131d8643e1149db4482d +9f4dfa9139b32de87a733db925822eaecd7534ffb015436fde9814220b8345f11ca150414484f7c808e718c2e02a8e0a23f34180c1f3a9707a48d0f78cc2f05f +8bbd579cdf760fbd905eb003cfab7ceaa99433bd920564410ec3583d8ff0b95ed78cdd75570a8764e7702c7b6c31d944537630482b62d400afe5cb2e3fe6ec28 +dff046b4ddf51bea9899bae8ffd59fe428fee1948c5a8890b836bbb1533febe134db77794122783a3dff388a0548d0b0d0387f773152f31cffe5d11da8c7c923 +bcf9872bf4448675994c2969f2685e6554524c144a37c4eac58a0de6c02b9bb72272cf2d8ad2394745f6fa17a37ffbfa18821a349cfa8da0a720405dd48d7a3a +5aa3070e60199ea672d6fca4d4165707509a42ae758010b010c91b2dc814cd7278ff38b311c6766d8af6352fc41828dfce1f6c8dfda75c1c7d6f796bcc69ac89 +1a9abeda3400869edc9b61c000d7477d353d0485653b49f61484681780c31c1a72041cb4c49ba1cc482132912f5779787a381750406a49d69950a2b528913987 +c2d123ef8cd0f035e2e36578a75d3c79d7732a7f5711175390398087f441cfc70eac41298fb8eabda96de3a5dffd243521aac5d9b2b69bf7c653fffbd538e213 +5f8ef974dbee3feb8a38b1ab2b5ebfe3e6e8879fa7428d2b3078ebbe5d5b62db9f7f18d3aefb7494374e81b960617538f51699d7992bda24b8909ccd190e72f5 +44d20cd776a3347aaf1978e99e899c4a2fe3dfec8552b11a09e5b4fc229ee636b69e783c0d9340cb14e442cf2d02aaf1b5254303bc0b0555c06dfd70fd13ca67 +7b3b8a2e4863be242862e1551ea0519150b8d07b06b5b3a912e4d3412e08b7af19a219fa89d2f9958fb7d129787dfd84764625a9bb192f62576e1ff9bdde4938 +bc80d7f2f97bb7f5c70baf221a7a36fa911d2cfa3fdccfff89eafee128bcf6718e25b1d561068915209aa48066c0c3c4314d1638833bfcb358eb0d7bf59249cb +88b57c7036a4f9214f96e248fe2e9ea573f238e305d570e60c6bec7d91e642ad808f6c6fed40c8404fa6ce8cb16973a2befb50f46d5a1d2d2f3d89421d8c91e1 +4cc22dc4d8d37c30fadadb688edb1d7573174731541f59d4fd55f5cc9ae84bad12238472590013e3e555ac20731e6009f47575a67bcbe96c81d2f1c7787cddab +b1ffaaebe3d0aa95506a00147a06621a618f45da6913b0b802b1cd622d31be219e61cd569448c44f968085421faa05ce79d48456c37058827557296688d0a159 +0236a2592ae37228448676e6440aaf9f737ad22b7c6e9e541c8486f4291d6383351dacb49fefbbe4aa381e93f6fc6f7f9a72a0d4ba4e3ed447357ec38fbf4a6e +f49598b1eac898fbeef745dbbefdb1e7b597b9dff618e7f85acb6142bf96f5af47ee5f7f19477df033f16c5b3ee70399a3aeb1d376709e8f7c3aefc96763d156 +3b6e47acf9700de197eb62e1541a954654a5b1f9b1863591192fc050cdfb84adad1d0963ebddf5202274dd7873f348db195ac9ad342a86d4528154b01694d47b +f5350d98b0baca61e7ae219af998f5a83c8e67fb87cfb255fa9811925e5e3a11d7e71a6af4051d5418734e913d3d5142edec7ae5ef5d7a2bde9f48c9bc66d1de +cf7760acc6f8cea1e45278e5c762e4fb9f4d2d2c1330f43fa3aca45aff37e4e3f8a40f29b44b45a6a4001957a6eb15864ece65e23ba31f9978d3f70c61bd8bc6 +07021b88b60136f8ba7ee870fd2845781cd7f6f1e2daf473ea9161515b70a345702a3aa48a4c849e83bae162e846275d1c3316ac8c0e064ef4bcf844f410ce90 +44c12ec7f5b2587dc387624fcf7351b26373d42f3f162637c549a9edfc5b0097ce863fad8cb49e79c71d1b4fecd91e037833f38051728efc6d6b62e3f7be1cfb +cfb834badef2b6583aa99cda12aff330cdff0ce58ced25b15a40f4be7c2003ac4d39c7d5322e41015f862eb01cf7f50a61990d8e5b90103b7b6db590423397d7 +de8495b908cbff3ade497268263c223f9221618320b99a822bd97519ca66b2af05460ec95384d20ba2faad57473b1e7cd35f7e9da0f1c3538a5a766e051aff46 +4cfed4bfc7cbb0e57b797f09fd4c89ed0e0362048332aa25c6ca36bffa6cbcf6e75fc6c277438be1be6c9bb08bb531cd79c88cdd9a83e71188b1af6932d0b4e5 +104339796dd32646a599dfd84e2102996922ccb4a39b185b8f329a11f514add3bb29c0530995952589b00663167735a4feaef71270107e9797279aa8a155c9cc +d7ad3ff95e0bb6a615d6896c20d40054f31e231e0106a941ca6c4942e8c8f5e523ea2d90bd7ca070154b10a2478080e758824753e9f448e9bd1c43312c204a22 +bf883151bc93a1c6dd7f132fd2913d91f7ff333bfabfe043a6804bad2d93d3e84675bf7ec6b0ec70b8a7a0278bcedb529837e1e38639f910a3894463b2133dc8 +a3a050bc3731657d1f179f45476b417175523205293128128b022f83d08d495197c960272c6d04c3cea083a45a48dda466f12a42b3e7a377cd8bd14107ef2831 +739a67c7c9ba50b0fea7ee8fca9d9ba3e4881322bf7146caaf44006da958be6c61cc387145cc3ee28878e08f7f8c5daf3c97846b8063e475112edef9bb787cd3 +1bd17dd5b5317dd9523885309309d9cc7ff42833c87b84afa763c137a3240e4159475ea3c0bf821239d5c73c4976830082e8510992b489a1280b78efeb8478b3 +533e8252b246c2c7ebf8db11e4425bf1765a6985c3493c4b50367b7d6461a3637843284c08643b7904696f9cf3deeb535fd5eb7ff9bdd3631230934b38dbb2e9 +cdb8e33f3e134d33e712d2929b501ec8c23afa30badb617c70517ab2619ed3bea7ee8bca7ad0cdb3df0697322fe56742ddd60605199cf960886a7d27791e7eb1 +0fc93adb7eaf43a15709503a0106f322675a18ba99378ab825c642f2520c57e1735283ec0d727d6c0214c6b686a757f6b80dacf1209f377f527aa6a2942a847d +532a8def51e80de33c8e25984abcb22c1143bf5ee76e2073bea6a11e445154e2b114c265da7acce93bede7320f3284e36f465d8384763d960df87c9e1e45a5b4 +e6686f1d8379b22f787714d1bbd4b71fd68e1cbbe4560e030eff2ff090144916f04c2d23c29f6b8171828a61d29641e326c2b34cc693e2d72df4cff9c77e6843 +d9145a8b6a65314fb8bc09254aca649f506e19bcb8e2895a95ac6ae14a1be97cc0b019b8953ee81e25f43f0d159730acb10b1637d02df4a0ce325a848f3a3dea +8f3d2d7a5e791a8ad133d10917cd0e5351aa712afaad0853c7ee6d51bf887e9e152710fa94441d3d5273aa49360801a62f5d1a577ef13fe385bbef8c176efd1b +6d172d316093a0c325df7c3e5efce6b6d875d155b1f7dc8be3887a06ad60dde7a03c6b1974a225362fb2e7683356dc42ac3cb4728bba58c64e166926c43189ae +4bca736235cab304704182e7745b27e417f2604de405178e4009b5dcc2e2d54c50b2d0b918c04294cf5a8c4ae41c88791cc311592ea91cbe7d48c3c9ef7d3f43 +ccc6e2e93fff36f1df12f7104bdd4763590bebd93877092c97cc28a982d24a88bce4a1a09c3e870440f0cbba3b6f8a95842ec3a75e00637c282176b647d82aae +8049d6d523f98c45307d56d68e0ce50c6f050444f1ea615ee483e43a4bcf3985c2de7a567975e625d2a2f456227c96f7ad25d96a6101580f236c6e5a2d115563 +ea6015695b22740738871ec4f7288346072a87b529fbc00412e40b5aaf2b2437d14899430944b86029b453f9384f2f0ae4fb5c83323b5df9b99bcf1b61781d29 +8f02781841a9462caef2ba6502c7c375374e8fb22b3f1ac33ff80c698caaf70f9421fdfcffcd9972f73677476b4169ec24869f4ee39c8964d708b98779537ab7 +fd1dc49b08ce7a2c73265924e9b336ccac0609ab7e1ffecae0ed2646bc51e8bcb4066b80bbe7675b12f45d5aaa6d4c57b5b86b086533a0135abd79a70b257d67 +d8898a98c409e26ad5096747fdaa63a31d846ff7734f45efc13d49a16ce41be501ec7df1a928d9be312a161f1533675e1485f0c82ccaee83c357535210f39911 +d7be73476c5ffd0acada1dfd207cce44c8eb6a8ee69b7e1c9d2864eb95d7c7110b6711833bc195c6422ca9535f45a3f4c40a492bb9cc2280033b7c9792d3e879 +0cdf36a070b29d45026d2c939ee254d18528e59b28d112943175dbb256f528df0e946809dee910c266ed861f1304bd08c683a8a111c1348bc2d6bb389e88e0b2 +775d97e0ffe7fefa47d648a34778c37a7530b1c827db48b9a061e6f498b5f4827816fedece37d6fc63488c219e14ab376efe5dcca3683d69d5d149a0f681e659 +dfd143d969eb3dce60bd146a85d8e2a8e8ad1ecbc76cd3a0064270c476930c6f512f640ec9182c9ea728a0ac0611397318853c85cd7a25deefe725afaa04d69a +f41afbf47ac888b0b8e1a49f97a2243d49c6851e41d8dbeb2a40a9ca51229553e683f0b7efcb4cb592989a51a051a21e217221734108c3405542cf2419592fdb +879a64cb8ab0104b64a424e75b1beaef8cac15c744c9b167c3b2bf0b1954c5feaf573a2cf399182e7790093d5b0fd8ca8cb622209d87baa2b9b032f6b50e441b +b1876c5ef1854e2e0ae7932c570af378a0b94ccdc9c5fa649aa32686424aedf18429d623d7a2ff88a79db84d4e8fb199ab9c30a7cd196c2ccca8644d29412492 +59ba6592e91cc2b3d10258ce847901a83008345e4ca35b27e043eec917c5bcf92ba2873ad3c1179e8a1e5ae1c76c45e0383d0c5cec69be2bee78ee9168b9fced +71cc2597456d5d1d2112163f4bef48524cdb77615979e475d02a42ee34084f2a8702d6e8cb8fc4967d3ba3ec9a0f44350a7b546561ac691b881574b9aec1f5ac +103020a45b4c7ef426219f60c1260ccb3c07a1245e1e10ab600deb60eeb309c53217da86275bc867f44c19e58076441867ab82d57ee95735089c9db436e289f2 +69bf26196e216cc2c9ba86833ca76915c55176dd07a28b22ecfa7bff9ebc4f661c34c28a3215b0562b2ebd2cea8e3d314e645644cf7f7f219af7ecc9b45f589c +b431907ad40ec087d28aaad8d1303d8ea896e16da7acf919a193a1dc042a27c020a8624155485a4fea8c0b937567df19863905d62f7325855485335d10f6f6f7 +341a8cffe4e5f9bb8084ac0889ad2aa1ca626e54867298b7b9861a0fbd918a680869ae2ae35c2fe85831bd9c9febe6387aa0d2941b5937320fb22a2a5588f037 +35f8a1e4d618f54036528aee25fa906d19f4a925cf64c79af01857c81a397cda6b1d40b1f22eff7014d3e4dab76fc70417ef30249e4966127e2dae300434bca6 +85ea38c2f50408570f6e6d0342d783a57d8087db6ca24b876615f17101149622dcbad3738a89254779a0e33cecdcd20caef78fe82e792873213c1bcd7c7a31db +cb15a54418c48ab4e38e845785d9536b15804101d49e11e61c140a0ca0905aa6718e95e754207eeeb05e04d49b9b0f6be1c40b633ede67ef330fe1a55ea24bbe +3b25e243285f174345eefad1f762ed734fc7c9efb8869a535df46e5a1bed875aa2b09c99cd0399e25f1ec044c7011aea4067044ff2f66e8ed5dfffaf5872c9db +e3b1732f8f93a794c7dab6dee4795e05915b88f01bbe48f2b420cd98b9c4db129dab253b779cafa8d826c2b3a5846c167f4db6152127dec8d9db828219ba69ed +858c8594e5e109475becd50c2974d29526b1e6124b45b69c2371c8d97daccf3b3ef9a9f81306603db3c7658b679e27a8d98e2db1eea51763f2f255310f34afef +239f8efbbefea5e89597c7bda61a0b216d37b0f8869b7e11477de4dfe858ad40b820a7ca60e0385b6c99981839ac4289a419aa69d5bd261136954648dc304ca3 +a8c05b88f53573254377271519feda7067ae6351b595504ee8dab0cd1ace0ed62729dd3f180e1c0383635dc922ae398bbd4a7a1ecf611e6fdd48cfa4dc58b015 +b933d7b19951d9b238ec6be66e32befb14728108435ceebf17a32d3bc754c679443220ccc1b229e5a4316cbcb70f02c1a80aea8cf6da6a20f177c7e02fbf9a80 +b10c4670b8fb2da34cbe943b8a952e70a81e373e28740ca9744d4b6f0642dcbb3fca0891c6473b62a0a7307a4de6b16ead1435f3723a630a9736a4bb528d0ce3 +52ce27ac6068675488ab04fa16563fdcefe4712dd63929d50727ceaf9b255a4c6e586ac5886e9445cfe2e10f63b56b19f1dad7c335311c7da8bb2bf52c8db4b5 +4577595d349c7559941d715c743ff940f4307da77ac6ccd8fed2b3e97d3b57bf1c37ad5f1fb5d3674555d354ba4c09483d2fed17475d74490c553745eb6b2fc6 +9bb7dd986063f96a39bd9db1fe963f46edae5d317ec5bb63d1823908cc40129e6156520be9f0ca2c7ed6823b60c4a129997c27c3df9b2bfd06c1ca24dc868316 +3569e14670fc9b90b1c54f732df97cce84c8289143eb6d15a787a9ac20ba38866193f51615cfd0a53287ba0ca6e7e27ff974ea225ef3f843896fe7d35410d6dd +faa7a86368ff824bdf1e0b4e3a0da8ab236efff6ff24a0c54237293be303883648a4d780e4355df581a867f30167ccf510634d46f1330a9519d4ef2422435259 +08c2cf36f7a5116018478bab064b8902c47f7a4f3d839db28200d68d14de8cd722f44cf0355e2cd1949c0d98691aec4131f6a5dc28535bf2d88951ce7b2cb2ca +84305473608bca526687b40ac4f36a9de84352c998d291e13a3a4108791235ac90ac6a6ecf7b05305484427272cdbe0c8a213c506a21e7b369d41b572a87b48c +d28133e3b384ff8f3e374ad6bc1c5dcfde0d7a9c09f1fedfd97884760525300d2697c7e307fb63a0ba2e7248d2b358d41ce2c46142aa1c1e401679461eda5d60 +c10adedb502f975cd41c45c4fd0508b7adb86ae5448929418ca9a783b06e28a72431038cbd9d2360bd610fc320656e8bde2990c3f682d8c7e34c6f62ed511658 +9edc30de2f0fab6007aed56b9195712bc9de064c71190c2d3eb29aa9d1f0f6ebe3ecc6caa866a8fd81d75e88077ef3cb38f8c6ab10656931d8ba01c5ea8c8639 +0b23bfac221a972c8b39279dccc362b6c09279513e6b6e6c2177d8b9f6f5cc020df747fb8b8f4527d0f9d8d5081af9c42aa6676c75370abc8a1e44c83b311850 +1e07ec3b93c042a48268986b8e252dc6f04c24503838337cc4a4d85cc0b60a6949280942a3d5ac484560fb95ac2d21bcf2d908afcc5b0b1daac23aa481f6bc2f +bfa6368efb10833c78465b18a09219a78607634d1e67d6432106b1f49c0ba3e6b40be3ecb6f678e0173f4c2c09a74325f081f71d7cf6a1a8620ef94e1812d91c +7325899ad182caabe110864f0002a223a266d2bf1734cf10af1c2531f7316749ed0f7807216c7ff7de526b38cfd23a52c6c3c87314ea77a6831db9d67f54bacc +f1eb277223674a18b6198da888da63f9807a18cf61ff92e19f80432f7257cc3d57b32e963764971b064a132a25a251e95c47eb44feaca1b6742affce31c38676 +66eda31c2387d42587f71590ae18ab199076e5505ae11d0e9e6cb8e89d31b2f1a5e805acb2a3f61f009ec1805eaf1fa17f8db2bcf0ead0c40cba041e20dc7905 +35c9c36889f307fb19db4a5ec460c33c3e599e030d879bc934f0a53039f3957ec7ddc93ec8af66a0796656b483fc44b9c6b1e69d848c0e2691a75464814c2222 +566b980e4fc33ae3598b5ca32cba56ab9336f45cbd93bc3ce731f82f75a37cdbc951a87142d2e2a97363d29c26148756f9a34e88abe62f8ac7fff297d878f7df +a207efd5d57c809d053aa38ee117f38e3c92d09276716640ec039d3be3b4e341faa645c36d7f8a971fb80f451a2467c478ecde1caffce0bfe3882baf89e7cfbc +384ea92b8a3d9dbd0002146a113005de29438660ce9c1055926e655dc8de26dbd4e5f1e975ac0f65682b52607208a932cd83a2642eb7399679d22c1452ef6302 +2e437d9364d1891910e61f9ecbc18ffbbafa62e1ace991f34986f37fe973d1ba752386cb116aac1b46e8b19f7e9fc2746d1c7bca8951fad62be3e0be7df1caed +7f4da194855da7e238e26bd33d37c7bcbac9318959116b001ecc636713c2cb42d1cbaa14867a4e73359f10f256708c2af45c0991e3591fee8c55f1a597c90cf7 +5cf676898609260c23ac166f0dd3adc7a91c7a6df332c10559f7aec5143fc397f4256944898b47f8a7011506f77376c6da9aae2791256ebe9481c233f3c39d15 +681e643a5182a2d8eb9641f298afae91e7988ee14e459b14dab93d0b2c1973a8a4586cb583672a05782a211cccad6f8af273af8efe9bfe37455fff57e6d3b10a +c82d406fa37288841e387b6ff1ece87700bc6db536d5612e0c4f8668e92e3417a2df258750a7a893863efa6fb279dd95fd7f2608f1bb93533774e7d3b10aaf4a +26354a64bcda4fc234ea6419fb42c8a18a6d243cecd11c2d2c9821d3973032dfced6f2a2e8edc633b24036c8f523a8453656c9fc4599c6b0807934efcd6716c3 +0184cb46332bd2f9b01ccebfe1433117a579e5a63fc496179f8b2118e707d6af89a7e0075ed8d41459cb8f60e03a03db1909bc7c466334ddf0d1689a3d371efa +f31f21cfc22ab74d843d9f56b33dcbd4ddbba300853a6a5a6d1c2437d4a2da93e5985fc3196b1b22527a8f29800d7a29a79c9a27a9245a5f95c3bad36e3c99fc +3c95c8876e8d45cb2ffdc8bd987c4a820dd69b9c5094a1c83038c4c63ca459c19dc2e7f775f644d5f419f1d64f7f3e6efaaf2f44d7de5d89e0ea770fcc90977f +f6ad28a10dbd69f1d23887b9e472f5363cf3187bfed0af65fd0e411b6486f5cedbfe10e395f551387f31f74387702a94675a2032d386a0150981739d0ecdd4ca +0b1638e445a597bc6b31da70d5ed612438ab302a85de45a045083d938fd0e8970009dacf39be32a9125ab4959625b22be02200a180d6721e8f63e86918275850 +6fe923a173192fa41daf721809c750969b9523aedb4e58433e9d45cf446e648a21dbdb64c32956025d39c9033173436a1befcde7decbc60608ef042418339065 +af1d79d609e745d59aa7a215a0cbdeb87f86772852f5b657c945ca32133e9576b47c6fd3f4e8a1366075c061112eaac325dcb141576a245618b43eb048ba3ee3 +cd0c0898e1e9f9e5fc927d7d1038070e4499f3a955387740e8a44d5c06b7ca877b1dc3ace5f2bbad1879c2906eb8c54d74f3a0ddd243ca895bb038a9b41f6b9b +47a839c80538d4c4515b59e62f4d8d4920bd961682e3491649594cf7175a7cd4313177c1fc587de7edf1cc6d782750ab5642bd3bbffa1f71dc3bde1d675e7231 +b953516a0a14666d7ccba5513f7326a1e1af63ef9bafa7dc229b7972fb1eba13afb63f46defbc1583a7f2667b275cc9a1896d316eb94db002e70af36f359e414 +c656b97c9f90af4558f31fc33fff96d938cc6943197a923b3c68e5a52265b696b1ad23d35ca9e21ce017efd37359c44c9b822102c30b97c6859ff84cdcfd8daf +00b41c4a5ec9bce9c0e68df1e48fff37def6c5ff6298cd9438f5439fa28ed616bbd7bf09f840d8e23345587af66d8f03b45eacf8f0e7e3e5910ae0ef9c448f52 +d1bd6e87d3785d0ed79767a902a03f69c685f98b6c0541020d84f42947985932b05d440353e3045e9eb74aa5c208717befa29616682b90399528539c25224192 +44f0040e643258a03504ab334a42016db190679719680292cbb154e6565e4ba3da50d8c36de7ed1278d1568834a9ed5c051e72d00f3226cc3dec6461fab7b229 +c216a354f96c9ca761d72bb5db4e811328c02b9523036eee5074febba27be716d29ece7fb60c097fb73d7273ea6e2d84559d2d3a0731b494915c5d0b8fe28eeb +106898d89cbc8605f4815a5ba9c50de60cf526b799a10589aecaadcb60775a924166d8f5518faa80d26f4fcd30ca30560a178e70a200a51855f0250d12fab99d +cc200f801a65660e383757eca85e800d27908e03eb0e3145551042d2ab567218f4cad0af18b4f1884995a96ee5ac823c16cd07224528f1bed82e66b8ac24de7a +fdb5b1e4e8a3e21e72a7cd205b9d070fc6a33ffd411cd8b821def1e10f80ced447016ebf0b6f78c4912ba39601250ffef6d7b1e6b147380fcd8b2c66cfeb2fc4 +23df6a89a10f7c9c7d919633868a99d43605128e6d038d4b5387dcc582735bedb7e9d3dcd069a70affee346c85cdb19042bb6bcd41f460e649a9b3d4e63feec1 +f7d9cad18162e98d64a41b268a7ec986d082dbb1eadaa7212c34ee959f7052345fffd178fa87df88413c6f9a354e387c1056c8edec8e71d9bf7d39a6cd9f1fc7 +7fe8d371ff573e83c2b5647619b4f582fbee80e5b1eee6dfc692f77c94f585b90e6ccf1c95c4f04885589f7be2cc65e83cd27bcca3048a125ccd33116c30df91 +3ea4e7912f27795526835eca10d159ead2a8329db53969088a8f5de2aa330345fd1ae56572fced1c47a0ea300ceecc893d185d73d0c3834fdc96468594042c11 +b65aba1832e4b048eb46caa3a19ded126e49e4a66ece6974c6e218b22d18624776217d6c481be90dc60b90ccb0b410252ce7f5220d3ed7df8ac20dcd39226a4f +7b4becbbe357a986773857caeddabb83052f66cf22c612a10c0ed670524ddef30f454ee3d428993e2fc61ba7d144372b46605b0fba938373ed805f9d31909963 +97612c98179903e9c5fab3e1b095b21153765fe43936cb990ab016d2982d2e72889976e936444c7ce8a22742922ccc883d25bc5f2b236c29eda71f6be2a82dcf +af3732fccca37a3fa7a9164b25dd0f578de2681d4d8a0ba80d194ee8eeebd1d00126b31ebb72594c9bfe9ff1d86d7f8f476fbd25fac89dd63e741fb5965d71c5 +073f10b3571e49e2ca82b1dbdf9ca6ba28fbd8c762eaac19f1c8df78af8d83e466797b36c7e3fffbb5e87bcf07a2fbe4536225b0f5eeee8104110b36282c2244 +ee726883a0de4a455039f4300a9955fa246028441a44c96b26f0861d821353502c913195b00ae115a87046b721a48550912d730a0dc50c9458ef2639f3cc8b2f +82e970309eff3d5b8f5810371fc2f8eca1f7ebc9df4f8e23aeb921e6ac5c19a7bdef23cccbcb20793244f44ac38032adcf3f16fba6e16d4fbd349a70b5a92b16 +2f63b8358bff132cb0902a345d93bc252118a1ba05e552acb7208521995e780a5642a44f2687e3cf6446a86c86753e1377c81074b0ae249860f7b0b42b15d0ad +5e54548f5be2dc0c410ebca39c3af32921755be51d572ce0a0f7b1686d1da9d9ae6be776f05ac5043a37866cf5026f43fe49d07816b9519a5582472aa78c631f +9c1d0b9d5690f45c2896f33e8c19c5525bf218404a74e3ce27553d2d5174e40931b0faf168db4f6d49904db0a178d1aa1866fe7416f301dc0daf1f18b81f4dcb +014acea6de90f3f2e3504e18a15b3b89f1c4f369b49bcb4e156ef148d1941bf6798d9be7688b3447138958c77859f41757e255c87198ec53ca4c813c04319f7f +c75086422e4a6b26abc1df9dd13064e8967aea61e4e271b279c07945847578a56c20ef2cc3bc74d55818fe964f4d6815b41e6368e9353e6003a949143da59e58 +79cfb41c6be9788df33b08f3f2ebae89d90be7c72dbffa4decdbb431f6af7b337ef5e5ff8c8bafbd2e8e3aefbc6874ae37dbcb4c667cf2d197bc25da60a9af79 +ec31109b43d10f6091cbd0ca177efebd1806e4c83aff028ab2940452713533e45feb28bb4101b72dc1a944863bc2c886347a15673ed8042843daeb36ce57100d +0d0f1042a9841e4f25b2ae64886518e4671c6ea9f9b2607a78e7be0604713f68e889ef78578cc1927f9ec1fd397c5ee3a800af0616af262f2c0516af3bfd8238 +11e3f1d81f7f9d044a2324f43fc8b3d9ca3cf255d3e744ef82e5b11ae19d8702d9dea0d731cfb3d0ea573a2f526498a71c4a07f21e0c037d44720c0593f462a2 +5ed699d2de4c1385589550e5b0a0ea982f43463d978a68ce3849a68bc56099e98212288f7429eb4f498134b2781ac1288df9a1d400985120bd92c4016b83a9e6 +c4bf0ef2c94d9e86f540b1f2911fc5d5e4a40f4fe356a845289be0828c1851bb4e5e1fc08097baabe5083b5a325641e0adafa23e4a2fbc2e5a7ff469d222e4d2 +3a52d1bfff30b2980bd7bb7d13b519e6a66d5f1759f4058d50e51f01ead3b2f5d3df93c3e49aec0d6bb060b93165d18218396e2a2c1e3c11684cdac089904421 +17461ce3641de3cc5740680a598c7e20f201a6f80c53dbc9394842ecb8e189c111ce51761ec378ea29029274e32bdb83a12d116ca6ddf80620b37a9c71fed51b +8dbae710c3e4574eaf4f6dd18a611a98218a9e36622271756c16f9451942e07c0985c926ba3ec8b1c2cc479f7842cc9e3b3bfef0b3dfc46b0f3f18fd903c6f66 +36f7de6d5be382f7be37a635d6b167ee50226a16b0f345095bd1e4f12f811535adce447c7ded0f3f41c95a63f49def4a0083535f6502d865aae731f4b1c6a247 +7207bd4c0d2a23542a84054e93742bfda27e5aedbd7800f305430e6789a7501001d38a27b643ea81ca2899a3bd14540d8900812453f3a3c5efba3e3ac9953650 +63d2234925b2a7e9a9dfb17d2343628e3bf38cc879db7be3c09eddb18da2b53b195ac290f9304887f11b7ff9552cf8e0e76312fbde4aeb940ed5c47a0adf7bed +2abcd72ddd29cd5e48a16ba633555044b04080a5826bf1ef87b819eb45d3f1423e0bbd94b2e2982d61723b700f921b59a07742acf7ea86ce020c7a37c789d943 +b45faa11df461a53ad5161c40fa4c1fab6a5bbbd0ba1646242d89e213bddda14de1fd9325a1ac203d95e6237b5ddade641da7da39f12c2db6c9e9f395327f524 +dd5129615df538c46cfd03c76f87083040db8f3953f5acd9d1cc6803f70a4e39e94e879fb067ecf08ac6442371de413e025fd6bc1b2effe6c8deb93ec6b6bd19 +c3745c0e53dc33fecc1e9d19ad14618a0ab114d524c8dc684e01ab35c605d09831324481358fd65d92595d71ea063799d4dbe059f426268d2a94df5a946c7227 +41853c5caa90760e717e550d5e8d90ac00ef3484e288ac088ad837525e591aa734b09931564f02a4e1a5ca6288a4f536c625cd4849b17987a39bb4940a9df519 +f7e1a9a9af8f8f7dee1371f3f469f1f8dffe0a4cde1a4fdff1f738446fcf39575f1d756c69f9ea1b6fc4d62ddbf0caeef5cab92d3c7343bd78ee6c3a7677dffd +d7b81f8f79d6b5d7463d615a2361a44221fc2d446c6e24cf4c4ea1dea8150c56c552892cbe5ab711a873670ce7e629a02aa3a19bca66b828b7cc30cb64df445d +4b21542c146eee214c2c18d16d0dc6f68bc6ea28f8c0c7d828615fb46c59971eb414aa218cc5abbffd61943436c6b4854be28cf77f34fa3104adbb764c6c5d3a +013e6c5b1ffbeffd4b8cbffdfdb19bcfae601a91a2258aa8a74c1b312307c2f54941c80df53042fadea3cc0ff1816db0cb130299e844198f93363b4b5e293307 +6413c750a81d9f2c422c2c7e0064d2f57208a51ed3f15de647fe5d22b1c22fdba3c55d4b38aec3246dcc3437de0b226b5858c0750b56f9d0dd8a452572f0a93c +93d194db389597eb258ccbe35e86909701c717737095aa0c25cae3330384816db9a0c35c4f1e286e059bf095f0addcd69e7851ec66604a4a4d3ab9d942b4174c +2d23682c8456bdbf694e644d591871e2c591d7d3963c49e1f6b531cc83296da4fe7188c9a8dc452f4976397cb4425b958bdc188b58b30bb12e3e100db31ba288 +f0ab1fda91455595c1b973fd9050b373c999b014797a23216f63522e4825b14e54944725ba8dbab9503cb321064d181da64ffee6718e6baa66a1327db8ac6902 +1a446624225a77497992afb1f826ac56c8cd296c10b3af4786b379d40871f4d5d7be2b1aa74e8dbb7ff39bd8bf6513b3ce9f8ced1bde8ca94b8e48db7f98f359 +84cb292b8d0533a7c5de5d0dd1bc11fe15bb738c100eb53dfcf7b813c57f0b79d6309b484f95b18dd00b8ddb52a017c28ea4f9777a15818546de63f1d23517cd +4bc327b1eabe5f21d5c2eb7df49e5a444340271b69fd1db66208289aa52716161761933f606dea20cd8a858d93e3e24f7c3a6efeaf7f8f6ea3093b8e59cbe62d +1b63355bcc4cfedc97a21d927249d3348abad2c45933902839948318b53d4fdc477e3c27a69d79110a025a874cbabb9ea4d40436705e010f113301169f8133c2 +fd5d6fd0c56674a2711a36191a2abb85d9294c7935dcde91206fa95599ddd79b316eae99b429372c53075428810469498eebd284b8f9f23e8e674858c7b329e6 +e158e4de8f60eb818a30180e68d1a8daf19a1999253f5465b3b9cf5c0719d30325da1046161930b4ab207c2b73777949aec85b07434a8d0c8a90cd52fe666eef +ef3dc8ef487651d42e3b3aba5e7d8c71d2fb61cb10ea28c829b5d1db7060b5b38b78d13d56877900c3cc4728a4753bdbf9736ec9b8ee8e1804cd1200e8ec6040 +791b536830ff452c403e8bdb7cb03b76bcf1f328a34f26961f1f93d8b2a41554d0ad59526b3a37a86465e3fd46611ae41a427a936e2b030a978fd0f6c201ece7 +06249a8e38b698b06edc91bf285115ca7902dec8853369b7d5d89fd1e5e481d2ee7d3c1cadb5431bf54e16430d098cd3b5aa0e4cd472e5b129400f1ee4acb34f +8b064299db7ef213387acfc41030f1ce979f8b8605cbd80b6a7222889e71f6a9318f64bd03a6c7137ffb0b13526fa5480c0303c1cb79e6beb8190370d1473fce +fc8872e669db88664e64724b7e8350a81c32acf5342a95cd845a5e0106b7b0341cd4531bdaa9588ef7727b143dac219e541b8f673b87a19cc54c798f7b104a73 +0fa79e0aa58b7c15c2971c6108e729efff583c02389276014c7d4c0cc364e6f8edfff36590c96931420dad88676338ec3ea9e3ac8fb37946406577dd7963e435 +cd8cf1398b18ee920138cc851ca85fcd35b4595342885318c7b5a66127dc83398e219a219e5e4c2f25fa677775662e9e0d7d36f0d935cb3e5162fc489e1e2811 +61f15c2a6b1ecfd5d76c32349f92dba7304f9980cf1daabf9bebd1a3cb326f70e212cfbe9bf03f9157f99c74a01cdb25a0fc6888736c7614c1a3f8af2215a054 +9530590cef94cd6e5eefc70bb9477131ca53ccfec8b9fc8d64243af32050b33b4a715f5bd4b4ec8c92bdeba28366caf6836cebd2c78319d0f55bede53b47f636 +27109ed50ae9a92a31f589ec9085cba344ec065f9210c7d8847814cd1e26f91b1c02eda3c1b0829904ad7bf645ebce6dd1bd7f77b4c051aa9a392f8dd82aad69 +8a9c8626e044a0cf744e778ba0faec00157799709b41624ef73172ccd7083ba2395cd2a29409e0c058610226964eab4f4aa107d222bb6587f51817b14880817f +155ec1066372e93ad297d20e05fcac40387bc0bf59d728203cecc32a2f5b3827cafeed7371f7ef7f174fdd7927dea63f0eae7b0d01eb8ff9c71c4f7bc29264c1 +265595c529efbc3af2c9fd1ebbe9a618a48ddd5839ffa547e3aeef8dc4d9ecc2973fa926edb4618140e8b886138bc4e9492cba6a65adb949993137527184b715 +e896945f1912664254db2eac1b5563e145f24cf4ebedcde1bd69eb9989063b8f6fb2afa06add1bc91fcbce383b0ec01b5cfda75ffe03c913a1dacfb4dbecf9cb +99e53039537220a72d6656e0681bf98b39a54450f2a53db7ff3e8efce817182556c20e1cd94c6bcd301976607c4ce04510bd8e6d1808731c5153e304991f8213 +1675952315a385374af15189acedb8a999dec97d675d0f5bcab7d969cb4d3a67cf70cd10ce7e2cd76a06de2cad27afd943a5571458a84f7336584b9cc290ede2 +7cae52a2b3a28361184351f2f54e822a846f16fd2dbaea6984b855e36e5e1fb4f14f240f50a10814d3baea80b42b950ee52ceede178d3dcd51488bc50863b4f7 +5322c83feea268804a945b0a1d443799e2470b4edc84025ac9dd17a7e942e2f0994997a58442c689638600e61c0c10d182255947200a3996dbadd4ae3a3ebab2 +aba263db8618a441ef2073128a769167c0ff2aa2d85b366b21a1c7d4d42a31dad39519780f136174902783f0e6389f8ee18fc5a0853dc6d9226f5895d47681d7 +6a7999589f3acefcc62aae8dfa03d76061ce07e0c299888b24892299101be6f937a91d26b20aac4c651f9e1e4a45b3f6d5c3f090a90db5f18e8f7e341ad8cef0 +cedffe2e55fe0f6e589b266bee39fdb458366f66ecefeca3bb333f8e837a538432dd4bf17600af9a0890ab9f8c47be3f18277cf893b1623aad0cdc8fb99028dd +2442a366e062c335099344c5cc0867c455623ffc33377223656725d8f6aef734acd39b490deab5e03c416235d936df92f09a1033f207c99e868b6ed1e2bc3893 +e773ae7e77f4ecd9111b1eb937ed3867f3a69db387d8d7a7a8aa26ed12689dbe987597bb372e8398b5b2bed4be6e756cbce796987a195b6e627cb672fd0eec75 +97723d8dede0b6aaeb25d3107c79711a0ebb7d6dbb7067730c47dad98f90c1f577ab1891384330773c1754b019d22aa4619de7717b4d87a428936eeb22774e45 +7330a7ca279361aac61023701005726aab6a56e2d86a190a76c582429bd32ac3a2c08e3370b475198a6527f70032d5417bb967d633d5c0ee2944b98c3e9ce6d4 +4768970b27b1aa635714b7ed8e2c946708a3df42b3ea50495d8c1eb99494a624a65083cc9d8395d1ea27082f3168fdca587427f4c81d3346d7227841c55c4e67 +4f7bda9b283775a9fa7e519ff443d45495c67cf6ea2cbd8499685b485a9fa709efd5a7a36bf70ea063466cb981180d7845ecc554c298ad620ac0592851766773 +eac83597aa41986d2bafc3f27762795af82642485336cb77bc16bb0eed8a839b37c5ce638f8b1356cc4b7c36134abd9465273d5282a2b93885cd39052a9b70ad +4d605ad4d4b08732a9683e54ad9709b2fd5965a04b67bee3ca28a09bf4b69ffe94ad3ff7c7deb5afc4a3bff979147fe4e3316b4a431cecec4f3d39cbcf278704 +1cb9eb673f8921d0cf9463bcf9723c0fa360e8864fc6c9731b627f6f7f82aa2dbed610fa7a2d5e9bdc3c41039544244c5248239ecb9c43b4d03055085d26845e +4a05705f2673a752045522abf0b8b5a68234f28a30c5d7b95f2177bdb43bb337b3f3c789d77f387ad9557df71baf27f68a80493f8d7e07b7ae8fa625b45d5c72 +0546af9dbd9bbe9104298d9972b022e1d0be876f8ffa39f3e2c0a2e3a2168fea58638bb49d288863b1aa0963fdbd1dc1353f350cf51e3762b1959999bc5f4597 +15aed2b8f5a5e0828a6158a7ece8a5543c1b271d1de6973bfaf97c0ee2c9dec0a05a56a877eb170d20d7b89730df7a9223b427c98057f89d114e7d31135da1ec +d2704c5b509012aecff46218215149343f7aa51a8005c9d9e6465d165d311045e4bef59dbba2b475670cb3115c8fca5a4427035bbe1213830714a55d44dcce68 +b06976e436104de4e382bc48e77bb1c34aa203c9b6f6d2540fc32117c25e8d3134b4af0d8f24813529d2c430482c84d5df3286121611971683ae951e7154942c +3b2ab20e5e11afdd79578cb15b7aff9e2d3148cd6a849d227ae17e15c293ab61665d11db6c08726455d6d270d7197327d74437885d4319089e4a81a519860839 +461da8b5bf1a4fd61d1b9f7e2e0eb059f309ab16c58953c9b508f1a4a478b5d68e44f3864d107950e652e64526c3d6020425cc9f4cdeed913154d5fa1937fb30 +5ce413ce3b37eaeb6be34fdffb4134b3cbde2b8f3c4c676d6f5cfcb18fc7c279b3936712655b76fa1909a6bffd173f47e90e2418b9f7cd1763cdafbf1fc3d77f +22ce4299f6b137ad089eb5a0b44b02e76eb1f88ac29813d8b2e0eb165c45fc6446e8250520544085ccb06e1f2194af99179833e909bc07f305f97fd65744fa26 +21cce6562a97a047c1d4c9b1fceaf747fbb7be1cbda093093cb156427c5f3a6506a1f782984afb451f46eea91b7f97b6e1fcc79c3cd0da4d7fff731c39636ef4 +b107f06bec135dc3f5dbc16b6eba1561d18b682c2c1a0b24580b34e434c2d1233573dfb5dca04361cc61dd61d03609217b6b6eb23f5ec3456b4cac17e981f466 +ab19f72a1a27d820142eca291a2873c16640376836af7774c140ca810ce501adc8658c4b525e449a40f49ef89b830014ca43a98a0563c54d21ccf57b1d0fc77b +8b00d6eadbf7467e1b8346312c5dfcada79cf0b786ef2ae684d391e071ed54e8060eef122a576744e992bdb0a5410b2e0a06ca569492136532d311ab861baf8f +910b0c50acf42312470dedc66103f8b77c16a598560c78b4e4075833073022d86b718539479d19c54b68dddd45b8b771750c11f679a1bdee680e1568d8fe232e +3017d7590a752537071225507aa7add8848cd2f7af3c625a8c2f9d1ccfbdb13d5edf0c1c8f321f6010fdcd2f6ea5a6322bde32a70221344495569fd941c36bf7 +4e8cdb9d56a37099ff19530b3648c84dc2cd3aa85ce65bfeebb5146533b8f198a3a2f84b5f8c3f7cf7bb78a5d7e34d80884140854b69ae5bb67861ec8728ebe4 +d545a731de1e25bce7e73fa74b776fda08ccb6f80dbffd711493f01f3fa326da6892343753d56d6c74d0bc5bbe548832713d2ab3af19061edef5cfbf1f667c9b +bc4f0262771b1c13775f3704f419aa7cce50d050a49f27e84542d5162a5b79662b4e383e069bdf178ffcf03b99212aac9300c4c1375f8d8e671f8b29975c1e0d +97be3ba6af7b2376d22ce9f69c528dcc97bab66f888d7fff534c7ac787086768fd17e4b0cf88353674cd8cdf729707c1874cf7abdec75ca6846b9a4b9dcdb06e +7bda209af200b262f8d9c67bd6c132d720bbe199ed16a469b11aa5d22fcdc008a86836096e048df4b3359c6b3602edf5772103f677d92326e8946351de9a1879 +6dbebba6186910cef662dc0b29bf9401a214c29b732475afc3f681b605bdcabaf7b2b3ca9ec86504f610bfb70a3a342c88f15ab60222c550a6c6449e93c702ee +7782af303ad2554cba93bb8710a508f68016d1d1c0ba49d83b894727dc2862229498d9370925e34286d26e7d4aa7b5191355ef2903458f958000a19aa261de90 +e1520b0334ac32670977336aab70f652d8e3cd31ca264d031bd74437034dbad913289f1c2a8f7fc7995fbd05959e396f167557800d166b31352537031ba45675 +f949cbe2884533e3d7afec25d721ace4813fd4ce108fcd8371c5e49c381e92980f56dabe8082c2651c2f8ae7cfe61a996946309d9027637df3280997a25042e6 +ded3201fca85dc3893c2ed47befcc5f8ed77bf1f9b9e7d2ab6a3507ffdfad76288e6ba9547b0b33bca5444fd68d129a726657a1c8e5e1b39c908b1781b1b57af +fb2d82f5814fc47c363973374215db82b1244f590b2a88d722dab69fd70cdf0c8dac3fa914e640a275165ff536a2621aaecc56938e26cc0c1ed13ba9a48e6176 +a8895e6c6f524ae76e131e52609e7dd685d1ba715dacbee7f684881ae28d92c7bdf8c75f45f6b4b9b1ece8a323e7ba0f47f317ff85500f1687dbe670c5d288f6 +3df3704c5dba2ac68f3a2d5e643f28372263ee4dba7ec7210b243838468ea09db61a27371cf3cb5dcbf5300ed19fe956993c0307610a54c86260f86c52bcd5bc +e6739bcaf5caf593e8fa065ec9b5309f729b1935d249adf2ecdcbeda5911ae0ff17ddabd312bcddc200f348a518eb9f63a36f12eb03d86fb6dcb05f145ba8bd8 +67ab8e8d948bdbf6d3e9cd1c0ff2fc5608dc039366447645759ad4e461c7501841076b4a321d044f44ff8ac7dd581945e5f5dc36f62c1ac62318a609c7169344 +e7a9d5c480f6a268bd8592f548fa8c5c62473967dd348be949ec5d928e313ae249b92126ff18bf9a8f08ab9b18b662b9ca70ab6e8c3584d5b00729a01c6543fe +2b5f765c0c61ed62cbda1864e6f7384ada455bb8c5c3ae3df3622a1b1367715327ccac4b0fc4490052878e6c288db655d3e2d6bd994d83a70321395de7a9162c +3b0ff67846e9d98230c642e885fcd2721b8a64866b641031ffa492f9d07d3056da4d6055b8f437ae3f1f6f59dbd010d77dfa5fe2cf3f2d8b371f7b38f66eda14 +b77cebeb31f2f17f896547ad628e0216100fb6eca493a2bda32b56ffeda6e860408ba3b0f63fff64bc0e81b4ecfd1f8e2a664f946364f418d685549264c4b816 +f32195410f696ea1b21d20b9b7a8ad4f95e1a0320994c886b016655b83a1922deda906c5454b4b5211053644f73476d6ae54c012bcc9e2abae8b7ddbb70202ad +4dd34455a81e42bced37fe326a9a2631287c551c73f9d5f114de34edac2e72256c8ce0bd7ecbefe2383a8e674f9a9eceb581f3dbc334cb21263c1b15c8747932 +f7e13dc95090916f7bcb42272bb1d6af933b5977322f72eaab5e660dfd0f4643ee396bb1b68bcfbcccd0186b6d4eac9d0aa7d1905c63d0064a2c3dc8bcc89519 +332fc57858ae1175163e36df564eca07d8b183507b8890ae0df85a86473e60595dfbbe286a67cc0094af2e58343d155353ff96e517373290c920d43d941448b4 +5410ce2943b228f0a01ae12cfab67431fecd49416aea1889db18284d6ba771ae854c1480d6ec326ea2906d518a811e2bf92ea51e212c585cc176929ccccfa4f9 +75085e753d3520b6a594b291d877dc538b93697095a9239d1786b108160685234dccb3aa1946c277f95127468e2386df581da33093b340f34660546c6740492d +f1fb4b7903b1080f35ada2308563321a1600325cde944567a7b9840089a45076e1ee1c8bdbf68e42821c8b23ab459732cc75bd8c022aaa245269786708972942 +5bd4cdec2c21522684acc2e93dccb7ac64d7d4d6c4359ffc58fc1596c3abf7dc09e0b1396ef9e6d763f8139f8ae50ca33424f0b3b3a74d8a8d508a0c57ba5298 +d71fdb1e7f20cde43bf97d1f84784bab0142640867cd486fe8b78559abff8632e2a4ad288290b3f9d2e1c2adcaa4d24b435251441e35782a9cd75f0b5a64b827 +6956b683d34c155adb3a84e1f742c89d3a6d6a9c7add47e2ef5ff9f71822bc76c0a73d4c5b51f892bfff354e45e1732e7a7b4c6693835d2f3c4e88e746d0ee4c +42211ba46f1bcd92b3defdb1d888955ac26c0a8ba2094d93a181bcc87670a3b266dc8db5a2f950c6cde93621ecaeb9ddb0cebb9004bb9601328ecb1299ab4681 +a8c1c70bccc7f09a27b31eee612b19d99983d2a81c1e39cd6e059ecb0039731f1e48ca8fe51437681399353dc805cad7f8f7128a7532a24df4adbc734794b7ee +86de45b902816c29ae89413aaa47e9c5ca964d439462f8d64758d7032f6fcca94476cd1abae997750e3c979e6c983686c5a6222a9643f4b340414670890a7d36 +10612960412f1ae8201205bd83b06598f02f31b251a485ad9d12b6a30861f22b3b9b9dc4f14c15554cb8611bc74106e6db5da8229a38a61e1a3e20c5c2b027f5 +21e9099cd1ad87e2182a867cafaa1547c600dbb90cd1a0368e52e5b3a3842eb463fb96b877cffe78697b5bac5cb5983d6d2b12abe1507f569c5ccb43a0d895e7 +3c096ead06857210c95ff744fc70eb401c7560382e9a561cd3b168033c1d7d93f7ea78b1547c4e95e80cecaf85158010622ee45f2da09e29c1fbb66ae1934bf0 +d4577fe8fd8cfb2a8c676efe6bb48246def6edafc7e0473e11cb98c5ddb57f5f3cfbdccb30ea8ba2ac01ebce3d77113e8c5287d8fed80389e478f27baec552cb +04a04e826208849813d98fa432a9386e942c48701868509132a89fed21d26d32efd59a3bc548e42fb3b157a6374a8f25454945354f1462f79e04370ee13d2b96 +ad8a93ae7e6f3cf6b3ef270549e3c684b781ba2b162c8d39a79c1ec75cf3fed4bbd5d776288d8e3e3ce473c7530f45e5fc65cc84383bd683b0398e7a3ab5ae72 +8d036bbcd95e298ee5a6d0d68b36a62d339df1609b0328a2de8671527aac4c5e941905fd06376612e1a6cef5bc4f087c23808e9c49c3b7a9849272e6ba285358 +33f2f3f9ce91608d255c67597416be56d841e594ad02bc6843fb812801e91d438154823eb65c1daa9bc6a8b88a147d39a454106210b91f40ced35c7b7bf0e84d +528649a7828921a99490f6fd4ab90c86d6de25de37482b50ee10f592a2eddb92b0e7a2bd399595a9573e770cef82b60dca05231e355771a65a1e9aee98e07104 +4c77e702179063e56121ab274d220fe2665900cf2565c5b96d3aa384eef1440b0428ace720cdb28e0fa3290ef5e8a1286a9d6390fd658338759c826069e7a1b8 +e48495b1f550773cb7ad852939bb1820302d8e69a4c708aa921d9d1925d2c96760fcaac2a138b232e2998eecb86b4f7fecd9d71aa7ceaa8a23a756a51e2837e3 +35ced53aaa286944732aec9a336594c83c4a6e579a32cbbda43968c2f3561d38dfe5ef7d776aed7efac63fa54944b77de79bb1f1a5d3b074e4657015ed05d2cb +e53368a508fa90ccf1215ae3b73f78674a5e4fb9f22ab63401511386e7b8021cd65e5a90b8720c81e8972dd42a82219b39948d871673f548867899e1f4748c9a +ffa090f66a192e492c75be85855e154d0fdc60219573c87c90bc5b494e3772ce45319d7c6ffb130fa575f7befa80f03711e235ce9e13fd738f88256fbf365ef9 +c5b733a3bf925702d1b445fdce3fc72a180f1584e8b654a4c1a10004298f213d902f686dc8be228bb4023d16645f6094590612c758238ceeb0be164433a175bc +6698e8fdbec4ec37274f4de19ecbf9b0ad3b5d304afad2fc0a94d6a13c1a66bc0f506a1a966353e8b02c18a287c28ee668686103bbd6bd4986dbf13e3d538e88 +7148bbb60da5dc5fb416604b36c3c4b6781464593b6444933b82e2f413da69698da8ccf9b3d1133d90f67700c44ea5b2bf20b77cfdab51ccc5143a3c0330ae63 +5f71744d9e9c36af12792be68cf6c28c72a7f9f6b0ef70c363a6f9d81d2be2e7a01204a0c45e9bdc0a465e0d441d3f4b1a944ed205d0904f0c9e9f1ab21c5ec2 +a2a4714840ee5ca88ba9c0553099a8c55e152cbf6ed74191838d33631ef9c7f2b955b184d067c1dc9678746b7bbc86c2edeea398cbfb4cae33e0fce12f61efac +585a951367f7653376b830361dec64d0c7a6d834bb31ce5c32355972eb600a9e30adcb66fd49abe96e728659d6a452e83701b618b6584bb3ddddc5143ebefc9a +77a5857c16cfd48f00bece78acc9f0f34a989d670bfc922318ac32651abcbd8db1f9a17bc899f6d1a0d81d5bd939a2b0bc224eba88a195a09645b6cf73cd6920 +a3e04382be331bbba93819702143fa54b152eb394ae473111a36dcf3678d81219eb99548ac94a3d4223e01a1cb134b4457deb787e752cd733cfdba0fc6dfb66e +a14d7dc7c45e4cf0f160f9bf487bfe691ffb74149d73496c27e46b66d2ad1bbf254089fbef6630cc9e076e8da3def3c1b8af79302ac8fd96d0c3646ebc8928c4 +1c4d56c36ce450cedc1a42380dd54cae250d71c1386fc173097089cc4930b53de42506cc780c95af166fd1ef9eb71d6cf983472f653dea919304128180ca3c91 +cdad471947b1e46b961ed81ac5071833dcd59ada233a2b1aa3af8e0de9a4a299ebcbe4710365944ee0c00653490639a2cfac8f63b87cddbd09dda45c1f093e97 +88ad86db7acc01e4d628a5c05c1f67231a989bf5dbff8e91aaea18649f213b59cb6b88ed27cd8ca1d98ba297387f0824cd6d53447eb246baa3bc04ab53c7a828 +5cf3181a90c583ca47d9f279c06f76b2ab5d3fdbaf1096d4b3b00314b92a3b0805b970954e8d91843a2205484a3b2f0df0f324ea580edb30cfea0639117b320c +cc43014f6e84df8482e9398e9e5e17aba656c7b33cb8c73ac6092bdc62122a7e9edbbb67065998d1a0e3295cbab8b100046934ee6cc71a33f072dd4baf46e7be +bd71ca712b624943491af5256c6a4ea8c7cc78a4cc049bb42d25e7ef944da157e2c87a24679d274553c1b8cecbdf7375026a9ef8f3ef5317efa14d19b6f5f445 +8be398f3cfc32355c611271c137723e8afddf25758e36d78acf6d878f31f23871ada51a79e9c06ad68402cd0aa142a8e6d038e2d165a9697a712eb8504246cc1 +367ccbfc4ceb79caadb0d4fc6cf15685731c95efd1ba4b2f328f32e4b1f654c03353c8dd107a84fadd09575f1b0f7f1739b0619363e8990e3c7c47ac81215e73 +e6a571e47b3e1c4fd19b669bbef7a622e999b63d764f4c5bbe324e66e87c33e75b8f07124cb0902a95681f0af438136f4a083b568120184a6f25677ecd7d6479 +3ef300285cf356ae6f3b46c4f07a11796fb52c0640851d0c9ab1589b76b3205f1fe5c1f66288dcedd1fd851dd766e493c77e59866e85cddb5377707b11f5b029 +cb58d046a2a7c2349a5859ebb3378eee03a9407a173b65f3b090aa87b9fba0f4a1340acb7444ef636b872a83f2240cdbb00ec081bfdbea5390787bc8835d09e3 +5367b129d51e048c90291ddca0901340172994195c3f39869b66c4f0d4d9310c9800232266cc87bac3f49d849470de4216adb48e417af3e73138b228dac1fbf7 +7740f541400a580819de29f26481c6a001c9971bc3938da5fc43fa0bfb8326248a704b4b60f2cfe7564d6274d64437af7323fa52b35e6e5c3cb518056346402f +c9b3711137df58ecd8ae4c31563b9181bd23ae9a5a1893c76be2eeeefdf4dab4c5a157b6c5bdd0950e9d795a1c316f4a6af032ccf373166c7db0d6973c9f141e +d1322d95239d148544d15799300a8584a3cef5bbe01d6f4bb3a30df3848c0f3006ac86115f6e7a964792eb71cebae20a58eb43f1c65db7128974b103dfa1d8fc +a75f443e4d8f8b81d02be8d474b291f5197b6ed2e07d7e6ee1a2640bb8d09244652ee8290d01cd97bc4ff3226b372a8f4a6367a986478f94144d74cff5e5bd32 +2624f09a3fd9a95b4bbd309b0942330016b6de7b9bd04b66d026c8ec3646944d225fea98b33c1acebb32fafef4fd04b567e6ba3bc4a6275efbfb5fe2f4d90b63 +e70846b8b21c8f4348cadabcc1642a8bce2b9297726a128a41bd48c2eb52d9c53cb656d663174aafa749db6ff21cfa796db3e3dfb8ee261a269d09310218d6d1 +d691e0e93c72a27cf2f3717bda3a0e4641339dddec1d6c5da7bdbc2906a7c3942985206deac1b50e10590d11ee594bd2db1886153a1b443991dd417de9f0943a +efc9b107a2bf06c743137b2c49e656e90cf1b3f45e86b9c8446feaa8150be0ef93fe0d2a8b73b01957356e77acb3dce8981da3b1af03d269b0bd4a0e56b98b93 +4e396a65e4be6549e4b245630139888b91ada7e2a28bea67466e4d5d146259b2001e76570dc5daadc08b8a22e88e16b598d83ae54b08d73856bc9f58b588a22b +c388a21420a385c5f6b6c4fe0d178faa73f87ea6d8abb535ee77ab4ec32bd1a1c94ca36846d014aacdbd7a0cc209908be9d0338cb945eacc878e9cc2c51ebb20 +eea4a72aabf520f0fa9bf138f5aaf673cf8b138f5d11654e3ae37d3e3ce430950114561734f1fc5016efd1302ad5a10425784fe65f73c1ecb8f09def4c8af2c2 +ad7f8d415817bb99d6d37ce2b13173e182a8a00da4039ace39575d49932435b2c71fc6cbf6b2d7d3bed8c490c68aca4fd3a33019b40e3a144a6168a6c25a3b91 +8b675dc68513a933fc53d90d01535ec4f5982389d4796d9256532320f7618e2400b11f37a1b7b3aee4fb84c3355eee55241bbd0cb4eba4775d1b2debd6443b0c +0e01281b02bb68f67cf18fbf88259ff872ccbaf0f26879e5a9e8847b97e39eb506c41ca765c3ebf1c67d7f8f5319a6b9066ff01ce94a3e9f9fcf7328e57adcb1 +63bfedf628d0b1109a9d63b8939d0985b7a539cd61eb9a228ed30600d22c48814198c126d7ceb06ba7b76a7f37b33a78aec5800d95ccdec8c63807b2994d5bcf +183ff714c02e685a10a3e5ecd8e826df1a3ece3b04d2980689ca72f019dab222af5d363e61dd50e297ea7d882b30a669433c158dcf0e3bc258eb29cdc83ea689 +ae058d8c039147310c264939800d3a9e5c513df38971ea3401042d7c5c7402aed2b909ba4f662c8cb3a9d5105353fab76d8c9c2abc8853754cf28cdb8d39b961 +35b2b50f577e88915ed555894d3b3ed243372b376dee45bea3eb1ce0bd051cd34996053ce0ca82926863a4543323845b068a68d9f058de50c4515084e49d79ec +3421c87b3638b1c2acc7e146ccadac1555f0901e39381c7fd88ef5c76a1d5387d79a52942ae7a2732ee47cbc690de3670fd0059c87420fd2a3f3321ea475fffe +38e9bc335361d4e9320aa91cb7c488e01c99991419c532a752c02df6babb9f9e424a4e510e444d16f8d26bafa126381aafdcf6d738c4fe45b7fff00771d5673f +1b75d3a7b3153de823a6e0fcebae8dbf1302ee7af15994a98f50707dbcfa879f47c94751a6ca32c21859d254e031507a2495c239109edff04d4a92d7601ef50f +d4cefd706d0844d16d5350b1f49eb2c47dbe1675dd6ea5038114d0180410b115dc754d2c73fb87689f3ee25def8b67bff395c4644fc36c786e9dcf3e1c075702 +ed9f76694cbdf28618fdde7f40e4ed4c7516433c3b7ab63d74474c654c725efd6cf6c12d4d967b2b685e0bebe80e1767f0ddcb7dec60e304a16c09ba0d847ac3 +fcdcdbd593787a655ce3a26af21f950aa4584a95e940857b35252a482b067e3bac6be6b5eb49509c81a64591c5a6db724524d28eabe044010ec9b1d0ebce8f39 +186d05dfdcdc2d52cd7dd2f8b7a420194a929e67d4e63c630f4b246eaf692782cac41b04b9c745f4f8ddbcc8664053935c09071c7bd082ac0261ecea845315c0 +e45fcd2ce0e1b97d6436c3d8cb569e98aac3f96d6f024bdf95d9a539454313580727d8f1f813b161ebfd51cb82962d5949bf7b1104d70c1d7f1077ec49a5af8f +e185cae0335959a672c9e04970601e98ee3bc7397540e9f62369d10af87914c5cdc4e49902af684932165a998970cc574eaa750a514edcb8a6351e7ea93db66e +cc8ff31736c4f2c9558973b77e6773b4b4b30d0dac72e296c886c737c44cec8d77de1add879ae3e4cb2f8b19d5a5848f20935241122a9e81c83333a533ec088b +a70ab5e14826bccb78be3c98f0cee9bbe83def06341a8c35f7de11fbd7bf117f815af4cecf7e2e2ae8b62d0370e921943b9b6edabf83ec1d5afb5ada63eae0eb +2fb34bc49fe294ebde1f07780856faa5f51882c976684b10b9489b3912424771d376730187b48710da9f2613f158540c09b0e675e65426fdce5b70ea8e1dc3cd +848f4609ee90a731723c98c7ae01c51b67fb9cfad357d3f5fb970cfca9754610b7dff4cb5844ce9c0dabbf6cd54931facc8389548c7b493ba98fd346b2e6f61b +e3d48ffe7bac6d6e8b83d06e1a68305c40feeafeaa6b992d2f97d3412f65c5d08850e2369e85c373ac4dd6f19d4bff544b3b212f73274a010e265780be6988d9 +b666082064b0bb2386d9aea67ff2fce82b6f60bd3379ceb8c82fdb008d3b40d4c2b1ed361853a7c9a67d8df04cd63b242fbb7b49419af18dec083ab8f309d725 +cc90423a67dc19b25a9e49793ae7d0801bf271bc52942743a54316509e7e515de443d9ce5538fc6306fdcaf0d23ca9d164611617e30561c16dcfada065c103db +dfef466119c22adc341e4e07359dd1833b62ef2daf47d63d7f8d22ea414553e7440130762ede6e54fe9c9b25f3e5cceab435a3e390b112ba5b6738e410eec851 +ebdbf266dc75c7d6d877fe4571e4b1aba2b19c84d11dccbd54cfe87094094425e9b3c92282bf8a9d15ea56d5c7adaff4c6eb6b36c5cd50619e9c3195eec5ead8 +bafb10731fa89aa3c84df6151116ecddb0210e6d5c1fbb1f7f301e46a98e78db3b62d154e8f113795366cf5c590fe64d8ed7ca289104cdc335a7ceb44b42661b +92623c9356f18af75fcf83ef8a758f3d147bd6be1ab7fce88771d5a799d54ddda218cf344ec9e1dcebae8f3bbff3ad68c373d91c28aa570ab873d4659723dc20 +9f9861831101053d5266f809dc49944600c11de9ac1d75a1f19d3c0f1543efe8941e2dbe5fb65fc81d1436974931801713f5d300658693a86c19bace7ae63294 +31cbf088b7bf3b3a687be9a47e94ed5c37be07997bb7edc69f47fe51a74636b3fdf23146e0761098d3f0e8f49f63a2d73df948341e7f56622274f38cd73733ca +4a5e1c79927cbb16bccc1ebe056c2ab8a602915994be050f671422c2389d91d9f918973ec61cf4eda318683b84ed1d7356f12f64659e430ef799e3a836aec39c +c9e26d1fa5843ea2a85c43097b91d20e1c288983441d38cae73caf9191b9915dcf69008a3b9fab58297f920993591f23a35c942e1fe5f32f4a9f9f33b44b993d +72a04ceab912e32725e6d6473440fc9c2ba4cccf69f3650ea0874a618e0806e15a623198fc1efe328d603b8a59d7bc230a2e617e38f947d74b6c0ab6fa85e864 +b7bd42f2a6d2c933699998198595555672511c901f4f22839641f829e6f4dc583ffe1a959dfbd8dbe7b57860cbe6d8f81cad12179c1b2b562c0279626d44fb54 +e00447a78c2b0113de837592225a20de7e2cad156c4bf9f4234fc781e71e8fe16a98bb0d5379105571dcd2a6386231f91ccabb7dcf01c672dd1e5b9f7d26f63e +f7441a6b3cc4865e8b17cc64caa65b4266f226eb30a24ca62a226603133526c3c6140a264f9551ae42e83f7d802967c06070d0ca8e679e886db4aedff6c3e2b8 +ec939f48835c8af1b0b5b3e7c569d74120a5fda275d7d61820e47de3b69bc83f6b63e929a7507f6328218a6b5e6e5e6437acac7c771a5731b484fbb869d9d382 +d286711675ddcfe820afab244e75b51ddd5d320ce9e49fede66f3e57154a22e87a786ce69f7ab2bd08631bf33b66bee37db1e97b5f8a3ee85a0a9ff96c37e3d9 +6a1c8c838577b86466580a4641f8d9822e3f6fb9ef966858b82cf68f81d232ece6d86a1811fc6d77073429f2c71272b1193053469cf803c3a29da8c0da4f1939 +5185e82961771f0359da19b6236d298bee5c5907bdcca07337c16cb4cd1eb5723a0206117c67a677006c792df6c15596726c9037f77d1a742296d1160a630a92 +8f91109113144a3d472856c278f5567c46b04e883b8be75eec00c9048365146bc45d557877a1689ebbb0201785d643f9bca19dde29574cdc5dd7d2a860a5d99c +2465059962a4e194cae6a3cb1d60fc541a60e0df0f87759c0e94a4946d171b4b1ba21faa7de9e2a36370f12b51b87743da0bb6050b170c572ca11bb36adaacd4 +d457505dcfaee410e23cafc4404b9d58f3a3e64c479096c6ebcf1f172fdf7f5fec7ee999b8953ce2cd934e8933cf3f2396ce868dab1511594bd87e868caa301b +fea54de1b9f8e397cd89e90d9571ff5d0fc48e356b193d4cbfd3f485e47035a946d48770ce9c3a292e7ccfbbe20150a08d0f3f904088a7e823ea7dcffb63d98a +25510d774ee5d1e368f5cc37328cf24caf938b24d46e3a61f85748722032a6b16900c57cd7c73e1cbfc1daee7ef5e578f3d1fb01682ae32d1fb821297d19a1e0 +8c9547c7fcd336837cb5a5bd9aba0142d6ddfcfbd445bc70fe1c846130bd37cd3d480c67b750a128cbcd1a5dcbb573a70baf2d331f82ce58c21ac3413fb71925 +b1fddcc9adf6f4586c56a10ce1378276dab6a1223a5f610d889a46a19ebd7a7bd9dda3f0d833620008dcdcc2279d18e078ed6af6dccd9a4807f288269222a5b5 +a7a00e50a5321df9cef783c20ec57e3c92bb7254c3ef9b0d006574e3d4a50ebc521e349f126a4239527c76ef8f7e88a3c334818ec1d58c998b699c03c2863d3d +80d29511facda864b3063c8dc6ca7e2df3488d5a3510ba4d97ceec96706c23a56c8ab4fb395ec91c284d0ac62b093868c4c60801d3860d2888f29e721efe9ee6 +05f3bf11fe9e3a1d923ae0996caf408912a06d4465a4020fcf35f6337e3eb70babec168ad6073877c62d5a64b53e242267fbadf68f0366d34138aee4b8395852 +3a410f37076357be34f215b7cd497762350be72e8ceaa5cb6378e5695146c837be7e75746f80bb856214338fba62e6fc289ebb1c7406f75e5ecd42109e301968 +c9e4eaa86571cebce8dc98bd6461dcf98bdf244edbba07ee8d7d8cda3de69cb3e28cd38f8fc68ad2e8872ae2fc6d87a31b8269291430051fb317d31a6ae28a2b +df12f783f6bcfee8133021dba3654e7d0c4d3d128340a8431da5a6ac2c2e7dd795f1000ff6152608f5ecd814cffff47b11f0cd963371b53c8b61940960c88cfc +f2d83e98145ba76434a3645a7905d4fcca50a79cfc61881dd7cfa3edfcd6af7d99693e1be9c9ba396ac895ce010ad7b35420b935cc522fad6d4c0d747de4016d +3bb6c5b6bffe26f23ff0e9985d5b9e925b61ef94ef709307a506a1402aec1e94c1d06c90db75cf57a936b664c8fef61a84c40fa1401d64c97a27adfe56103caf +ddb05072ee9b289bc9fc5468ff26fd1bba99eb46ad6ff615ef8d0d9b60e6b3ada89183a0d200a1771a450695ac803074f8c01ec27e580976a49a2b711dbb9e7b +349a8e3e25fa4aeb9805511af360ed5bdb39b88ffa19eb54020b66924a01743eb8691be9c01e460bb0a66c7a9635ff287888bc1f811f43b9cbf130d3796f2e20 +9454b33ded7de9becbb9c729e52078dcaff990b9a23d64d9bcaf384d2842511c0f229f13cf64383e6cfa80ac8dc162b0902f129d03b3df1ccf27663e646137d1 +83cdbd4c354c6bf44e09cd737bd84cd8674a93e7a421ff2e0b42802297845f9c5c5d4b431e48dcfaad232030596c3f59c0b7d3574b0bd46a146922a44b752b31 +741678bc0866362753a8759d5490b09e581f16709850a674ce12363c5e1e2d070eb22fcfabd1b386ddf6d6af8d822d1b683b9f1f850b60034c9e13cbc8abea10 +fad49bc4036a621849090354ca69a61ba0f6d2c6ec8187fef0e7d8ba6e639c78f6e9b164c902bc99e3bf32747c03ce3c342909b8ce99e39470fde75d765154d6 +d632b0e4d678ea26067a90d81e4d91d4f8d8f0c47157675d766914a14c4ffe8901fa58d6e77efcdd18a59d60c509c74605b32a0cf3b41e992d6bf4a28609291f +4f46264321ca208ec2d0bbb0f04358aa29b367c5251ffb64dcf4dfff4587ea9e788a29a8f98c603ef29493e3f5b56cf8b56e7dda82650c4532b11fa07eb377f5 +8b517af72d517ce57b53dd45b4d030ae86d0567a8f7b32399e4bcfb36ba25664fdc97ea0612cae5ec746b92d289ae85f3d4a623b85d7e72cb93efeb578aa8773 +07410790c8beb6235a16b79dc8bb48e82b2eb82a867efd4df243d0ad74a3ccbb80ff58b7e4e8a8bcecfac879eea1e8bbf74fe9d967683414c3c9835fb9f58fb1 +e2835f60b790aed84141dedca2b28c1e2649a178dda19d1b995cdb1283c555313c65412a9c8e0250a4966f8ee57e4de5d490e4146e25773b849729c4b84f6260 +67093991ed166da0939d14e894dc5242dde9869bfc2cb1b50f032b7aaad133cf2b944b2783c53cc9cdba2dfe1b8eea391ca7ed8df9bb8003ca97511e23313d97 +619fcc6f503a270fe98d85c3051a525b45a6d09d7b883d471b76ed043d43736137b44c9d921a95f2886973ecf907dfcf024d1960b3e46c363fd66de92efd4e92 +0b957ca4081e13f13686327ab941b9795a8d0edd254aa997307f1901752958756ae4b2d3dec84e1afca849b4012ce46e5ec7aee453e3a13bb18aa79d11c79d7f +3e507555bcfae686b4254b3eb955d5f49931735a43ecd8b63bb6af59137b376f8db5b42c9c70c6c9d1505f9d5a850d5512aa973c7446a11cef25a7efc4534f8c +b2aa2a14f14f34dffd8a30aa2d8e3f9b4189223bc29d5ce7c99cd7a7f1e49fff107d0776c7b33f4599863e142b4e3d25c1d74e0c35dc954321046d08a9854436 +93b730b472bcafa1aa56ce7a9061e89c15abe29cf77d80c128df22846b63e6f8f763cb4b2f27e51c07f4c8761f2842e31242e4941863f937dd777b14d08a1fa7 +9d453ccee424b70b95bcc80377a88bbd3df09c689997d59dd9cc0c8e28c825b91f0aa407d58bc965ebb136c5451bba6d9a9890da80820a4ed8ebe370f8e9289f +39c53658d6021453e1308e9e705674bffa5c0c3eff489af294469fa1f0fd78a52978f2ea732e8dde75ec38bf1536872ddd5e9e7cbd8dafc60e769caf5f711c39 +2b75228936bb36462775a95e8ceb287cb7b13947f32fd3993c2a0ba9e214b2579710b561ec669828a6f99321aaae242c34bdb05eb8bd63308d55d3884ca60665 +2e6848df8e87ef45ee64681b515502a76be00cb9fbc955731d983f415153818c60c08b53a9478682caa3c7311f729708eb436903093e57a421e17d290c330271 +fe03eb2cfb4166b840596e1db4f812ac845cb8820186d5236cbdecbb3a5e050c2deceb1823db7aa1fee48acda64a55324029b41b2211dcd30b45a20441e2f7fd +6dec3641757f40c04788147a51419a0b0d0d4862219662142b903b9f5dc869f02bd9bb2dfa5e7b26964ca73f8944f219761f7fe9c107621a61a1db603a3b201f +1acb85979e1d0ba6d6d3e6d1134f3ff542bc70ff83f1ca9d7f8f9debd6c5f1ccbc3ee64876f5c6228e70c32a502abfa56b754b192c1042b39cbca7b4e28371f7 +2f7f138ffcee77f002dbe29cb75f46fb0acc5f87b7200bcbf1143bdf7c3376bcfc3c73b40fc4f3bff841529aa3ce381525c39dab34289b788b3c3dd9e2226299 +ddfc040728d4720135844ee653869bf8ea38f2acb3620025baefe73f62807d73ec7ce5b998bcf4881452eb71ea962c8e3d188cc1b56ce3096f6f18aed826760e +ac98c96423b66ee9057cb0d6452b0f619c3bfb398782500dcf6708a7a7722787023cb41e48efe42ee2820a16729dd96d51bc919f3dc666c76471dea96897fd4d +9b29cc5a4075be82396733f3cca576cd78eb35b165cb1b18b483999a21df9df48eb53efaf7a83eed92a83bf13c1a3377a4324586d42aa20b28f2f81d51ccdcf8 +02ba4edb29ecbbddca98e11b1e3a40e14cf09da75041885e0040627fd84eaeb913452dc1c3ccac2a496b68517a3dfc3bbb828d1cea6086cfc67838e446b0a1cb +715c3c663d562d9dd48214e65543781ea7000b1b880ca71ad3e11a92832545dcd2cc3b7246e75348b6e638929a05b44c0d8c58340fa3528c60935bbff2efd699 +8a47615fe099e45d5a87cacdf9fe67e8bfe0e46e82ccc255d04f542c1d08e83a1ba46d1802e6281bf74a4a1567b72e608df5309dbc3fa73436edef8ad262bc10 +373e2c49d55a541a0649828c328d0c182a22819a70e78a1bc15b4df677284ab366ce8af38e5bc45e3ee571d40517c58b77dd11af3cf8207d50e551074565fa92 +253167726d74536328e486cf39e7b498337f6e3cfcf73b63e3b3cfc57d3fd81afbcf3d3fcebcf4fca8052a1f82a79520cd64c0339ec3b0c341fad3a64f8db77d +fca371fb2f7f1d2fdd7e73ca4bcebde69aa8a2182a7891476e23abbbac7e528afb7b9981befa573fc44a15c409a79ec0e2c1bad2c38a74727c476059421063d0 +b22bdcf2123363c032ffbadf82c9ebf20b2f89dd9b37c4abf7dd9d42a456da43eae62e8ac6a38f8bea634f8a993cbcd76112ac27974a94a83ddb6233f9d2820f +7e36cae02e6e26d6694011ec4a75e6819379041cf62080763039b341206213522b8820fb6387081effd9b2e19c3d4760658630d2b2aee5c703093bcf95b14d48 +b70d2682a4d1267e173aeea99d169528cbc09dbf4f062ad385437ef6d8dd51cae880c695c747e70b8f3269e9d5cc84223eebd4e8617621d9fffb6f47df92a3a2 +008a5156fd1482979244e392e253019dc8e7a227d9ceb800c343ef714665264433875cdb4eb8cb3ad40336acacb1270aaf44396033ddb903b6875b4f2374cf8c +5da3bf09c5e9a79470b868eebeb9b972f26461b8299e4e81354e611bd7319ecbf52823c9d0fa6deb7ca6ef48b46e9cb02ec9b921217f73138702c33ebd15d762 +1d0a89cca0dda3577d24723a5b6300e8d104309b05c879fda988a7efc92451256554f960cfae9a13e3d38c2b33348a64eb39791f48ddac29331966c20d747667 +da31b8b9eeb4ea68356dbfb6323b01c7b0309b7cc379df0e9e14ab973db09019de123f07180a3963da9498f9d18fc50a20e0a76ebe39b631bd4776eea645b3d3 +ce10c32ce0204a3a1d4acd5537bc379e9c3d339eb9e3ae78eee6bfc43e42d4b3af7c5bcc993915fa08e715ce9c405f2612a744e3a9847d71f107de17f753f85b +83f71b21a63efaa20b7990a5f1e2f32fb2ed2a1c04f218e74f58781cc4633bc8a40897b582190ea53e1016d2d068c491cf2a2beb61b26eb7b0b1bd855a0bb689 +0d919257d685077bccd5d7c72172bdbdc0fb6df432591ec8177821f6efe6c1345d7465b4407c6d86ae3382453cf8f2b351f6c83d5172fedbe01d021ea0b5a378 +77bd8c6df2bbdc0dc2de29c2964d9c58c0416e9d20834312dd674845778b948c4259481e05649898f803ec3dcaef3b5128bdacca6881b1157a8e9fabe19ecbce +ba347ade602b1cc2702dbe33a80721df1eb8efaf914b1e557ff205740dec806a26aa9b7a569362f450a82d5c4c1197b05d083a07839ce3f043166b2f0adbc7da +16130d4c910d81319789b00925711ddd5f773e51913b595838764b5067a1a7c234f7d06811d6d01a05d94fcb8545f15c6ea01443ebc07defd63db50608eb9cb6 +ea962d16710729fa6762d0c313576deb517926000573a20c78978ab0fecd7a516a97b019146e5e7aaff88061b65b1cf96cf3cfbe3c1533e513a5cd67a55430db +6c14e1c93dc02e157b61d4529ccbefd84bcb224a956a3713d782b643854af3a61b817b0b39460fa1977309844bf379f059741a5a6895a794e89f42d69cb890f7 +c883aaa5263017a590e9ed67242dca755b71c472c08445f1cc638fc7237fbd397ef995afc6696fbf328e3ae504bc12c327643193875d70c979514e387a3f33e8 +763cfd44dcb473479c81875975f4ca84ba18021cde2b34b351b4353e06aad0e17bdef5d727ded56b77dd4eceb5316af00e32a09da053535713f9e4367d70f236 +3cfd78f4ecddc90e14df07b6fdf798b388b97c0cd6306c13c414f749b52dff4318f582ceb54ec3fd8da3912d2d58ea9341a896c3a6eefac67fc0a838102de487 +23ac716be314ac1aca0ffbbefaf26ba3efc7ff0ddb9a5979d075f6de7b4b2c9fb728b6ce5c145313abc4ed556cdfb6d502f081d032f1ef261aeb24f736910395 +72b34e22f5c13b84b19b7bdbccb68942e273a54ff1fb2194cfa93b8e597623b94e220a11481be9fcb7977a4f361376eaceb982ee58283adcb7e19021dea135cf +4525fbf2d6d4300c13016d21244d3d66a9b889a011a68dbefc70545ffbafc9a0b53013be8b90d13aa4dcca59e43ed676549056580ca9f3174f399bba9241d741 +60ee37f99b94479b069756523143911c81dc421b4517de57c4b188f035795096c6da5e87e093b3372caa7a3db21ef41acaa4537ef99bc082cda4866de3132deb +7a1e5bd1cda794c59423f177079ec83677dd131c4e64e65e5a0e4ab5c06b2d29b7105aba818149995aec2c300734e610e2652d58919ab09c5950bef7a118dbfb +24b31cc4e6d5468588d0e1d61b99f5fde7e83b326379b21851944d48966b3ced4edaba4b5bca59d484eed884c7bfb2681d44d9ce009487df7836565e7471cc98 +0d0b828b130a1e4855ea6c0081b3632e88df83b7dc1af7fce267b442bc14675e7555cc9d352d859a9a8f29f3e650f49d0edcc9b0f56d9be22e180307af78479c +7cf1f989e1ec508c0408f35e3d89da242052cabd9c7bed7b521fceabb7ff2d41a5758cf92da8ac8815679f1973e6c08ce77d93162e8c477ffee3e88173f8e24f +becb9c867f8bda1933a8c0db8d99412f33dba3d85d9b3981f52c9db249adcf0eb94d36289fd0b0011ad582775c1fafffe23bd10b87ecb9dffd2c4e6424560f13 +6b1c1d55bbfcc8e8c50b0c321f6190b5eb6a66cbcabffe36e67dec8bb11d2e590337018923d5860ed782e4d2edc43bc988102cd88572d93a3dd966402cfc16e7 +88730d0be4dd1107eda090e92ceec908743f82d78a47723643151e288b75e8c3384a6e154e764e46deacc551be6865b491cf5a3f4f600ec2b6ef01c2505e2f59 +7952743ff7203b8e8002a7464b6e1c21eb7efde918db4168580f1b9ea8633a036054c20e946433c08133342af14af35512d6a793d06d03af5b2c16b09a0d5548 +56844a6fbf9a7991e1a37f73cf26cbcbfead9d28a5cfd980096c609433f725ccadd1ce72071391b64429c2b839924b108c4b140cb28f49e5d1031bd659ecb575 +ddf977024272f2f229c48aa99bffe9099d06dc878149f99175a4013fc85f8cc98db3ad1efba5c66625c219028205e9d97d30766d61eacab4f228aa106961b121 +9a369c706e0cad793dda1ebf9b7080514714130bd994ac08c128a087c4f02fe52a9c784cd62dd6210397ba6300ff4f07ec13773c449de7c138e6d2b752273a87 +06d8c9e455030825c001e3632baaabe3b21bde1f3397af88276ffa4bdcf83f5f8bd3ae785bac3cfe98f42036bcb9091493d9018d0cee03b068a651ed89dffc2c +3ab1f87ab15aea53867a5a523d84429fdadd6d5720493d1b0f968df0bdc8c01263e439a79e95ea3d436ec4c582af42993b1968f2d29f7ecd049eb5f10268de9c +0f7e2e6ad8d5c1099de684b6d60f53fbd04ba5ac3529919071c60b22a7699773dbddb3012d669c797eb4339c711bad0bd27156ffe197b1ec439f897642073fdc +78f6c5d14583dde86bcfa75a47fbbad763d7837745fda5ef608b474777b9e54986b2b45bfe5d2ad602734f089af30f7a61dd6f0280707bce69a070a28abbb810 +0bd29324bf722dfb08996cf517b0b060d98582391454d084749170ad9b6b465058df49279f1fbd0ca619a02d2615e4798eddd4e68a299ed69f7c11613093861e +a71543436baee41a6010b73d705b1cf9b12f737e88dbd4a95a9131f39b29c08c1a6e49c2fb20b9ca111480a845999bf8bb1e4530c131c62e6b394660063970e2 +3ff2829ecccfb881b75ea98a026f2a9a9a32702d6ecc9d0ae8895c8dfc0952a4908df743434ab9910f47030898903c6d024b8c2a5058bc4e91889ef781511886 +91936448452385718faf422609d9729edbc1858e7033ba48ad4cea07c2e2d169916ec4ff723860dfbee6d8f4e28ea8d953c37c86526616e445392c8339175f19 +75e7bf3ddab66e8e0d8f3d1ac3eb5e8e5e5c7ed6cb8f47095bd897933f954c9a9a9ad8061d4b2c3a62b58c87b674ee94987bda6762fda9a7c5f37ff9533cf2cb +9fc41a180627bcf5ed71247bf89451d01b759b0ef760e2c1ac6426c21c36087b8c50ef6ebcd36b4f3d15c54d53010c882fb9d1394c5e3d62c5c2d8b375473c7a +e39fe3955bfe126dd4aece7edffb637a533da39a982623e2a67148e29dc9f38a58e0d319ebebfdbff0973f46117949c769a74601752cd1329b0ce70314b45073 +db0639b38bed24b7fde1a731f8be7f8d0a8acb524a7285b239a4b6c7e36b9ca4f44865529ff4f82ddc8623abdc7e259f759879e5f5d1469b7ffb1bafc4a127ef +8f1dd4cc265ff6ae3804d72ea7b43aa65cf19ed8b8634b64d9a64e78dcfae02d51422855bc7445aad9ed71aa1002e7b0c6fd130325ebf8bd1d69d9668196fb9a +8c0269c5ad43994b3937a183df65669b4f09424865ea422895814a797ad6b45853591db2174ab3b0d87bd8336befa604c20ceee89e8855351ad4b95f7d326a8e +3f271a2f7c67746d5dcb1eab9b529368ca9590ad96352fc55e0af163738f4cbb412ea9a1c3dab913b453b4f37ca5e95481dc2d2c0345e1ab0d99741f5ed75043 +3785d713699867d50abad83931c0d3eb9f444897e801d62fb90f07489a1b9b4be901cdbd34e47ad92c14ab088f9fa208bd8d43246539183f18b2d9d920a7d3f4 +c37c5eafcb7b6c35357c9757679da900252a50d13892a3b81c94925bbe6d5b82f4dce0cbc6bbb4c39b843f6a1bc314b9ea40522a48a8fa202bdac9d976003a0b +70644d4335c9797d1a4491f674a5a096b7f8b8289fcf4366dcd13045b77eea443d1460f3d949bc74f2b4a860687bd174869b30fea806946c165ba414a390c79f +7f6ed44e9b16f77eefbbd10e89f3b66f7e2d563ff4409cf6eef7c4a2a38f4ca8d7b8db6d005ad490dbbc1552e88cc58be26e86318eb20d4b236cf31a88a0a79f +794a949616c79419b3f09c53e3ce9ffe3cb63df170dc097870ce873f12b308d5b23946dac54f2e61323d3c039eaa349313188cdf0fbf6c0dcd6a8ffefa1771f6 +473f89403336d93c83055fc4acef5e4099bd8fdc151d2f3c12b9145247dff941b6e104a2c76b18661d9e3c2b8ae779cc930c31f4f332243a38a1359e2e1e7a1e +639ba75ff5fee8fbf6e7a1c81c6260fd9f231b9675cdb223a8b760d298913ee5fcb73226eb17a923b58f66c0f67bff46ae3a2bc6808d9dcf7e082f83aea4a122 +36efed20775261a64ecc74d88923768e02c37e3827392c0263076e3574a61e8c84937cb4e665bc7f987befa78d5f54cbf100e5cc17ccdbba29812ded0e53a465 +bbf2c205d1f7b79f302597fc59860b71de40eb816863378e9a8bde1375275f1cfd7ff97e8a70fc32c8b596b7f3a1bfc7d12b8f4bf3e83634c35040ce040d6654 +82c6f1ae6e947b777b2f2015055634da0948e6cd2270dde4cd0e47713d4b51b8263c8f0b2ac7ae8f4843e6874aebc4dc12377ee6d882582acfb8c3204d2f7c0e +021af42869949dcb600d699c1d27dc0c3c431042f91cbf257d48c549e4549406a83b6d8ce73da55a13ed33c8bbef31ea30c0cc6d993a3d1a418f4ae1840d602d +0e8222f9a15287403af0042d8da1366a057b93ebcf401ad44d70a9c3e53569eb7507e81f6ce9a080ebe048048ac26bfeca93a37cd5c93148e1b51f8bdbceecba +8e5db7451945c6a2b94b237732935c98a190e5ae7058d77c2c614503a1128c5ea91dcd3bb7c74dfff16f71c47917c609847193a7d2f9c8b588d218231f75f249 +51cb6c897b7ff3ab443b2a39f1347236307d16c716f2e9d42baefcd77f893b7efe0b58d828d3b7bf11677cf063310fdad13831b35b285a5bf276045b647c9bbf +1dfbeeeb80c90763dd5db7455575659c78c387d26c33075e0c31d6a9e1f2f702021c8a0e0a95ad8fde1945754c0a3aefad89d19048ad8634195b9c18101e5b7c +4056a0aff91e1f80e0431f4255b1ecc8686440fdaedfff30ed9adefa5758d693fe0bc67a4d428c4a4fbf24ea314407d93dc2d972875e7b2eca9fba3772cfbd3c +296529cf5eaacf5e8a296572e5104277b168e519556118cbc9d47b3004949ed27c4287cc182e795d8678f920ab8320ae0e499191513c8ef74171c6617c3baca5 +0bf6c1e0f46591c5cc376b5e45144d1bcf7a6becb8e94719b26a42bb18da02a9b5fca8d3a3fae833e2104ad5cd283507e3d802a347ee66b2ee9ee71e8bd2a3e9 +c6e5bcb918ea6e9efb7ec007eb8ba296f5b45e4c9251c3718d94f675c15040706df6ab174c30b0e28175132ef6237f1ed75ca69c1ccbc1a68671cac0187fd77b +39724d183b1b63adc07bbda98b00f93074331fb2f522c7b02e85a29914a7407683bd4a321d7c962a8fd4a2098a5096c834e72a1aa50b4d63696da9f0819b3831 +8d5cbc9047f8553867191d87d3d8a1ae9a98945e0e772a6865073fdceb7edcb0948b2c4e3ece810fe5c20523297542ff28394d1eb1a22e56be1d4f878a3d2eaf +6916444766409084f66f7c3dba5f7b36ba9ebc2f7a09c9763c7a4f2c38e194a8983225f6d0d260b2bf9830efc8d34e8ed61692f05bfe162f81a86d7ae1b938ed +bdd7c7aad309f7303856ff47087fa6c0cab8f273ff160fdf78239343ef8efb88fbcfbefa9d6908a23bfdd552587ecbc73f113940d96fde7d47dcff9dafc7c047 +3ec986c447c0ff02def549208c7a0f7b4c64388c61b18ebf9eb1bc08e56b4c23b5563093493a0718b9e46ce93cea6a4d08fe201cb46e862aeebf8d766cda44c6 +8f3b2515e83c62da9d3db5a6248a430a8fb5f289ab97284699d1d0d69dba78e0d31830d2c3d8e043cf3e12cd8441e5f7fc25f2defe01926c8ec19094e2b3df1a +45e451fdec78e1f4d61d0c1d990f10944728e824d23a34d53cc81a92799fdbbf54702f1d800a122cddacba1f6fd56b18cfa539372f0763d28710a7967c14ac6c +9886cb7ddb6298397cb254fa6aa7c4d8b46558060aa6be9f3a5a16142a1be0c6e04f16bffc54f46c78395399367f70d78e876e8978e7a7a2e18cb746ffdead99 +443f41c57aa5a1d84368aa57dad1032d8970c889531658cbc99d450c9ddd6018aa8577407d2394209b48874413f1d083a90624678ecf702d466f92970791874e +49a908b7f2693eee8eed2a47b6c69fbfd9ba63015636bbd185d38644e464a79b2b39b7d0d02d35735aaa11ea7632b00632390ff403435e94942813d6a521921c +cb1910b995ecf5324611cba4317b3743f45e7e04a4060d05791ba07fa68f714b15b36a089526c59e6dfbd2185749a7e56c17d98ee7d9bfb739f2f96c0e564d72 +e368213d2224d3396cbf02d785874460c6c53802a974d52951b6f8c8585e57c43eb40b63f79a576335ec8456ad3f8a55c79c8345c71c1d85d04fa660f92efde4 +27633134a0077ffd4b36c6fa4a6c7de5e5389d9970d3a74c4a13640658dc2216ec4294acba694a3c82776a6334d6f91ffc5054a244ad284b2ec6e0d46bae65db +95b6d8fcd463f1f0f7be196defff78cc39e618e643bbd1472639cde44d785794b912455c453bc52eb6c05c7dd3ef2864d2667fe5b5e9fe1ce451481879889dde +07e08b0dc04068b9e557ec39db14416b84c640cb2e435cdf9476cce624a6a9a27a99dc365377f297328466809ac882777f20fa9825d1b39b018ccc965b387749 +f41f7d6a9a6a5457571b5df6e410350cb9f91abb23ecb8ebaf31fdfa7f896ac29cb4c933d7554fc868076acfc44ee48d020e78bd5660e762180f7572e1303003 +d4701448a931c5cc3d085af0073b1918cfb31b6a98c74555a71d42f259db7cc12104cba130fd783ac0e0286573ad49d48fb6e275e408fa778bb13d6b9e8dbae3 +ce88a2854746f1ac25d1bdf11522a10c78a20cf4c280d88fb19872e65ba396f5561c2dbc367718b6018a10964da7cdc25572ec5607d0bb06c0953405a8a054e2 +460bc3ee38c17d38c3c163e7a238b91a6d955caf640e85c1d12b258f217714efe84c417fcf9ec887724959a406a970a90f29a17999fd9e0cd565f5a87c4e06d6 +18a44e5a8f8507eb77745deab0b529901cb9efbacfa5e6a56a0e2a545dccfe986354dd870f1ec0aaec60942da35d2b7ba369466d6c053d1b05f22e23ae2d2077 +aa0185ca9bd218239bd9a95c2bab369b80a13cc51261bde8341f19772d13d7f15b287bede4b99048eba3fe9c73630100c186c71f89d50fdc1ffbde7c3dd6bff8 +62ac3ae7ecd42f24b37c317f6f60c6da6390495f45e9f691139d7edd0762d971c7a451b4429fe3c04b479c731e56a12a1ef8e1f7e2e6afff4f9c72c387a36ef6 +6c901b1e124251427b47f9fa0dd1c93c8ad53ffd0ed6e4d3d1b4ea48bc67a6615098da2f43ae43cc8e68cf26297edf27e365e0e9adb7fe16a4b2221aceba182f +02399479e50231e518990e66eff5ecde1207fef2b368fcd07f443135ad04978ae44d78230521932765dae3edadc110a7df9d1664e12fa6cd899997bd33d6ffec +5b58f7ced8feb7dfc47294b3b7a83cf63df5681a80687d6bd82d1e797fef6b4f46ebf3ab0869cf8e4a434784c7fc474f5ac77a0f900f75718d8efa2a55b808d5 +a5e1f85508f9380fcacf90db9538b7b0845c6fc6b2182fa9660c35bb2da040d283848a3b13139b3c8cd0abc84e672c72070c93ece9ccb46307c7f6971f4d1e29 +e5d6e4d0fb28d2cef8f057a3e16cb689817ee66ba36ed0ed0833fcf09ea71f8805a79e13af325da81df352ca56a10db0bcdd015d8fddd2c5ec3a616c8e574684 +514981d8106c1485ea76ae9d53a62c23e0cdca28fc0fe9104d5dac4b625cad1f25363ad0bea38b533b840e05a5cab76583e79d8841bec7715c822246090954e3 +2f9434ca0415b85e294586f5be47102eb1208c3850acb2114654e33032813a395717f980acdf310eaafb2e6188785ef594285b94e9fb2fe00135743c13953b9f +8d234e9c9192f4327aebb76ddc10bbbffd629a34944538948f85cea5f63442ae934b855b6cde583715bda0868ca6790c8ce17de9d1f8ddcfff27969d7771acba +e4ad3175ce9c38fed2cb62d10927c6f377df95683b7b185a78dcdbaf8ac619d3533259ceb8b0d3afbb01b62fb30e10aadbfef3df62d755d7c6b16fbd02b8146a +8bdb77b200538e3c36cefefc57e2b1effc4f3cf4cdff8e636985a89c352f06119871f86d76a08eb090dd7b76c6ea1f7f33c63ff2d998be8aa1f09cc3ba8f96c8 +30cfef5aba5d4bc8df967fe033b1fa5b5f88377ff7c318d8b135f2b9967e869668fd0a20f91620f48ecded80d15e70fb1fa3f8ea0f922467e051d1243d8fcb6d +7c9f410c334d93f6009590af9863a6cdb018909277dc9951b3e695687ee2dee8dbfa66bcf9cdcf4729e5842c20e83cbc963bbadbc63e88700ed308d8f9e8eddc +dfc218818151883415a130fd5872ab5b76f396205c8ef5ed4459c59ecaba61afc05c198249df4d0d64b092fc94103e8763ab40b9942b6c1770969c02291bc1b6 +6ff38821d6d839e68e2170b849012167f6d95746e7c6d728e0cb68c05c108e0db2db48d7dae7606c4c22b2a03d66887c8b4e00777f700dba6862dcf6f83d3cff +2be90466fb1b16fb203b65b8f199dc333b67ab512e43276b78cdfc4d26b7826f1e5ded00146b41bcd6c75a08730b25a4264f01330ac3627f891060417802c54b +f3e9f15c6e6e6771551044c5c903c593d12d7a6b2b8528633f489d204a5240f3308e558c77d288981f29c79a41e7e6395acea1ff847b586c3edc8ef51a71373e +0a8a0906a5fea4f6951b2eba15060dff9366516c25b11b1f65a7b5455740a5e1a1bdf444b4bdfa5264bdfe5cea9c2ca9630f1920d23c9265c7510dd05f62c579 +9c38b58aa6baa3aebe26b6cd98126b09e7d63d727f2c39ebfc38f6d22ba289b9de67bcfbda987fec096914f02dfff5c538f2bc8b62e97917b0ad6011e14a2b88 +5c69d433faa975c76636c4fa66ec46998f7edf4798c70fb44d189783c5aa86e479dae7ff2b9ef8fe37e321fa80a61c755cf26e03b035cae7cc8f251c6fdbebaf +d1da7d57acf9f1b722f713301596638db5563c20b9722eb300cd1855fc59a083391ff94c3cfb3fff0e73e2e168623fdcbc622675d296d174dad90918594f28d6 +4a53e0a1476e07959c1d59675c90f6e9a1aa9129cafa6005682c9c27af645e96112c8b9ace82d36839b3a2f6e277450fb59a9e7dbba30b067a21afb99199d344 +f31174374c563d5dd31ea0e6038fdf15d32eba2ad5553c07917fa664408867539e6ddb652d7b50203678e3b5814a8c49d34266676030097b55943104b017b4a4 +53463b826727abd41c69370e5fd1939410d6963aca8b630caa5486cd3316443d75c403f7dd98f1020a2bcadb7cdb2fa3847d87c7616518728da5d9e5d2c170c5 +789ead8fdf17d36196b7f64080c580bbb140993033114837cab39fbcdbd670b7689142e4b90512dc81cf42bd6d365e95e1642eb99239bbf9d8a86454ce2931da +f30d4967d3e338f44494164fee5697291c4d48de4407ac8a4332e434a84c2d35b35973a1e4d589baa080c3604a53dcf92fb33181fbce16f1fc4b359a75b47367 +398298f8d443a76dd06d2d30de648147404c0a86984be760475a2a989ec50d530daf9cc2fea32816c5b8b1e9cbc974f7452fc85c0b496633897109b175e54ca8 +34f3964636b417e3cf59b3a6034d37015d2f89fa058bf11cdf88e7fefceb58fff0fdb1ea8aab6215b59afa790be2ac4f7e2e15689d60ba75f52b31f538aae650 +75ba0fb54435b49dc9285e2b1cbccd903bbbd9c1e268047d06f5a5b4172ddf8d4d4d71c1a7bf108ffdf05bb1938d879b16af8c8aa6c9b10acf57cf449fa5b445 +3c515591a689aef9c5f7a2f4535f804e485b339ec9fa92947d9dbd9bae394b7ace9147c7c07b3f1c2ffef4dbccfade160df397c4b4134f8d69002526a50574fd +bef8ed2fa50ed10377fc2172a7cc8eec390bd2a6d3e6a95ad7d47c6888c5bf69deb8008721018265e133d198f0046530341acf7d7becfcd30ff9959a09b0784d +03f42188c4452062c5cc113f78f79fd2ce87e2801dcf3e10a5941c1a59b761b88a86455880281c6002148343863bdad3e4d06114688c8db27208734b6dbbe699 +3bfda6cd109c8f0838149a64f3d561895f5493d7acb1c953b0383eee007fe442e2b0d7adbc0c003c1410650cb6372768388b3c6218eea6139972d80338854c72 +d912ef31c3f8e8810dbefe890763fa05d4ccbad9d904a5dc8d6731127087932a5a2acc5935e4ce62680358b2d94fc512ed2b94c9eddf39ee28f9e130cfc8a2b5 +1e54a5c94131343449d9642e50832b90786ab8665dc90e5809a91a24d549abc9b32a96292352a74138ac3836bd2643a839c9dc4bc528c7b3506bbd4933234bc2 +d9418d5b5f8b8e0adac441a446aaead2582c4b2c16a846d9e6328f590dc3b45d67cac6d422a282789cf4192bdf7990f60aac572e0fbb9af06e9c9b1a56a936bf +117bd9fa328f7ca29c86bd4204a4b7142b575bc140495a2bb8c0ba19b3f130cc98c6423cf59b9fd2057b772c7ed7fba3e68453a3ecb40b63e9aca5b1f9c65fc5 +ee5fff04059815157c4f3af7a2c801726e38eee4243c52761effd2bfc6a928ceb2638f454a71f71caf89eed8b77ceef371f7f7be1dbb0129aa50ae1a76a4cbc2 +b22b1ca7e1194d5857df72633cfdc36fc7319ffc7cd4c166207e49794ceab912f5116943a0975e7029f9d5de580755a700206601b31544c124d156c1505f7cf5 +07e2d51f7c357aa1111dfcdb2fa38a7ca99f699a5a471f84dec8654f79935d9e58406c295634a3545a3f93e32c2282c613ce20547c9ebd729fa2a5a295311765 +31e9987745f98225914de7f108e159df3d37a6bc74888db13a9fb893cd0f1a008978668ceb1d69dd0fc840a980fc6aac612e3527788394150a00266c54ebd3ab +e081c6095f0b512a8541051ce62245d94a79363e6af3cfbe89f1c936d4e5517f32a4b248ad00e6d3965e07289273fcb971f0aedf2b91296330679215524c4492 +cdfdb98672f05255692271df0d13a672d529148f31e228e6e190cdbe9f6e4024375cf61c2a6e3e5ed3c1a07a5dbd919dd1699889f0bb7b3c214f52c1520dcf39 +123c7fd1bac4fa4621ec3c70e2aab3ec3c6a9e281d1ec7ee04216eed9acd87ee742e0a995ac9b52842dc0ea214c2d710883e260587e9c3ecbb113da5c6d0e79a +732f7d39089756b1c41d0798a53066bf083522248bc18f55b833ea097d84142e300fa1858d960fed3fc45e46c4eee408e641436ed54218e145e69284bb376c15 +8d5d7d3b36264f55923505d4ece1d878ff9d514112ddd7d9490da63e665f794d8c50986cdef0466c61f2e8a3fff5d9683af18c98f2ee0f4539f9cde28f7e2ef6 +3c7a5f1cbce32f694ef37416ba897907fd247af5679dc738be8678e647df8ac7bff6c5c8fbf8a7e3685ad1ed82744251250278c9273f13f7fce03bb19e9d2066 +2c5d1a0b4fa2b62507106f7bea35efa537a835363f7c4fbcf69b1fb37bf767a1bb604553adca702be1248945e07f8bdfc6849d5d204fb453ef86fd300303e1d0 +fc6114aa0484ade694570873f09228413105c8fcf3af4a96584beb8c072d6c6a0c4c2000c7b7aee1df856dad45781e215eacea1448a29d9bd733328c1d1480bd +e5e00d3333c1f0a58e91586dabd99717b85ab9ed78e385a8600df3a8c3f5892c9562109ac87d788ef984a1598486ce53ef48c797e4999f9a14ed3bb210ea4134 +2ef627a9288657d6c51ce8e2e66b36d275b9ed28d72d14ee0c05b38441d6c99d2d72569d198578a501dac613fbdbfbb5e6071a5c0aabc5beb60ee44025cd34e2 +1162c21f3cf8c26331fbc2ab635f6b4766d793e4be015ff03895e5b6dbd85f462ec4793a014b7494f222cdc54ab886741132b42d87e02d85d013028780e71261 +a51d507849544d3042302d31183256921d286cfb702fd9c4344e5db07a30c11f0d5ba20ff13eb77019017d14e94c0824c7b4765402ff2e156365b6ecbd06d40e +ed1c777771e2cb021e5a00eb6653d5ce25b6cedf8d062e46fb845871ab230edb9022518396d321366603150a8607665f1a0ab229169e20a6123e54b2435f1903 +cc6b1a1ba28efc67eb86f5ecc87057643122b976fe52f6a801d665de432e7591655ffcdf68619ef44e7a70d67de96378a71b620e39d4b44b99f2c9ae79ab0903 +d7a03495effb50d4cd999d0aa7d3563057e10bff1df77dfd3fe381ef7c950d9fbbe2c44b2f658dddd59a196928c6053014eefade77e2fe1ffd6f7a10738e3f21 +43afc7621ec326c59db0ac0f3ef348bccaa0cc45effd509ac6c3e4dd244c8910cccfb65b8f318c70ee7b3e129d8015eb68a7cea771ad90b9d7820d838235175d +13c55b311ccca66879e06f3169cadcc887d02999d644d5e3d83ce7b633227bb9bc60ec9eda9e6597e8118cef118c425aef9b4ebd2076ddf5a7e86728c89e076f +8b596fbf218561a3844cf5c79c1e7d77ee4e3be939ce6bdf2b4f46d6bbfe95218d8c6106d6725c551f214e3f310e8e27a158b2f147e0df89de19a8588f113dd4 +1326c0c6396eb20312274d022ed187054a74c3766e4321c76775d2ef25adc766c212de9f67ffda31e7d0b3f4eb141a26eb235c4c745270ec79788c9268ffe337 +d26454152d9565785bf3b30f46c591ece0c1142aa7fc5820cee61af43add8c1710f0b0a7cbb4a2887c2eedada5eea014c3945b1c6b90c233e42f8b92cd889b07 +8814eb4ca404f1fc0b26c669394ece9c4aa8defaa186d2da9253830af94e0d9852ba44e950986176f54b868f6f5142fb98722956db119b76a54081c0f6520da9 +9fad6272fb09e53aec106c9084e8e010bb2033a853095234bd7b5d0cadbd994577f1338cef5dcf3c8947b93fc5b379c4dc85f0e9cab8d9ccbc0492698a5d76b7 +3a2ddb0945bddce8963ffc240a6efd734cbbe41d310fc267fbb675d171efadd1fbe36fc4bc2bde1915000105a086f3a1e12c5ab62c1efcd2a7e315f20e85f2d8 +6b3f18b350989ac953e3f9dffe0ca5f9729c42d1741edc3bad673985c979e75c1caffceea7f128b3167a79d027bdfd6dc4fc16eb80f40129cefbf8bfc6ed5fff +4a3cf003b628c1e2d5b13f501f8a58525b172b2ebf2a9e6492ecfe07fe4ed2d814332f797b9ab720db37b3643214b82fdb4328304f7defc763f3373f1beb7ef3 +bd68ac65cc172d10c31cab953c24fffc77451e0d7903c0cbedf7fc31ea989d3e02ba679fbfdf05ac91ec87d456617ec203caccd236fe73747286d10e8f222a61 +54b7415aedc29ab7d338d7f60ae829f9596cdd4e24d00e2a46888dd1533806f15c03077646c9bc25106481b491823cb96a20475ebf40833076be2125e8979dc4 +42c98a7411025c849114b5b4b8698827c7ac8c70ce4ff7f23e954a6f2a245d2cdb98ebed4df3e2a8d988709e707e94ac7e943c112f99c238a9576c3549ee34f9 +d82b91a11363dfd3f7a2e0d28a3c2acf86fa95f079e33957c59e964e52065904e6e87c13ce150b26184e79adee2a6e711579324c345f2a60af2a853da5740a3a +ad18c2dcbe96903deb4b44597a9c4cff906d14209f7c40085b785fba8f7bc28e633ce431a489593eabe4951c499c61f3a4d672ceedee7d1258fd9cc7f4647e2a +772a43f8d240747725d75ac8c615681087a74037da4eb20ab65f514f44cf8db4e73444fef5374416c5c321d0973e16a36beb1be9e6ca80974b80c3f3d8163175 +a480f68d33a935ef5836f83d1ab6c2fffe47acfbce7f806ccd89a557bf2f967ce64bd0491e8dadbffb31431b57c632e0f022e6aa6553af6a04d6dd47acbc861c +a679d38638f9639f8949cb56c6491ffa64bcfaf7bfc5c33fff41a2ea4c3fe5cc186597ee81e68351c31ea8addb37c7b33ffb4e4ad44fb9ea5dd473684546d94a +c8572efc97cfc52d5ffd129eebeb71d267bf1c15cc6093133e24939a493e2d0009fb6efb2dd3652745f5f1a71122cacbb3b12c0363276512525dc6fc874bae8e +ce3fff3872a1f4645ff76f69ca6a1eb585dc0570038f3c3506c95bba36bd16f94fde1b858cfb3516b73ddc31cc291fb1b6627c2e81371ddd5a9bcaebd636ba43 +1e3a65853a9ae6fa890cf43a079eba9bed4a501ca613654f5d188d18c01db47c8f12c79b17b63fff60e42e01a5040eb7a0e88376df227b72dc0c4c2a962c817e +ce518299d5cbf89af946af7d38c840b1b52a3d14d7d08e1132bc2dc610e642d7b0d8dbed763ebcee8a14633c4bc89364d40f1603872f3f35b2e9ad32e7c8c035 +50835e7a24ba161f13c52b4f8dfcd79f4df328248a4ad1d1c81e7aeee12875a36e50c402f2b7041288406254fafafa13a54af6b673181c642318947accac6fc1 +c83114351b52b104b4b2dc7293eb719b163d87db62e6e09d32bb9fa0349251d3962ea28c1a306a7e4e1492c54f2dd516f474f97c1965d86bd4cfb3d5343894f3 +f06e14a91f492023d5c708178bb7bf193556b629c6f51267cb64909e6127639eb902a1d8da977745fd34049c03b54108ed5b22fcdbc4e29c065a8128521d1fa4 +43b287025c3bc321f3cad646990550142b87b8dd59d4c5d565b169ea4c5abad9e4967e9f0de443fb1fba3b8e7eef07a3e188a318d97b633cf48dafc45466bdf5 +51a791ae732483dd8779b8af31cef7be7fff441c4bbe34e7f4b3e3083c58119cc0a77ff78bd8fae2f3b459d450186d41d156c49cb3cf8bed4f3e18ab7ff7131e +7e6e9c78c59569e7357b6e0a38f7291ffdd7b8973ad4f3dfff7accbbfc5d09e5697991ba075ea3829ca2bd794f1cb80966773d3b1b400e758133885bc6cd9bcf +d872947fc6db237be39bd14ed25c47af4ece1997a72457083d6fdafc841cd904d7f1f49d3189622be384f006e408238442c2c0c48dd6313273fa3379928d6522 +417217dd397d14d0261fe64411d76528e3b62ae62a4decf16a69610ca8bd8cba4c073d5d4c1f8941847864fdcb9175ec394920ad7559d577a0a5d42d49c9ce82 +3356107048e0476225b0591cef97bd603bba9657e12d4dfc33940c436449c063c9c63697b2f6d22d73dbd897f3987715d2923efccaa3d1bf7f47a6270905ee63 +767c27752577b32827cc6fb180fb0faf8462d33cdab3966778d245b1f7109b384cd4722c00e790df955bcc57b958138bca29c4d61170cd3976b3822a1b7958df +743d456db39de46b34215b21b54f581762f772fdafb990141f01092382090533f210091c81b52062a772a411921ca794e7a802a7cf25ee60c61bb939b321a3ef +cbed6630df80dba81fdccac0fccda9b0e5c25ab81a83a336b87b5d1cdc79305a9a7b98a95011f98beb229be12659bbd911c061f45086f22beac883aaa20204c7 +ceda9e1deba29502650b96a79c9c61989efe411265fbe74ffcf867227fc61c48b0bbe2a5bffc2eee66f7ec85a79f1babaeb901cad02bcc2cf8751aff3afbf473 +62cea5082b8ad4b4ead8788abad1a35ffbf7e8661aeae2b75e85429d0739b63c5efef9f7d822a5251a692d587cd915145d1b62c6f127c6c3dffe2a1daddf4bdb +a62ca376644da897fac440fdb458c88cead7befae9588fb25501188cb14005f44fd1a7c1c41c040192edd88d3f8db1f77d91b1b8840f12617950863e52ecb56e +597918934bae8b7ebc710f885545e38cc89ac15077ee338bfa8ed67d94c13003ee7ef1e41d5171d1b5d11a25cc96736a91da634c226a24b0e11c6bf314627f90 +c44198d5836cfde91631a3959340b718d6f8c4df81b7bba373c3eaa83fea94c842f17159d108a9b597b685e13ef6dce51edb9fb9279a1897356c31341151955b +5138f21b590cf2cd4c6152a26d7f9610b26d2a4ea6c2f21a762536034c01ae5165743eb73e738050addf1972fc665b4311258e44eae4983dd477a075443eb9d2 +e05dbf4ab077f24b285ff7cb8f45095ebce2d873a30b45978160735f22bf20862d4fdc15c5cb4e608a127b1573adfa3baf618010ddb608b7014dbb43f2b77c0c +bc2199e1568e8563fbcc2ca67a1d46541652533b7bc633197d09d4e4395d955f52d8c6595580a404a9f89a21abaaa136e915a5560a3b6c555a6b7678328e376a +19c1a959023abc5f1043a3286c9ebbefe2eb93569ab889301583bcc99bcba127bfa6171afd9ed529014dd0a20ce8f5af50f8eccc706a80548b59d85c42b8b48f +88e10fc96e39a151395382f63fff3082cf4ee56abf6e910b6d6b3ec4ee0cb368ab981a277ce2f328cc79f1f22f7f18bbfee58638fa868fc7a95ffe56bc0ebf6d +3f8d6cd3185f5b42fda798f0f0a4cf7d855d1b7e89a7f9312d07adb1e4eaf7c7b4a38f4fc4d89768b4ebc28bb9511409520c1797c7ca0ffd2bed1c5f89e77ff4 +cde8ce6322cdf10c2de461f7c9ec45e0ab687f3ef4b3ff8e42e850456ce1d87ace3ba20f667af611a7b0f9ec176298875f0c58d047cee3962fc6ea0a9e239852 +6d02cb97df00abe39c7746f7df7e14e3bffd9f28c5e28e00578fb229576e2262924320c8edac59057f6b64c0c9a0db7b0ae9128a0ca40186898842bde7500c30 +ef7a004574b0470e1347cb972d82393213efc3885eb6726ca66664cbc27e728d86b77e30296301d75889e2b4bcf05066a6005399da5f259762c7f811dc9d8d7f +a9ed1ae1b3356284eb19f21ef47e8477f61be904ac6d2536037ed74d0c72d314556172bec9fffc2ab2b58239787aa161d6c0560fc5c009b415845d0925033ce8 +7fe6ae443f4af33d3896b95bff9aa7a2ee0c0cdddc15e47d4fa686be8c00233378a53ec67a1561305a4825fa11700d51aa1901d927c0d9b1012a174a681e94d8 +20a28c72e830e6d672f492691b16271a590f32a75529653428c3166e450e1342671ec47b602c1426b2b5ca2860ee086307ecc3e8c8c2ebbbc8c86efe8427d32b +15c84231249cf0660902af25cfc8763a9054070bb108e318acdb61da9e87996557baf529a83a14044d5265694f591443cc271be2816973b44ac534e0155183ca +66b88517ea0e17938e3826e65c78317597df40c2bc232a27d1460d17eea55bfe1cb3d883a7e994b3a298cd8a27a30c16429ffacae7e2fecf7c2896bce3da5871 +fdc762cbfd7f8f177ef29d58f48ef7460909f63848d5f2f77d1c8bdd176bfff21b98cb9db1ec867f418856a134d0787ef4f5d8c0b1a7bc8d360717b9b221e67c +e873f1ead73e13ebd803b509c1ec6064b163a37a0c13569c16e3e7b0e1d81dbf216c9d13878a2ae118764629b3c8f32e7e6f0cfd843ad08337451921d9d0a263 +b846f210eed7054cccdf09383bffc833230f1674f76b4f45366dfb793c54e15d43c63c50be11061c8e80567543061e870e35c630198d8a4087ed0be30c541c07 +9868a3e03c928f6162dfd60a6a54f96c536fc1d1716689b274ec59d1c5bc383d5c27004c056174e1bce55c096dd7ab4ec5d2bf422edb9610ad01aea57fc58999 +fa11429ed9db09ca8d6c016b7e86664e294551c601164664aa6bed15d9945719ac6446335b9c4fe088a0034a3fe6785fd6c149bcce594fc0814c73942a910058 +bfca63ce8a967b7e9fae2d7d21981dc0e3f9cb4f8e32f2c74e4251ef2d33a1d5f1d374c7bef8784c5d751a3932b28491494681486080a8c7d698045fc8eae66f +b667f8d9341fc95c5056beed3ec2fb52d2ccef551a88ae6278327aac65f91e21f0ccc8b0c3034fd8270a267ada3729e34393f268308bf0f076bf9a07a55d2af4 +7ac93bc104414f7ae06326385c45aa220ca964d7b33c428a3e7a4e7ab080c3c095860da5392017f0c1ea16d64765253d2765d3e9e23c9e9d26164539fd2a63e0 +e8ddd075066927e8d8f33c7c3b7a8d66e1f208f34a6b6b1255680e35a14ed809691700847f84187f3d2cecfd1bd6c5f4134f676edb4c8a8fafc23e58c12cbdea +d8f6f4a3d1c214d6559ffa1210f08c78e5b73f8d79175cc6fcb433d30c825ac08c4e66886f87fd3c84e59e7bc3671875bb22265dffa9d8fcd36fa476e0d18bde +95368f1eae991a25eff860747cf7df62cfcfbe1e591ff95af4c007ec65e17399665478eae531864076bcf458d42d3d2e3ae61fcd4c3e1801331647d6995744df +ed3f8fdcfbff14c5e4834370d212dd9e05168048ad0116f778683558dacebdec9e40abbd4340f2cc1f4fb934e5315d4fdd119d08f621fb71d86ba8f19853a307 +687794a229d6204649d2fd2e58727c5491f7b95bbc8c01d13cc3c96421c94b0470aa579d12fb1eba1986093cbbe71ea08d825012852b84289b0f823508e526c5 +ee84d6a558f8bce398956031548193ab46b1d0d6fc5e90d73cb8797a053d9508a5759f3e49c5489335258952092d4b5b916636adf6f584c821517acd413766d6 +23592e60fe452ab95a9fa1ae944d7f92395e22b40a60c1c818dbf26a54ac3c258a0185a43765011ba7ba0fdffd30c9bb1ce9356b4574339074dc4e5d3e979736 +fb36ab733e21abe1363f30bb133aace81be6a1346e102e149d88d29a789f958464d90fac41e230a89c2863da7cccd6878950cfcdc61cc22940a3f7139d34274c +980f9f51699c072ebd59b6b75b5f52998b86ac56a6c776324c062a54e7302d146ed3e1f50c5224e566738c3bb1fcd928d1781e6e8c2d11648f748f15c11cee67 +a771ea4cd2348ae859a20e34be70554293b4ac7deb5e61ccd4ced87fef5f63f24a662a40eb99066237eb9def4e02b4e7d17b630b0c8643c4fb4e1db5806b016e +e6c59747158c861e50c4d7a1ed3cf1e91b50a62fc73c5a1e36fdf2fb58b1b508745d74beb186e12147539f5911fb9fb83fcd622bbde1f3d1376f650cbfeb63b1 +f537dfa6ff86fd6bcfbc3c9a11989c7cb6eb0491ebdab6368a6efa5e54bcfd530c138482a23289f49c7f0d39ddc6c8bdf5e751750d4a565a93ac51c99167c4d8 +7a86356ea2c3f7b1db22ebecab930776173fad65669498739f099b08af8a8f3e375aeffb23dcc2fca85af696c8993a37850ef3ce796b6c627fd3563a7f77b2e3 +9d9f315f81fe1e8533974629004811b94182543981f95711deac4f06b616d622a0882a05c1f263ce8c8eb52f462fc04e07b9461970f3f0e479e46077c5180857 +1ef725aa687ed343a857b7ec383c60656a5190812d274d76c2e16b1f61ed6c24b113d51d08d3563b5c831b6d2b4cc2e2a54e501500e16fbd367a1aa223bc25d2 +84b8341134f9776e8e6cb1558b9edfc4c66ad099daeef943c62325f184d94d2e94bde0e8283dfe42f2baf519af941277f33476a778eaae684296c6e973334f4a +790be15c22ccca1d94e9adc7d12339160c05b4189a7424cd9c230f9a402bed49f26a0cfd527d4c2537dc4be19cf41eb8821668bdba04aa20f21a6194458f9360 +70eba57824d97595d19994a622bb37cad9d2a614e529cc82804063a48c8edc5dc75dc8d68cf0ca48240b6050e750989566d1c185e40c1d88ac97fe9edc3ae21e +fdc4afecd24b8e7230e54dd6678a4156c6c9538650a85cdaa48b28ac56f5b4c6de87ee24d7f965142330734e399b8522ff22949b41935ccdaae3e28ddfff34ba +99f3904f48984788d3cb08e1624c403668d98a4fff676cfae3cfe2a56ffe7bccbbee93319501895ba83715bff23cfd4cb4b25ffaee1863bb8f3c9a105b7ff79d +342e69f89d9f8c81b947455ccc168eb7fd2c8ac9952a6828cc7ff589048d0e1382f63f773ff91bfb259d7645e2bd69f5734990f32e7e5f74fdf1eb51f5e09f23 +f7c2f767d01aea60a5a75e4608bb3d7a8070abe61d112384863edb6cb66ed1a517986b00ada68a3fe15501e8d4109e3a48fc1d6b568607a8a5ebb37bdee2e8d8 +bd9dc6bc56e0f98d31fbe2f744f1a42969eeb4434514607b6a0a105a0b96e602a9cc64ebff84281a36e59a7f729efe037f64ac02fcb45b2087ca40f1f3848099 +063a474991efc079ec67c7fadc234f4f026f839aa15df25012910595dcc75714d2e9b4dc8fca6c576911e3752c145bb7c9361c34a4957767215966422ae05288 +377d5071f454099a76600af9b61422e6d9e53d7b5fe2dda5613736d31dda1d63f42815cf5e4687015e1e03934db2ef710c9b8760bc8f1321e4553551f42584c4 +2bb9a58cd1513e2db0a9f89ac003ee9173a8107a1c2940b2d6d3ac44bc9c86308595090697d590616e6ba4541c6776a7fd6339b7d76611574762b770c5584f54 +451724b86ee6e3f5f00c7b61e5f4515fc5a1f0dcd37882c4ce48312bffa6c58cdc9574ace6e3020b44e088df3beba6b03b44458c53682d66e0a36e2f174b37ca +f7f0b2f3a0cb70116c159f053d6500967297cd6150714aa6300f81879abdea8498b5eaac980e72f6fc673e98bcd31bf7de1c07818a17bdfb86283df2b8a858bc +2ce65d7265bc0462d701f9b20c86c0d6c7ee4fa15a0dd373faa99fd4bcf753a982fefab7bf10d3def7d92885bb76e8e75f6303deb6e8ca2da3f24d0074ec8540 +ef5dd1f3d71f50cf60c0fa45b4892f3c2e7a8fdd1dd914436be0f7e99efbe6ac8cac55e730f4f2aee87ae84694694ae42c3a3a41ecd2e70b50c8c1131872f8c8 +dfd876667e8cfeffaa7a0f285bcbeb4cf33bb9ea54bc75f3bd64b88040846b4020040821218132b20d8ab6d5d3ad712f8f3dee5e1e7b6675af99d5c1a3d5613c +2d8765b7ed465956460921242482c819441039dc9c2b9f7cce3ccffefe923d572edfa26e9df4ffdf4eef7ef7bb2f7c675cfc84d1d5a04cb55e7d36b5eefc769a +fecddf4760104522ec28283d1a92b592cc71fa205397bd2f1dfe16b25d507666590c3007be354f2d3924071f27dd5b39b43be4886b34b72b6ee90eeb50a3da51 +0b8ea191474a3effae3159cb04f6cb1f8b7ee9fbeb2ebc222d0021b728d0731f8a0367d75ea44944ce944418978c621527e28a1d750a74268e56f81c5d0b6b53 +40d6a6082c8cb9d4cc28293195421ad98730e831750979468b73fb721e4cf65f87be45ac4c89b36ac3562e5adec32a5d6c4ca55a9c6a3af7d2347fc7776276c4 +df15a438f6e06de9b8f32f4feb184bdf7ff38d61fc5197189550273a4ccabaeec37f4033382b38a9ad2ed3410761b4f48fa9a0b0fd0010466020e21defa3caef +a95b67d4893a55a3098081b282b111cb0b9fa24e94719a7bebe818b35c4bf9cb28c3dfe335e68ca0a055e4cc654650bc9e96137c90a00965b4311ab201a11391 +fa901c1d146b115a87c7f08e875fe70340991739e91d4b87f62c4051a1f155194fab27d3c4c36a2b78fa1279ae5cbb3ea4c9b6702da94b77f5c954671752e565 +1a738c966fa6a97adebffcdf1048596538ee4be99e7fff47e9f8cbd9e876d16569e999c7d3c957bd37554e3f231d78f02ed2ab97589f790be8db9e54be163142 +0897ae0f69725376fdd5bf4bd337fc5e2adff087e9e057ff3c4d7ff3bfa7a9777c24909be1855743d2dc9f967fc6f6061ed37ccbfb53ffe2772214b22f95408a +9a675d94562ffb104008436bd06e3a9ffb0fa9f5239482a8395ce06bdd53a13e1c7fd3b56999455a4b3ff9071659c12f142d7be151261f519fa515b0f4c21369 +fcb13bd2d89bde153734a65fedcdf0bd894059e6f6a96f4cddd3ce6132f4b1d47ae8b674ecac0bd368c389a42b17a6894d9bd2e30ceb0908bcf6c09de9b4134e +c7f8b2e0612f264ff19e9136e5b1f0f0727a3eeea140413628cc04839c43b167df776ecca455225f43b17e400ac7fa7b0fa21cbbffd588302d66859ae8748f23 +2d6ce332bca83d129901a66e7a62bc7ba748c962db1d742d376e84a00df55114de1c56a3a57158de9cd0b48a3d91fef86fd6333c2e063b2dca89568b5c8f1af7 +a6f6e89dc0f68bb996c100dbbb5f4478ff21240d18470110ea59269886598f70f8979fb8274d23a0c2563a400f6a37f5dfa50e39ddeac5b106d2b9cb6090e223 +7950ed0d232ab0f46a8cb0671d09e16b1139864f3094a3a464d433441b53b3896a8b7a507904948382b5c31d15fcd048fc8cf14d6687c70ffd4ba389fba00165 +bd8f3563aaeea2280e2abf1d5ffeb14ee7593eb0835683276f4bee4fda4d7f630aa6f6f853f7a79ed2c67cf029109b2a141585ef87db2ecd63dbbca92e87f1f1 +bfffb354025438e9cd6f4b13679e9b26d801b49e59fddda47bcf7cf62fd2ae3b6fa589f986b4f5537f947a3bdf04e1f31da9f3f5bf4f2bf7fe24b5188f9860dd +cb3808df105dba710a79258517beff8534c1605fed9adf4a4bdffccb34d5f95c1abcf5fa904daa9273f79fba2fadfcf0b350f0a1e3d093289196ad1cdcc558f6 +9e80297b206a558ca374359bc5bff117a9fed3afa5fafbfe451c9418eca2f730fe4e66813efbef52f99b7f91c6117cef03399740dcccb6db1cd885077e9c3693 +ded5d6336c2785c88295ebd4e841fa5d41fc05f2efe8646a160ae7834f3f9a8e832b378b408bc8521a7b4b5acfdcd601a2d55152ae95ddaf066b5caa4e4ca4da +51b716914f26933988b2020166124553d2748cff8d9d83da2c3cb5d503af71d85bc89d9d9826aff9089c376a3558217bbf8488a5b51259c62a40478de858164d +e408c8ab0bb14c6b62217161680e70f498e4a015359006a24ebbe9ab23112d678a3c43f66704018c703a6a0ca60724bda694a45aea4846b610ff2967a53abadf +dd476fc77845f838985ccf85877e92b67cf2dfa659180f877efebd781d07e922a2c1f15c42de6be65ae4d1707075ce9adbea5ddd6354f280bbedd1c8e0609dce +b604ebc2050ad3d432cd11fa22a3a5b46e341f5186dc05f22d630f804b55a28c5849ec3ff2bd149137beb7b717d692696e61581a4b0ebb91d28721654b2bbecf +92dbfeacba098d8049f2d80679bdcb6e9711f2189ab78324cdb1246afd0ebc06ece611f3374b675f91124dd3c4e2b023af90cb128a5d9255053eae90d66dbafc +aa340dcda74cfefafa1db7a26ffd505afa37bf9f4efcf5dfa286b834cd82a66d475278d7376e4cfba0cff4bff3250c96da85c850bfeae3dc50467a7ff68d9468 +f0f6615b4c50970caef80d8a3d3c2111659546df94902c06b0f4edbf246a7e3795ede2937b37b9e06e6b5bbce573698a835e0600285ffb3b69f94b9f4e33f77d +3f8d40e81c59a89e7f65aac1e6587ef8b6b401a3289d7b391e0d27c06177cab779e97bd22a4656337fe6aad7e8878d110516499356e8d8af3ef4e3b41e238df9 +21a49eea0b189b125fa4c26d760a6da629ad66c5f3b77c0b3db7fbd2cc491f8b494f76caa46d57bc2b2da0aaa47ec421d8db4d34ea2cf46597fb7ad61e4603a5 +a18471bd91de548e6e08707880ad26ea2ec8de79399175774414f535c66177b83eb3c2e88992674b2f3e99a3d9f38fa63e7352a313ce346804cc6d72e28ea458 +902d12a6f736c55c4be3ac25a268776ad4a6ac8fc9f591f59411342f29b097939766bb32d5d591d295da9e17ee538b5e5a8deca0f6cb87a2092b622508d07a95 +953e6c726c9c7951aa3c727bc0d7d9f11b8141fda8358797bd17a3a316233b6a692c3e1751c99861af680219adadbdc36976944180d92a42a2a4668d12a919b4 +25f96f394ee910f2e883eb0ce2a7393b0b7677ee8fe6dfcc13a8b94725c324228e54bba2b6d2b9ad19548e441a52f4b249ed5af3301094c3c213a2d7807c6584 +af093edc5c6d6fda7e3182f4a0382f22b6beb8ff201acc84cef3df92baa79f8fc786e3466a57813eaf7ef50ae2900da3d4b18574d17ffc9b10ec78ed075f4f8f +fd15853cbcb62af0f80001f9f5d7fd2e039ff3e9d09d4c94320438f3ae8fe3c93980e800ccf3ce56b9d0436aae21cf5be3e095b69e926ae7bf95f7c1d83435ce +acbd98f7fe4f69f91b7f9e265f463f41a6011e77929c7ce9c5c753eb8737a6e6f5ff0a6daae353ffed1f4ecb3ffa1c7d2c04f8cf20d5e26337afb88ea8f1545a +b8e35be8e1f19e80fde3808ae4c109eb81d4693433a79f9b9a18a03d9d09a853af03621c45e06306f18f06ef211649038b779134ebe0484a184373f3749a43db +612f6b5b76df731b84cdab529f9a4ce8761287539fd980fd2da7c34f3f94b61db8163932b67e00a5868c3387d9de899d1aeb236f9cc5bf7a78cec8080c44f685 +476ed2f8ac3d7267ea42695a64edca0402f70d8c9e85ac69e28d97a4d5579ecd59053559fb89bbd20475a89cc181074580c05e928bb44cef3810aebec9488a8d +5bb77dcbe0708e2a4fa62aefeb3881c3731c85eca53d68be5f725d1db5ab5be4c4556042381ea2c8688974b743a4ec91ee7ae244fcfa38ede55ffc3c6db8fe0f +d22469ef121cbc9c3a811a82bc9519fc9b47766c1d734e0e28aeefcda78965f664ad1ee5bfe7d364972f50b36936a034a7306006b1ca021e46f200363423d1c0 +1c3dd6ea4cdf6444993012be4c99d70c267e1e0fc8695b6404f9f7c360a21e2e2297d78cc76a448507a00c0282551b59144b75cc3e07522f340ed9736ccf3cb0 +36bb7a805e178916fd671e482dea216faaec5c35dd1a279ccc82e1b350d18495cc017c0570a0c9cd1c3cfb6c5add792528daefa6f2493bd3811bd16a3bf2bd34 +4587bf71cd6559a186f4698182738041cc9c7f05da04c8df1215ea67fc5a6a1335e222fcf41f52edea8fa5114658a78ee973c0177ef03fd2861b106fbc0656c1 +4d7f1dfb6b2b1cf826116cf4f40318d86752f5e737a5c6d51f0754b898e782c6f393af71c8311aa25d83e850a3e1dc7af6c1d47ee096d48437b716c6650bcf90 +6a1ea287a4675247bbc4a4a90bc466e8611d6485e741e84f5b613cb4379d840433eba3859d717367b06f652b7a612bcd93d2e6cbaf4d2f7ff37fa49780fb4ff8 +d8efd12b1a4b6de4c84c15d5876b33f97a805a69bb868cff3425f2809b6e458dc281a852a477a35eca9e5381100f8a87be06ba39bbf32de9d0ad5f63f87229ad +3cfaf33486728fa9eec41b2f4c0bf7fe1022ef9ef0c02d5a12b5cbde8f9cf471181369ac8c732171a1673db3754e91fbbbe749c2a886121c3201cc8884fa1a0e +ba02f5d995071227a74ee376a2d5792aeb167971abe1f6f919bdb431ce41eb0522649cbc9c2e2db2dda2792aa015c65c917dad81d29076a2601a473575e099b4 +fe096a9895233c2fc6a532953c059e769cd90f59ed15f8788e924bf50903d2667c054751b2d544cf2bcca30005f2df7cb635c3d14e0ae27044a6788b45cae647 +966459d8a30c971cc132c6a0a5c59e65feae4ed02ba9d2e02adb2c95b08711187e590a90862b6c99e6c2ac604483f3de080d04d6311f72481edb465d6891e9d7 +06c89d733ae5030798c04473e0bc37a71648d19ee79f4ab507ee485598bd9342d508ecaff2a2f3d045a66ff9429abcfcfd506a2ea0e09c4b07819e0f121dd651 +c334c98d87a75f98aacf3d0c878df9163bd8b77e318d51bf94d631a660738f14e6c877fe3a6dfced7f9bfa57fe7a5ab9f3bb64377311bc9bb0af07f0bd96effb +214c8c1d61488908b4f495ff922a3ffe5240daaadb8cf0e4256ec0fc137723037c1e6a48acada1ce93d335ce887c074fe942ad197a357a59898feb68da2ae2e8 +d2e471f052c18a3c8cc62e22040ce7266811e0f5a5c59cf88ef7a4fde859ec4653a1c7f3b6a636a4169e57d9dc0a8ea93f5c4d87d0b998bbe46d690eca948bce +dcd2e0f3c58805efc34841db2734ba4dbd3c10c1861695e3ef316ac11a342c21e6d62f1f499d7dafa432804395d4769afbd0a6791b371de0a54f442891a2fabc +0ac6441ae5c1f010c9f3e3080a2a98e689fd1981ac7fa25ee0cb1e5705af6f6a282a183354ea7dc8c4ce961ea95f8c37c04374b9b76f3884e96974978cca8c58 +b8afd87e96a3dddd7b6e4a1b11e13ce1928b820ae4bc5bdd495cb32323e7fc2b193ae7a9b23863e8d692da6144826a4eef92361b5d4a8aeb18f19c298a50f98f +35cddae18f7435ec827be40065f13b46a6d0b233f284e115d14683d239d880f77f5e2a6f8211bcf025d92031a4c51dbf16443dad5278909c2244c2e7560ea467 +41b0da0835d6d1a2abad7f3e8d40da94c06a108dd6c3811b9e725a4cbaf641aa9659dc7be84b5f4d936ce1ab6da27f73f2792c60a6a1793ba28187f6e10d4f48 +139ffc3f21621e4e4b3ffa42ea0113cf52f897491bc651195aadafa463d4457314ea8de318983be5dc94aea1f8fff1574214c4faa806b09118b31e8700d9e2d0 +cc7f9726eaf5d0864801db777c334d7e80e8871398a1cee9ee7a1e38fbab68c26d4b150e567adbafa7c5afff3937f3c5e00596f9aa927ab6a971e6efbd396da7 +312bf7acd406382032aea7e658763481b469c37b7e1b07b301040995253eefc26d5fc52828e241cadc97334993661d46e4a09b6b28951c9b811275c25bdf959e +fde25fa7c370e41a447a0d408f6dc75d044ebacf1228e714ac7853b9658c2cea156e9ae75b44cf110f177f9992faa8bcded3838cb80af4a5a97391c4bafb96d0 +d85b79f42e284da7c5accc18f0be46d6656e690020d103711c8736d4c3e9b99825a285e503f7db866d184e6154a67452668c9c216629b4ac17c7b0d68a70a795 +1d0c5431c9431b037051946b60a4c88a94f033774a4dcf2233fcd62bd3e08559284013a1d63a8ee0896a44f6d13cc31a430f18dd59217758e9f17d3b82310191 +17199a513aa755193db30550a3bf656a67340f20200c2a63d741102e224aa46bc5c15f33ae883ea460a108ebff543b0a6bc946138615085d91fae9e0e2798ab4 +cf7a96dfa96e7bf4f638545e802e456b07c0c1826f8e26d4fa8d4d9011bac5a79c9a3aeb8f4b8d134167a86dd47d5e21279791602eda8641e0087a65233b4199 +95e97d8b1106c08171a169d2b7796b1e52c409f4c09b78fada87ff281dc330f67de93f7351511265bbf9d4d997a485fb7f988ede7553a21b95ea577c3072fd1e +9a716dde630364aac3e327de4473f7ca1b52edc02b69e18b7f9a56a9b366dffaa17414a4adc7e3c740f014a39c7df3bbd3417eb6fae08fd33451abbc9d294e6a +a80e28963d9d399ac45586ee8e40e1912530fbd84fd32446e7c4af2297e5332f4e53dcd8a547ef480d58d8692b118b1b5aa756ab3e794f5a855f37c95e548de9 +6cb6246f22f773745bb76856e30dde00a36382d4ae0bfa58a6a6923d9cceb880e298552da4622d44198f92266e7ff355c83faf8b8d1642dd23275c790e2942fe +9dd30b0c9f836d7a2454eec1e514b24e051008926a1f22f10aac87f14baf2565a64fc6e71d0374e859b8db8fe1da7571524dae814dd9bcdb49c020a743fe7111 +9769da50d8ddf4a8f0e04620d3bc185b9086a3597bd63837b53e482a194d1dadbc494472c67ae822f2793b9088e7b66d649323910ee7545e87915d78766c7cf4 +20fab746d246ed3524b3fc394ec30827c811408b08233f8b8186300e8c5f47df757306918d0b3da21736c0106a000cd65f614be1270ad42da24eaee11c6c8cfe +5250bc72ba1cdbe90b346e2db5531b221c860ec228b49606faa135f030220d2da78fc1b59b5d4469933f4bac3804a74624708a065e1318716f3a67e766eaa66d +e991d1645a41ebba0227cfd03ec98acab4991a83a279a5029d03f19465d2942637af893155a1792cd2c13ef4f5cf440ab0f983bfcbf3f21c77ff0030e3b534fe +e66bd2047d94c3d45c7dc548308e0660c37ab4d00ef3a68fdef51da818c0abc0a76552c13ebd06e1e906f58472c5ea70bb4a71e6ea8f522fdd98c668a24e5f05 +dfed7b7f97ea000ce33bce25152045c263cec3349e3cf14cc6c2df90a621981ea20827c9669bfad93810f855c87bad90f6ec7be2fe74e2b51f4ffd9377a6ae82 +89a43f15580f43d0c525ea8db11d5057c8f74b9bc7e280aed0582c3f767b7ae3458cbabbdb55422717d4466717a9e02150eb2493b3c75df1cef4dcd7fe3edef7 +f1effbcd340d65484ed701e0fd17bffb459ccc0be9084cf78d6f86ccc96757d05e3a4cdf6956c2c4920292a10928131b63921bc7cd8dd612ffdd3ce154c42fcf +8c9aa37794034c8f468756268a4f030aad3076116c07e0fb16c4d63e862fdc6ed434be44df275295ac9ee46e20fb49de67a1eed833e0a9b1d9c9f56a6838b0fd +6728f89b50cac63a0000805465fb907cc62eb2c37b5fdd871c1722a20bf481e6a1de7058f5057dde745ffa918613057d4e2d3dc011797c2f05e8f1abf4ac38a8 +821c118348fd3ce1f11e8d64a6aa181276152cf688fa5a4d51576683c94693c101234811710a70c1ffca2044369a301cc3da3f49dff2af1606a9a115696bd4ae +dcf96a8f31021b6555366a3b4c55ea41552115185bd90de40a9171913165f6c72a665877cd0a30668ba629972b3c4bfbe831e0cb1675c5d98c239ccd38f46d68 +6d831c01c3ead9ca448716de7b0602659df4e9280c81a52f7c3ac4283741cd69d1ab3976eff7d37ac99ee75d9ed65ff309246cd9ba70fb37d2f8238002e4d673 +a46f2bf489063480d3be97539d466b9568557e034002733bc77ef6f5b4e5fa3f4c3da2da11eba097ce496d607d29406dfa47c7884adb50d999c449f44d851891 +18bdf870e81a8c88c07370d20eb3406bc1c94fea308117259b46bcf61846de0629ac53b38df8be7c94f100de9fd1a085918d1d7c9db18dd3991c75ab5ccedde7 +3928ae15b1b7b2e14d6f4dbbd85ed1a3b15b43b6cbe168e1f0715e73dc5e1022207b1fbe13eee005a8b9921138062d69b418af360a79473d846430514385303f +a728faf418c5c40597b3b7e889108f6c53874d5c7025cc141adadc83b16d272185fc22b71ae37ce1b154b3518d1392a01ae72d18de1aa6d5875b1af8debd516c +b06f60304ab14d75309a3e5d7f8ca7d682fec4b4ae72d461041cdc2ef5a2a0489b026e8569ea25b6fed590bb3e82ee618016463ec18d883aa46d0e150641f41f +0f791e111749cb91253309b24104c33c78797903a211aba46211da2046b0068e4c9903a3b7c695c357369ef8f32b63cadcc0f891c610bda4cc51cf40c25a0d64 +e0c9a864fee5b57e11466a0d567c9e6cb0f9bd5627dc3e01697519017d29fe40212126beb8eb60baef99e7d310ef56d9c993c2afb34fe19b32af2d494141ba76 +9c3ed251d2871a94fd0e72c07378fd79d0bb3da05ed3a0489bafbe1e35ce4720747e0138f3dd28956e4e0b74af27e85735a9a7c60022d48c38fcb3af02b7c393 +22dad92768e3e1da2b886b209e31ce24ae73398768c49631d2d6e3f0e78c7c44c019008bfd4c652e81becd41f3e9bcfa743a0a376e9c01be2d577e30b5a1e51c +c52bcf3d7917437c3b18c35e9f96886e870043d6bfe386985d6acc6e4b5538704ba4901370c47a3024bca9314cc66b97f8790be0a3898ae810c31f8286d9c05e +397628bd76ef9de954e0dd71eea20b8183da234cec01c38ba3cf0ce3f9f2740001f93ef3461d461ffcd3d87c3cef7d2786b48783cecf691f54a6ce075aceb418 +530bf5bc5d236a83d39f0b3a64c6433e00a2ab42b26344e006ba19433e438be75ab547c35c95e975530494223fb8ea38cd12d7a2b485c6f49ac70d76065b31a0 +333547ab34321790e325d2908a57f992bc6ccd134660e4c268da5872972fbdb48c0919103d8712699c2fb142a70b77d2081242f6d61d513b1569d05abde1298c +9c32279641608d2ac5536da4cc91aa48d4e2f7ac61e57886d0a4871ba3e84359eb013a48c6ad14514a432c6c299e3b1624600011058ba7ccbda3fc674dd63822 +8e8ea4c0b5736db496021aad32649e577b9a6e460218af55adbefdbdd0ef1919a688ae40fb986257ac32455b3630237fee9674607a475a74b420a48ef0d21cf0 +55f2f1b6da62bc8ac57895c32db7ac056f6e3fd3a0a1db4cb1eb0b1cf8c957d3260e6c95da69ef37fe323530b8ed1ffbe3d4dacbf8c2cd9fa583fd3b0ca1fd26 +35d4616a9acfa431febd019567fc0d6fa266fa11fd867b3828e7a70a9cb799b75e47a1ff0f699c83b044d374e20294749ebc3bd6b41ca1f6993df94c52a477a5 +dd78797b409b9003ebef7931adc234de4bcf651ce31ba275307959251dbd8da6eb22c2971024d346205aa2e12a0369e340e5a573ae882a2472602254e5cd8017 +dff91b9a877744bae88cd0385f9277f7c13bdc7e25fd20a4855d75a38776039e92b982024e566e6104e4086b21f723e3d57cd3556980c39a46a87f6ee7a5e9e0 +437701781c4d2bc0eab3905bd59bab73fd44ff7a7c35d592e36667b26986bec3a93af8c6e1887c9eded438e9740b435523bcfff48369e2bccb628b78cdcf4c9a +d891d18f52ea002737c56acd8d5368679797705eb000aa1234153d04bd25d5ee2c32d68e42548b6de96833c65230b2b6508ab2285751aa0b135c2f2e834216b9 +2317a2934a7075001aca109c1b109a433eabf0dc7174c380f2dc531859d1c7c9205f3eb806955cf01735a79f51f02350043f73063542ea0c4356c4b40f85a98c +210946c4c689b080bcb840c3caaf970d2c6c3552b87f04317cb91c08f3ef1949e357f9efa24910915b445627e1dc9ece54fdf0201f8f9cfd608e86101063b75d +ea10f83ea9f4f2c3691a66c3de23cb312d0b3c87c1a1f3a2c5c2cd6bc39f0af1439eac0924be00fcdac0fb8e23bcb14861abe7987acb7bd9727138edbb8d340d +78ba6aede25428b2bbf5777c2caddefded340fb8d03cef2da9420a167b69f97b06a0a04e236f343e89b1dd08947d731a83cdd040d8a38c61f578bc35c0112254 +0d039d83e6b40017ee20c36327bfffb7d0c33e8305002f22cdcb2122c21a25f741d177cf6a8388187ad7bfb837a6365d63a3607c85faccc3d086c1503f838e3b +de54864170b978ddc47bb0b9593f1e15a10f61fce84ebcc838fae1271e4e071f7f30cdbdfd03b9e742e41065533f5b6d871918c303e0ed8de75d9c0edc7f476a +03a9cf5e74451031e798cc9d254a1ea1cf731816c8d64baf06dddcce3e546a1a0ece2c8857f491b8810d6769dcd22dec4bcda4ae028dff385896ff13f4e78ea0 +1fa1331b3cfe00d7faced4403ebafeda13e9148afc990de368a6d02cdeba2ecd6d7c14a45470c1056bf9e0443cc0e006a4f62a34382dbbb4aa70bd4693d1340d +468a9191c0031c808064560e452059f6a7a24827cd835fa9611895f2984291528531f992228ff9efdc23cb87368ca338ed7979763ef90aef98bb656a4fa626ac +3d261b46164971c983c8a7d25a46d150c41284086a90cf96c740fc0c1a48482bf0b71bd15589f5f7e397dd5e2e335de49269d93e1cbeae925ff6bc48fbfbb0cc +55ca1ac931e467d579e686b4fcc17167a411436f63abf340c42fa5179e7832ed999ea0272175c48b99b74a7815d459eb70e05584a9118dbad42e553cdf0a44d5 +1e29ca141de92a6b2f0fdffb833425e7adf94bc6ad1f4aeb3e4124022a9ffff2ff8394144c80ab7e23adfca7df25afe740630cb5f77e3275befbb76995546ac8 +b05e4250a44a33547a4e651b9ada880d268608572065ce5e791db0fa9e3449041abf0af5219e63ff57fe2c1d79ecee3443bdb18ffecd313413ca675d96d20e86 +f8d8acb100876b62e7dbd04140c80574af432faa4a9f6808cb7b60914eb4e9bcf60c5a7ecfa5fea9e7e7b91d2f381ebf7a0e93bc1063a7cebd9889ddf3d30c8a +403bdefd1b7cae27a871ee256d45096716e0859b257ae7de5d11b04091a8a7a6a963f6b368ebf0fdb723bb7c49d64e038a5e476be1288dda1651f4303b6337aa +984ad0eb703256a0e2b8cbd55ad348e54a52a758ed25395f24c1c0e824337b1ca199ed975c9cca875f64d4691ac1995fb03b1766fdf50040d367534ab947d5c3 +e4446aeea10ce8c738a4e8418a9a44f859f558c4ed5bb0eb97c1f257884c61408e5a841c81c725236a796ca3e0654a8a2d80039fdf65056b80416c7e0828c3c3 +eaeb693339da68c439cbcb89d6dac4adc54e4408e1f4b528e2ef14065806a38fd796a5ed75708ad674d2095a8109a39336c1b5b30f18c2951a95753186e13db1 +be74819806a1a1c8d2ef3962eedf449c2edfe7139fdb0f42e33a1c99ff46b0785ba6a47c80ea0a50a55b088493abc7d8b2c01b5fa557338bc26a737616651903 +94ea38581e397b9f225343ea533cd7192d6f409da9ba1f9619fd0170ee0c1dfd2e2293363b9b57df90162050d649b9267fffd3a9c55233b5d8d227ff2475ffee +3fa4c6937732f97932349bd954421f3c31a22c0976e5cfff3855319e327a67357eb6023830cfacd018056c1384aa72f219a9c3a0de14e9db08ddb489c3bb48d1 +10fb6013a0b5cfc677fd0e2452147c4871ea020440cbb5cb59e6f5f93f4dbd171e4f257ec64ecd585dbf8ad2acda7c651807362a3b44bbfe33f7a7d269183297 +4f63883bf96b507d1efe592a818ccde0c91b1ce4d953cf4cebf83af222622fcf3f939a0860aa6510836f3c50a33223b617344e6d34054278f4170fb17cf9d934 +cd7f2f93924e9db5334ddebd15fa15dae6f4e254a7ed00d0b8c14e74ce05ca793c1c459e70fe7d2632053356d378199a0c29d90ca9196b0652eda370f7caa731 +e21e269621ecc899f2c66e1b8a39e9cf797f60df450d130c6ad134f2383d791c6b7f8ff3a011694ca1b5adb6b807a948afac27040a02892b10b758f1a25e059f +4f7ea0a2253e9f404036aafc36b2556643f63b1f2fdf6f8ddba651d904f6774ca98d1ef9d13c0fbf5bb5716b3fcb88c3bdabd39faa9a4e72fd14a55400b447e6 +d20685eeb0aad2518ad8bc470c8f7566a28901e7e706b33f8f522e1c4b6e34c75a581da2a9a4ee20e68f64bb9bf2e90c329a58dd0f5b7b2307bdcaa8b2da0232 +bbbb222beeb5217c8d240aea3d73078a70472f03fabf9b06fc7945d6b07a03f49734acee4bcfa432cc803edca8fe2df731a3830227877df8ece3a9fc817f060f +eecb6982146f0538d602bbfa2fff34f51929ef7ceed36982d44cad81018dda65eaa74910a62abd0f85443a44bf31fa3cb31ffa5484e18337fedfd47547827fb7 +08cb6208e830ba96c6293fefbefa541a61385dfa436590aac1056f0fc5a3b8584fdd13c36e3df87303546d12e44e956906d471a3b92dcc317d1e160069ea31a0 +e42d2716878e9450bd3e10bf451aa835d2d53e208b335b9b2e7c4b3a087cbd047cbe0a93bdc1cd759b87b0b1876d8542d8225836fb7a648d3596c34fb0bd83e1 +b66964a9860c365650fc19b27ef4c80b4fa70de88b4fb2786099832da76d6b83063840408301b3c9710ca74caa8dd1542167c2f1e035b20eb787376eaac5b8da +7871d00b2f1f47afb0a15c3d179eb6f8611899f54aa1712db935b2a7fc337520fac120c8354dd6efcebda6981236dd138870a5a4874a0ea2fd38ce51a78de290 +ca3ffc3ccbe314a95d1cdffcbe1d278f749546ff287623517328fee861e533459de5df34736b6a59a8294e339dae2e392f83a5188db3490b4c462b8033542188 +78add6606cfd58f3199ee1b514929f650aab9cbc3cb66e6489f8c35f9a87461b919be710cd0cc2acb2c68a45f2f79aa65d88a97481ba9d03f18d0634c9059d9e +6ea63996fd1e5de4a578260543fcc0d244160f1f6439efc134c6a1abd1bdefe0493b74d5eba070f5994d14b878520eb03966853ecac011689aab9d5bbe1c689c +de6df15b7f9bc67ffb4f1015e48230c63dfbd17f9d56611ef46ffd0a0c5ee0760c68819526431eb38eb521b3d77c982d0f37a616a95c9568d184fc39bdf38a74 +e0f6efc220fe351aaa20510ce3954f06f1a371bb74f7cd29d90cbe84e6ed4dff3dd5400907d4502e05e8bdf4642a513f8da0128d680e0fb6b385821bd2951dce +0d118decd3286e10b9d4a2d3d37a304e9ac3a1b0a7f6f9c7ef8e2ddddbde795d78a90d88afc8bcd6402ac0e2e3d46572d516834e5214bf3a1c0ee6f4391701ba +6c48f30fdf9536530fb54022fb2c7473e25326c4c4ba8934d97e399d0ae76c9279991a2300d5e40880fa712af608275b30671e5be8a4aec1d89ed1f075feceff +ffc0ae214ff10fb9aa0fefea090bda9c072cbaf5f9a005ea5540c91906ce074c83caa3f26b0656a473d144d58f5302c8db54fe388c0b444f763a8fd359a99718 +5f2e6950c60da3a83801cbd3abb8a4618e513376e94f2ebdfc2c4608a0e5888693cc8eacc0789fbeeab749a31619b0a49511ce83d436f6218a22662761f5e3e7 +541dd577ae3e45d07a42a22b4b471bb365f0384d5b07a56e14cec531120346acdfe4fd8726acc6e865f37734bae2fa877c66d4776a5a48f370d5a5d8bc9e86f7 +60f36ea98308075eb3ba0b68561d322f3a444967e3dd0b5397938701d9efa8505b451e4b5ad439cc418444e9ac92377d40ca36a0086e88b07ded2f40c7de9206 +d7ff5eeac1141ffbc81f46541afeec5b6868d3908429d0f96f7fc4da4452a6777e8451879fb298f8e450414d679e975ea3997ae8c1dbd3d48e37a5ce4ea2cc2f +9fc839aa2000a0c5c0e12f46bddb3470a720aff6602174d45b50e107146b043c3e401fae4c5fa946ea3620128c785fc3077f12f344ee47ad605c6588b3fda7e1 +c5f1fb439e733383371b98795961eab3410374ef3db7a70dd4442575dd6047cc9e7d01229377d184467404e721de63d1aa08bd80806aa7e6d7ee9f9d66b3bbe9 +651b9ad114eb6236548fa5d3ffd915f011919e4270dc266cb9f458dccc28c4ad893c2dd297e2c09802f90a8171e5f42cdb46fc291c6efc5b51a6179129f74dc2 +c5e6ee6236bc881019a28e14c73ac2fa4ef4cb94c67fc628ac797a0ef3b99bc8192adf9b2f20e0646ac5b79248279bd415225b4ce596a8473c742e326b92add4 +599a00a399c5ceeb782f95d0479f7f15e68a62986e5ea4b6da761a3ccb1d67535fa347215d8be7d278eb00420d46d1e771cc0d74352053c5fb0d6a92dfe5422b +387a8e9feb1c9caff33a29a515ab5bc2d87303350c86cf102c85a26e9363a8c1c81d89caabe84979f64def4cf7d6d696aa4318db4a02dda35e8d42092f593efe +74bac384453ee4c4f377c44a9001f9a54a2bae1559c5383aecdae9d2dc9b862c59a7b83dca1a431b8d4d1449471caa559aa3be932ac57c15d5d6a187134301e2 +4bed5bbe94c6e8297531a0f14d1f483d7a30a5db6f427588aefcdfffc734f6f4fda8139d99da8c664fb1117d02387ddf2100827b7e902610692f939e8dbdfa3c +f5c533a90ae56884771276ec22d0588718bbf26db681dbdf223296013f7ad45813d4416d4082112cefdef5ff4b1a002a94d57e561a0a61cc2efcbf04c17600e9 +b5c6f845ef22044fd6b1200b28b98ffc6f0d16461303de34a6fa0e85fff41408e06569ffb7bf900eb0576a826834063230b5f584b41b4453d0a18e786388d593 +4ace836cd618faab20b4d10388a9c2e13befdc13d238229b63d50e10f4f38ce8531fca628e18b1465db1659f91a9b8f951cb1491411b302aac994ddce03849b9 +ee28fe7b0dd15a0b4e61445193f87b5a878fcb4614df17c1ca8797a9852b4c4257fd92c24a247495679d6c63a0ee37e7648c335145a7818b124ded817fcb0491 +19435f928285829e61c21869b0f6a0271614278715014d88b08b15ba570768101b95fca3ac17f4abb94ffcef34f8cf4a03e698943796f5ae88e70807d97feed1 +109bac330b172aaac5fbf6e11a424ce7e7cb16d428b382109c94289c4d283e6cd659cc8ddd80418c42962e9a25c658d32035d2b8d6feae11cacc2d5faf90e80a +c394502b871d93ece03d6a1c2a8b2b2f7817f87548ae5f856c1ab3f84af172a13ad422cde391e3657c6285a69f28d704ca360348a32d9804e6c965e837e6b446 +27478e6d0296a1dc541cbbd6a7f2fbed1f32ea7df9bbd3e23f7c869e1062240016b1aee4ba7f9e56e91dad70d0d5116f5cf681b480f8e2fc61684c6fbb2cd54e +7a636a93c62ddf8a441630789934ade59a4db3579e6700eda7fbc14fa574ffad6900e1b6ca087a9f7aa8446f88a53ab1e5a18cec551f0ded06fd941a9cb4553e +b753ad6522d81063f5908c604d0cf89d717ee71436a0bb9d42147a0168b54a2ad9ed7f3eedbff3b67422116a40da506a2fa4ad67ec601a7385e87633db1ea86b +681734312694024234c35db61dc253c7de83f2551b2c44482fa83d628236c287f9543e536b4367116dc2b3fe9383bf56e1140126824a1181224a0405267be8ac +d2e3a91224c869db1abb3c56ac00a9473334786e1a325f6a3c9066ba00b9bb0574ab4fd3b3c6b808c39e46942efda936bfd3a6781f3a74c79b7686ca97b525a2 +e5ab68ea67280941f3fdaa866c8910873aaba136d16de83f735fd4530149731c952d2831d93c8d835b6628d1be951f2476144b917af681d4c590421c9f7b6564 +0cd53b33299c8f555a680e461a6674ca5128d65ccae133dd2e662b644898bec95dd4b0fc5f06c54de532082265cac8164ab5a1466474f222db432a207c8391f9 +bffb84544f752da0fea30117c54ddb6542ae1f522deaa33450fb74ac67d040184024ed82ec4d809a69381d9a78966d0d7a3a151aaa5d2ec6d0a69c435e70dff4 +26f67b8647f6a0c1b69e28369f56bffbd95405b9d2d24f78f70de9c88fbe9646344da758f0bb87707f08e8bac7c1aedcf5bdb48050e324630f4924cffbc16bab +5f57fac49fa42a877d4834a91045f48a7df51648d712916c04ad68f8ce1bd200436df0fd2af55082275786e7d7a791ab46b62aa64310b9d2776197f31a6d8608 +c7f8ead36fea431b9ab8eea3f4aca663b49cc522e84270402e3b0fc5d1f974d2815bd2ec4c3d6d38bd9a9666764687bfbbebc958cfb202c4d64609c774275351 +7213d0e32205a841ca38cbbf57794cacf92df2a8925dfd221f0f8bf2307a93ff495a16695dd88a06f8ab042e235a45bf2652343dbd5e1b073274e791377f086a +65831661190554bb4d34ce6b337026318cea445a561f0e81d055b4b25b23b789c0fde39903f533c589d72e1a9c1a8c5bfca092b583a317294e786df51532a5cd +7c2b9361ab5e049c8cdd5d77fed6149771f812a6fe48b9301ea3665f8beca4462fb1cab0646f91cc4594cc344ca17f58ff5d40a631225f5532acafe3912faec3 +5ae33516d3c4f88311c38a271b508fbe8f489de3ea433e9f4ab8d1fcf55c15c9705c5b1ea933f00982c76076cde70d80c27bc997dfeb2cfc79f5f84b58a7b89d +1407946d4401485e1207a034413e0c9c2d8ab2c878c302fb8caae0ee865e556b9a4c5c5649ff96d01f309acc321a2c8d680962e4c831015f14dd6a3f8af0739f +06a8e9de22ea3ed614ae89dcc060da2a924dcb4cc9a6b7be1fa1c6bb52edd49d14f9f7a6a5ef7f36d5d088a8ee7d0dc11086bb60610f80d347a48f1504354a52 +62a8abfa0002e96fff2f8c657baac37d6b42e1e9a28234744cfd29ea1cb66bb799231a47b0b076c5fb701053a9828a4de5475f8ef18e3e84d6d2a9e7114b682c +33fe5d7ff789698ca9e1b14d732c2aaba48d87ee49dbd0592bc1352b8df8ad695afd9fa076e4ec0f7108dd63341e515b5a38dc49cb2b74f6e9f89befb7969689 +ecc8e1bae8ab9895b1496d577c0863b9b58ab7e73ad7f9fda85d49438263569cbdb8a70555c8dccd3c7d0d96d593469a56e43521c5ab1c955d7637c901f13aee +ddda87cc196330c329d81b275c88bc56351d6599f501a6775b0b7c9671b4dcaf01e9649486d1b9780f014373282dc43d4fa1556aa1a40fb62723a4afcf2edeaa +5bebaa1841434526771219396c86ca5c8ffa211bb769556cce331ab99ed2e629c8db388c92f66ea86851b4e77a6505d5a68d977d30e6c97a4f918d70ad8d0fca +6ad7e1fa8d884a03863c87509b54b70a8a4f6873e76822081413bebe976c23f1bcca377bf225fbeac045e28a1e40ac7059ab1dfd0c716ef93bef5bca71cae7d2 +2433b092fb61395e62a4e3c2c6188645a16faaba041fcb31023e7086c385bb599bc887ee83f0b5178fc55a8c0a1c31e7802c24278906d64a2d360f68443550b0 +32949e1e285b8548d4a7b6310f1ec0c59ba49befd4a47ade8bf7c389a3617b0c09e4e139442ec7ca3fffe954a221dc861d51c16b7701244a40d2259807031ab6 +237e2791d20d81d4073cff803473783c94228cb8673f0cb8bc6cfdf40674b88960b53dafa50eccedce9d3f486504474a675f849ad049b1b265ec0534d63622fe +df25ba5e7a56da34bd27ad6ffd3035d753f7fdcf97a0f0c9e51bbc42ea26933c6b55479225db585fe1ec0c6ce763c7da2c1900498236155030e94d178046aa4c +5c6455764c15b4183d1bcfb5408374e918e22293fe0e874118c97f761348a1bbdde7f1a2a8ce05a99b40f5ce8da32eb4cbaeb1540084881cfd32d1834e528b01 +cc36dcb3d6a8918e3e706b3a74d3b7e0bfc1a183203bfdb1abb10a1a8ded49a4d15e0ea36cce006bab32041fcf65621eaa3818a6840ed67160fa3621633c2492 +99820d1ec95618b78758c30b0761da5a747a62d82e30f4e2302bf5ccefebe5470a34da162893fa9b21c86d64fcdcd710be6f01187599906e38350d4a1b741d8d +84bfddc7547a1a02f345a0b42a5d15877da4e07d8e7fd91715295b006891e6e5f438afaef45d15f7b288b0a109ee04b276eff7d64b01a8140deb304823b2f7d1 +67c870790e5eca71d1a852483cf23d7b48d4232504f4c65d15c8c194c0e9c2aa8dc0cdcba45eaba43f7d74dc5680a76b1495d3f4761451d48b5439ecb340ce7d +52bb366aa0f2aed2cacb904299307233b7732ba45e4b3cb6016fae0da236a4d8ec325e31f6d213c1f1eb0026947ee7ff4815533306f206a80855581bd3fbe9b7 +5209231a324b34009428c12b4b346513da7509c319fd8ce702111c3efd705a3dff6da4f59051119dac11311bd077c68fdf9a36bd08638201c2eaab48869d7b5e +9a5942a0f276962b6f2ea7e3ae61009046e6a8435da887930a12f9792e68632628ae72bed8811215074c5d74eb0c07df6219997d1735b84985fd3e443b72f51f +8f89a62407ab498b617cc2e5bf205f4a15134d968ec2b85f58e67d226872024008c642070d9d692579311a0d49bfc85beb58b8cb4476ce2622862f919709d7f0 +e66617233aea83bd2f221940ad0a13bcb603617e5827d1dbb3fee5dfca0b87525fc1998842b9019ca7e3ecf1d843510bc18f5fb0a0f91daa93ecc0ed336950c1 +6a885395cb797f376aa77cbd64ae8b7c757c6f4a1ae8b83540c65bea907e5b000ba1cea29797f90eb23975f547a2add251deb9106234bd1be240db9c8575107f +439155e196b8be46d29cb6a95ae4d68c90988ef42f82514419db06f9930a268856e7ef15918c75380134687c02101988588329fc303ec63faaee06421b351203 +597ac112b54e0983aa40992fd3d8b2d96953cf0dd48e5ebb36640c74aec98cd0b1077f8ac74550929f2db279cf5d4a330cac39e7d3c6108d4c3d6e947accb26e +fdd3c7a86ad42a4bc8148bf4acd8eb210d1bb01ba7f2c68b98579a4de93d9f4815523a4552861864e9474cdcba991b5db6c18fbf9a1ad07826d9fe30600ab447 +146b2020323c87e8430a35c0706b0cad35f6fe326dbaef2b69ae7f187e1e4374dbf7a7f55dc085776e4c479e3b94f6dc7153ec2b15525e38bc181becb61e4743 +54fa0b872e8e41d80b21670d128a7b1427a9b8fc5a56eebd5539214c3f20e10bc1937a52010e6779c6f8f72663d41acd2407b74143b6c24c966d8329a4975d73 +fff2fd7733aebe93b1f06b11c504e98221fadce7ff4bf0f726004e4efa17ef60c9351197e76cdb8177ae281aa216d4ce3f99763146c0678806701cf40c8f2757 +60ba4950cd0dd12e52e2067dab0aa321ce6c75414ded0fca0c195273ca41d40055580d2358838bad5d0ac388867641295ae0fd48ae8d1920a251ac55d1a0c26b +fb80b5023eebf379d82cfcfd0cf6cd02a2364a28decf60671b60214e8ad799e76dd3f79bbafc8388779e0f6b06b6bdd1da7e8e7700e9b22e4cfc25685c55949c +062072be49f913be4e1cfc90ffc1e0adcfe3d6798d5cd552802ef11e89efb67dc2e80be758a46fd97472e217f0ba8e924f97235efe9c91def9913c0755d23738 +3fa9c61bea8bb471278410c5f60f21b36b736d8df324c1b30dd030470490a4ba8ad1684c53769b81bad5737679b0a95d9dfe4a0f1d082f4c18112b369de2c492 +a0f19f108d4f977325baf963eff92d220abd244544f8bd32cc820af0779f0bd6c4507bd431adda541add750b070c5a1035530981ff1ade74e3ad7f97c67b8ba9 +b9f3e474c296dd69faa38c66a4d7535d9e2063096e591ff5f653038cd2bebdcb69f77ef40ddc3bc4cd6c90962ad07eecd0585a7f5c9354b248c13c04614d5caa +8066f99eebe025f54296e99e0f881e8b4b2081a309f4db58a636cd81debb985e7f08f143b41c4e7c2fa294f44d1c48341a971cf156209102f720a9f1121bdff7 +7efdcb1169b65dfbcf0381aa8ec80c686aab55d76688b27a643742961b63f9977d17df879e7d849bd4ebeae9876a470802f876f95fe81a8824e2aceaf4019741 +572596dabbaab309427d8d31a0e565419a20102f317af162cc8f29612c152c1297024e8f5426225058537cf95aa298b15480f38279471d91af8e6f504fedc1cc +75487e5f1a18070e2391cc2b561611d4f48c2d1535f63ab9a13de795d433d4ecee891a43b26b95319958c45618a854a2c62b4fa6324df8e91e4e9173f32b0521 +df7dd4783cbf7d9f38f846bf0c3a2852139f4f03e05359035abff999f2efe694d5fff233b8a42e10d42007e7df15fa8efac95aac80d8ab6556578cdcf72aa2c4 +a1ab8186b4d9f42d836105fd35dffc11d688d4ad91885213780f8bbe06444ed19865a0ca158af61eb553c535eef454a46d0c80cc3b344afb4e56f24147d40c65 +3c728919a432e3e7f626868caff7216c8ea3a8e398bb0b9a478a84308ddb647c411a51e5ae6fa7adf0d9c6deb019cf5f499b8e7e3f4d5d4c6a70eee5e91777ef +61b8ee29e83e5369cb799bd2b62d16dde6d2e33165da634d4be830f021a412e93735a22e3b8862992f9f5576c5ab8ff7d3dcf4081112103f77110d8800d41bee +cbedec05426fb031ef441605a06f3e24151e82e2b945fb852ffce73409c3a3f509f4f34ea8a7e34e6427ea4f6e63b4ba9766b710358f3b311ad66e3137bfaf14 +0361ab7cae3ed76f0c864687f9a1041235c5670c2d3dd67b1e61ff914ded050099065c3c9be66e8930bba45c8bd1898888856f8c744428dbd42cfe2dd7748a73 +2e326ddca79fd5a1b13e85a32c412eaee310cbfc7c405d3b549a99d59aae91ecb30fc8ecca63145f85e144ff25ea85e2000a092b431cd13ba736fa6fd13d3f6b +965388e6574e81754cbe2fffb6991c91a100504a08ce00a9d741523bf4f6726b5707415be6fe5b88a26c4d54dc1287af391a9506ee25a2c4e870f616d88ca291 +294d1c7616d14243ca11ccd791d6937106eb9e9cdef97edd2ae1abc92fd541449396c72bef56341c326012d1df88e693685c3a0ae5cc7033dc530d0b5d3f2e04 +5e7708cca8e0619f42dac1ac5510bb3aa95914cfe4a55db8748e85972a70dff076d2740614aacef14befb04157233deb3092d1834224e6ef0996b0e8488261ae +2c37ca9d41149335c624faec7bedcfc07c407db40c9439f3f4cf12bc4386059195dd7f73da07e5bfcff0e099f5d7d3f1ef67bda49b14222b2ea5dd2f2ca523fb +0eb2190551c4c38740d8d0723e1e1081bc55de561411c5051eba96635863c7ecfab4617e9816aa67413181c088a2ab85ff129eed39b8746e769bbfe9876916a4 +6f846e9f7b695fb9e9df0444bb8545680354922265e0733548e506738c3c4058ad1c05bdc3a01a34b69bdb504b7a85f6c0ebaf30610b19953e4d1ed7e606591f +b8dc8b6832bd6e260dce3a27edc5490d0163066c0e74e6a84a1d638b60859edd0251ab79e92af2cd5098c2d78b88299d259f4d567e3e141e12ff3d6cc86bce0d +b69f3352510888b9bffc74ead253339b88d40ecdc071eacfe5555ed77a8e26f8800850c221e5a25b040da30c38d1a5ce79b6cae9542dac4aa6900bc5b5a67186 +80732f26a742a699c192360a1546160d522759a9c1d7fa31817d5133d5505d75b4253650f8c7c1c9dd2fa42e00959fdbfb149f29526c0c47eee4736854c087ac +31eadea6b795452c2599ea4c0bd83a4c331b88d72bb3ddf3b55c4be9b2f1854f881470e0dc5d186dbe0e5de1771e6174f2dfd5f70b27a13119b90181904716b6 +24a540626b40afa14b9ebe00a5df66abb9be7d24df95bd200be80580856972edd631b4d230b40980840598df5d113ebca85dfa31103b913f1bb96dc4dedd5cd0 +e643251300000d6649444154204a55895065a2df38f2b18d05c431aaa8fd6f874dc150e1eebdc7d2d9a76c4bc79f3a496a78127cbbe5f4dc9d7bd33cf0f21618 +42db8fda55b7e6e223ab52c305733460711eaf00e8b16b9e0ffae8e13479d209444218dcc7c19298e120df7d5b30d697def7297a3b2ce72add9ce63ffec788bc +4059f9f29fa5019df292aa9ec73198476db7fb3510c2fd47d3dc79d4329b9125dbba3580939916ed8109d2d338b80233b53471ce05e9e003b7a79a63ed7ce645 +6acb0a7b5dfb105b3ba085b3acb57121d7dab0985cc52e8f0f2d6fa2f90474a15299f4ee39461ed041ef62647d227fc57a71c480255eb74e63d73475859be9cd +0eee63dc716f8b358bffed7bca873ad22517757908e8c3d42024bb2f69c0fde9a12d577dc345a90b2f7004d342d42b462ad4c4e0be9637c08d5429cb1106131b +53970269f4e949c222c2dbf389ecc7f71347b240e6c270b2e78e6a3322b187371b553648df77e6e15933f93a2e924e8cc95468930c981cc808a7b80c8fa129ac +5e84a96d6e2e67a641c463465e96fc9df1752a53660e9c40117f8b76864308e35e23a0665931df93695a7c860094722d145b2cc2596834f993692e5edf48ebf8 +dc4135e2fffc7753c520b7cab55bdefd3a0681c776708f48b4c88ed616a980106c1db4a986e7ee32bf4f9e13fc25f3f179e0e9292940d429a16403c45dc540ea +7865364e45ca60915b23411e437573e3b639b2bdc9c8bfcfba60362d1eeba4e71f7e3a5df07e444b48d75efa65253db57f1f4a5b80169b697b1e5ac43b73db88 +30ed438fa7e78e4da273f086d47d84aeb614ffabae07953bccaa96bd1cc6ed49a9ad15387d0f7de1bf429c05457c95f73f8184ef29f0ebcacfa6da333f4ff56b +9b2c192362b9c7076fdf83f45801712c3f7207bda25d8c84cfc64edaf1e3e0d981088ee175aba6aa48652dbfc0360ac9a5188b6b4223a85be4137da4a9acb0e1 +bdca38f91818b2cf61fdd5664972d9ade03816a71fa255e417376595fc628922c34857857f378fe11ddbcb222e59f8ae0a654c458f6ce37185d7adca576474c2 +a6a7f9ba23e8bf82e2236ff5c0e668b076c0c323cbf753dce5e7641c64162b4ce90e88a00359f320af79631ed7531e1d335853ee53c2b8a2995a786d3708e938 +8289ed090a4f9f1b91d1735a4b798ad4c9ba61ad700fcc732d1dd4b89c09b201eaff538258032c9e7fb87d476a3009dd435fdde9df38dc3a0ab76c58b7150a4d +d164e5ab4f9654036dec228e33013ba54cadd4876d11118bff8b081926970dfd57f077bccf0c1684365fd0a6d6ee4f308de3316be9aa86b35627e61a31df43bf +8946ada6e448c72e04122755e44185b4832acca2a30be6a45467d26f5ce9b2b677e757ab32781a57b0346131cc318569341b82fe352760d1929a8d6dc0d3f536 +a593766c004b38984e3b8b9ed1422bed7a89e94d86d55648f4173194c79e83004b2458640ab3c946ec67f18a07bb8c4c83e6f549d76aeffb03c43a3e9dda5b4e +4fcf9ef25e5651de9712ba74cd778046c1e71b2c31790b99b444141d9c7e5c208f95236c026736a97cf0d51874ec071082fe00f9b7631803953f69f2f6108594 +97d7e3330e117d2c9f71761ca23a86b3f21c7517075dfa4bcf4957bc771b07337bd679e1a163a8d47219d6770d8752427064ee72103684623a8c48987ab4955b +76b5e518de920b6fb19e47a50b8a8e3702bd8c31d816cb8fdd9b5efaab3f4527f0ec5443d1c859afe8e3f1ba89f9a729228c325471ff7c650a1937adeb9b1542 +091f6d0d935d6c1893fd95f83760f01ad7aa436a679d68efcd83eafac85879aa1089fb59c91cdc2e12752caf1d8fe74065a825a73e593744a3cdb4a3f8b9481a +af2dfad52f0aac60027a603d66452d670d6eda150754c8dc3437e68f3262e6aad011f5f32a8df7b573169fd58c2972321799e518219b21d6c0c00eafd20becf3 +1963ed0be89d4129e28851338cd894331b7db435a2599b01944819351cebcbfc96733a5a44aca066c535cf11d566ac37c126ad9fd1c7eb0c64bd547db13a6cda +05f2e4124220b3ec365a7a9a716ed5575d394fddb4b6552dabf1c313a35bbf6ed3c6b4f1b8f5789c1e1e166afc0c5d72488db1518d973c06c76ef5c97e3ab4fb +0006448ac2087a9bceffb1dbc9791145196d9f4aaf9691fb5ae22683c28d6f45bc9f037e6c0fc5bd844486dfa64e7b01ef79189d814753032e5d779e94133a4a +fda15ba33bbd4a1a3064d8afc40a9512f4a33e04d6be8d4b980c437a53b1cfd5655720531ec891da76187f1389ae298c6ac4a05e1b44b187210957cb629e65eb +c6aedbbe97567ef095d4408865f11134e348693b18860570f4eaf552c256800f35a676dbf7fc3455fee6dfa7a35ccb16759f16ac24f1d1fdbc260224a6481a52 +9c73514cfef2a6b8487a82d75b42e7ba8a83a84095b15e18ea91013ad4435800511b87f1bc829358a3b0ac79fc381871400a6c8a1313706ddcf4a25382084c89 +3aa204c41dad080dc89105008f58c82ca9d4de0cd7b90b9bbf449da7ea6aeee05b0fe4fd43811916a99a87736db422d8017cd90e755a211f46d32a0f60feac51 +c705921614853ce0c77fb7715c3ec2a8e42aa12adaec658c7e84706618819fcf3e1cce6dc8e7e83dfad37024faa3fcdca082cc9eb9a07992e71cd08cb61ef64f +5cdfc2f17879747ea668396065826a800fd6ee6b4c0823596122d170ce269e237138876c3c6bad5c53c89a0d62dfc7ba4d27a6a3af21f8a1e52a540e6b77fdf9 +57a5e55fde4f4371b1181fce39aaa9debaf57369fd16206aded12a4bbe56a1b974483cdb2c750e1e96e084043fe0f0482ff41016d1cb34633d0c800365e7555c +3be2e5d0f00031864f72d324a082e299d608cbf6bfc84e588caa4f0377c00cd140c81ced87955bbf1c37cc266870fde0cd55f9a2b985ca0f9b3518ebe8515f0c +bffdd7d90b397385d179c14ccf86ca19b3c3b40da0a26fea914ed5384c0da2ef2cd1f9752ed08bdffc6270b302ede3b02db0304d3a5083547596b18a48d378ef +4df418161fbc33cdd358d6655b5b6a3846ba3e3b54eb443afd2e8138fe88f83827e367576fbb8a0644d0831c3be0b17d190220681e722f6097cf5ee15a4d30d4 +d62a0e75c81afb0efc77d39c22958999196fab07d6144b5062acced60bf636312d1cc011f56289be60c5e21e6dbe010c92106404d11b023f37d29941ac75d790 +2614cd46a36844ba5c9b44b1cef7d63e8110466cc220f8decfa5f7f65a07dc1d1e5bf83e3f46be5d36d2009ac3c8628d90570947ae5ad40a469fd7bc788f21aa +02648da140d5025c18dafaf07a8543e33df09e4becefad41192be1fc7ba1eba0b1e4e78eb188221df3bd842ff3ab1851e78264783b7e9e8d24137fb2c18986e6 +267cbe813eb6482cf2626eb103ef6b8f22b4c59b8b51dd061f74ff731cb0691a993b40ee0ea3d5fd4a9a606e67620688927cdfe274df2ec005e79e6dc491e235 +84aef5a23c570edd6a55e769cd90b02551ae3166e12057d9c2125d02b5f0449086a08115e04f99036352da31b4e6c56f4fc76efadb340baba14daab982e46ff3 +86ff95b10634e4186fa853308f5df5a1b474f3e7324a05a4db78df2769ca8294c1c3f3e0c7e83aba0e153881e92bff2f11e9501ce22eec8b3ade6f8a1db43350 +8bf6dcf69db48c0ec4bee56e207b6d787543a26775845744d2ca25c515a25a9ba8b5003fcdb6df125a07e3f61524b9e388f4593a896900833e8fad7c0f0001e2 +6d8328b81d744fa2649c8ab8a995b481ef5dd3d2e7095a279e064a678f6d916d1a17a5164de91a295de5cb9f49cb44a3b691dd9d54443651b36059e76354fc7f +ed77cd5b66d42e6a320e5bd42ba6411a0ee08f4e29442eaffb54aad3e4ae01f5ab9f11fadd381bc9a335a27950892cec4d6978ae96debb38b8f967b967b46658 +79b03d4e673e689a79ac52c90ec434d5f7ec5cd01ac2e873449d2594ae21f9bdd4b373af48650643d7fa463ac21668a31b321a6c2b597df2ceb8de71ecb98682 +28a5d79f4987775c88786527d2bb40ede279734a16ce8547e494374c36cea9efd9f714a54b3027f2d9cd06c3f784d8dce816c40194293e9fff1ea083d7a19075 +aece217dd5e446ee7f89d5f3000e3d3cd61407cdb4c954670e0f2d956419bd32b963329cc7b8010d160887d583a48d3b8b82d7e978c1f1aa59fc8295ed52dd4d +991c1e24f7568aab6a0f8522db9cb74ea375e03e5a0cac877c93334de5328bc1e8b1d440af6aa048ee06edc844e77b5f4fa8becab05fda427f01a2ea88d42c40 +039eab26b48ec04974d11991a8b2a059b67755817c3c5759c51b5207d3c425365c2c98621ea01ea3b97ce020bdb3698c7f48ea03a25723422c5cf77b785da636 +2968e9da220cb3c8b2e6a9f4fa4a8eba4307e026513122d5edd0645e79d78749074971b956e995ff96e60f41cb596c337290b7dd45142dd20beb17693543a267 +8dde5b878504d54bae4ecd732e6470b20ff9f7d1b4021a687dd627dad74edc01e0907727794002c68d1427b2c048a7b5556b8fec3b3df2057586e7afe0bcfabb +16c3c337645f707f4aae2b253586e2615e1491b9cef52c21682388a2e7b591add18cc781cb51c463199bdd239260d8510761e405b46c24f07deab88a22233e77 +c7481287b9c8017d8f7c2fdb3056b39a615827b2c96f40aa1ef5a4bb67cd54a0900946b4199f0917a2532a8ca38c96611d0ad43aa24c9b91955e8cb6fb5a7913 +a26cefb55a2ca76e1926588b4099be65bb262c24d0c50c32980efa190cf93e5fee3b057ce1388a9af9450af8ff01144f5fcca10d65710000000049454e44ae426082}}{\nonshppict{\pict\picscalex168\picscaley168\piccropl0\piccropr0\piccropt0\piccropb0 +\picw5556\pich3334\picwgoal3150\pichgoal1890\wmetafile8\bliptag1644798458\blipupi96{\*\blipuid 6209a1faf2af192a234a8f34ac7b753e} +010009000003d29b00000000a99b000000000400000003010800050000000b0200000000050000000c027f00d300030000001e00040000000701040004000000 +07010400a99b0000410b2000cc007e00d200000000007e00d2000000000028000000d20000007e00000001001800000000001037010000000000000000000000 +00000000000063524a5a4a422121292121292121213931314239394a42394239394239393129312929292118213129313931313931393931315242424a423942 +3939423131423939292129313131312929393131423931635242524a42846b427b6339a5844a8c6b429c8442846b39947b42735a39bd9c4a4a4231b5944a947b +39423931c69c39ad8c394239318c6b39dead39736339635231635239d6ad39bd94394a3931bd94396b5a39c69c42e7b5316352316b5a31e7b539c69c295a4a39 +c6a539f7ce317b63294a3939cea539e7b529dead296352315a4a31efbd29e7b5215a4a29423131cea531e7b521efbd21e7b518efbd18c6a518393131635239f7 +ce42ffd64a9c8442292129846b4ae7c652efce52efce4af7ce4aefce4aefce4aefce42f7ce4adebd42635239312931b5944af7d642f7d652846b422121293129 +29ad9452e7bd52efc64aefc639efc642efc639efc642efc639efc639efc639efc642efbd39efc639efc639efc639efc639d6ad394a3931292129313129c6a542 +f7c639c69c423129292121292121295a4a31cea539e7bd39efbd29efbd31e7bd21efbd29e7bd31efbd31e7bd31efbd31e7bd29efbd31e7b529e7bd31e7b529e7 +bd29e7b529e7b531e7b529e7b531deb529e7b531deb529e7b531deb529e7b531deb531deb531dead31e7b531dead29e7b531c69c314231312121212121292121 +21212129846b428c7339181821212129212121212129181821423931b58c39b5944abd9442cea542cea539cea542c69c42cea542cea539cea542c69c39cea542 +c69c39cea542c69c39ce9c42c69c42cea542c69c42c69c4abd9c4ac69c4abd9442c69c42bd9442c69c42bd9442bd9c4abd9442bd944ab58c42b5944a00004239 +3918182121212929292939313942393163524a4a39392929293131314a42424a42424a4242393939393139393131313131423931423939393131393131312931 +3129312929293129312929294239394a42394a42396352395a52397363396b5a39736339736342735a39635239a58c42423931947b427b6b39312929ad8c428c +7339423931635239bd9c425a4a316b5a394a3931b594428c73314a4231bd9439524a398c7339b594394231298c7339e7bd31b59431393131736352947b4a4239 +315a4a39e7c652efc64adeb54a524a314239397b63397b63312921295a4a39dead29efc631efc639f7ce4aefce4ab59c423129314a4242948452ad9c4a524239 +312931948452f7d673efd66bf7d673efd66bf7d66befd66bf7d66bf7d663d6b55a4239313931396b5a42cead39b59c394a42392121294a3939c6a552efc652ef +c64aefc64aefc642efc64aefc642efc64aefbd42efc64ae7bd42efc642efbd39efc642e7bd42efc642b59439393131212129423931c69c31ffce429c84392929 +312121293129317b6339deb542e7b539efbd31e7bd31efbd31e7bd31efbd31e7bd31efbd31e7b531efbd39e7b531e7bd31e7b531e7bd31e7b531e7bd31e7b531 +e7bd39e7b531e7b531e7b531e7bd31e7b531e7b539deb531e7b539deb531e7b539deb531e7b539e7b5319c7b39212129292129212129212129312929bd94425a +4a312121292121212121292121292121296b5a29d6a539c69c39d6a539d6a531d6a531d6a531d6a539d6a531d6a531d6a531d6a539ce9c31d6a531ce9c31cea5 +39ce9c31d6a531ce9c31ce9c31ce9c31ce9c39c69c31ce9c39c69431c69c39c69439c69c39c69439c69c39bd9439bd9442bd943900004a393931293129212931 +29315a4a31735a423129312929292121292121292121213129314239395a5a525252525a5252524a42524a423931313931313129313931312121212921292921 +292921293129293931313931314a4239423931423931423931393131393131292929312929393131212129393131292129292129312931292929393131312931 +292929292929635231312931292131292129524231bd94393931312929392929312921299c7b31efbd31947b313931393931392929392121297b634ae7c66bf7 +d673cead634239393129313129392921312921296b5a39e7bd42efc64aefd65aefce5af7d663947b4a312931393139423139312931292129312929ad9452f7ce +52efce52efce52efce52efce52efce4aefc642f7ce52a5944a2929313931314239394239313931312121292121295a4a39deb563e7c652efc652efc652efc64a +e7c64aefc652efc642efc642e7bd42efc642e7bd42efc642e7bd42efc642efbd428c73392121292921293129315a52399473315242312121292121293129299c +8439deb542efbd39e7bd31efbd39e7bd31efbd39e7bd39e7bd39e7bd31efbd39e7b531e7bd31e7b531e7bd39deb531e7b531deb531e7b531dead31e7b531dead +31deb539dead31deb531dead31dead39d6ad31dead39d6ad39dead39d6ad31d6ad395a4a312121292118212121291818215a4a39b58c39312929181821212129 +1818212121292921299c7b31b59442bd9442c69c39cea542c69c39ce9c42c69c39cea539c69c39ce9c42c69c39ce9c42c69c39c69c42c69c42c69c42bd9439c6 +9c42bd9442c69c42bd9442bd9442bd9442bd944ab59442bd944ab59442bd944ab59442b5944aad8c4ab5944a00003129315a4a424a39395242396b5a39292929 +292129292129292931292129292929212129292129312931524a4a63635a6b6b635a5a525a635a5a635a636b6363635a52524a525252424242393939524a424a +3939524a427b6b427b63428c7339a584427b63319c7b42635231947b42846b395a4a39ad8c424a42315a4a31ad8c424239313931398c73398c73393931296352 +396b5a399c7b393931296b5a39a584315a4a39947b39524239312929b59439efbd29846b316b5a39c6a5396b5a31292131947b4af7ce6befce63b59c5a393131 +94845aa58c634a4239212129947b4aefce5af7d663efce63f7d663efce5a7363422921315a524a5a4a4a3931392921294a3939c6a552f7d652efce52efce5aef +ce52f7d65aefce52f7ce5aefce5a8c7b4a2921293931393129393931393129312929292121297b6b42debd5aefc652efc64aefc64aefc64aefc64aefc642efc6 +4aefc642efc64ae7bd42efc64ae7bd42efc64ae7bd42efbd425a4a31292129292929393139312939312939292129292929212129423931b59439e7b542e7b539 +e7bd39e7b539efbd39e7b531e7bd39e7b531e7bd39e7b539e7b539deb531e7b539deb539deb539dead31e7b539dead31deb539dead31e7b539dead39deb539de +ad31e7b531dead31e7b539dead31e7b539dead31e7b539c69c393939312121292121292121292921294a39316b5a312121292921292121292121292121294239 +31bd9431c69442c69c39d6a539cea539cea539ce9c39cea539cea539cea542ce9c39cea539ce9c39ce9c39c69c39cea539c69c39c69c39c69c39c69c42c69c42 +c69c42bd9442c69c42bd9442bd9442bd9442bd944abd9442bd944abd9442bd944ab58c4a00002921294a393963524a5242422118212929292921293129313129 +31312931292129292929212129292129393131524a42635a425a524a4a4242525252525a525a63635a5a5a738c7b525a5273847b63736b5252526b847b6b736b +52423973735a8c8c6373735a846b42635239a58c4a947b427b6339d6ad42524a318c7339e7b531634a31392929d6ad39cea531524231635231b58c39efbd316b +5231846b318c73398c7331f7c639947b29393131c69c39e7bd316b5231ad8c31f7c621b59429292929ad9452efce5af7d65a8c7342635242efce63ffde6b7b6b +42292131ad8c52f7d663efce5aefce63efd663e7c6635242395a4a39d6b542debd635a4a392921295a4a39e7c66befce63efd663efce63f7d66befce63efce5a +efce52efce5a635239292131524a31846b315242313129312121292929299c844aefc663efc65aefce5ae7c652efc652efc64aefc64ae7bd42efc642e7bd42ef +bd42e7bd42e7bd42e7bd42efc642c6a539423931212129312931312931393131312931292931211821292931524231cea542deb539e7bd42e7b539e7bd39e7b5 +39e7bd39e7b539e7bd39e7b531e7b539e7b531e7b539deb531e7b531deb531e7b531dead31e7b531dead31e7b531dead39deb539dead31deb539d6ad39dead39 +d6ad31d6ad42d6a539d6ad39d6ad39947b392121292121292121212121292121292929312121292921292118212121291818212921316b5229c69c42c69439ce +a539ce9c31cea539ce9c31cea539ce9c31ce9c39ce9c31cea539c69c31ce9c31ce9c31ce9c39c69431ce9c39c69c31ce9c31c69431c69c31c69431c69c39c694 +31c69439bd9439c69439bd9439bd9442bd9439bd9442b58c42b58c4200006b5a4a6b5a52635a52524a4242313929212939313139313942393931293131293129 +21292929292921294239394a39394239393931314239395a4a396352425242394a39394239393939394a4a4a5a5a5a5a5a527394846b7b73524a5273948c7bad +9c637b733931395a63637b9c8c738c847b8c7b635a4a393131635a429c946363635a636352b5a552a59452524a426b5a42b59439d6ad395a4a31a58439735a31 +b58c39f7bd298c73294a3929e7b539d6ad29635239c6a529f7c6219c8429423939c6a552f7d663efce5a6b63427b6b4af7d673f7d6738c7b52393131c6ad5af7 +d65aefd663efce5af7d65aceb552423939947b31f7ce39f7d65a94844a2921297b6b4aefce63f7d663efce5af7d663efce5aefce5aefce4af7ce4ad6b54a4239 +31423931debd5affd652bda55a393131292129393131b59c52e7bd52efc652efc64aefc64ae7c652efc652efc652efc652e7bd4aefc64ae7bd4aefc64ae7bd42 +efc64aefbd4aa58c422921292929293129315242393931313129312921292921293129317b6339d6ad42e7b542e7b539e7bd39e7b539e7b539e7b531e7bd39e7 +b531e7b539deb539e7b539deb539e7b531deb531e7b539dead31deb539dead31deb539dead31deb539dead39dead39dead31deb539dead31e7b539dead39deb5 +39dead31e7b539635231212129212129292129212129312931312931312931212129212129211821212129292931a58431bd9442c69c4ac69c42ce9c42c69c39 +cea542c69c42c69c42c69c42c69c4ac69c42c69c42c69c42c69c4abd9c42bd9c4abd9442c69c4abd944abd944abd944abd9452b5944ab59452b5944abd9452b5 +944ab59452b58c4ab59452b59452b59452ad8c4a0000847352947b5a6b63526b5a5263524a4239393931313931393129313129312921292929292921294a4239 +4239314a42393931312121292929293931314239314a42395242315242393129293129293931314a3939634a395a52427363426b6b5a737b636373634a42426b +7b7b739c9484ad9c73948c42424a3929315a6b6b6b94947ba5947ba59473a5946b8c844a424a3129314a3939524a42637363848c7373846b9c9c63b5ad636b6b +4a736b4ad6b539b59c31635a39e7bd29f7c621846b294a4231e7bd42ffd65adec65a4a3931a59452f7d663efce636352394a4239debd63f7d663efce5af7d65a +f7d65aad9c4a393131bd9c39efc631f7ce52847339312931947b4af7d663efce5af7ce5aefce52efce52efce4aefce52efce52b59c522921297b6b4aefce63f7 +d663d6b55a4a42391818214a4239cead5aefc65ae7c64aefc652e7c64aefc652e7bd4aefc652e7bd4ae7c64ae7bd42efbd4ae7bd42e7c64ae7bd42e7bd4a7363 +312921292121297b6339deb542a584423129312921292121293931319c7b39dead42dead39e7b539deb531e7b539deb531e7b539deb531e7b539e7b539e7b539 +deb531e7b539e7b531e7b531deb531e7b531deb531e7b539dead31deb539dead31deb539d6ad31dead39d6ad39dead39d6a531d6ad39cea539d6ad39b5943939 +3129211821212129212121212129312931312931292129212129212121212129212129423931bd9431ce9c39ce9c39cea539ce9c31d6a539ce9c31cea531ce9c +31d6a539ce9c31ce9c39ce9c31ce9c31ce9c31ce9c31c69c31ce9c31c69429c69c31c69431c69c31bd9431c69439c69439c69439bd9431bd9439bd9439bd9442 +b58c42bd9442bd8c42bd944200008c7b5a94845a84735a7363527b6b5a5a524a3931393129313931312929313129313129315242425a4a427b634a4a39392929 +312121293931394a42394239393129313129312929293129313131314239395a4a317b6339635231947b398c6b318463317b6339735a427b6b4a7b7b5a636b63 +7384735a5a525a52526b7b7b84ad9c84b59c84b59c84b59c738c844239423931393931395a63637ba5947ba59c7ba5947ba59c73a5947bad9c7ba59484a59473 +847b635a526b5a42736b394a4231524a42948442b5a563ada563636352b5a563efce63ceb5524a42396b5239f7ce52f7d652f7d652f7d652f7d65a7b6b42524a +42deb542f7ce39e7c65a635242393131bda55af7ce52f7ce4aefce4aefce4aefce4af7d652efce52f7d663847342292931a58c52f7d663efce52cead5a393131 +2121296b5239debd5ae7bd4aefc64ae7bd42efc64ae7c64aefc652e7c64aefc652e7c652efc64ae7bd42efc64ae7bd4ae7bd4ad6ad42524231212129312931a5 +8c42efc64acead4a4a42392121292929314a3931c69c42deb539e7b539deb539e7bd39e7b539e7bd39e7b539e7b539deb531e7b539dead39deb539dead31deb5 +39dead39deb539d6ad39deb539dead39dead39d6ad39dead39d6ad39dead39dead31deb539dead39deb539dead39deb539e7b5399c7b39212129292129212129 +2121292121293129312929292929292121212121292121292921316b5a31c69c4ab5944ac69c42c69442c69c4ac69c42c69c42bd9c42c69c42c69c42c69c4abd +9c42c69c42c69c42c69c42bd9442c69c42bd9442c69c42bd9442c69c42bd9442bd9442bd9442bd944abd9442bd9442b59442bd944abd9442bd9442b58c42bd94 +4ab594420000847352947b5a947b5284735a736b526b5a524a39393129312921292929313931314a423973634273634252423942393921212129292931293139 +39394a3939524a394a42313129312121293129314231315242396352318c6b39846b39b59439635231b59442846b39bd9c399c7b316b5a31bd94395242315a52 +398c7b4a525a525a6b63738c737b9c8473947b635a524a424a5a525273847384ad9c7bad9484ad947bad9484ad9c7bad9484b59c7ba594636b6b393139312939 +2118313129393931314a4a526b8c847bad9c84ad9484ad948cad8494ad84738c7b849c7bb5b573c6c673cec66bdece73d6c66b635a4a73634aefce4aefce39d6 +bd5a3931314a4239d6bd5affde5af7d652f7d65aefce5af7d65aefce5af7ce52e7bd4a5a4a39312931cead52efce5af7d663a58c52292129212129947b4ae7bd +63efc65aefc65aefc65ae7bd4aefc64ae7bd4ae7c64ae7bd42e7bd4ae7bd4aefc64ae7bd42e7bd4ae7bd4ab5944a312929212129423931cead4ae7bd4aad8c42 +2929292121292921296b5a39cea539deb539dead39deb539deb539deb539dead31deb531dead31e7b539dead31e7b531deb531e7b531dead31e7b531dead31e7 +b531dead31e7b531dead31deb539dead31dead39d6ad39dead39d6a539d6ad39cea539d6a542cea539d6a5425a4a312121292121212121291818214a42396b5a +39312929212121212129181821212129292929a58431ce9c39ce9c39ce9c31d6a539ce9c31d6a539ce9c31d6a531ce9c31ce9c39ce9c31ce9c39c69c31ce9c39 +c69c39c69c42bd9439c69c42bd9439bd9442bd9442bd944ab59442bd944ab58c42b5944ab58c42b5944ab58c42b5944ab58c4ab59452ad8c4aad8c520000947b +5a8c73529c845a847352736352736b52635a524239393931395a4a426352428c734a6b5a42735a424239392921292929294239395a5242423931312931393131 +4239393129313131313129314a42394a42313931315a4a31524a39947b396b5a39c6a5397b6342deb5398c7339a58439deb539524a31b59442deb5314239294a +3929cea5397363394239394a42398473526b6b52636b637b947b84a59473a59484b59c8cbd9c8cbda584b59c84ad9c636b63524a4a4239394239394a3942524a +4a6b7b7384b59c84b59c8cbd9c84b59c84bda584b59c8cbda584bd9c84b5a584b59c84b5a584b59c94bda584ad8c8cad9494ad8c9c9c73847b63524a4a63524a +bda56bcebd6bd6c673dec66befd673efd66bf7d663f7d65ad6b552312929635239efc652f7ce52efc652736342211821393131b59c5aefc66be7c65aefc652ef +c652efc65ae7c652efc652e7c652e7c652e7bd4ae7bd52e7bd4ae7bd4ae7bd4ae7bd4a846b392921292121296b5a42deb542e7b54a7b6b392921292121293931 +318c6b31deb542deb542e7b539e7b539e7bd42e7b539e7b539deb539e7bd42deb539e7b542deb539e7b531dead31dead39dead31deb539dead31dead39d6ad31 +dead39d6ad39dead39d6ad31dead39d6ad31dead39d6ad39dead39d6ad39deb539c69c39393131212129292129212121212129947b39a5844221212929212921 +2129212129212129524231c69439bd944abd9442c69c4ac69c42c69c42c69c42cea542c69c39c69c42c69c39ce9c42c69c39c69c39c69c39ce9c39c69c39c69c +42c69c39ce9c39c69c39c69c39c69439ce9c39c69431c69c39bd9439c69439bd9439c69439bd9439bd9442bd8c42bd9442bd8c3900009c7b52a58c52ad8c4aad +8c526b634a7b6b526b5a526b5a525a4a398c734a7b6b42735a42736342313131292129292129312931423939635239736342634a313931312121292929312921 +294239313931315a4a395a4a316352395a4a314239315242316b5a31735a31d6ad31735a31deb539b594315a4a39deb531c6a5313129299c7b39f7c6318c7331 +393131735a39e7b529ad8c313931299c7b31524a399c8c4a7b7b5a6373637b94739cb58c84ad8c73847b635a635a52525a4a4a635a52635a5a7b948484b59c8c +bd9c8cbd9c8cbd9c84b5948cbd9c84b59c8cbd9c84b5948cbd9c84b5948cbd9c84b59484bd9c7bad946b8c8452525a4a424a4a42424a424242394242394a4239 +425a5252635a5a736b63847b639c94738c8463524a4a847b63d6c673dec663d6bd6b5a5239292129524231d6ad5ae7c65aefc65aefc64aefc652e7bd4aefc64a +e7bd4ae7bd4ae7bd4ae7c652e7bd4ae7bd52debd4ae7bd4ad6ad42524a392121292929319c7b39e7bd4acead4a524a39211821292929423131ad8c42dead42de +b542dead31deb539dead31deb539dead31deb539dead31deb539dead31deb539dead29e7b531dead31e7b539dead31deb531dead31deb531dead31dead39dead +31deb539d6ad39dead39d6a539d6ad42cea539d6a539d6a539846b39211821212129212121212129312929b59442635231212129211821212129212121292931 +735a29d6a539c69c39cea539ce9c31cea539ce9c39cea539c69c39ce9c39c69c39c69c42c69439c69c42bd9442c69c42bd9442bd9442b5944abd944ab59442bd +944ab5944ab5944ab58c4ab5944ab59442bd944ab58c4ab5944ab58c4ab5944aad8c4ab5944ab58c4ab5944a0000ad8c52a58452a58c52ad8c4a846b4a73634a +84735a6b5a527b6b52635242947b4a4a42393131312921292929313129316352426352393931314a42317b6b425a4a3939313929292931293142393152423942 +393173634a524a39ad8c425242318c73393129315242394a3931423939bd9431735a31846b31ffce298c7329393131cea531efbd29635a29423939a58431f7ce +29b594296352319c7b297b6b39f7bd29c69c212921299c7b31e7bd29736b397b7352bda552847352635a5a736b637b7b6b738c8494c6a594c6a58cc6a58cc69c +94c6a58cc69c94c6a58cbd9c8cc69c8cbd9c8cbd9c8cbd9c8cbd9c84b59c84ad946b7b735a525252424a524a4a4a424242394231293139313942393942394242 +3939423942423942524a4a6b6b637b948c7ba5948cb59c8cb5948cad8c7b947b8ca57bb5bd84c6c684cebd73d6c66bdec663e7c663e7c65ae7c65ae7bd4aefbd +4ae7b54ae7bd4ae7b54ae7bd4ae7bd4abd9c4a393131292129393131c6a54ae7b542bd9c4a3931312121293129295a4a39c6a542deb539dead31e7b539deb539 +e7b539deb539e7bd39e7b539e7b539deb531e7b539deb531e7b542dead39deb539dead31dead39d6ad31dead39d6ad39d6ad39d6a531dead39d6a531d6ad39d6 +ad31dead39d6ad39dead39dead39dead42524a31212129212129292129211829635239bd9442393131212121212129212121212129312931a58439bd9442c69c +42c69c39ce9c42c69c39cea539ce9c39cea539ce9c31cea539ce9c31d6a531ce9c31d6a539ce9c31cea531ce9c31ce9c39c69c31ce9c39c69439ce9c39c69439 +c69c42bd9439c69442bd9442bd9442b59442bd944ab58c4ab5944ab58c4ab5944ab58c4a00009c8452a58452a5844aad8c4a947b4a6b6352846b526352526352 +4a5242393129292929292121292929294239314a39394a4231846b427363394a42313129294231315242313931314a42313931314239314239395a5239736342 +5a52395a4a39a584427b6b39c6a5314a39316b52394a39311818295a4a39a584294239295a4a31f7c631cea521423931524231d6ad31e7bd21736329846b317b +6331ad8c31efc631ad8c29423931c69c29dead21524231c69c31f7c621b594313129319c7b39d6b539c6ad4a73735273846b9cb57b94b58c8cb59494c69c84bd +948cbd9c8cbd9c8cc69c8cbd9c8cc69c8cbd9c8cbd9c7ba58c6b7b735a52525a4a4a52424252424a4239394231394a394252424a4a4242524a4a4a4242524a4a +5a5a5a73847b739c8c84ad947bad9484b59c84b59c8cbd9c84bd9c84b59c7bad9484b59c84b59c8cb59c94b5949cb5949cb58cadbd84b5bd7bc6bd7bc6bd73d6 +bd6bd6b55adebd5a947b42312931211829635231d6ad42e7b5428c6b392121292118213931317b6331deb542deb539e7b539dead31deb539deb539deb539dead +31dead31dead31deb539dead31dead31d6ad31dead39d6ad31dead31dead31deb539dead31dead31dead31deb539dead31dead39d6ad31dead39d6a539d6a539 +cea539d6ad42ad8c393129292118212121292118212121299473429c7b391818212121292121212121292121294a4231ce9c39ce9c42c69c39ce9c42c69c39ce +9c42c69c39ce9c42c69c39c69c42bd9442bd9c42bd9442bd9c4abd9442bd9c42bd9442c69c42bd9439c69c42bd9439c69c42bd9439c69442bd9439c69442bd94 +39bd9439bd9439bd9442bd9439bd9439bd9439bd9442bd8c39bd943900006b5a4a8c7352947b5a9c7b52a58452635a528473526b5a5263525242393929212929 +29293931313931316352427b6b425242394a39318473426b5a393931313129313131314a42395a4a396352394a42396352393931316b5a424a42399c844a524a +428c734ab594426b5a39e7bd427b63315242397b6339313131211829423939947b31735a292929316b5a39efbd31d6ad314a4231a584316b5a31deb539efbd29 +846b31524a31efbd31a58421635239e7b529f7c629947b29393131cea531f7c629dead214a3929947331efbd31c6a5315a52425a5a52adb584b5c694adc69c9c +c69c9cc69c94c69c9ccea58cbd9c84b59c73848473736b63635a635a525a5252524a4a4a4242524a4a524a4a5a52525a524a5a52525a5a526b736b73948c84b5 +9c84b59c8cbd9c8cbd9c8cbd9c8cbd9c8cc69c8cbd9c8cbd9c84bd9c8cbd9c84b59c84bd9c7bb59c84b59c7bb59c84b59c84b59c8cbd9c8cb59494bd9c94bd94 +94b58c84a5847b947b949c73c6bd73c6b56b847b5a4242423939394a4239ad8c42dead39e7b539e7ad31e7b531e7ad31e7b531e7b529e7b531e7b531e7b531de +b531e7b539dead31e7b539dead31e7b531dead31dead39d6ad39dead39d6ad31dead39d6a539d6ad39cea539d6ad39d6ad31d6ad39d6ad31deb539deb5398c73 +39212129292129212129212129423931c69c4a5a4a31212129212121212129212121292931846b31d6a542c69c39cea539ce9c39d6a539d6a539d6a539cea539 +d6a539ce9c39cea539ce9c31d6a539ce9c31cea539c69c31ce9c39c69c39c69c39c69c39c69c42bd9442c69c42bd9442bd9c4abd9442bd944ab5944abd9452b5 +944ab59452b5944abd944ab5944ab5944ab5944a0000212129735a429c844a9c84529c7b526b635a84734a7b6b5263524a63524a423931393131735a42635242 +4231317363427b6b424a42393129294a42395a4a39423931312929393131524231524a31846b316b5a39947b394a39313931316352315a4a39b59c525a4a3984 +6b4ab5944a5a4a31ad8c39e7bd395242294239317b6339393139181829292131423931ad8c397b63295a4a317b6b31947331efbd29deb5294a3929947339e7bd +296b5a31947331efc629deb5295a4a315a4a31e7b531efbd21ad8c29423931cea531efbd21d6ad31423129524239e7c663f7d66befce63efce6bc6b5636b6b52 +636b5a9cad849cbd94849c84737b73737b736b6b6b6b6b6b635a5a635a52635a5263635a635a52635a52635a5263635a6b7b737b9c9484b5948cbd9c84bd948c +bd9c8cbd9c8cc69c8cbd948cbd9c8cbd9c8cbd9c8cbd948cbd9c84bd9c8cbd9c84b5948cbd9c84b59c8cbd9c84b59484bd9c84b59c84bd9c84bd9c8cc6a58cc6 +9c8cbda57bb59c84b59c8cb5948cb59484a58c84a5849cad7badb57bb5ad6bbdb563c6b55ad6b552d6b542deb542deb539e7b539deb531e7b531dead31e7b531 +dead29dead31dead31dead39d6ad29dead31dead31deb539d6ad39dead39d6ad39dead39d6ad39dead42cea539d6a542cea539c69c4242393121212921212121 +2129181821735a42b59442313129181821212129181821212129393131bd9431c69c42c69c42c69c42c69c42c69c39c69c42c69c39c69c42bd9c42c69c42c69c +42c69c42c69c39c69c42c69c39ce9c39c69c31ce9c39c69c39ce9c39c69431ce9c31c69c31ce9c31c69429c69c31c69431c69c39c69431c69439bd9439c69439 +bd9439bd9442bd9439bd94420000212129736342b59452b58c42b5944a635a527b6b5284734a6b6352635a526b634a5242396352428c73425a52394239317b63 +425a4a393931313129314239314a4239524a394a39314239394a4231735a397b6b39947b39524231a584423129315242395242314a4239c6a54a7b6b42524239 +ad945aa584423931319c7b42efc6427b63312121294239316352423129312929318c6b315242317b6331e7bd319c7b29423931cea539c69c31524231cea531ef +bd29bd9c313129319c8439e7bd31efbd296b5a29735a31e7bd29f7c629b594293129318c7339f7ce63efce6befce6befce5acead523929317b634ae7c663e7ce +737b73524a4a425a5a4a9c9463948c5a8484637b73637b7b73737b737373736b6b6b73736b73736b738c847ba5948cbd9c8cbd9c8cc69c8cbd9c94c69c8cc69c +94c69c8cbd9c94c69c8cbd9c8cc69c8cbd9c8cc69c8cbd9c8cbd9c8cbd9c8cc69c8cbd9c8cbd9c8cbd9c8cc69c8cbd9c8cbd9c84bd9c8cc69c8cbd9c8cbd9c84 +bd9c8cbda58cbd9c8cbda584bd9c84bda57bb59c84b59c7bad9484ad947ba58c849c8c848c7b8c8c6b8c845a9c8c5aad9452bda55ac6a54acead4ad6ad42deb5 +42deb542e7b539deb539e7b539dead31dead39d6ad39dead39d6a539d6ad39d6a539dead39d6ad31deb542a58439312931212129292129212121312931a58c4a +8c73422121212121292121292121292921295a4a31cea539cea542cea539d6a542d6a539d6ad39d6a531d6ad39d6a531d6a539cea531d6a539ce9c39cea539c6 +9c39ce9c42c69c42c69c42c69c39c69c4abd944abd9c4abd944ac69c4abd9442c69c42bd9442c69c42bd9442c69c42bd9439c69c42bd9439c69442bd9439c69c +42bd943900002118216b5a4a94734a9c7b4aa58c426b6352736b52a58c4a6b5a4a6b5a525a52426b5a42312929735a428473424239312929295242395a4a3131 +31313129314a39395a4a39524a39634a315a4a31393131846b394a3931b594397b6b318c7342b594393931314a4239635239393129947b4ac6a552524a393931 +31b59452bd9c4a524a31212129a58442dead396b52314231318c73392929313931394a39312929316b5a31e7b5397b63294a3931d6ad31f7c6317b6329393131 +cea539efbd31c69c29423931a58431efbd29e7b5297b6329312931bd9c39e7bd31efce63e7c663efd66b94844a393131bd9c5aefce6befce6b8c7b522118216b +5a42e7bd5aefce6bdebd63d6b55ac6ad5abdad63ad9c5a9c946384846b7b847b73847b84a5948cbd9c94cea58cc69c94cea58cc69c94c69c8cc69c94c69c8cc6 +9c94c69c8cc69c8cc69c8cbd9c8cbd9c8cbd9c8cc69c8cbd9c8cbd9c8cbd9c8cc69c8cbd9c8cbd9c8cbd9c8cbd9c84bd948cbd9c8cbd9c8cbd9c84bd9c8cbd9c +84bd9c8cbd9c84b59484b59c84b59484b59c7ba594739c946b84846b73735a5a5a5252524a424a4a4a4a4a4242524a4a5a52526b635a736b52847b52948452a5 +8c52ad944abda54ac6a54ad6ad4ad6ad42d6ad42d6ad42deb542d6ad39dead39d6a5396352311818212121292121212121294a3931c69c4a5242312121292121 +212121292121213129318c7329cea542bd9442c69c42c69c39c69c42c69c39ce9c39c69c39ce9c42c69c39cea539c69c39ce9c39ce9c31d6a531ce9c29d6a531 +ce9c31ce9c31c69c31ce9c31c69c31ce9c39c69431c69c31c69439c69c42bd9439c69c42bd9439bd944ab59442bd944ab5944abd944ab58c4abd944a00002921 +295a4a426b5a5263524a6b5a4a5a524a6b635a947b4a7363525a524a63524a73634a5a5239423931524a394a42394239394231314a39395242394a4239393131 +4a42396352398473396352319c7b42292131635239947b31735a39deb5398c7339846b39cea5423131313129315242397363392929298c734ac6a5527b6b4a21 +1829524a39c69c4ad6ad426352317363395a4a399c8442a58439393139212129b58c39d6ad294239312921316b5a39846b313931316b5a31efbd39efbd29947b +294a3931dead31efbd29d6ad314239295a4a39dead31e7bd31e7bd4aefce73dec6635a52395a4a42e7ce7be7ce73e7c6736b5a42312931a58c5aefce7be7ce73 +efce6befce73efce6be7c65aefce63e7bd636b5a42393139736b5aa59c63949c738ca58494bd9494bd9494c69c8cc69c94c6a58cc69c94c69c8cc69c94cea594 +c69c94cea58cc69c94c6a58cc69c94c69c8cc69c94c69c8cc69c94c69c8cbd9c94c69c8cc69c94c69c8cbd9c8cc69c8cbd9c8cc69c8cbd9c8cc69c8cbd9c8cbd +9c84bd9c8cbd9c84b59484ad94739c8c738c846b6b6b635a5a524a4a524a4a4a424242394239313942394242393942394239313942394242394242424a424242 +524a4a524a4a5a524a635a4a7b6b528c7b5a9c8c5aad945ab59c5a524a423931392929292929312121298c734aa5844a29292918182121212918182129292942 +3931c69c39d6a539dead39d6a531dead31d6a531dead39d6a539d6a539cea539d6a539ce9c39cea539ce9c39cea542c69c42ce9c42c69c42c69c42c69c42c69c +42c69c39ce9c42c69c39ce9c39c69c39ce9c39c69c31ce9c39c69431ce9c39c69431c69c39c69431c69c39c69439c69442bd94390000211821524a426b5a4a63 +5a4a63524a635a526363636b5a52735a4a6b5a5263524a5a524a4239312929293931315a52393931312929314231316352396352394a42394a39316352396b5a +39b59439524231846b395a4a312921319c8439ad8c39635239deb542b594315a4a39b594427b63391010212121316b5a39ad944a4239292929318c7b4ab59c5a +8c7342423931735a31735a39e7b531e7bd395a4a31524a31e7b531947b293931316b5a39393131212131292929b59439e7b529dead294a42295a4a39e7b529f7 +c6299c7b292921318c7331e7b531dead29e7b531e7c652b59c5a3129319c8c63efce7befce7bc6ad6b393131423931d6b56befce73efce73e7c663e7c66be7c6 +63e7c66be7c66bcead5a393129423931c6a55aefc663bd9c5a5242423931314a4a428c8c63c6c68cb5c694adc69c9cc69c9cc6a58cbd9c8cc69c8cc69c94c6a5 +8cc69c94c69c8cc69c94c69c8cc69c94c69c8cc69c94c69c8cc69c8cc69c8cc69c94c69c8cbd9c8cc69c8cbd9c8cc69c8cbd948cbd9c8cbd9c8cbd9c84b59484 +b59c7ba59473948c6b7b7b6b6b6b5a5a525a5252524a4a524a4a4a42424a42424239424239424239394239393931393931393129313129312121292921292121 +292929313129313931393931394239424239425a524a5a524a5a5252524a4a524a4a736b526b634a4239393931393129313129312929316b5a39cea542c69c4a +ce9c42cea542cea539d6a539cea531d6a539cea531d6a539d6a531d6a531d6a529d6a531ce9c31d6a531ce9c31d6a531ce9c31cea531ce9c31ce9c39c69c39c6 +9c39c69c39c69c42bd9442bd9c4abd944abd9c4abd9442bd9442bd9442bd9c42bd9442c69442bd9439bd944200002929315242426b5a52635a4a736352524a42 +524a4a635a4a7363526b5a52635a4a5a524a63524a4239313129313931315a4a424a39393931314a4231524a397b63397363394239317b6b425a5231846b39bd +9c39635239947b42524239312931bd9c39deb531635239b59439ffce399473313931317b6339524a39292129212129423931cead52cead52524a39524a39524a +42a5844adeb54ab594394239319c8442d6ad394a4229ad8c39efbd319c8439212129635239dead39e7bd31a58429312931423939947b39ad84314a4231393131 +c69c39dead31e7b531dead31e7b5397363314a4242d6bd73efce7be7ce7394845a2921297b634ae7c663efce73e7ce73efce7be7c66be7c663e7c663efce6b94 +7b4a292131846b42efc65ae7c663d6bd6b524239212129393131b59c5ae7bd63e7bd5adebd63dec673cebd73c6c684bdc68cb5ce9ca5c69c9ccea594c6a594c6 +a58cc69c94cea58cc69c94cea594cea594cea58cc69c94cea58cc69c94c6a58cc69c94c69c8cc69c94c69c8cc69c94c69c8cbd9c8cbd9c84b59c7bad9473948c +73847b6b6b6363635a5a52525a4a4a524a4a524a4a4a4242524a4a4a42424a42424239424a394239313942393939313131293129212931293139313939313939 +31313931393931313931393931313931394239394239424242424a4242423942524a4a4a4242524a4a524a4a5a4a4a5a524a7363527b6b528c7b52948452a58c +52ad9452b59c52bd9c4ac6a54acea542cea542cea539d6a539d6a531d6a539ce9c31d6a539cea531d6a531ce9c31d6a539ce9c31d6a531ce9c31cea531ce9c31 +ce9c39c69c31ce9c39c69c31c69c39c69439c69c42c69439c69c42bd9442bd9c4abd944a000052424263524a6b5a4a7b6b527363525a524a5a52526b6b5a7363 +526b5a5263524a63524a524a423931312921293939315242396b5a424a42313931317b63396b5a397b6339a58442292129524a39b594395a5239ad8c39d6b539 +524a316352395a4a315242318c7339ffce31bd9c29393131947b39f7c642ad8c312121292921293931396352396352314239316b5a426b5a39bd9c52ad94525a +4a42393129cea54a846b315a4a39d6ad39deb542a58431292129947331deb539d6ad315a4a31292131393139292931312931181829735a39d6a531d6ad39d6ad +31deb531bd943139312973634ae7c673e7ce7bdec67b524a39312931ad9452efce73e7c66be7ce6be7ce73e7ce73e7c66be7c66bd6b55a524a39292929bd9c5a +e7c663e7bd5abd9c5a4239392121296b5a42cead5adeb55adebd63debd63deb552deb55adeb55adeb552d6ad52d6b55aceb563cebd6bbdbd7badc68ca5bd949c +c69c94bd9c9ccea594cea594cea58cc69c94cea58cc69c94ce9c8cc69c94c69c8cc69c94c69c8cbd9c8cc69c8cbd9c8cb59c7ba59473948c6b7b736b6b6b635a +52635a525a524a5a5252524a4a524a4a4a4242524a4a4a42424a4242423939423942393139312931292129312931393131423939393139423939423939423939 +4239394239393931394239393931394239393931393931393931314231393931394239394239394a42424239424a4242424242524a52524a4a5a52525a5a526b +635a6b6b5a7b7b63847b63948c639c8c5aa5945aad9452bd9c52bd9c4ac6a54ac69c42c6a54ac69c39cea542c69c42cea542c69c39ce9c39c69c39ce9c39c694 +39c69c39c69439c69c39c69431c69c39c69431c69c39bd9431c694390000735a526b5a4a947b52a58c4aad945284734a4a424252524a7b6352736352635a4a5a +524a63524a4239393931312929294239314a39396b5a425242313129317b6339947b424a39319c84425a4a31312931a58442d6ad395a4a31a58442dead394239 +312121317b6339b59431524229635239deb542d6ad396b5a312121298c7342a584424239311818297363393931318c7342deb54aa5844a2929296b5a4a8c734a +423939947342d6a54ac69c425a4a394a3931cea542d6ad39a58439313131947342ad84395a4a39292129312931a58439dead39d6ad31dead31dead31846b3129 +2131947b4ae7c663efd67bb59c633129315a4a39debd6be7ce73efce73e7c66befce6be7c66be7ce73e7ce6bad94522921296b5a42debd63e7c663e7bd638c7b +52212129312931947b52debd6bdeb563debd5adeb55adebd6bdebd63e7bd63deb55adeb55adeb54ae7b552deb552e7b552dead4ad6b55a6b634a4a524a5a635a +738c7384a58494b59494c69c9ccea594cea594cea58cc69c94cea58cc69c94c69c8cc69c94c6a58cbd9c84ad9c73948c73847b6b6b636b635a635a52635a525a +52525a52525a524a5a5252524a4a524a4a4a424252424a4a42424239393129313129313931314239424239394239424239394239424239394239424239394239 +424239394239424239394a39424239394a42424239424239424239394242424239424a4242424242524a4a524a4a5252525252525a5a525a5252635a5a5a5a5a +636363636363636b6b636b6b6b736b6b736b737b73737b6b84847384846b8c8c6b948c639c9463a5945aad945aad9452bd9c52bd9c4ac69c4abd9c4ac69c4ac6 +9c4ac69c4abd9442c69c4abd9442bd9c4abd94420000c6a55abd9c5ab5944abd9c4ac69c42c69c4a737b63738c847b73527b6b52635a4a5a524a5a4a4a5a4a4a +4239314239313129315a4a42423931635242524a39312931423931947b4a7b6b395242395a4a395a4a31524231947342d6a542846b395a4a399c844252423921 +2129292129ad8442cea542846b39181829635239c69c42cea54a5a4a31524231524231292131393131735a393931294a3939a58c5a5a4a424a39398c7b5a8c7b +52736342212129846b42c69c42c69c42524231635239cea542dead428c73312121295a4a31d6a539d6a531dead31dead31cea531423129312931524a39bd9c5a +c6ad635a524229212994845ae7bd63e7c66be7c66befce7bdebd63e7c663e7c66be7c66b6b5a42292129a58c52efc66bdebd63d6b56b524a39212129423931c6 +a563debd63deb55adeb552debd63deb55adebd63deb55adeb55ad6ad4adeb552deb552deb552deb54ae7bd52b5944a3929291818213129299c7b39b5944a6b5a +4a52524a5a635a6b846b7b947b94bd948cbd948cc6a58cc69c8cc6a58cc69c8cc69c84b59c7ba594738484737b736b6b636b6b6363635a635a5a635a52635a52 +5a524a5a524a524a4a5a524a524a424a42424231393931313129314239394239424a42424239394a42424239394a42424239394a42424239424a42424239394a +42424239394a42424239394242424239394a42424239394a42424242424a42424a4242524a4a52524a5a5a525a5a5263635a63635a63636363635a6363636363 +5a636b63636363636b63636363636b6b5a6363636b63636363636b6b636b636b6b6b636b6b6b736b6b736b7b7b6b7b7b6384846b8c8463948c63948c5a9c8c5a +a58c52ad9452ad9452b594520000d6bd63cead5abd9c52b5944aad8c52ad8c4a8c8c6b63737394845a9c7b4a7b6b526b63526b5a525a524a5a4a42524a393931 +314239317b6b4a6352394a39394239315a4a395a4a39524242a584528c734a2921314239399c7b427b6b42524239b5944acea54a6352392121293931395a4a39 +7b63422929294a3939ad8c4acea54a947b394239315a4a39524a39947b425a4a391818292921298c734a947b5231293173634aad945a8c7b5a3129313129318c +7352b594528c7342393131a57b42cea54ac69c427b63392921299c7b42d6ad39d6ad39d6ad31e7b5398c73312921313129313931393931314231392121294a42 +39cead6be7ce73e7c663e7c66be7c673e7c673e7c66befce63bda55a393131524239debd63e7bd5ae7c66bad9452312931292129846b4adebd63e7bd63debd63 +debd63d6b55adebd63debd5adebd5adeb55adeb55adeb54adebd52deb552e7bd52deb5528473422921292921316b5a39deb54ae7b54a9c844a29212921182129 +2129635239c6a54aceb552bdb563b5bd73a5bd849cbd948cbd9c84b5a5739c9473948c73847b73847b737b7373736b6b6b637373636b635a6b635a635a52635a +525a524a5a524a4a42424239423929314239424a4242524a4a52424a524a4a4a4242524a4a524242524a4a4a4242524a4a4a42424a424a4a42424a42424a4242 +4a42424242424a42424a42424a42424a4242524a4a4a4a4a52524a525252635a5a5a5a5a6363636363636b6b6b636b636b6b6b636b636b736b6b6b6b6b736b63 +6b636b736b6b6b6b6b6b6b636b636b6b6b636b636b6b63636b636b6b6b636b63636b63636363636b6b636363636b6b6363636b6b6b636b6b6b736b6b6b637373 +6b737363000084735a947b63a58c52bd9c4abd9c42bd9c42846b4a4a4a4a635a42ad8c4a7b6b526b63526b5a4a736352635a4a6352426b5a423931314a393163 +524294734a635239211829524239a584527363424a39399c7b4a736339292129393131b5944ac69c42736339312929947b429c84424239311818212921317b63 +39d6a54aad8c42423931524231524239ad8442d6a54a9c7b42212129635239ad8c524a39312121294231317b6342524a392921296b5a4a94845a8c7352423931 +524a39b59452bd944aad8c423129294a4231c69c39d6a539cea531dead39c69c314239313129317363425a4a393129312921292921297b6b4ae7c673e7c66bef +ce6be7c663e7c663e7c66be7c66be7c6637b6b42212129948452e7c663e7bd63deb55a736342211829393131ad9452e7bd63debd63debd63deb563deb563d6b5 +52debd5adeb55adeb55ad6b552deb552deb54adeb552deb54acead524a4231292131292129a58442deb542deb54a7b63392921292121293129318c7339e7b542 +e7b531e7b539dead31dead39cead42cead52b5ad5aadad6b949c73848c7b73847373847b6b7b73737b736b736b73736b6b6b63736b636b635a6b635a635a525a +52524a3939423939524a425a5252524a4a5a524a524a4a524a4a524a4a524a4a524242524a4a524242524a4a4a4242524a4a4a4242524a4a4a42424a424a4a42 +424a42424a42424a4a4a4a424252524a5a5252635a5a63635a636b63636b636b736b636b6b6b736b6b736b6b737363736b6b73736b736b6b736b636b6b6b736b +636b6b6b736b636b636b736b636b6b6b736b636b63636b63636b63636b63636363636b636363636363635a5a5a6363635a635a6363635a635a63636300007363 +527363529c8452ad8c4abd9c42bd9c429c9463738c84738c7bad944a94845284735a7b6b5a6b5a4a7363526b5a4a5a4a394a42395a4a42846b425242395a4a39 +8c734a3931314a4239635239ad8c52b5944a6352394239314a4239846b4273633931293194734acea54abd944a4239312921313129315242398c73395a4a314a +39315242398c7342cea54ac69c426b5a39393131ad8c527363393931316352394a39392121292118294a4239b59452bd94527b63423129318473528c735a947b +5a5a52392921298c7342d6a542cea539d6ad42d6ad398c6b392921299c8442e7b539cea5424a4231292131393131c6ad73e7ce73e7c66be7ce73efce73e7c663 +efce6befce73ceb56b393131313131bd9c5aefce6be7bd63c6a55a3939312921295a5239d6b563debd63e7bd63debd63debd6bdeb55ae7bd5adeb55adebd5ade +b55adebd5adeb54ae7bd52deb552debd529c8442312931292129524a39cea54adeb54ac6a54a4a4239212129292931423931c69c39deb539e7b539e7b531e7b5 +39e7b539e7b539e7b531e7b539dead31deb542cead42c6a552ad9c5aa59c6b94946b8c8c737b7b73737b7b6b7373737b7373736b73736b6b6b63635a5a524242 +6b635a6b635a6b635a6b635a6b635a635a52635a525a524a5a52525a524a5a52525a4a4a5a5252524a4a524a4a524a4a524a4a524a4a524a4a524a4a5a525252 +4a4a5a52525a525263635a6363636b736b6b736b737b7b6b7b736b847b6b7b7b73847b6b7b7b6b847b6b7b7373847b6b7b736b7b736b7b736b7b736b7b736b7b +736b73736b7b736b736b6b736b6b6b6b6b736b6b6b6b6b736b636b6b6b736b636b636b6b6b636b63636b63636363636b6363636300008473528c735aa58442bd +9442c69c39d6a531b5a5527b948c7b9c8cad9c5a94734273635273634a8c7b5a947b528c73529473426b5a4229213152423994734aad8c527363424231393931 +319c7b4a9c8442524a39735a42bd9c4a7b6339212129211829846b42cea54abd9c4a524a31292131735a39a58442524239212129393129524239735a39cea542 +ce9c428c7339292129947342a58442423131947342c6a5528c7342292129292929947b4abd944aad8c4a393131524239b59452b594527b6b4a29212931292994 +7b52b5944acea54acea542bd9442393129524239cea539dead39d6ad396352391818296b5a39debd63efce7be7c673e7ce73e7c66be7ce73e7c66befce738c73 +4a292129392931948452e7c65aefc66b846b4a292129292129a5845adebd6bdebd5adebd63debd63deb55adebd63deb552debd5ad6b55adeb552deb552deb552 +d6b54adeb552d6ad526352392121292921298c7339deb54adeb54a9c8442292129292129212129736331dead39e7b539deb539e7b539deb539e7b539dead31de +b539dead31e7b539deb539e7b539e7b539e7b539dead31dead42cea542c6a54ab59c52a59463948c6b848c737b7b73737b736b736b5a52525a5a5a7373736b73 +6b73736b6b6b63736b636b635a6b635a6363526b635a635a52635a5a5a52525a52525a524a5a5252524a4a5a524a524a4a5a524a524a4a5a52525a5252635a5a +6363636b736b6b7b7373847b6b847b6b8c846b8c84738c846b847b6b8c846b847b738c846b847b6b847b6b847b6b847b6b7b736b847b6b7b736b847b6b7b736b +7b736b73736b7b7363736b6b73736b736b6b736b636b6b6b736b636b6b6b736b636b636b6b63636b63636b630000a5844a9c7b4a9c7b4aa58442bd9c39b59439 +b59c4a63635a52525a9c8c52cead4aa58c529c84527b6b4a6b63526b6352736b52947b428c73424a42397b63425a4a396b5a42ad8c4a7b63422929314a423994 +7342cea54abd94425a4a392929314239396b5a42a584425a4a31292131736342cea54ad6a5427b6339312931524a393129317b6342d6a539b58c423129296b5a +42bd94425242397b6342cea54ac69c4a947b42212129735a42c69c4ac69c4a6b52393129314239398c734aa5844a5a4a392121296b634a84735284735a8c7352 +ad8c526b5a393129319c7b42d6ad42cea542bd9442393129312931ad8c39e7b539e7c66befd684e7ce7befce7befce7befd67bceb5634a393929212942393942 +39317b63397363423931312121295a4a42cead6be7c66bdebd63debd63debd63debd63debd5adebd63d6b55adeb55adeb552e7bd5adeb552deb552deb552b594 +4a312931292131423131c6a54adeb54ad6b5525a4a31292129212129312931ad8c39e7bd4ae7b539e7b539deb539e7b539e7b539e7b539e7b539e7bd42e7b539 +e7b539deb539e7b539deb531e7b539deb539e7b539e7b531e7b539dead31deb542cead42c6a54ab59c52ad9c638c845a7b6b5a8c84638c947b7b847b848c7b7b +847b7b847b7b7b737b7b7373736b73736b6b6b636b6b636b635a6b635a63635a6b635a635a52635a5a5a5a52635a525a5a5263635a63635a6b736b6b7b73738c +84738c8473948c73948c739c8c73948c739c8c73948c73948c73948473948c6b8c84738c846b8c84738c846b847b738c846b847b7384846b847b73847b6b7b73 +6b847b6b7b73737b7b6b7b736b7b736b73736b7b736b736b6b737363736b6b736b6b736b0000deb529deb531d6ad29deb529deb521e7b521c6ad315a524a4239 +427b6b4aad944a84734a73634a84735a94845a9c8c5a8c7b52bda5528c73423131395a4a42c69c42cea5429c84425242393931395a4a42bd944aa584394a3931 +4a3939a5844a9c7b42423139212129212131735a39c69c4acea5429c7b393931295242394a39315a4a393931395a4a393931294a4239b59442735a395a4a39c6 +9c4ac69c42bd9442423929423931b58c42cea54a9c7b39312931393131393139312931313131181821524239ad8c52b5945aa58452947b5a73634a2929314a39 +39ad8c52bd944ac6a54a736331212129635239d6ad42d6ad31deb542e7bd63e7ce84e7c673efce7befce7b947b52211821292931312931313139292131292131 +2121292929318c734adebd6bdebd6bdebd63deb55adebd63deb563e7bd63d6b55adeb55adeb552debd52deb552deb552deb54adeb5526b5a392921292121297b +6342deb54adeb54aad9442393131212121212129524a31d6ad42deb539e7b539e7b539e7bd42deb539e7b539deb539e7b539deb539deb539deb531e7b539deb5 +31e7b539dead39deb539dead39dead39dead31e7b539deb539e7b539deb531e7b539dead39dead42cea542d6a539d6ad42ceb5527b73525252525a5a52636b63 +6b736b737b73737b737b8473737b73737b736b736b73736b6b6b63736b636b635a6b6b636b635a6b6b636b6b636b736b6b7b73738c846b8c8473948c739c8c7b +9c94739c8c739c8c739c8c7ba594739c8c739c8c739c8c739c8c6b948473948c6b948473948c6b8c84738c846b8c84738c846b847b6b8c846b847b738c7b6b84 +7b6b847b6b7b736b847b6b7b736b7b736b7b736b7b7363736b6b73730000b59439a58c399c84429c8439ad9439ad8c39b59c42848c73738c847b8473debd52c6 +a552ad8c5a947b527b6b52635a426b5a5273634aad8c52ad94526b5a4aa584397b6b39635239ad8c42bd9c425a52423931313931316b5239bd944acea54aad8c +42312929212131423939a5844ad6a542a584423931314a4239524239b59442ce9c426b5a39181829393131b58c42947339393131b59442cea542cea5426b5a31 +2929319c7b42d6ad42bd94394a4231635239bd944a9473423931312121293129319c7b4ac69c52bd944abd9c52bd94526352393129317b6b527b6b5284735a8c +734a393131292929a58442d6ad42dead39d6ad39e7bd52e7c673efce7be7ce7bd6bd734a39313129317363428c73424a3931393139292129292129423931bda5 +63debd6bdebd6bdebd6bdebd63debd63e7c663debd5adebd63d6b552e7bd5adeb552e7bd52deb552e7bd52bd9c4a393131212129423939b5944adeb54adeb54a +7b6b422121292921292929299c7b42e7b542e7bd42e7b542e7bd42e7b539e7b539deb539e7b539e7b539e7bd42e7b539e7bd42deb539deb539dead39deb539de +b539e7b539e7b531e7b539dead39dead39dead31dead39dead39deb542deb542e7b542e7b539e7b539ce9c314239291818212121292121212929314239395a52 +525a5a526b6b636b6b6373736b737b6b737b736b736b737b736b736b737b7373736b737b73737b73738c8473948c7ba5947ba59484ad947bad9484ad9c7ba594 +84ad9c7ba5947ba5947ba5947ba59473a5947ba594739c8c739c94739c8c739c8c6b948c739c8c73948c73948c6b948473948c6b8c84738c846b8c84738c846b +8484738c846b847b73847b6b847b6b847b6b7b730000e7b529deb531d6ad31e7b531e7bd29efbd29debd3194a57373948c7b9484a59452947b4273634a736352 +7b6b5294845ab59c5abda55ae7c652b5a552312931423942a58c52e7bd4aefc639bd9c39393129212131524239cea54acea5429c7b42312929393131735a4263 +52425242396b5a393931294a3931524239b59442cea539d6a5426352313129319c7b42a584423931314a42429c7b42cea542947339292131735a31d6a542cea5 +39735a39423931c69c42d6a539cea5425242312118296b5a39c69c4abd9c42c69c4ac69c42947b422921295a4a42b59452ad9452947b52524239181821423939 +9c8452c69c4acea542d6ad42d6a539debd63e7ce84e7ce7b84734a2121297b634ae7c66befc663b5945a3931312921292121297b6b4adeb563debd63debd6bde +bd6bdeb563debd63debd5adebd63deb55adeb55ad6b552deb552deb552debd52deb54a7b6b422121292921296b5a39deb552deb54ac6a54a3931312921292121 +294a3931c69c39e7bd42e7b539e7b539deb539e7b539deb539e7bd39e7b539e7bd42e7b539e7b539deb531e7b539deb539e7b542deb539deb539dead31deb539 +d6ad31deb539deb539e7b539deb539deb542d6ad39d6ad39d6a531dead39deb539947b392118212121292118212121292929299c7b42634a3129212929212931 +29313131314a4a426b5a4a9484637b736b737b736b736b6b73736b737373847b6b8c84739c8c7ba59484ad9c84ad9484b59c84b59484b59c7bad9484b59c7bad +9484ad9c7bad947bad947ba5947ba59473a58c7ba594739c8c739c94739c8c739c8c739c8c739c8c6b948c739c8c6b948473948c6b8c847394846b8c84738c84 +6b8c7b6b8c846b847b6b8c840000bd9c39b59431ad8c39a58c39ad9439ad8c39ad8c42848c6b7b9c8c738c84a59c63c6a54ab59c5ac6a552bda552a58c4a9484 +527b73527b6b4a7b6b4a8c7b5a6b6352d6bd6bdec65a8c7b4242393173634a947b4a6b5a4a8c73427b6b392921294a4239a58442d6ad4ab59442393131212129 +4a4239524a39b59442d6a542d6a542846b39312931947339bd94424239315a4a425242425242425a4a39312931524231ce9c42d6ad399c7b39393131a5844ad6 +a539d6ad42bd9439393131423131bd944ace9c42cea542cea542c69c4a4a42313129315a4a42bd9c4acea5529c844a3129293129317b6b528c7b5a8c7b52a58c +5ab5944acea54ad6a542e7c673c6ad73423939393131cead73e7bd6be7bd6bc6a5634a3939212129393931bd9c63e7bd6bd6b56bdebd6bdebd6bdebd6bdeb55a +debd63deb55adebd63deb552debd52deb552e7bd5adebd52c6a54a423931292129312929ad944adeb54adeb5528c73422929312121292929317b6339e7b54ade +b539e7bd39e7b539e7bd42e7b539e7bd42e7b539e7bd39e7b531e7bd39e7bd39e7bd39e7b539e7bd39deb531e7b539deb531e7bd39e7b539e7b542deb539deb5 +42dead39deb539dead31e7b539e7b539e7b542deb542deb5425242312121292121292921291818296b5a39d6ad4a635239212129292129211821212129292129 +9c7b39deb54ad6ad4acea54abda55aa5945a9c8c6b8484737b8c7b73948c7ba59c7bad9c84b59c84b59c8cb59c84b59c8cbd9c84b59c8cb59c84b59c8cb59c84 +b59c84b59c84ad9484b59c7bad9484ad9c7bad947bad947ba5947bad947ba5947ba594739c8c7ba594739c8c739c8c739c8c739c8c73948c73948c6b8c847394 +8c6b8c840000c69c31b59442a5844ab5944acea539d6ad39deb531a59c5a525a5a52525a9c8c52e7bd4aad8c428c7b4a6b5a4263524a7363529c8c5aad945af7 +d673ffe77b7b73523129314239395a5242bda56bf7d66bffe76b84734a212131212129736342d6ad39efbd39e7b5399473393129294a423942393973634ad6ad +39dead398c7339292931846339c69c39524231846b42ce9c39ad8c42423939212131393129b59442dead39bd9431393129846b42d6a539d6ad39cea5396b5231 +212129947b42cea539cea542ce9c42d6ad427b6331292129393139423939635239846b42393131212129635239bd9c52b5944ab59452947b52947b5a9c8452b5 +9452c6a55a7b6b52211829847352debd73debd6bd6b56ba58c5a2929292121296b5a42debd6bd6b56bdebd63debd6bdebd6bdebd63debd63d6b55adebd63d6b5 +5adeb55adeb54ae7bd52deb552debd52846b42292129212121635239d6b552deb54acea54a524a39212129292129313129bd9442deb542e7bd42e7b539e7bd42 +e7b531e7b539deb531e7b539e7b539efbd39e7b539e7b539deb531e7b539deb531e7bd39e7b539e7bd42deb539deb539dead31deb539deb531e7bd42e7b539e7 +b54ad6ad42dead39d6ad39e7b531a58431292929212129292129211821292929a58442a584422921292121292121212121292121294a4231cea542cea542cea5 +31dead31dead29e7b531dead31deb531d6ad39c6ad4ab5a55aa5a56b9cad7b94ad8c84ad9484b59c7bad9c84b59c7bad9c84b59c84b59c84b59c84b59484b59c +84b59484b59c84ad9484b59c7bad9484b59c7bad947bad947ba5947bad947ba5947ba59473a58c7ba594739c8c739c8c739c8c739c8c6b948c739c8c0000efbd +21e7bd21efc629efbd29e7bd31deb531deb53194844a4239423931316352429c844a8c7b4a8c734a9c845aa58c5ab59463bda55abd9c5aad9c5a8c7b52393131 +393139736352f7de84ffef7bf7de7ba5945a3931312921315a4a4aceb563ffe75aefce4a8c7b424239315a4a395a524273634a5a4a428473427b633131293184 +6b39cea5395a4a31846b42d6a542dead42c69c394239312929299c8442d6ad39cea5395a4a315a4a42cea539dead39dead39947b39212129735a39d6a542d6ad +42cea542d6ad42b58c393131313931315a4a42423939393139292131212129393131b5944ac69c4ac6a54ac69c4ac69c52b59452ad945a9c845a846b4a292129 +423939bda563debd7bd6bd73cead6b5a4a39212129312931b59463debd6bdebd6bdebd6bdebd6bd6bd6bdebd6bdeb563debd63debd63debd63deb552debd5ade +b552e7bd52c6a54a4a3939212129292931524239cea54aefbd4aa5844a2921292921292121296b5a39deb542e7bd4ae7b542e7b542e7b539e7bd39e7b539efbd +42e7b542e7bd39e7b531e7b539e7b539e7bd42e7bd39e7bd42deb539e7b539deb539e7bd39e7b539e7bd42e7bd42e7b542dead39deb539dead39deb542deb539 +e7bd42e7b542635239211829292929212129212129524231d6ad526b5a39212129212129292129212129292131846b39e7bd4adead42e7b542dead39dead39d6 +a531d6ad31d6a531dead39dead29e7ad31dead29e7b539d6ad42cead4abdad52b5ad6ba5ad7b94ad8c8cad8c84b59c84ad9c84b59c7bad9c84b59c7bad9c84b5 +9c84b59c84b59c84b59c84b59c7bad9484b59c7bad9484b59c7bad9484ad9c7bad947bad947ba5947bad947ba5947ba594739c8c0000947b39947b4284733994 +7b42947b319c84399c843194844a5a5252636363636352deb54ad6b54ac6a552c6a54abd9c529c844a84734a635a4a5a52426b5a4aad9c639c8c637b6b5ac6ad +73bdad635a523931293173634ab59c6b7b6b5284735aa5945a6b63424239315a4a42847352dec652efc6428c734a2929312121318c7339d6ad39635231847342 +dead39deb539d6ad317b63312921298c7339dead39dead39735a293931396b5a42d6a539dead31bd94313929294a3931c69c39dead39d6a539d6ad42c69c395a +4a31393131ad8c42c69c42947b42393131292929212129846b42cea542cea542cea542cea54ac69c42c6a54ac69c4ac69c4a524a312921296b5a4aa58c5aa58c +5abda56b8c7b5a2921292121216b5a42cead63d6b56bd6b56bd6b56bceb563debd6bdebd6bdeb563d6b55adebd63deb563debd5ad6b552deb552deb5528c734a +2121292921293129313931396b52398c7339423931292129212121312931a58442e7b54adeb542e7b542e7b542e7bd42e7b539e7b539e7b539e7bd39deb539e7 +bd39e7b539e7bd39deb531e7b539deb531e7b539e7b539e7bd42e7b539e7b539dead39deb539deb539e7bd42deb539e7b539deb539deb539dead31bd94393129 +292921292121212121292121299c7b42ad8c42313129211821292129211821212129312929c6a54acea542cea539d6a531dead39dead31e7b539dead31deb539 +d6ad39dead31d6a531d6a539cea531d6a531d6a529dead31dead29dead31d6a539cead4abda552b5ad63a5a5739cad848cad8c84ad947bad9484b59c7bad9c84 +b59c7bad9484b59c7bad9484ad9c7bad9484b59c7bad947bad947bad9484ad947ba5947bad947ba5947bad940000bd9c4ab5944aad8c52b5944ad6ad39e7b531 +f7c629c6b54a6b736b73847b7b9484d6bd52debd429c8442846b4263524263524a6b5a528c7b639c845adebd63ffef84efd67b4a42423129312921295a4a42bd +a56bffe77bffef84c6b56b312931312931524a39635242a58c5af7d673ffde6bffde63846b42292931a58c4ae7c64a63523173634aefc639f7c631efbd299c7b +31212131846b39e7b539efbd319473293931395a4a4a5a52527b6342947b39423929312931a58439deb539d6ad39dead42dead39846b312921319c7b42dead42 +dead42c69c424a42392118295a4a39c69c42d6ad42d6a539d6ad42cea542cea54acea542d6ad4a947b392929294a4239b59c52ad946b8c7b6b73635242393121 +1821393131a59463d6b56bcead63debd73d6b56bd6b56bdebd6be7bd6bdebd6bdeb563deb563debd63debd5adeb552deb552cea55a4239312921292921293931 +39423139393139312931292931292129292129635231deb54adeb539e7bd42e7bd42efbd4ae7b542e7bd39e7b531efbd39e7bd42efbd42e7b539e7bd42deb539 +e7bd39e7bd39efbd42e7bd42e7b539deb539e7b539e7b539e7bd4ae7bd42e7bd4adeb539deb539dead31e7b539e7b539efbd4a735a3921212921212929212921 +1829524231cea54a846b421818212929292121292121292121297b6339e7bd4adeb542deb542e7b542dead39d6ad39d6a531dead39d6a531dead39dead31e7b5 +39dead31deb531d6a531d6ad39cea539d6a539cea539d6ad39d6a531dead39dea531dead31d6a531d6ad39c6a54abdad63ada56b9cad7b8ca5848cad9484ad94 +84b59c7bad9c84b59c84ad9c84b59c7bad9484b59c84ad9484b59c7bad9484ad9c7bad940000f7c608f7c621efbd29e7bd31d6ad39d6ad39d6ad29bda5426b6b +6373847b738c848c845a947b42846b4a846b4a947b5a94845aa58c63ad9452bda55abda55aad9c5a5a523929212939293184735aefd684ffe784ffe77bd6c673 +6b5a424a39395a4a395a4a42a59463ffe77bf7de73f7d67b84734a393939ad945adec66363523952424a7b6b52debd52f7ce42a58c392921297b6339e7bd31f7 +ce31ad8c29423939947b42bd9c427363424a424a292931212131846b39deb539dead31dead39dead39ad8c31312929735a42d6a539d6ad39d6ad42ad8c423129 +29312931ad8442d6ad42d6a539d6ad39d6a539d6ad42cea542d6ad42bd9c424a3931212129846b42c69c4ac6a55abda573736352211829212129423939ad8c5a +c6a563cead6bcead6bceb56bceb56bdebd6bd6b56bd6b56bd6b563deb563d6b55adeb55adeb552debd5a846b4229212921212929293139313139313939313131 +3131292129292129292929a58442deb542e7bd42e7b542e7bd39e7b539e7bd42e7b539e7bd42e7b539e7b539deb539e7bd39e7b539e7bd42e7b539e7b539deb5 +31e7b539e7b539e7bd42e7b542e7bd42deb539deb539dead39e7b542e7b539e7bd42deb542e7b542bd94393931312121212921292121212121298c7342c69c4a +393129212129212129212129212129312931bd944ad6ad4ace9c31d6ad39d6ad31deb539dead31e7b539dead31dead39d6a531d6a539cea531d6a531d6a531de +ad31dead29dead31dead31dead39d6a531d6a539cea539cea542c69c39cea539cea531d6a531d6a531d6a531d6a531d6a539c6a542bda55aada563a5a57394a5 +7b8cad8c84a59484ad9c7bad947bad9c7bad9484ad9c7bad9484ad940000ad8c319c84319c8431947b31947b398c6b39846b427b6b4273736b73847b73948c9c +9463deb54abd9c52bd9c5ac6a552bd9c52b59c52ad945a8c7b526b5a4a4a39395a4a428c7b5a7b6b5a947b63f7de8ce7ce7b9c8c634a4239524a426352426352 +4a63524abdad73ffe784e7ce7b6b6342423939c6ad6bd6bd6b6352428c7b639c8c637363527b6b527b6b4a292931736342efce4affde4ac6a5314a42399c844a +ffd64affce31cea5314a39392929316b5a39e7b539e7b531e7b539e7b539d6ad394a3929524242cea542e7b539dead39d6ad42524a312121317b6339dead42d6 +ad39d6ad42d6ad39dead42d6a539d6ad42d6ad42846b42212129313131947342d6ad4acea54abd9c634239392121293129317363526b5a4a8c7352ad9452c6a5 +63cead6bd6b56bcead63ceb573ceb56bd6b56bd6ad63d6b563deb55adebd5ac6a5524a3939212129312931947b4abd9c526b5a39393139292929292129212129 +524a39d6ad4ae7bd4adeb542e7bd42e7bd39efbd42e7bd39e7bd42e7b539e7bd39e7bd39efbd4ae7bd42e7bd42e7b539e7bd39e7bd39efbd42e7bd42e7bd42e7 +b539e7b539deb539efbd4ae7bd4ae7bd4adeb539e7b539deb539deb539e7bd42847342212129292129212129212129423131c6a54a9c7b422929292121292921 +292121292921315a4a31e7bd52deb542e7b542deb539deb542d6ad31dead31d6a531dead31dead31e7b531deb531deb539dead31dead39d6a539d6a539cea531 +d6ad39d6a531dead39dead31dead39d6ad39d6ad39cea539d6a542ce9c42cea542ce9c39cea542cea539d6a539d6a531dea531d6a531d6a539c69c39c6a552ad +a563a5a57394a57b8cad8c84a59484ad9c7bad940000b58c39947b528c7352a5844abd9c39cea539cea531cead42737363737b736b8c84949c73e7b539d6b54a +ad9452ad94528473426b5a42524a4273634a9c8452ad945ae7ce73ffef8cceb57b524a4a524a39524a424a423963524273634abda573d6c67b948463635a4a7b +6b524239315a524adec673bda563635242b5a56bf7de7bffde849c8463423942211829736b4aefce6bffe773c6ad5252423994845af7d65aefce4af7d64ab59c +42312931524231deb531efc621efbd21efbd18efbd296b5a31393139b59439efbd31e7b539e7bd39846b31212129524231cea542dead39dead39d6ad39dead39 +d6a531d6ad39d6ad39b594423131312929313931395a4a42a58442b5944a635239292129211829736352ad9463ad8c5a8c735284735a8c7b52a58452ad8c52c6 +a563cead6bd6b56bcead63cead63cead5ad6b55acead527b6b42212129292129635239d6ad52e7bd52bd9c52393131292129212129292931947b39e7b54adeb5 +39e7bd42e7b542e7bd42deb539e7b539deb539e7bd42e7b542e7bd42deb539e7b539e7b539efbd42e7b539e7b539deb531e7b539deb539e7bd42e7bd42e7bd4a +deb539deb539dead31e7b542e7b542e7bd4ae7b542cea5423931292121292121292921292118218c7342cea552524231181821292129212121292129292129ad +8c4adead42d6a539d6a531dead39dead39e7b542deb539e7b539dead39d6ad39d6a531d6a531d6a531dead31dead31dead31dead29dead31d6a531d6a539cea5 +39d6a539ce9c31d6a539d6a531d6ad31d6a529dead31d6a539d6a539ce9c39cea542c69c42cea542c69c42c69c42c69c39cea539ce9c31d6a529ce9c29ce9c31 +c69c39b59c52a59c639ca5730000e7bd31deb531e7bd31e7b521efbd29efbd21f7c621efc6317b7b635a52525a5a5a73735aad9442846b426352426352426b5a +52736b528c7b639c8c63b59c52ad9452d6bd73efd67b8c7b5a393131524a42635a426b634a9c8c6be7d68cffe78cffef94c6ad733931392121298c7b5aefd684 +9c8c636b5a4ad6bd7bffde84ffde84f7de848473522921297b7352efd67bffe78cceb5735a4a42948463f7de84f7d673ffde7bdebd6b524a39423931d6b552f7 +ce39f7ce42f7c631ffce29947b293129397b6b4aefc631efbd29f7c639bd9431393131312931b59442efbd39e7b539e7b531e7b539deb539deb539dead39dead +425a4a31212129312939423942393139423139392931292129212129524242b59c6bc6ad73c6ad73c6ad6bb59c63ad946b947b63736b527b6b4aad945abd9c5a +cead63c6a563d6b563cead5ab59c5a393131292129312931ad9452deb552deb55aad8c4a393131212129292129524231d6ad4ae7b542e7bd4ae7bd4ae7bd42de +b539e7bd42e7bd42e7bd4ae7b539e7bd42e7b539efbd39e7bd42efbd42e7b539e7bd39e7b539efbd42e7bd42e7bd4ae7b539e7b539deb539e7bd42e7b542efbd +4ae7b542deb539dead39e7b539846b42292129212129292929212129423931bd9c42a5844a2921292921292121292921292121295a4a39deb552deb54adeb542 +e7b542dead39dead39d6a531dead31dead31deb539dead39e7b542deb539e7b539dead31d6ad39cea531d6ad39d6ad31dead31d6ad31dead39dead31dead39d6 +a539d6a542cea539cea542cea539d6a542d6a539d6a531d6a531d6ad39d6a531d6a539ce9c39cea542c69c42c69c4abd9c42c6a54ac69c39cea539ce9c31cea5 +39ce9c310000f7c610f7c618efc610efc610deb518d6b521c6a521b59c39635a52393139423139524a4a7b6b42a58c4aa5844ab59452ad9452a58c5a9c8c5aa5 +8c5aad9452ad945a9c845a5a52424a4239635a4a63524a635a4ac6ad7bffe794ffe794ffe794c6b5735a52424a4239c6ad7bdec67b7b6b526b5a4ae7ce84f7de +8cffe78cefd6848c7b523129298c7b5aefd684ffe794c6b5735a4a42736352efd68cf7de8cf7de8cdec67b63524a312931bda563f7de73f7d66befce5af7d663 +b59c42393131524a42847352deb542ffd639deb5315a4a31212131947339e7bd31efbd31e7bd31efbd31e7b531e7bd31e7b531e7bd428c73312121294239317b +63426352394231393129312929312121212929298c734ad6b56bc6ad6bcead73ceb573c6ad73bda563c6a56bad94638c7b5a73635273634a846b4aa58c5abd9c +5acead636b5a39292129211829635242cea552d6ad5acea5526b5a42212129212129212129947b39e7b54ae7bd4adeb539e7b542deb542e7bd4adeb542e7b542 +deb542e7bd42e7b542e7bd42e7b539e7bd39deb539e7bd42e7bd42e7bd4adeb539e7b539deb539e7bd42e7bd42e7bd4adeb542e7b539dead31e7b542e7b54ae7 +bd4acea5424239312121292921292121212121297b6b39deb5525a4a312121292121292921292121212921319c7b42e7b552cea539d6ad31d6ad31e7b539e7b5 +39e7b542deb542deb542d6a531d6ad31d6a531d6ad39dead29e7b531deb529e7b531d6ad31d6ad39d6a531d6a539cea531d6a531d6a531dead39d6a531dead31 +d6a531d6a539cea539cea542c69c42cea542c69c39cea539cea531d6a531cea529d6a531ce9c31cea539c69c39c69c42c69c42c69c4abd9442c69c420000947b +31846b39846b397b63397b6b39846b398c7339947b396b63523929314a3942524242b59c52e7bd4ac6a552b59452bd9c52b59452b59c5aad945a94845a6b5a4a +4a42424a423973634a7b735a73635a73635adece94ffe794e7ce8c7b735239313984735aefd694b5a56b524a425242429c8c6bffe794ffef9cdece846b634a31 +2929a58c63f7de8cffef94c6ad73524a425a524a948463e7d694ffef9ce7d68c6b6352312931b59c73ffe79cf7e79cf7de8cffde84ceb5634239394239427363 +526b5a5284735a9c844a5a52392121316b5a39e7bd31f7ce31efc631f7c631efc629efc629efbd29f7c631c6a531393131393131c69c4ae7bd42deb5426b5a39 +3129312921292921295a4a39c6a552cead52d6bd7bceb573d6b573cead73cead73cead6bcead73c6a563bd9c639c845a7b6b52635a4a846b4a846b4231313121 +2129423931ad9452d6ad5acead5aad94523129292921292121294a4239cea54ae7bd4adeb542e7bd4ae7bd4ae7bd52deb542deb542deb542e7bd42e7b542e7bd +42e7b539e7bd42e7bd42efbd42e7b539e7bd42e7b539e7bd42e7bd4aefc64ae7b542e7b539deb539e7bd42e7bd4aefbd4ae7b54adeb542e7b5398c7339212129 +292929292129212129423131c69c4aad8c4a3129312121292929292121292921294a3931d6ad52deb542e7bd4ae7b542e7b542dead31dead31d6ad31dead39de +ad39e7b539e7b539e7b539dead39dead39d6a539dead31d6ad31dead31dead31e7b531dead31e7b531d6ad31d6ad39d6a539d6a539cea539d6ad39d6a539dead +39d6a531dead39d6a531d6a539cea539cea542c69c42c6a54ac69c42cea542ce9c39cea539cea531d6a531ce9c31cea539c69c420000ad8c398c73529c7b4ab5 +9442cea531d6ad31dead31e7b539948452525252636b63636b6b9c8c52f7ce4adebd4abd9c52b59452a58c527b6b4a5a52424239395a4a427b6b4a94845ac6a5 +5affde73dec67373635263524a736b5242393963524aceb57bdece847b73526b6352a5946b8c7b636b5a52a59473a5946b4a4239393131b5a573ffe794ffe79c +b5a56b5242397363528c7b63736352948463ad946b635a52312929a5946bf7e7a5f7e7adefdea5ffe7a5d6c684524a42524242b59c6bb59c6b7b6b5a5a524a42 +3942212129524239cead4af7ce42efce42f7ce42efc639f7ce39efc631f7ce31e7bd316352312118299c8442efc639efbd39e7bd429c84392921292121293931 +31b5944acea54ad6b56bd6bd7bd6bd73d6b56bd6b573cead6bd6b56bcead63cead63c6a563c6a563b59452a58452846b524239392121212921296b5a42c6a55a +c6a55ac6a55a5a4a39212129212121292129947b42e7b54adeb542e7bd4adeb54ae7b54adeb542e7bd42e7b54ae7bd4adeb539e7b542e7b542efbd42e7b542e7 +bd39e7b531e7bd39e7b539e7bd42e7b542e7b539deb539e7b542e7b542efbd4ae7b54adeb542dead39e7b539e7b542d6ad4a4239312121292121292921292118 +21846b42d6b5526352391818212929292121212121292121299c7b4ae7b552d6a539d6a531dead31dead31e7b539e7b539e7bd42dead39dead39d6a531d6ad31 +d6ad31deb531dead31e7b539dead31deb539d6ad31d6ad39cea531d6a531d6a531dead31dead31dead31d6ad31d6ad39cea539cea539ce9c39cea539ce9c31d6 +a539cea539d6a539cea531d6a531cea531cea539c69c39c69c42c69c42c69c42c69c42ce9c39c69c31cea5390000deb539d6ad31deb531dead31e7b531e7b529 +e7bd29efc621c6b5526b847b7b9c8c7ba5949ca57be7c652cead527b6b426352424a4239524242635a4a8c7b5aa58c5ab5945aad945ac6ad5af7d652d6bd5252 +42392921314a3931b59c63e7d684ad9c73635a4a9c8c6befd694ffefa5e7d69473635a4231392921315a4a42d6bd84ffef9cffe79ca59463524a42ad9c7bf7de +9ce7d69494846363524a423139292129a58c63ffe7a5ffe7adf7e7adffefade7d69c6b5a4a4a4242d6bd84ffe78cffe78cbda573524a4a312931423939bd9c52 +ffde63efce63f7d663f7ce5af7d65aefce52f7d652f7ce4a947b42211829736342efc642f7ce42efc639efc6427363392921292921298c7342deb54adeb54ade +b563dec67bdebd73debd73d6b56bdebd6bd6b56bdebd6bd6ad63d6b56bcead63cead63cead5a9c84523129292921293931317b6b528c7352a584527b6b4a3129 +312121292121294a4231cead4ae7b54ae7bd4adeb54ae7bd4adeb54ae7bd52deb54ae7bd4ae7b542e7bd4ae7bd4ae7bd4ae7b542e7bd42e7bd42efc64ae7bd42 +e7bd42e7b531e7bd39e7bd42efbd4ae7b542e7bd39deb539e7b542e7bd4ae7bd52e7bd4ae7bd42846b31292931292129292129212129423931bd9c4aad8c4a29 +29292921292921292921292121294a4231cead52deb54ae7b542e7bd4ae7b542deb542d6ad39dead31dead31e7b539e7b539e7bd42deb539deb539d6ad39dead +39d6a531dead31dead31e7b531deb531e7b539dead31dead39d6a539d6a539cea531d6ad39d6ad31dead31dead31dead31d6a539d6ad39cea539cea542cea542 +cea542cea539d6a539d6a531d6a531d6a531d6a539cea539cea542c69c42c69c4ac69c4a0000efc610f7ce10f7c608ffce10f7ce10ffd618f7ce18ffce29cebd +527b948473948484a5947b9c846b634a6352426b5a4a73634a9c84529c845aa58c639c845aad945aad9452b59c52b5945294844a393131524239a58c52e7ce6b +bda5526b5a4a73634ad6bd73f7de7bffe78cffe794d6c6844239393129317b7352efd694ffef9cefde948473525a4a42bdad84ffefadf7de9cffef9ca5946b39 +3139312929a5946bf7e7a5f7e7adefdea5ffefb5efde9c736352423939c6b58cf7e79cf7de94f7de94bdad733931313129319c844af7d673efd67bf7d67befd6 +73f7d673efd66bf7d66bf7d663bda5522929294a4239d6b552f7d64aefc642f7ce39b594393129312121295a4a39d6ad4ae7bd4adeb54adeb552deb55adec673 +debd73dec673d6b563debd6bdeb563deb563cead63d6b563cead5ac6a55a4a39312121292921298c7352b5945a94845a73635239313121182121212921212994 +7b4adeb552deb54adead42deb54adeb552e7bd52deb542e7b542deb542e7bd52e7b54ae7b542deb539e7bd4ae7bd4ae7bd4adeb539deb542e7b539efbd4ae7bd +42e7b542deb539e7b539e7b542e7bd4ae7bd4ae7b542dead39e7b539d6ad424a4239212121292129212129212129846b39deb55a6b5a42212129212129292129 +212121292129847342e7bd5ad6a539d6ad39d6a531dead39deb539e7bd42e7b542e7b542dead39dead31d6a529dead31dead31e7b539deb531e7b531dead31de +ad31d6a531d6ad31d6a531dead31dead31dead31dead31dead31d6a531d6a531cea539d6a539cea531d6a539d6a531dead31d6a529d6a531cea531cea542c69c +42cea542c69c39cea542ce9c39cea539ce9c31d6a531ce9c29ce9c310000debd21d6b529cead29bd9c29ad9431947b318c73317b6b317b7352849c8c7b9c8c7b +a59484a594ad9c6be7c652cead52b5945ab59452bd9c52ad9452ad945aad9452b59c5ab59452bd9c5a947b52ad9c6be7ce7bbdad5a6b5a42524a427b6b52f7d6 +6bf7de63ffde6bf7d66bad945a4239394a4239b59c63ffe78cffe794d6c6846b634a736352d6c68cffefadf7de9cffefa5d6c68c5a524a393131ad9c73f7e7ad +ffefb5f7e7adffefb5efdea57b735a4a3939c6b58cffe7adf7e7adf7e7a5e7d68c63524231293184734af7d67bf7d67bf7de8cf7de8cf7de8cefd684f7de84f7 +de7bdebd6b4a3931393139bda563ffde73efce63ffd663debd4a5a4a39212129423939bd9c4aefc652e7bd4aefc652e7bd4aefc65ae7c66be7c673e7c673e7c6 +6bdebd6be7c66bdebd63debd6bd6b563e7bd6384734a292129212129635242c6a563c6a563cea55a8c7b52292129292129211829423931b5944ad6ad52cead52 +deb55adeb552e7b54adeb54ae7bd52e7bd52e7bd52e7b542e7bd4ae7bd4ae7bd52e7b54ae7bd4ae7b542efbd4ae7bd4aefbd4ae7b539e7bd39e7b542e7bd4ae7 +bd4ae7bd42deb539e7bd42e7bd4aefbd4aefbd4a8c73422121292929292921292929292929299c844aa58442312931212129292929212129292129423931cead +5ad6ad42e7b542e7b54ae7bd4adeb542deb539d6ad31dead39dead39e7b542e7b539e7bd42deb539dead39d6ad31dead39dead31e7b539e7b531e7b531deb531 +deb539d6ad31d6ad39d6a539dead39dead31dead39dead31deb539d6ad39d6ad39cea539d6a542cea539d6a542cea539dead39d6a531d6ad31d6a531d6a539ce +a539cea542c69c42c6a54ac69c42cea539ce9c3900006352395a4a425242425a5242735a39847342947b39b59439bda54a8cad8c739c8c7ba5947ba594b5ad73 +deb54acead4ab5944abd9c52bd9c4ab59c52b59452bd9c5ab59452ad9452846b4a5a52428473527b6b526b5a528c7b6373635284735adec67bf7de7bc6ad6363 +524229212973634adebd63ffe773f7de73ad9c5a5242396b5a4ae7ce7bffe79cf7de8cffe79cc6b57b524a4a393131b5a57bffefb5f7efb5efe7adffefb5efde +a57b735a423939bdad84f7e7adf7e7adf7e7adefdea5736352292131736342efd67bf7de84f7de8cefd684f7de8cefd68cf7de94f7de8cefd6846b5a42292131 +94845affde84f7d673f7d673efce6b7b6b4a212129312931947b42efc652efc642efc64ae7bd42efc642e7bd42efc64ae7c65aefce63e7c663e7c663e7c663e7 +c66bdebd63e7c66bb59c5a393131212129393131ad945ad6b563cead5ac6a5634239312121292121293129317b634a94845a947b52ad8c52b5944acea552d6ad +52debd5adeb54adeb54adeb542e7bd52e7bd4ae7bd4adeb542e7bd42e7bd4aefbd4ae7b542e7bd42deb539e7bd42e7bd4ae7bd42deb539deb539deb542e7bd4a +e7bd4ae7b54ae7b539cea5423931312121292121292921292121213129314a42395242392121292921292121292121292121298c734ae7bd63deb54ad6a539de +ad39d6ad31e7b539e7b542e7bd4adeb542deb539d6a531d6ad31d6ad31e7b539e7b539e7b539deb539dead39d6ad31d6ad31d6a531dead31dead31e7b531dead +29dead31d6a531d6a531d6a531d6a539cea531d6ad31d6ad31dead31d6a531d6ad39d6a531d6a542c69c39cea542ce9c39cea539cea531d6a531d6a531d6a531 +ce9c31cea542c69c42c69c4a0000cea539a58452bd9442cea531efbd31e7bd31efbd39e7b539d6b5429cad8c8cb59c7ba58c84ad949cad84f7d663efce63cead +4abd9c4ac6a552bd9c52bd9c529c844a7363424a39314a42426b5a4a8c7b52bda57bf7e79cffe7a5c6b5846b5a526b6352635a4a312931524242bda573f7de84 +ffef84e7c66b84734a4239396b5a528c7b5aefd67bffe77bffe784ad9c6b423939423931c6b57bffe7a5ffe7adf7e7a5ffefadefdea57b735a42393994846bf7 +e7adffefb5f7e7b5f7e7ad8c7b63312931635242e7ce7bf7de8cf7de94f7de8cf7de8cefd68cf7de94f7de94ffe7948c7b52292131524a42d6bd84f7de84f7de +84f7de84b59c6b3129312921316b5239efc652efce4af7ce4aefce4af7ce4aefc642efce4aefc642efce5aefce63efce63efce5aefce6be7c663efc66bdebd63 +635a422121292929314a4239bd9c5ae7c663e7c66b846b4a292129212129292129635239cead5acead63ad946b8c7b638c7b5a947b52b59452c6a54ad6ad52de +b55ae7bd5adeb552e7b54adeb542efc652e7bd4ae7bd42e7b539efbd42e7bd4aefbd4ae7b542e7bd42e7b542efbd4ae7bd4ae7bd4adeb542e7b542e7b542efc6 +5a846b42292129212129292929292129312931393139393139312931292931212129292129212129423931cead63dead42dead42e7bd52e7bd4ae7bd52dead42 +dead39d6ad31deb539e7b539e7bd4ae7b542e7b542dead31dead31d6a531deb539e7b531e7bd39e7b539e7b539dead31dead39d6a531dead39dead31e7b539de +ad31e7b531dead31d6ad39d6a539d6a542cea539d6a539d6a531dead39dead31dead31d6a531d6ad42cea539cea542ce9c39cea542cea539d6a539d6a531d6a5 +31d6a5310000c69c39d6ad42d6ad39deb539d6ad31deb539deb539e7bd39e7bd42a5bd8c8cb59c84a59484ad948cad94efce6bffde63debd52bd9c4a9c844a7b +63425242314239394242427363529c845abd9c5abd9c52e7ce8cffe7a5ffefadbdad7b4a39392118294239399c8c6befdea5ffefadffefa5b5a5736352427363 +52b59c739484637b6b5a94845abda56b8473523129315a4a39d6bd7bffe794f7e794efde94ffe79ce7ce947363523931397363528c7b63e7d69cffefadf7e7ad +9484633129315a4a42dec67bf7e794f7de94efd68cf7de8cefd68cf7de94efd68cf7e794a59463312931423939736352bda573ffe794ffe78cceb57342393929 +21314a3931cead52f7ce52f7d65aefce5af7ce5aefce52efce52efc64aefce4aefc642efce5aefce5aefce5aefc65aefce5aefce639c84522921292921293931 +315a4a4a73634abd9c529c844a423931212129292129393129b5944adebd63d6b563cea55acead5ab59c63a58c638c7b5a947b52ad8c4ac6a552cea54ad6b55a +deb552e7bd52deb542e7bd4ae7bd4ae7bd4ae7bd4ae7bd42e7b539e7bd42e7bd42e7bd4ae7b542e7b542deb542e7bd4ae7bd4aefbd4abd9c3939313121212929 +21292121292121293129314231393129313129312121292921292121212921298c734aefc66bdeb552deb542d6ad39dead39dead39e7bd4ae7b54ae7bd52deb5 +42dead39d6a531dead39deb539e7b542e7b539e7b539dead31dead31d6a529dead31dead31e7b531dead31e7b531dead31d6ad39d6a531d6a539d6a531dead31 +dead31dead39dead31dead39d6a531d6a539ce9c39cea542cea539d6ad39d6a531d6ad39d6a531dead31d6a531cea539c69c42c6a542c69c42cea5420000f7c6 +29efc629f7ce31f7c629f7ce29f7ce29f7ce42f7ce39f7ce4ab5bd848cb5a57ba59484b59c84ad94d6c67bceb5528c7b52524a394a4242524a426b635284735a +9c8463a58c63b5945ab59452b59c52c6a563dec68c9484634239394239398c846bdece9cfff7bdfff7b5dece9c84735a5a524aa5947bf7e7adffefadefdea58c +7b636b5a524231392921317b6b4ae7d684ffe794f7e794f7de94ffe79cdece846b634a42393984735a84735a7b6b5a8c7b5ab5a57b84735a393139524242ceb5 +73ffe794f7e79cf7de9cf7de94efde8cf7de94efd684ffe794bdad6b3931393929316b5a5273635284735aad9c6bad9c6b524a39292931312931ad9452f7d663 +f7d66bf7d673f7d673f7d66bf7d66bf7ce63f7d663efce5af7d65aefd663f7d66befce5af7d663f7d663d6b55a423931292129292129524a4a5a4a4a524a4a4a +4242393131292129292929292129847342debd5ae7bd63deb55adebd6bcead63d6b563d6ad5acead63ad9463948463947b5aad9452bd9c4acead52d6ad52debd +5adebd52e7bd52e7b542e7bd4ae7bd52efc652e7bd42e7bd42e7b542efbd52e7bd52efbd4adeb542e7b542e7bd42846b42212129292931292129292129313129 +4a4239393131313131292129292929212129292129423931d6bd7bd6ad4adeb539e7bd4aefc65ae7bd52e7b54adead39dead39dead39e7bd42e7bd4ae7bd4ade +b542deb542d6ad31dead39dead31e7b539e7b539e7b539dead31dead39d6a531dead39d6ad31deb539deb531e7b531dead31dead39d6a531d6ad39d6a531d6ad +39d6ad31dead39dead31dead31d6a531d6ad39cea539cea542cea539d6a539d6a531d6ad39d6a529dead31d6a531d6a539ce9c390000efc629f7ce31efce39f7 +ce42f7ce4affd652f7d65affde5af7d652bdc68484a59473847b7384737b9c84636b635a524273634a8473529c8452b59c52bd9c4ab59c52a58c52ad8c5aa58c +52b59c52b59c52bd9c52736342393131847b63dece94ffefb5fff7bdefdea5a594735a4a42847363dece9cffefb5f7e7adffefb5efdea584735a393131423139 +9c8c6bf7e7a5f7e7a5f7e7a5f7de9cffefa5d6c6845a52425a4a4aceb584efd694d6c68c8473636b5a524a39393129314a4239c6b56bf7e78cf7de8cefde8cf7 +de8cefd68cf7de8cefde8cffde8cceb56b4a42392929317b6b5a8c7b5a73635263524a5a4a4a3931312929312921298c734aefce63f7d673efce73f7d67befd6 +7bf7d673efce6bf7d66befce6bf7d66befce63f7d673efd663f7d66befd66befce5a6b63422921292121294a42396352425a4a4a524242423939312931292129 +2121295a4a39cead52e7c65ae7bd5ae7c663deb55adebd5adebd63debd6bd6ad5ad6b55acead5abda56ba58c639484639c8452b5944ac69c4ad6ad52d6ad52e7 +bd5ae7bd52e7bd52deb542e7bd4ae7bd52efc652e7b542e7b542deb542e7bd4aefc64abd9c4a3129292921292121292921292921299c844ab5944a4239392921 +29292129212121212129212129947b5ae7c673e7bd5ae7b54ae7b539d6ad31e7b539e7b542efbd52e7bd52e7b54adead31dead31d6ad31deb539e7b542e7bd4a +deb539deb539d6ad31dead31d6ad31deb531e7b529e7b539dead31dead39d6a531d6ad39d6a531dead31dead31e7b531dead31dead39d6a539d6a539ce9c39d6 +a539d6a531d6ad31d6a531dead31d6a531d6ad31cea531cea539c69c39cea542ce9c39d6a531d6a531d6a5290000ffd639f7ce42f7ce52e7c652dec663c6ad5a +b59c5a8c7b4a7b6b4a84846b8c9c8c524a4a524a4a635a5a948c6bdec663f7d65acead52bd9c52bd9c4acea54ac6a54ab5945aad9452b59c5ab59452b59c5ab5 +9452bd9c5adece94fff7b5fff7b5f7efadb5a5846b63525a4a42b5a584f7efb5ffefbdf7e7b5fff7bde7dea58c846b39293163524ac6b58cfff7bdf7efbdf7ef +bdf7e7b5ffefb5c6b584524a426b5a52dece94ffe7a5ffe7a5ffe79ca58c6b4a4242393139524239ceb573ffe78cf7e78cf7de8cf7de94f7de94f7e79cf7de8c +f7de84dec66b5a5242292931a58c63efce73f7de84b59c636b5a4a4a42423131312921316b5a42e7c65affd66bf7d66bf7d673f7d673f7d67bf7d673f7d673f7 +d673f7d673f7d66bf7de7bf7d673f7d673f7d673ffde73a58c5a312931212129524a39ceb563e7c6638c7b4a4a4242393131292931292129393131a58c4af7ce +5aefce5aefc65ae7c652efc663e7c663e7c65ae7bd52e7c663debd63d6b563d6ad5ad6b55ac6ad63b59c6b94846394845aa58c52bd9c52cea54ad6b55adeb552 +e7bd5ae7bd52e7bd4adeb542e7bd52efbd4aefc652e7bd42e7bd4a635239292129292129292929211829524a39d6b552ad945231292929293121212921212921 +21294a4239debd7bdeb54adead39e7bd4ae7bd52efc652e7bd4ae7b542dead31e7b539e7b542efbd52e7bd4ae7bd4adeb539dead31dead31e7b539e7b539e7bd +39e7b539e7b539dead31dead31dead31deb531deb529e7b539e7b531e7b531d6ad31d6ad39d6a531d6ad39d6ad31deb539dead31dead31d6a539d6ad39cea539 +cea542cea539d6ad39d6a531dead31d6a531dead31d6a531d6a539ce9c39cea542cea54200007b6b427363426352395a52424a42425a4a426352397b63398c73 +39a59c6373736b4239394239395a4a4a847b63e7bd52d6ad42c6a54abd944ac69c52c69c4ac6a552b59452b59c52b59452bd9c52bd9c52c6a552b59c4ac6b584 +efde9cbdad84635a4a42393963524a8c7b63e7d6a5ffefbdf7efbdffefb5c6b58c5a524a312931847363e7d6a5fff7c6f7e7bdf7efbdf7efbdffefbdb5a58452 +42427b6b5ae7d6a5ffefb5f7e7b5f7e7b5efdea5736b5a393131524239c6ad73ffe794f7de94efde8cf7de94f7de94f7de9cefde94ffe7a5efd6946b5a422921 +29947b52f7d673f7d66bf7d673e7c673635242312931292129524239cead5af7d663efce5af7d66bf7ce6bf7d66befce6bf7d66befce6bf7d66befce6bf7d673 +efd673f7d67befd673f7de6bd6bd6b4a4239211829312931b59c5af7d65af7d65ad6b5634a4242312931212129292931735a39efc65aefce5aefce4ae7c652ef +ce63e7c652efc652e7c652efce63e7bd52e7bd52e7bd5ae7c66bd6b55ad6b55ad6b552d6b563b59c639c8c638c7b5a9c8452ad944ac6a552cead4adeb552deb5 +52e7bd5adeb54ae7b542deb542efc652b5944a312929212129292129212129292929a58c4ad6ad525242312121292121212121292121292921298c7b52e7c66b +e7c663efc663e7b542e7b539dead31e7bd42e7bd52e7c652e7b54adeb542dead31dead39deb539efbd4ae7bd42e7bd42deb539dead31d6ad29deb531e7b531e7 +bd39e7b531e7b531dead31dead31d6a531dead31dead29e7b531dead31dead31d6a531d6ad39cea531d6a539d6a531dead39d6ad31dead31d6a531d6ad39cea5 +39cea542c69c39cea539cea531d6a531d6a529d6a531d6a529d6a5310000947b31846b428c7352947b4ac6a539deb521efce39f7ce42ffde52d6c6635a5a5a31 +29314239394a39426b635aceb55aefce63e7c65acea54abd9c4abd9c52b59c4abd9c52c6a552cead52c6a552bd9c528473424a423939313963524a5a4a4a9c8c +73b5a57b948463736b52b5a584efe7b5e7d6a5847b63393131524242bdad8cffefb5fff7c6f7efbdffefc6fff7c6f7efbd948c734a424294846bf7e7b5f7efbd +f7efbdffefc6f7e7b58c7b633931395a4a42cebd84ffefa5f7e7a5f7de9cf7e79cf7de9cf7e79cf7de9cffe79cefde948c7b63393139948463efd684f7de7bef +d66bffde6bcead5a4a4242292129423139b5944affd65af7ce5af7d663f7ce6bf7d66bf7d66bf7d66bf7ce6bf7d66bf7ce63f7d673f7d673f7de73f7d673f7d6 +6befce6b6b63422921292929318c7352f7d65af7d663f7d66bbd9c4a423939292129292931423931ceb563f7ce52f7ce4aefce5af7d663efc64aefce4aefce5a +efce63efc64aefc652e7c663efc663e7bd52e7c652e7c663e7c66bd6b55adeb55ad6b55aceb563a594638c84638c7b52ad9452c6a54ad6ad4ad6ad52deb55ae7 +bd52e7c65ad6b54a5a4a39212129292929292129212129635239deb5529c844a2929312121292921292121292921294a3939debd73d6ad4ae7b539e7b539efc6 +52efc65aefc65ae7bd4ae7b539deb539e7bd42e7bd4aefc652e7bd4ae7bd39deb531e7b531e7b531efbd42e7bd42efbd42e7b539deb531dead31e7b531deb531 +e7bd39e7b531e7b539dead31dead39d6a539d6ad39d6ad31deb531dead31e7b531dead31dead39d6a539d6a539d6a531d6ad39dead31dead39d6ad31dead31d6 +a531d6a539ce9c39cea542cea542d6a539d6a5310000e7bd29cea542bd944acea542deb529deb531d6ad39deb539debd4ad6b5634a4a42393139423939524a4a +635a52c6ad73f7d66bf7d66bcead4ac69c4abd9c4ac6a552cea54acead52a58c4a7363424239313931395a4a428c7352a58c63e7d6a5ffefb5fff7bdd6ce9c7b +6b5a6b5a526b5a524239394231398c7b63e7d6a5ffefbdf7efc6f7efbdffefc6ffefc6ded6ad736b5a5242428c7b63f7e7bdf7efc6f7efbdffefc6e7dead7b6b +5a393131635242d6bd8cffefadf7e7b5f7e7adf7e7adf7e7adf7e7adefdea5f7e7a5efde9c84735a2921298c7b6bf7e7a5f7de8cefde94f7de7bdec6636b5a42 +2921313931319c844af7d65aefce5af7d663efce6bf7d66befce6bf7d66befce63f7d66befce6bf7d66befd66bf7d673efd673f7d66bf7d66b9c8c5229212929 +21295a5242e7c663f7d65af7d663e7c65a6b5a4a2921292929293129319c845aefce52efce52efce5aefce52efc64aefce5aefce5aefce52efc642efce5aefc6 +5aefc652e7c64aefc65ae7c65ae7c652e7bd52e7c663debd63debd63d6ad52deb55acead5abd9c639484638c7b5a9c8452b59c4ac6a54acead52d6b5529c844a +212129292129292129292129312929bd9c52d6b55a4a42311818212921292121212121292921299c8452debd5ae7c65aefc65aefc652e7b539e7b539e7b539ef +c652e7c652efc65adeb542e7b531e7b529e7bd42e7bd42efbd4ae7bd42e7b539dead31deb531e7b531efbd39e7b539e7bd39e7b531deb539d6ad31dead39dead +31e7b539dead31e7b531dead31dead39cea531d6ad39d6a531dead31dead31dead31dead31d6ad39cea531cea539cea531d6a539d6a531dead31d6a529d6ad31 +d6a531cea539c69c39cea5420000cea542c69c42cea542cea539d6ad42d6b539e7bd42e7bd39f7ce52e7ce63736b5a3931394a4242524a426b635aad9c73f7de +84f7d67be7c663cea542c6a552b5944a947b425a4a3942393942393963524a8c7b5abd9c5ac6a552ceb563f7e7a5ffefbdfff7bddece9c63524a423939312931 +6b5a52c6b594fff7bdffefc6f7efc6f7efc6fff7ceffefc6c6b5945a4a425a4a4a8c735aa59473f7e7bdfff7cefff7c6ded6a57363523931396b5a4adece9cff +efb5f7efb5f7e7b5f7e7b5f7e7b5f7efbdf7e7b5ffefb5f7e7a58c84633129317b6b5aefd69cffe7a5f7de94ffe794efd684847352312931312931847342f7d6 +5af7d663f7d66bf7d66bf7d673f7d673f7d673efd66bf7d673f7d66bf7d673f7d66bf7de7bf7d67bf7d673f7de73c6ad63393131292131393139cead5af7de6b +f7d663efce5a9c845231293129293131293173634ae7c65af7d65aefce63f7d652efce52f7d66befce52f7ce4aefce5af7d663efc64aefce42efce52efce63e7 +c64aefc64aefc65aefce63e7bd52e7bd52e7c65ae7c663d6b55adeb55ad6b552deb55ac6a563a58c6b84735a8c7b52a58c4ab594524239312921292921292929 +292121297b6b42d6b5529c844a212129292129212129292129212129524a39debd6be7bd5ae7b539efbd39e7bd42efce5aefc65aefc652e7b539e7b531e7bd39 +efc652efc652efc652e7bd42e7b531deb529efbd39efbd42efc64ae7bd42e7bd39e7b529e7b529e7b531efbd39e7bd39efbd39e7b539deb539d6ad31dead39de +ad31e7b531e7b531e7b539dead39dead39d6a539d6ad31d6a531dead39dead31dead31dead31dead31d6a539d6a542cea539d6a542d6a539d6ad39d6a531dead +31d6a5310000efbd29efc629efc631f7ce39efc629f7ce39efce39f7ce42efc642efce4a847b5a4a3942525252636b636b6b6b9c947bffde84ffde7bd6bd6394 +7b425a4a394239393131314a42426b5a4a8c7b5a9c845ab59c5abd9c4abd9c52b5944ad6c684efdea5bdad845a4a42312931524a42ada584efe7b5fff7c6f7e7 +bdf7efbdf7e7bdfff7c6efdeb5948c7352423984735a9c8463947b5a8c735ab5a57bdeceadbdb5945a524a3931397b6b52e7d69cffefbdf7efbdefe7adf7e7b5 +f7e7b5f7efbdf7e7b5f7efbdf7e7ad948c6b312931635a52dece9cffefb5efdea5f7e7a5f7de9494845a312931312931736342efce63f7d66bf7d67befd67bf7 +d67befce73f7d67bf7d66bf7d673efce73f7d673efd66bf7d673f7d684f7d67bf7de7be7ce735a4a392921312921319c8c5af7d66bf7d65af7d65aceb55a4231 +312929312921294a3939c6a552f7d663efce5af7ce52efce63f7d66befce52f7d65aefce63f7ce5aefc642f7ce52efce5aefce52e7c642efce5aefc65aefc652 +e7bd42efc652e7c65ae7c65adeb54ae7bd5ae7bd5adebd63cead5ad6ad52d6ad52cead63ad9463847b634a4239292129292129292929212121393131bd9c52d6 +ad5a423931212129212129212129212121292129a58c52deb55adeb552efce63efc65aefbd4adeb531e7b531e7bd42efce5aefc65aefbd4ae7b531e7b529e7b5 +31efc64aefc652efc652e7b539e7b529e7b521e7bd39e7bd39efbd42e7bd42e7b539dead29deb529deb531e7b531e7b531e7bd31deb531e7b531d6ad31dead31 +d6ad31deb531dead31e7b531dead29dead31d6a531d6a539d6a531d6ad39d6a531dead31dead29dead39cea531cea539ce9c39cea542ce9c39d6a5310000f7ce +42f7ce39f7ce39efc639f7ce42efc639f7ce42efce42f7ce4af7ce42a59c6b6373737b948c7b9c8c84a594849c84a5946b73634a4a42423931395a4a427b634a +9c845aa58c5aa58c5aa58c5aad945aad9452bd9c52bd9c52bd9c52bd9c5a7b6b523121294a42429c9473efdeadfff7cefff7cef7efc6f7efc6ffefc6fff7c6c6 +b5946b635263524abdb594f7e7bdf7e7bdc6b58c8c7b637b6b527363524a39394a393994846bf7e7adffefbdf7efbdf7e7bdf7efbdf7e7bdffefbdf7e7bdffef +bdf7e7ad9c8c733931315a4a4a9c8c6bf7e7adf7efb5ffefbdf7e7ada59473423139312931635242e7c66bf7de7bf7de84efd684f7de8cf7d684f7de84efd684 +f7de84f7d67bf7de84f7d67bf7d67bf7de8cf7de8cf7de84f7de847b73522929312921297b6b4aefd673f7d66bf7d663e7ce6b635a423129312929293931399c +844af7d663f7ce5af7d663f7d66bf7d66befce5af7d66bf7d66bf7d652efce52f7d66bf7ce5af7ce4aefce52f7d663efce52efc64aefc652efce5aefc652efc6 +4ae7c652efce63e7c65ae7bd52debd52e7c663debd63d6b55acead52deb55aad94523931312121292929292921292921297b6342cead5a736342212129212129 +2929292121292121295a5239e7c67bdebd63e7bd4ae7b539e7bd4ae7c65aefce63efc652efbd42e7b531efbd39efc64af7ce52efc652efc64ae7b529efbd31ef +bd39efc652efc64aefc64ae7bd31e7b529e7b529efbd39efbd39efbd39e7bd39e7bd39deb531deb531deb531e7b539e7b531e7bd31e7b531deb539d6ad39dead +39d6ad39e7b531dead31e7b531dead31dead39d6ad31d6ad39cea539d6ad39d6a531dead31dea529dead31d6a539d6a539cea5420000efc64af7ce42efc639f7 +ce39f7ce39f7ce42f7ce39ffd642ffd642ffd642b5b56b739c8c7ba58c84ad9484ad9484ad945a524a5a4a42947b4ab59c5abd9c52cead52c6a54ac6a552bd9c +52ad945aad8c52ad9452ad9452bd9c52b59c52bd9c528c734a94846bdece9cfff7c6ffefc6f7efc6f7efc6f7efcefff7ceefdeb594846b524242847363e7d6ad +ffefcefff7cefff7d6efdeb5846b5263524a423139524a42ad9c73ffefb5f7efbdf7efbdf7e7b5f7efbdf7e7bdf7efbdf7e7b5ffefbdf7e7ad94846b3931315a +4a4a8c735a948463d6c694ffefbdf7e7b5b5a57b4231393129315a4a42dec67bf7de8cf7de94efde8cf7de94efd68cf7de94f7d68cf7de94efd68cf7de8cefd6 +84f7d684efd68cf7de8cf7de94ffe794a59463312931292129524a42dec673f7de73efd673f7de6b947b4a312931292129312931635242efce6bf7ce52f7d66b +efd673f7d663efce63f7de7befce63f7ce5af7d66bf7d66befce52efce5aefd66bf7ce5aefc639efce52efce63efce52e7bd39efc652efce5aefc65ae7bd4aef +c64ae7c65ae7c663deb552debd52debd5ae7bd63cead5a6352392121292929292121292921293129316b5a527363423129292118212921292121212121292921 +29b59c63d6ad52deb552e7c663efce63e7bd52e7b539deb531efbd4aefc65aefce5ae7bd4aefbd39e7b521efbd39efc64af7ce5ae7c652efbd42e7b529e7bd31 +e7bd39efc64aefc64aefbd42e7b531e7b529e7b529e7bd31e7bd31efbd39e7b531e7b539dead31dead31dead31e7b531e7b529e7b531dead31dead39d6ad39d6 +ad39d6ad31dead31dead31dead31dead29dead31d6a531d6a539cea539d6a539cea531d6ad31dea529d6ad310000ffde42ffd639ffd639f7ce39f7ce42e7bd39 +cead39ad9439947b42635239737b637ba58c84a59484ad948cb59484ad94bdb573efce5affe773e7ce6bd6b552cead52cea54ac6a54acead52b59452bd9c52b5 +9c52bd9c52bd9c52c6a552c6a54aceb563f7e7b5fff7c6f7e7bdffefc6f7efc6fff7d6f7efcebdb59463524a63524abdad8cffefc6fff7ceffefc6f7efceffff +d6c6b594635a524a39396b5a52cebd8cfff7c6f7efc6ffefc6f7efbdffefc6f7efbdffefc6f7efbdfff7c6efe7ad94846b42313963524a8c735a8c735a84735a +8c846ba5946b8c7b6b4a3939312931524a39d6bd84ffe7a5f7e7adf7dea5f7e7a5f7de9cf7de9cefde9cf7e7a5f7de9cf7de9cf7de9cf7de9cf7de9cf7e7a5f7 +de9cffefa5c6b57b423939292129423939bdad73ffde84f7d684ffde73c6a55a4a39423129313129314a4239ceb573f7d65af7de7bf7d673f7d66bf7d673f7de +84f7d663f7d66bf7d67bf7d66befce5af7d673efd66bf7ce52efce52f7d66befce52efce42efce4af7d663efce5aefc64aefc64aefce63efc65aefc652e7bd4a +efc663e7c65ae7bd5adebd52ad9452292929292929292129292929292129947b529c8c633939392118212929292121292921292121296b5a39debd63e7bd6bde +b552e7b542deb542e7c652efc663efce63e7bd4ae7bd39e7b539efc652efce63f7ce63e7bd42efbd31e7b529efbd42efc652f7ce5aefc642e7bd39e7b529e7bd +31e7bd39efc64aefbd42efc639e7b529e7b529e7b529efbd31e7bd29efbd31e7b531e7b539dead31dead39dead31e7b539e7b531e7b539dead31deb539d6ad39 +d6ad39d6a539dead39d6ad31dead31dead31dead31d6a531d6a542cea542d6a542cea5390000a58c399484427b6b317363395a4a314a42393931393931394239 +396b52398c845a84ad947b9c8c84ad9484ad9484ad94b5b57bf7d66befce63debd63cead52d6b55ac6a54ac6a552bd9c4abd9c52b59c4abda552bd9c4ac6a552 +c6a54acead4ac6a542dece8cf7efbdf7efbdf7efc6fff7c6cec69c7b73634a423984735aded6adfff7cef7efc6f7efcefff7cef7efc6b5a584635a4a4a42398c +7b63decea5fff7cef7efc6f7efc6f7e7bdf7efc6f7e7bdf7efc6f7e7bdffefc6efdead8c846b4239398c7b63d6c69ce7d6ada5946b7b6b526b5a4a63524a4231 +39312931524239ceb57bffe7a5f7e7b5f7e7b5f7e7b5f7dea5f7dea5f7dea5f7e7a5efdea5f7e7adf7e7adf7e7adf7e7b5f7e7b5f7e7adffefb5dece945a524a +29212931293163524adec67bf7de8cffde84dec6735a524a292129312931312931a58c5af7d663f7de7befd673f7d673f7d684f7de7befce6bf7d67befd673f7 +d663efd66bf7d67befce63f7d65aefd66bf7d66befce4af7ce52efce5aefce5aefc639efce4aefce5aefce5ae7c642efc64ae7c65aefc663e7bd4ae7bd4ae7c6 +5adebd634a4239292129212129292129212129635242bd9c5a9c8452312929212129212121212129212129292929ad8c39cea552cea552debd5ae7bd52e7bd5a +deb54adeb542deb54aefc65aefc65aefc65ae7b539e7b529e7bd39efce5aefc663efce5ae7bd39e7b529e7b529efbd39efbd4aefc64ae7bd42e7b539dead29e7 +b531e7b539efbd42efbd39efbd31e7b529e7b529dead31e7b539e7b529e7b531e7b529e7b531dead31dead31dead31deb531dead31e7b531dead29dead39d6a5 +31d6ad39cea539d6ad39d6a531dead31d6a529dead31cea539cea54200003931423931394a42424a424263524a846b42ad9442cea539e7bd39f7ce39e7ce6384 +a5947ba59484a5948cb59c84ad94a5b58cd6ad42e7bd5ae7c663d6b552cea54ac6a54abd9c4ac6a552bda552c6a552c6a54acead4ac6a54acead4acea54acead +4ac6ad63f7efbdfff7c6e7d6ad8c846b4a4242524a4284735abda57bffffdef7efcefff7d6fff7d6e7deb594846b5a4a425a4a4aad9c7bf7e7bdffffd6f7efce +ffefcef7efc6f7efc6f7efc6ffefcef7efc6fff7cee7deb58c7b634a393994846befdeb5fff7c6ffefbdefe7b58c7b636b5a524a39393931314a3939c6ad73ff +efadf7efbdf7e7bdffefbdf7e7bdf7e7adf7dea5f7e7adf7e7b5f7e7b5f7e7bdffefbdf7efbdf7e7b5f7e7b5ffefbdf7e7ad7b73632921293129315242427b6b +5ab5a573f7de8cefd68c8c7b5a312931312931312931736b52efce73ffde84f7d673f7de8cf7de94f7d673f7d67bf7de8cf7d66bf7d673f7de8cf7d67befce63 +f7de7bf7d673f7d65af7ce52f7d673efd663efce4aefce4af7d66befce52efc642efc64af7d663efce5aefc642e7c642efce63efc65aefc65284734229293129 +2129292929212129393131bd9c5ad6b56b52423921212921212929212921212921212939313173634aa5844ac69c52cea54acead52d6b552efc66be7c663e7bd +5adeb539e7b542e7bd4af7ce63efce63efc652e7b531e7bd31e7bd42f7ce63efce63efc64ae7b531e7b531e7b539efc642efc64aefc64ae7bd39e7b531deb529 +e7bd31e7bd31efbd39e7bd39e7bd39deb531deb539dead31e7b531e7b531e7b531deb531e7b531dead31dead39d6ad31deb531dead31e7b531dead31dead39d6 +ad31d6ad39cea539d6ad42d6a531dead31d6a5310000c6a539b5944aa5844ab5944adeb531f7ce29ffce29ffd639f7ce39f7ce42debd4a8cad8c7ba58c84ad94 +84ad9484ad9494ad8ce7ce73efce6bf7d673d6b552cea54ac6a54ac6a54acea542d6b55aceb552cead4ac6a54acead4acea54acea54aa58c4a6b5a4284736b94 +84734a3939524a427b735a8c7b5a8c7b5aa58c63e7deadffffdef7efc6bdad8c7363525a4a42846b52d6bd94ffefc6fff7d6f7efcef7efcef7efc6f7efcef7ef +c6f7efc6f7efc6fff7cedecea57b6b5a4a4239a58c73f7e7bdffefc6f7e7b5ffefc6efdead8473634a39393931314a3939bda573f7e7a5f7e7b5f7e7bdf7efbd +f7e7bdf7efbdf7efc6f7e7adefdea5f7e7b5f7e7bdf7e7b5f7e7bdf7efbdf7e7b5f7efbdf7e7b5a5947b312931292931423939736b5a7363527b6b5a8c7b637b +634a423139312931292129524a39d6bd73ffde84efd67bf7de9cefde8cf7d684f7de94f7de8cefd673f7de8cf7de8cf7d673efd673f7de8cefce6bf7ce63f7d6 +6bf7d673efce52efce52efd66bf7d663efc642efce4aefce63efce5ae7c639efc64aefce63efce5ae7bd42efc64ac6ad5a423939212121292929212129292129 +846b4ad6b563947b4a292929212121292129212121212129393129b594529484637b6b5a73634a9c844ab5944acea552cea54ad6ad52debd5aefc66be7bd5ae7 +bd42e7b531efbd42efc65aefd673efc65aefbd42e7b529e7bd31efc642efce5aefc652efbd42e7b531e7b531e7b531efbd42efbd42efbd39deb531deb539dead +31e7b531e7b531efbd29e7b529e7b531dead31dead31dead31e7b531dead29e7b531dead31deb539d6a531d6ad39d6a531dead39d6a531dead29dead29dead31 +cea531cea539cea539d6a5390000efc629cea539c69c42cea539efc629e7c631e7bd39deb539deb539d6a539d6ad428cad8c84ad9484ad9484ad9484ad9494b5 +9cded68cf7d67befd67befce73deb542debd5ad6ad42d6b542d6b552debd6bcead52d6ad52c6a54a9c844a6b5a394239393931395a4a42524a429c947be7d6b5 +ffefc6cebd9494846384735a94846bad9c8494846b635242735a52ad9c73efe7b5fff7cefff7cef7efcefff7d6f7efcefff7d6f7efcefff7cef7efcefff7cece +c69c7b6b5a634a42b5a584f7efbdfff7c6f7efc6ffefc6ffefbdb5a584524242393139524239bdad7bffe7a5ffefb5f7e7bdffefc6f7efc6ffefc6f7efbdffef +bdf7efbdf7efbdf7dea5f7e7b5f7e7b5f7e7adf7e7b5ffefbdffefbdb5ad8439313131293142393984735a7b6b527b6b5a7363526b5a524a3942312931312931 +423939b59c63ffe784f7de8cf7e79cf7de8cf7de94f7de9cf7de8cefd68cf7e79cf7de8cf7de84f7de8cf7de8cf7d673f7de7bf7de84f7d673f7ce63f7d673ef +d673f7d65aefce5af7d66befce5af7ce4aefce4af7d663efce52efc642efc64af7ce63e7c65a6b5a39212129292929292129292129524a39d6b563d6b5635242 +392121292929292121292929292121298c7b4ac6a55aceb563c6ad6bad9c6b84735a84735a947b52bd9c52cead4ad6ad52d6ad4adebd5ae7c663efce63e7c652 +e7bd42e7b539efc65aefce6bf7ce6befc652efbd39e7b529efbd39efc64aefc652efc64aefbd39e7b529e7bd31e7bd31efbd42e7bd39efbd42e7b531e7b531de +b529e7bd31e7b531e7bd31e7b529e7b531dead39dead39dead31e7b531deb531e7b539dead31deb531d6ad39d6ad39d6a539d6ad39dead31dead31d6a531dead +39d6a5390000c69c39ce9c39c69c39c69c42ce9c39cea539cea539deb542deb542efc64ae7c65294ad8c739c8c84ad9484ad9484b59484ad94cece8cf7d684f7 +d67befce73e7bd4ad6b54ad6b54acead39d6b54ad6bd6bc6a55a8c73425a4a39312931393139635242948452b59c4ae7ce8cfff7cefff7cef7efc6fff7cea58c +6373635263524a5a4a425a4a4294846bd6c6a5fff7d6f7efd6f7efcef7efc6f7efcef7efcef7f7d6f7efd6f7f7d6f7efcefff7cebdad8c6b5a526b5a4ac6b594 +ffefc6ffefc6f7e7c6ffefc6f7e7bdb5a5844a4239393139524a42c6ad7bffe7a5f7efbdf7e7bdf7efbdf7e7bdf7efc6f7efc6f7efc6f7e7bdf7e7bdf7e7bdf7 +efbdf7e7b5f7efbdf7deadf7e7a5f7e7b5cebd944a3939312931393139b5a584efe7b5d6c68c847352736352524a42393139292129393131947b5af7de84efde +94f7de9cefde8cf7e7a5efde9cf7de8cefde9cf7e7adefd68cf7de94f7de9cf7de84efd67bf7de94efd684f7d673efd67bf7de84efce6bf7d663efd673f7d673 +efce52f7d65aefd66befd65aefc642efce4aefce63efce5aefc642a58c4a292129292129292129292929292129635242c6a552846b4221212929212921212921 +21292118295a4a31d6b563cead6bc6a552cead5ad6b563d6b573b59c6b94846b7b735a947b5aad944acead52d6ad4ad6ad4ad6ad4ae7bd63e7c66befc66be7b5 +4ae7b531e7b539efc65aefc65aefc652e7bd39e7bd31e7b529efbd39efc64aefc64ae7bd39e7bd31deb529e7b531e7b531efbd39efbd29efbd31deb531deb531 +dead31e7b539e7b529e7b531e7b529e7b531d6ad31d6ad39d6ad31dead31dead29e7ad31dead31dead39d6a531d6a539cea539d6ad39d6a529dead310000deb5 +39deb539e7bd42e7bd39efc642efc642f7ce4af7ce52f7d65aefce5af7d663a5b5847ba59484ad948cb59484ad9484ad94b5bd8cf7de84efd684f7d67bdebd52 +deb552debd5acea54aa58c4a7b6b4a4239393129313931396b5a52947b52bd9c5acead4ad6ad4ad6bd5af7efbdffefceffffd6e7d6ad8473635a4a425a4a4a73 +6352bdad8cf7efceffffeff7f7defff7def7efcefff7d6f7efcefff7d6f7efd6fff7defff7d6f7efcead9c7b735a527b634acebd8cfff7cefff7cef7efc6fff7 +cef7efbdad9c7b524a424239425a4a42cebd7bffefadffefbdf7e7b5ffefc6f7efc6ffefcef7efc6ffefc6f7efbdffefc6f7e7bdffefbdf7efbdf7efc6f7e7bd +fff7ceffefb5dece9c524a42312931393131ad9c7bffefbdffefadffefbdb5a5845a4a4a42393931293139313173634aefd67bf7e79cf7e7a5efde94f7e7adf7 +de9cf7de94f7e7a5f7e7a5f7de94f7e7adf7dea5f7de94f7de9cf7e7a5efd684f7de84f7de94f7de84f7d66bf7de8cf7de84f7d66bf7ce63f7de84f7d673f7ce +52efce5af7de73efce5aefce42efce4adebd634a42392921292921292929312921294239394a39395a4a42393131292931292129292929212129313131b59c63 +cead63d6b563e7c67bd6bd73cead63cead52d6b563d6b56bceb56ba594638c7b638c7b5aad945ac6ad5ad6b552d6ad4ad6ad4adeb55aefce73efce73efc65ae7 +b539e7b539e7bd42f7c652efc652efc64ae7bd31e7bd31e7bd29efbd39efbd39f7c639e7bd39e7bd39deb529e7bd31e7b531efbd31e7b531efbd31e7b531e7b5 +31dead31e7b531e7b531e7b531e7b531e7b539dead31d6ad39d6ad31deb539dead31e7ad31dead31dead39d6a539d6ad39cea5390000f7ce42f7ce42efce42f7 +ce4aefce4af7ce52efce4af7ce52efce5af7d663efce63adbd847ba59484ad9484ad9484b59484ad94a5bd94efd684f7de7bffde6be7c663ad8c4284734a524a +393131392921314a42426b5a528c7b5a9c845ab59c5ac6a542cead4acea542cead42e7ce8cefe7bdb5a5846b63524a393963524a9c8c6be7deb5ffffdeffffef +f7f7e7fff7e7f7f7def7f7def7efcef7efd6f7efcefff7d6fff7d6efdebd9c8c6b736352846b4ab59452e7d69cfff7d6f7efc6fff7ceefdeb59c8c6b5242424a +3942635242d6bd7bffe7a5f7efbdf7e7bdf7efc6f7e7bdf7efc6f7efc6ffefcef7e7c6f7efc6f7e7bdf7efc6f7e7bdf7efc6f7e7bdf7e7bdf7efb5e7deb5635a +4a3129313129318c8463f7e7b5f7efb5f7e7b5ffe7ad9c8c6b4a39422929293129315a4a42d6bd73f7de9cf7de9cefde9cf7e7adefde94f7dea5f7deadf7de9c +efde9cf7e7b5efde9cf7de9cefdea5f7de9cefd68cf7e7a5efde94f7d684efd68cf7de9cefd67bf7d67bf7d68cf7de8cefce6bf7d673efd67bf7d673efce52f7 +ce5aefd66bf7d6637363392921292921292929292121293129315242424a424239313131293129212929212921212121212973634adec684d6bd73d6b563d6ad +52debd6bdec673dec673cead63cead52cead52d6b563cead63bda56b9c8c63948463a58c5ac6a563cead52d6ad52d6a542deb552e7bd63efce63e7c65ae7bd4a +deb531e7bd39e7bd4aefc652efbd42efbd39e7b529e7b529e7b529efbd39efbd31efbd39e7b531e7b531deb531e7b531e7b529efbd31e7b529e7b531dead31de +b539dead31e7b539dead31e7b531dead31dead39d6ad31d6ad31d6ad31dead39dead31dead29dead29d6ad310000f7ce52efce42f7ce4aefce4af7ce52f7ce52 +f7ce52efce52f7d663efce63f7d663bdc67b84ad9484ad9484ad9484ad948cb59c94ad8ce7d67bd6bd63ad9c5a6b634a3931392929314a4242635a4a8c735294 +845aad9463ad8c5aad945aad9452cead4acead42cead4ac6a54ac6a55a7b6b5a4a39394a42398c7b63d6c69cfff7cefff7deffffe7f7f7e7ffffeffff7e7ffff +eff7f7e7fff7def7efd6fff7def7efd6dece9c9c845a8c73529c7b4abd9c4abd944adec69cf7efc6fff7cee7d6ad94846b52424252424273634adec68cffefb5 +ffefc6f7e7bdffefc6f7e7bdffefc6f7efbdfff7cef7efc6ffefcef7efc6ffefc6f7efbdffefc6f7e7b5ffefc6f7efb5efdea5736b52393139312931847363ef +deb5ffefb5f7efbdffefadc6b58c5a524a3129313131314a4239bdad73ffe79cf7de94f7dea5f7e7adefde9cf7e7adf7dea5f7e79cf7e7adf7e7adefde9cf7e7 +b5f7e7adf7de9cf7de9cf7e7adf7de94f7de94f7e7a5f7de94efd684f7de9cf7de94f7de84efd684f7de94efd684f7d66bf7d673f7de84efd663f7d65ab59c5a +31313929212929293129212929293142394252424a4a3939423139292129292929212129292129423931ceb573d6ad5ae7bd5ae7ce7befce84debd63deb552de +bd5ae7ce73e7c66bdeb563cead52deb552debd5adec673c6ad6bad946b94845a9c8c63b59c63d6b563d6ad52d6ad4ad6ad4ae7bd5aefc663efce5ae7bd4ae7bd +42deb539e7bd42e7bd42f7c64aefbd39efbd39e7b529efbd31e7bd31efc639efbd31efbd31e7b531e7b531deb531e7bd31e7b529efbd31e7b531e7b539dead39 +deb539dead31e7b539e7b531e7b531dead31deb539d6ad31d6ad39d6a539dead39dead310000efc64af7ce52efce4af7ce52efce4af7ce4aefce52f7ce63efce +5aefce63f7ce5acec67b7ba58c84ad9484ad948cb59484b59484ad946b6b5a4239423129394239396352428c7352ad8c4ac6a54acea542bd9c4ab5944ab59452 +b59452b59c52b5944abd9c4abd9c4ac6a552c69c4a9c7b42736352c6b584f7e7b5fff7d6f7f7d6fff7def7f7defff7e7f7f7e7ffffeff7f7e7ffffeff7f7e7ff +ffefefe7ced6bd7bad844aad8c52c6a563d6b56bbd9442ad8c52a5845ab59c7ba5947384735a524242524a428c735ae7d68cf7efb5f7efbdf7e7bdf7efc6f7e7 +bdf7efc6f7e7bdf7efcef7e7bdf7efcef7efc6ffefcef7e7bdf7efc6f7e7b5f7efc6f7e7bdf7e7bd7b6b5a393139312931736b5ae7deadffefb5f7e7b5ffefb5 +d6c69463524a392931312931423139a5946bf7e79cf7de94f7dea5f7e7adefde9cf7e7adefdea5f7de9cf7e7adf7e7a5efde9cf7e7b5efdea5f7de9cf7e7adf7 +e7a5efde94f7e7adf7dea5f7de94efde94f7e7a5efde8cf7de8cefde9cf7de9cefd67bf7de84efde94f7de84efce63f7de73dec67b5242392121292929292921 +292121296b5a39b594425a4a424231393129292929292121212921292921299c8c5adebd6be7ce73e7c663e7bd42e7bd4aefce6be7ce73e7c663deb54adebd52 +debd5ae7c66bdebd5ad6b552d6b54adebd63debd6bd6bd73b59c6b9c8463947b5aa58c5abd9c52d6b552cead4ad6ad4ad6ad4ae7bd4ae7bd4aefc64ae7b542e7 +b539deb539efbd39efbd39efc642e7bd39e7bd31e7b529e7bd31e7b529efbd29efbd29e7bd31deb531e7b531e7b529e7b531e7b531e7b531e7b531e7b531d6ad +31dead39dead31deb539dead31deb531dead31dead39cea539d6ad390000f7ce5aefce52f7ce52efce4af7ce52efce52f7d65af7d65affd65affd65affde63ce +c66b84ad9484ad948cb59484b5948cb59c84b594737b6b6352429c845acead63d6b55acea54acead4ad6ad42d6ad42cead42cea542b59452bd9c52bd9c52bd9c +52bd9c52c6a552cea54ad6b54ad6b542f7e7a5fff7cefff7cef7efcefff7d6f7f7defff7e7f7f7e7fffff7fffff7fffff7fffff7fffff7f7e7b5debd63ce9c39 +d6b55aefd6a5fff7d6fff7dee7d6ada58c5a9c845a846b527363525a4a4a63524a9c8463f7dea5ffefbdffefc6f7efc6ffefc6f7efc6ffefc6f7efc6ffefcef7 +efc6ffefcef7efc6fff7cef7efc6ffefcef7e7bdffefc6ffefbdf7e7bd8c7b634239393929316b5a52e7d6adfff7bdf7efbdffefb5dece9c7363523931393931 +31393131948463f7e79cf7e79cf7e7b5f7e7adf7e7a5f7e7b5efde9cf7e7adf7e7adf7e79cf7e7adf7e7b5efde9cf7e7adf7e7adf7e79cf7dea5f7e7b5efde9c +f7e79cf7e7adf7e7a5efde8cf7e7a5f7dea5f7de94f7de8cf7e7a5f7de94f7d684f7d684f7e794f7de7b84734a292129312931292129292129423931debd63ff +d65a7b6b423129313129312921292921292121296b5a4adec684debd5ae7bd42efce5aefd66befce6be7bd42efc642efc65aefce6be7c663e7bd52deb54ae7c6 +63e7c663e7ce73deb55ad6ad52d6b55ae7c673d6b56bc6ad6b9c8c639484639c8c5abd9c52cea542d6ad52cead4ad6ad4adeb54aefc652efbd4aefc642e7b539 +e7bd39e7b539efbd39efbd39efc639e7bd31e7bd39e7b531efbd31e7bd29efbd29e7bd29efbd31e7b531e7b539deb531e7bd39e7b531e7bd31e7b531e7b539de +ad39deb539dead39e7b539dead31e7b531dead310000f7ce5af7d652f7ce4affd652ffd652ffd65aefc652e7c652bda54a9c8c4a7363397b735284a58c84ad94 +84ad9484b59484b5948cb59cadb584efce73f7de7bffde7be7c663cea542cea539d6ad42cea539cead42bd9c4abd9c52bd9c52ceb55ac69c4acea54acead4ad6 +b542d6ad42deb542efce73ffefc6f7efc6fff7cef7efd6f7f7def7f7deffffeff7ffeffffff7fffffffffff7f7e7adf7c652efbd42f7d684f7efceffffeff7f7 +defff7def7efceb59c6b8c73527b635263524a735a4ab59c6bffe7adf7efc6f7efc6f7efc6f7efc6f7efc6f7efc6f7efc6ffefc6f7e7bdf7efc6f7e7bdffefc6 +f7e7bdf7efcef7e7bdf7efcef7efbdf7efc694846b393139312931635a4adecea5ffefbdf7e7bdf7e7b5efdead7b735a423139393131393131736352e7ce8cf7 +e79cf7e7adf7e79cefdea5f7e7adefde9cf7e7b5efdea5f7de9cf7e7adf7e7adefde9cf7e7b5efdea5f7de9cf7e7adf7e7adefde94f7e7adf7e7adf7de94efde +9cf7e7adefde94f7de94f7dea5f7e7a5efd684f7de8cf7de9cf7de8cf7d67bb5a56b312931292129292129292129292129ad9452ffd64ac6a55a393131292931 +292129292129212129393131bda573e7bd5aefce63efce6be7c642efc631efce52f7d673efce63e7c64ae7bd42efc652e7c663efc65adebd52deb54adebd52e7 +ce73e7c673debd63d6ad4ad6b552d6b563debd6bc6a563a5946b8c7b6394845aa58c52c6a54acea54ad6ad4acea54adeb54ae7b54aefbd4ae7bd39e7bd39deb5 +39e7bd39e7b531efbd31efbd29efbd31e7b529e7bd31e7b531efbd29e7b521efbd29e7b529e7bd31deb531e7b539deb531e7b539e7b531e7b529dead31deb539 +d6ad39d6ad42d6ad31dead310000f7d65ae7c652cead4ab59c4a9c84427b63395a52393931313129392921393129395a5a5294b59484ad9484ad947ba59484ad +9484ad94adc6a5f7de8cf7de84f7de84efd66bd6ad39d6ad42cea542cea542bd9c4ac6a552bd9c4ac6a552cead42d6b54ad6b55adec66bd6b54adeb54adeb542 +debd4af7e7adffefcef7efcefff7d6f7f7deffffe7ffffefffffffffffffffffeff7efd6ffefc6f7e7bdfff7defffff7fffff7fff7e7ffffe7fff7deefdeada5 +845a84735a73634a847352ceb584fff7c6f7efceffefcef7efceffefcef7efceffefc6f7efc6ffefcef7efc6ffefcef7efc6ffefcef7efbdffefcef7efbdfff7 +ceffefc6ffefc694846b4239393129315a524ad6c69cfff7c6f7efc6ffefb5f7e7b58c7b634239393931393931316b5a4adec684ffe79cf7e7adf7e7a5f7e7ad +f7e7adefde9cf7efb5f7dea5f7e7a5f7e7b5f7e7a5f7e7a5f7e7b5efde9cf7e7adf7e7b5f7de9cefde9cf7efb5f7de9cf7de9cf7e7adf7e7a5efde94f7e7a5f7 +e7adf7de94efde94f7e7a5f7de94f7de8cf7de94e7ce944a4239292131292129312931212129736342f7d66befce73524a392921292929292929292121293129 +318c7b52efd68ce7c65aefc639efc639f7d663efd66befce4aefc631efce4aefce6befd66be7c64ae7bd42e7c64aefce63efc663e7c65adeb542e7bd52e7c66b +efce7bdebd63d6b55ad6ad52deb55adebd63d6b563b59c639c8c6b8c7b63a58c5ab5944acead4acead4ad6ad52d6ad4adeb54ae7bd42efbd42e7bd39e7bd39e7 +b531efbd39efbd31efbd31efbd31efbd31e7b531e7bd31e7b529efbd31efbd29efbd31e7b529e7bd31deb531e7b539deb531e7b531e7b531e7b531dead31deb5 +39d6ad3900005a52394239393129313129312921312929393931395a52427363429c8442bd9c4aceb55a8cad8c7b9c8c73847b73847b6b7b73738c84849c8ce7 +ce7be7c65ae7bd4ad6ad31d6a539c69c42c69c4abd9c4ac6a54ac69c42cead42cead42d6b542d6ad39debd73d6b563debd5ad6ad39d6b54ad6ad39efd67bf7ef +cef7efcef7efcefff7def7f7e7fffff7f7f7deffefc6f7efcefff7effffffffffffffffffffffffffffff7fffff7f7f7e7efdeadbd9c5a9c845a846b529c845a +dece94fff7c6f7efc6f7efcef7efceffefcef7efcef7efcef7efceffefcef7efc6f7efcef7efc6ffefcef7e7bdf7efc6f7e7bdffefcef7efc6f7efc69c8c7342 +39393129314239399c8463ffefb5f7e7bdf7e7b5f7e7b59c8c6b4239393931313929315a4a4aceb56bffe79cefdeadf7e7a5f7e7adf7e7a5efdea5f7e7b5efde +9cf7e7adf7e7adf7e7a5efe7adf7e7adefde9cf7e7b5efdea5f7de9cf7e7adf7e7adefde94f7e7adf7e7adf7de9cefde9cf7e7adefde9cf7de94efdea5f7e7a5 +efd68cf7de94f7de9cf7de8c7b6b4a2921312921292929292118294a4239d6bd73ffde63947b4a2921292921292929292121292921295a4a39dec684e7bd42f7 +ce52efd66bf7d663efc639efce4aefd66bf7d673efce52efc631e7c642efce63efce5aefc64ae7bd31efc642efc65aefce6be7bd5adeb54adeb54ae7c663e7c6 +6be7c66bd6b55ad6ad52d6ad52debd5ad6b55ac6a55aa58c638c7b63947b5aa58c52bd9c42d6ad4acead4ad6ad52d6ad42e7b542e7b539efbd39e7b531e7b539 +e7b531efbd31e7b529efbd31e7bd29efbd31e7b529e7bd31e7b529efbd31e7b529e7b531e7b529e7b531deb531deb539dead31e7b531dead31deb53100004239 +4252424263524a63524a846b529c844acead4ae7bd42f7ce4affd652ffde63efd66394a5846b6b6b6b6363635a5a6b635a6b6b637b847bbda552dead31d6ad39 +e7bd52d6b54acea542cea539d6ad42cead42deb542d6b539d6b542d6b539deb542d6b552dec673d6bd63d6b54ad6b542deb54adeb54affefb5f7efcefff7d6ff +f7e7fff7e7efdea5f7d663ffde94ffffefffffffffffffffffffffffffffffffffffffffffeff7de94d6ad39bd9442ad8c4ac6a56befdea5ffffd6f7efcefff7 +d6f7efd6fff7d6f7efd6ffefcef7efcefff7defff7defff7d6f7efcefff7d6f7efc6ffefcef7efbdfff7ceffefc6fff7ce9c947b4239393129314a3942736352 +a59473efe7b5fff7bdffefbda594734a3942393139312931524a42bda56bffefa5f7dea5f7e7adf7e7b5f7e7a5f7e7adf7e7adefdea5f7efb5f7dea5f7e7a5f7 +e7b5f7e7a5f7dea5f7efb5f7de9cf7e7a5f7e7adf7e79cf7dea5f7e7b5efde9cf7e79cf7e7adf7e7a5efde94f7e7adf7e7a5f7de94efde94f7e7adf7de94ffe7 +8cad9c73312931292129312931292129312931ad945affde73ceb573423939212129292931292129292931312931b5a573efce7bf7d66befce52f7ce4aefd66b +f7de84f7d663f7ce42efc642f7d673f7d673efce52e7c631efce39efce5af7d663efc64aefc639e7c639efce63efce6befce63debd4ae7bd4adebd5aefce6be7 +bd63deb55acead52d6b55adeb552deb552cead52b59c638c7b6b847b63947b52b5944ac6a54ad6ad52d6ad4ad6b552deb542efbd39e7bd31efbd39e7b539e7bd +39deb539e7bd39efbd29efbd29e7b529efbd31e7b531e7bd31e7b531efbd31e7b529e7bd31e7b531e7bd39deb539deb539deb5310000bd9439b5944ab5944abd +9452d6ad39f7ce42f7ce42f7d652efce5af7d66befce63efd66b949473635a5a5a524a635a52635a526b6b63737b73bdb584efce6befd684efd68cefd673deb5 +29deb531d6ad39deb539d6ad39d6b542d6ad39d6b542d6ad42d6b54adebd73d6bd63d6b552deb542d6ad42deb542efce73fff7d6f7efcee7deadd6b563e7b539 +efc652ffefc6fffff7fffffffffffffffffffffffffffffffffff7f7e79cefbd29d6ad39c69c42debd7bf7efbdfff7d6f7efcefff7d6f7efcefff7d6f7efcef7 +efcef7efceffefcef7efcef7efcef7efcef7efcef7efc6f7efcef7efc6ffefcef7efc6ffefce9c8c734239393129314231396b63528c7b5a846b5aa5947bc6b5 +8c9c8c6b4a42423929313129314a3939ad9463ffe7a5f7de9cf7e7adefe7adf7dea5f7e7b5f7e7a5efdea5f7e7b5efde9cf7e7adf7e7adf7de9cf7e7adf7e7ad +efde94f7e7adefdea5f7de9cf7e7adf7e7adefde94f7e7adf7deadf7de9cefdea5f7e7b5efde94f7de94f7dea5f7e7a5efd68cf7e79cd6c68c4a423921212929 +29292921292921297b6b42f7de8cefd67b635242211821292929292129292929292129847352efce84efc642efce4af7d67bf7d67bf7ce5aefc64af7d66befd6 +7bf7d663efc639efce42efce63f7d673efce52efc631efc631efce52efce63efce52e7bd31efc639e7c652efce6be7c65ae7bd52d6b54adebd5ae7bd5ae7c663 +deb552d6b552cead52d6b552d6b54ad6ad52b59c5a9484637b73638c7b5a9c8452c69c4acea54ad6ad4ad6ad4adeb54adeb539e7bd31e7bd31e7bd39deb531e7 +b539e7b531e7bd31e7b529efbd31e7b529e7bd31deb531e7b531e7b531e7bd31e7b529e7b539deb531deb5420000f7c631ce9c39cea542cea542f7ce4af7ce4a +f7d652efce52f7ce52efc64ae7bd42deb5429c946b5a4a4a5a52525a524a635a526b635a73736ba5ad94f7e7a5efde94f7de94efde8ce7c642d6ad39deb539d6 +b539d6b542d6ad42d6b542d6ad42d6b54ad6b54ad6bd63d6b563debd5ad6b54ad6b54ab59c4aa59463d6c6a5ceb584b58c4acea539efbd39f7d673ffefc6ffff +ffffffffffffffffffffffffffffffffffefcef7ce52e7b531deb55aefdea5fff7d6fff7def7efd6fff7d6f7efcefff7d6f7efd6fff7d6f7efd6fff7cef7efce +ffefcef7efcefff7cef7efcefff7d6f7efcefff7d6ffefceffefce9c8c734239393129314a3939847b638c7b637b6b5284735a7363526b5a4a4a394239313931 +29314239399c8c63ffe7a5f7de9cf7e7b5f7e7a5f7e7a5f7e7b5f7e7a5f7e7adf7e7adefdea5f7efb5f7dea5f7e7adf7e7b5f7e7a5f7dea5f7e7b5efde9cf7e7 +adf7e7adf7de9cf7dea5f7e7b5f7de9cf7e7a5f7e7adf7e7a5f7de94f7e7adf7dea5f7de94f7de9cf7e7adefd68c736352292129312931292129292129524a42 +e7ce84ffde73a59463292129292931292129292929292129524239d6b56bf7ce63f7d673f7d66befce52f7d66bf7d67bf7d67befce5af7ce52f7d66bf7de73ef +ce5af7ce42efce42f7d66befd66bf7d65aefc631efc639efce52f7d66befce5aefc639e7bd31efce52efce5aefce63debd52e7bd4adebd52e7c65ae7bd52e7bd +5ad6b552d6ad5ad6ad52deb552d6ad4ac6a552a58c638c7b6b8473639c845ab5944acead4ad6ad4ad6b552d6ad4ae7bd42e7bd31efbd39e7b531e7bd39e7b539 +e7bd42e7b539efbd31e7b531efbd31e7b531e7bd31deb539e7b539e7b531e7b539e7b5310000cea531cea531cea531d6a539deb539e7bd31dead39dead39cea5 +31d6a531d6a529deb5399c945a524a4a5a4a4a5a524a5a524a635a526b6b63949c8cefde9cf7de94efde94f7de94e7c64ad6ad39d6ad39deb539d6ad31d6b542 +d6ad42d6ad42cead42d6b552ceb55adec673cead52b594528c734a736b5a7b6b5a8473528c734abda563e7ce94ffefbdf7efc6ffe7b5f7f7e7ffffffffffffff +ffffffffffffffeff7de94f7c642efce73f7efc6fff7e7fff7def7f7defff7def7efcefff7d6f7efcef7efcef7efd6ffefcef7efcef7efc6f7efcef7efcef7ef +cef7efcef7efcefff7d6f7efcef7efce948c734231392921294a4242bdad8cffefbdded6ad9484637363527363525242423931393129314239398c7b5af7e79c +f7de9cf7e7bdefde9cf7e7adf7e7adf7e7a5f7e7b5f7e7a5efdea5f7e7b5efde9cf7e7adf7e7adf7de9cefe7adf7e7a5efde9cf7e7b5efde9cf7de9cf7e7adf7 +e7a5efde94f7e7b5efdea5f7de9cefdea5f7e7adefd694f7de9cefdeadf7de9cf7de949c9473292129292129292129292129312931bda56bffe78ccebd843931 +31292129292129292929292129392931ad945af7d673efc64af7ce5aefd673f7de84efce6befce52efce63f7de84efd673efce52efce4af7d66befd673f7d663 +efc642f7ce4aefce63f7d673efce52efc639efc631efce5aefd66befce5ae7bd39e7bd31e7c642efce5ae7c65ae7bd52deb542e7bd4ae7bd4ae7c652debd52de +b552cead52d6ad52d6b54adeb542c6a54ab59c5a948463847363847352a58c52c69c42d6ad4ad6ad4adeb54adeb542e7b539e7b531e7bd31e7b531e7b539deb5 +39e7b539deb531e7bd31e7b531e7b531e7b531e7b539deb539e7b5310000d6a531cea539d6a539c69c39cea531ce9c31d6a539d6ad39deb54ae7bd4aefce5af7 +d66bb5ad7b4a4a4a524a4a5242424a4242524a426b5a5a84847be7deadefde8cf7de94f7de8cefd66bdead31dead42d6ad42deb539d6ad39d6ad4acead42d6b5 +4ad6ad4ad6b563ad94637b6b5263524a6352526b5a52847352a59463d6c69cf7e7c6ffffe7fff7effffff7ffefceffe7adffefd6fffff7ffffeffff7def7e7ad +ffde94f7e7b5ffffefffffefffffe7fff7defff7e7f7efd6fff7def7efcefff7d6f7efcefff7cef7f7d6ffefcef7efceffefcef7efcefff7cef7efcefff7d6ff +f7d6f7efc68c846b423939312931524a4ac6b594fff7c6f7efbdfff7c6c6bd9c7363525242423931393129313931398c735af7de9cf7e79cffefbdf7dea5f7e7 +b5f7e7adf7e7a5f7e7b5f7e7a5f7e7adf7e7b5f7dea5f7efbdf7dea5f7e7adf7e7b5f7e7a5f7dea5f7e7b5f7de9cf7e7a5f7e7adf7de9cf7dea5f7e7b5efde9c +f7e7a5f7e7b5f7e79cefde94f7e7b5f7dea5f7de94ffe7a5c6b58c393131292131292129312931292129947b5af7e794f7d68c635a4a29212929212931293129 +21293129317b6b52efce73efc64af7de7bf7d684f7d66befce63f7de7bf7de84f7d673efce52f7d66bf7d67bf7de7befce5af7ce52f7ce63f7de7bf7d66bf7ce +4aefce4af7d66bf7d673f7d663efc639efce39efce52f7d663efce5aefc642e7bd31efc642efc652f7ce5ae7bd52e7bd4adeb54ae7bd52e7bd52e7bd52deb552 +d6b55acead5ad6b552deb542d6b54abd9c52a58c638c7b6b8c7b639c8452b5944acea54adeb54ad6ad4ad6b552deb542e7bd39e7b531e7bd39deb539e7bd42de +b542e7b542e7b539efbd31e7b531e7bd39deb5390000ce9c31d6ad31d6ad31deb539debd42e7c64aefc64af7ce63efce63f7d673efce73f7d673bdb57b52524a +3931314a3942423942524a4a635252736b6bcece9cf7de9cefd68cf7de8cefd67be7b531d6a539d6ad42d6ad39d6ad4acead42d6ad4abd9c4a947b4a6352424a +39424a4242524a4a6b5a4a947b52c6ad73debd73f7efcefff7def7efd6fff7defff7e7f7e7a5efc64affd673f7de8cf7de94f7d673ffe7adf7f7defffff7f7ff +efffffe7f7f7e7fff7e7f7f7defff7e7f7efcefff7d6f7efceffefcef7efcef7efcef7efd6f7efcef7efcef7efcef7efcefff7d6fff7ceefe7c6847363423139 +3129295a4a4acebd94fff7cef7e7b5f7efbdffefb5b5a57b5242423931313129293931397b6b52efde94f7e7a5f7e7b5efde9cf7e7b5efdea5f7e7adefe7adf7 +dea5f7e7b5f7e7a5efdea5f7e7b5efde9cf7e7b5efe7adf7dea5f7e7adf7e7a5efde9cf7e7b5efde9cf7de9cefe7adf7dea5efde9cf7e7b5efdea5f7de94f7de +a5f7e7adefd68cf7dea5f7e7addece8c524a42292129292129292929211821635a4ae7ce7bffde849484632921292921293129312121292929294a4239d6bd73 +efce6bf7d66befce5af7d673efd684f7de84efce6bf7d66befd67bf7de84efce6bf7ce5aefce63f7d67befd673efce5aefc64af7d66befd673f7d66befc64aef +ce4aefce63f7d673efce63efc642e7c631efce4aefce5aefce5ae7c642e7bd31e7bd39efc652efc652e7c652deb542deb54adeb54ae7bd4ae7bd4adebd4ad6ad +52d6ad5ad6ad4adeb54ad6ad42cead52ad945a94846b84736394845aa58c4abd9c4acea54ad6ad52cead4adeb54adeb542e7b539deb539e7b542deb539deb542 +dead42e7b539e7b531e7b5310000efc64aefce52f7d65af7ce5af7d66bf7d663f7d66befce6bf7d67befd673f7d673f7d67bcec67b5a5252524a4a5a4a4a5a4a +4a5a524a6b635a6b6b63c6c69cf7de9cf7de8cefd684f7de84e7bd42d6ad39cea542d6ad4acea54abd9c4a846b42524a423931393931394a42425a524a847352 +b59c63d6bd84d6bd7bd6bd73e7d694f7f7defff7d6fff7def7e7bdd6ad52dead42e7b539efbd42efce5af7efbdffffefffffffffffefffffefffffefffffeff7 +f7deffffe7fff7d6fff7def7f7d6fff7d6f7efd6ffefcef7efd6fff7cef7efceffefcef7efcefff7d6fff7d6efdec6736b5a3931393129315a524acec69cffff +d6f7e7bdffefc6ffefb5c6b58c5a4a4a3931393129314231397b6b4aefd68cf7e7adf7e7adf7e7adf7efbdefde9cf7efbdf7e7a5f7e7adf7e7b5f7e7a5f7e7b5 +f7e7adefdea5f7efbdf7dea5f7e7adf7e7b5f7e7a5f7e7adf7e7b5efde94f7e7adf7e7adf7de94f7e7adf7e7b5f7de94f7e7adf7e7adf7de94f7de9cf7e7adf7 +de94f7de9c7b6b5a292129292129312931292129423939ceb56bffefa5c6b584393131292129312931292129292931392931b59c6bf7ce6befce4af7d673f7de +8cf7d67bf7d66befd673f7de94f7d67bf7d66befce6bf7de84f7d684f7d66befce52f7d673f7de84f7d673efce52f7ce52f7d66bf7de7befd66bf7ce4aefce42 +f7d663efd673f7d663efc642efc631efc642f7d65aefce5aefc642e7bd31efc642efc64aefce52e7bd4ae7bd4adeb54ae7bd52e7bd4ae7bd4adebd4adeb552ce +ad5ad6b55ad6b54adeb542cea54ab59c639c84638c7b6b84735a9c8452b5944acea54acea54ad6ad52d6ad4adeb54adead42e7b539e7b539deb542deb542deb5 +4adeb5390000efce63f7d66befce63f7d663efce63f7ce63efce6bf7d66befce6bf7d673efce73f7d673d6c67363635a5242425a524a524a425a524a635a526b +6b63adad9cf7e79cefd684f7de84f7d684efce5ad6ad42cea54a9c84426b5a424239393129393129315a4a4a73634a7b6b52947b52bd9c63d6bd84d6bd84d6bd +73dec684d6bd63f7efc6efe7bdd6bd84b59452ad8c52b58c4ac6a54ae7ce84fff7d6f7f7effffff7fff7efffffeff7f7effff7e7f7f7e7ffffe7f7f7defff7e7 +f7f7d6fff7d6f7efdef7efcef7efceffefcef7efcef7efcef7efc6fff7d6fff7d6deceb5635a4a393139292129635a52d6c6a5fff7d6f7e7b5ffefc6ffefbdbd +ad8c524239393131312931393131736342e7ce7bf7efb5f7e7adf7e7adf7e7b5efdea5f7efbdefde9cf7e7b5f7e7adf7e7a5f7e7b5f7dea5f7e7adf7e7b5efde +9cf7e7b5f7e7adf7e7a5f7e7b5f7dea5efde9cf7e7b5efde9cf7de9cf7e7adf7de9cefde9cf7e7b5efde9cf7de9cf7deadf7dea5efde8cffefada5946b312929 +292129312929292129312931a5946bffe79ce7ce7b5a524a2121293129312921292929292929297b6b4ae7c663f7d663f7d67bf7d673efce6bf7de84f7de8cf7 +d673efce63f7d67bf7d68cf7d67befce5aefd66befd684f7de84efce63efce52efce6bf7de84efd66bf7ce52efce52f7d673efd67bf7d66befc642efce42efce +5af7d66befce5aefc642e7bd29efc642efc652efce52e7bd42e7bd39e7bd39efc64ae7bd42efc64ae7bd42debd52d6b54ae7bd4ae7bd39e7bd4ad6b552cead5a +cead52d6ad52d6ad42d6ad4abd9c52a58c63847363847363847352a58c4abd944acea552cea552cead52cead4adead4adead39e7b539deb531deb5420000f7d6 +63efce63f7d663f7ce5af7d66befce6bf7d663efce6bf7d66befd673f7d673f7d673e7ce7b6b6b63524a4a5a524a5a524a5a524a6b5a526b635a9ca594efdea5 +ffde7bffde7bffde73dec66b947b425a4a39393131312931393139423939524a427b6b529c8c639c845ab5945ac6a55adec68cceb573dec68cd6bd73dec673d6 +b563a5946b8473528c7b5a947b52c6a56befd69cfff7e7f7f7e7ffffeffff7efffffefffffefffffeffff7e7ffffeffff7defff7e7f7f7defff7defff7defff7 +d6f7f7defff7cef7efcefff7d6f7efcefff7cefff7cecec6ad5a4a4a3931313129316b635adecea5ffffd6f7e7bdfff7ceffefb5bdb594524242393139312931 +393139736342e7ce73ffefb5f7e7a5f7e7bdf7e7adf7e7adf7efbdf7dea5f7efbdf7dea5f7e7b5f7e7b5f7e7a5f7e7b5f7e7adf7e7a5f7efbdefde9cf7e7b5f7 +e7b5f7de9cf7e7b5f7e7adefde9cf7e7b5f7dea5f7de9cf7e7b5f7e7adefde94f7e7b5f7e7a5f7de94f7dea5ffefadbdad7b4239392921293129312921292921 +29635242efd684ffe7948c7b6b2121293129312929292929292921295a4a42debd73f7d66befce5af7d673f7de8cf7de8cefce6bf7d67bf7de8cf7de8cefd66b +f7d66bf7d684f7de8cefd673f7d663efd673f7de8cefd67bf7d66befce5af7d673f7d67bf7d673efce52f7ce52efd66bf7de7bf7ce63f7ce42efc639f7d65af7 +d663f7d65aefc639efc631efc639efce4aefc64aefc64ae7bd39e7bd42e7bd42efc642efc642e7bd4adeb54ae7bd52e7bd4ae7bd4ae7b542debd52d6ad5acead +5ad6ad52deb54acead4ac6a552a58c638c846b7b6b6384735a8c7b4aad9452c69c4acead52c6a552cead52dead4ae7b539deb5390000efce4af7ce4aefc64af7 +ce52efce5af7ce5aefce5af7ce63efce63f7d66befce6bf7d673e7ce7b84846b524a425a524a524a4a5a52525a524a6b6b63848c84efde9cefce6bc6ad638473 +4a4a42422921292929313129314239395a4a427b6b52947b5aa58c5aa58c52ad8c52ad8c52d6b56bc6ad63dec67bd6b56bcead5acea54acea542947b4a7b6b52 +947b5ad6bd7bf7e7b5fff7def7efd6fff7e7f7f7e7fff7e7f7f7efffffe7f7f7e7ffffeff7f7defff7e7f7f7defff7def7f7defff7d6f7f7def7f7d6f7efd6f7 +efcef7efcefff7deffefceb5ad944a39393129313129297b6b63e7d6adfff7d6f7e7b5ffefceffefb5bdad8c4a39393931393129313931396b5a39e7c673f7e7 +b5f7e7a5f7e7bdf7e7a5f7e7b5f7e7b5efdea5f7efbdefde9cf7e7b5efdea5f7e7a5f7e7b5f7de9cf7e7b5f7e7adefde9cf7efbdefdea5f7e7a5f7e7b5f7de9c +efdea5f7e7b5efde94f7e7adefe7adf7de9cefdea5f7e7b5efd694f7de9cf7e7adf7e79cdec68c5a4a4a2121292929292921292921294239397b6b52bda573ad +9c73312931312931292129292929292129423131b59c63efc652efce63f7de8cefd67bf7d66befd67bf7de94efd67befd673efd67bf7de94efd684efd66befce +6bf7de8cefd684f7d673efce5af7d673efd684f7d67befce5aefce63efd673f7de84f7d66befce4aefc642f7d66befd673f7ce5aefc639efc639efce4af7d663 +efce52efc639e7bd29efc639efc64aefc64ae7bd39e7bd42debd39e7c642e7bd42efc64adebd42deb54ad6b54adeb54adeb539e7bd42deb542d6b552cead52ce +ad5ad6ad4ad6ad4ac6a54aad945a8c7b63736b636b6352846b529c844abd9c4abd9c52cea552cea552d6ad520000f7c629f7c618f7c621efc621f7ce31f7c631 +f7ce42efce4af7ce52efce5af7d65af7ce63f7d6738c8c6b5a52525a524a5a52525a524a635a526b6b5a7b84738484636352423129312921312929314231394a +424273634a947b52b59c63bd9c5ab5945aa58c52c6a552b59452b5945abd9c52bda55ac6ad5ac6a552c69c4acea54ac6a54ac69c4abda573efde9cffefc6fff7 +d6f7efcefff7def7f7defff7defff7e7ffffe7fff7e7ffffeff7f7deffffe7f7f7defff7defff7defff7d6f7f7defff7d6f7f7d6fff7def7efd6ffffdef7efce +a59c8c4231393129313129316b5a52decea5ffffd6f7e7bdfff7ceffe7b5b5a58c4a3939393131312931393139735a39e7ce7bffe7adf7e7a5f7e7bdf7e7a5f7 +e7bdf7e7adf7e7b5f7e7b5f7dea5f7efbdf7dea5f7e7b5f7e7adf7e7a5f7e7b5f7e7a5f7e7adffefb5f7de9cf7efb5f7e7adf7e7a5f7e7b5f7e7a5efde9cf7ef +bdf7dea5f7e7a5f7e7b5f7e7a5f7de9cf7e7b5efde9cf7e79cf7dea5736b522121293129312921292921293129317363527363526b5a52524a42393139312931 +2929312921293931318c7b4af7ce6bf7d673f7d66befd66bf7de8cf7de94f7d67befd673f7de8cf7de94f7de7befd673f7de84f7de94f7de84efce6bf7d673f7 +de8cf7de8cefd66befd663efd673f7de8cf7d67bf7ce63efce5af7d673f7d67bf7d66befc642f7ce4aefce63f7d66befce5aefce42efc639f7ce4aefce5af7ce +52efc639efc631e7bd31efce42efc642efc642e7bd39e7c642e7bd42efc642e7bd39e7bd4adeb552debd52deb54ae7bd42e7bd39e7bd4ad6ad52d6ad5acead5a +cead52d6ad42cead4aad945a94846b7b7363736b637b6b52947b52bd9c4acead5aad945a0000e7b518efbd10efbd10efbd10e7bd10efbd18efbd18f7c621efbd +21f7c631efc631f7ce39efce429c9c6b5a5252635a525a524a5a5252635a526b6b6373736b4a4a5221182929213131293163524a8c734aad8c52bd9c4abd9c52 +c6a552c6a55abd9c52ad8c52b5944aad9452b59452bd9c52ad9452bd9c52b5944abd9c52bd9c4acea54acea542f7de84f7efcefff7d6f7efcefff7def7f7deff +f7def7f7defff7def7f7deffffe7f7f7defff7e7f7f7defff7def7f7def7f7d6f7f7defff7d6f7efd6fff7def7efd6ffffe7e7debd8c84733931313129313931 +3163524a9c8c73f7efc6f7efbdfff7cef7e7b5a5947b423939312931312931393139735a39e7ce84f7e7a5f7e7b5efe7b5f7e7a5f7e7b5f7e7a5f7e7bdf7e7ad +f7e7adf7e7b5efdea5f7e7bdefdea5f7e7b5f7e7adf7dea5f7e7b5f7e7a5f7dea5f7e7b5efde9cf7e7adf7e7adf7de9cf7e7adf7e7adefde9cf7e7b5efdea5f7 +de9cf7e7adf7e7a5efde94f7e7adf7e7a59484632921292929292921292921292921295a4a4a7363526b5a525a524a4a39422929292929292121293129316352 +39e7c673efc652f7d66befd68cf7de8cefd673f7d67befd68cf7de8cefd673f7d67befd68cf7de94efd673f7d673efd684f7de8cefd67befd66befd673f7de8c +efd67bf7d66befce63f7d67bf7d684f7d673efc64aefce52efd66bf7d673efce5aefce42efc642f7d663efce63efce52efc639efc631efc642efce52efc64aef +c639e7bd31e7c639efc639efc64ae7bd39e7bd42deb542e7bd42e7bd42e7bd42e7bd39e7bd4ad6b54adeb54adeb542e7bd42deb542d6b552cead52cead5acea5 +4ad6ad4ac6a54abd9c52a58c5a94846b7b73637b6b52947b4a524a390000efbd29e7b521efbd21e7b521efbd29e7b521efbd21e7b521efbd18f7c610f7c621ff +ce21f7c629a59c63635a5a635a52635a5a63635a73736b737b7373847b636b634a42426b5a4aad945ad6bd63efce52cea542c69c4ac69c42cead52c69c4acea5 +52b59452b59c52b59452c6a55ac6a55abd9c52b59452bd9c52c69c4acead4acead4ad6b54adebd5afff7c6f7efcefff7d6fff7d6fff7d6f7f7defff7def7f7d6 +fff7e7f7f7d6ffffe7f7f7defff7defff7e7fff7def7f7defff7def7f7d6fff7deffefd6ffffe7ded6b5736b633129313931393931396b635284735a8c7b63c6 +bd9cffefceefdeb59c8c7b4239393931393129314231397b6339efd68cf7e79cffefbdf7e7adf7e7b5f7e7b5f7e7adf7e7bdf7e7a5f7e7bdf7e7adf7e7adf7ef +bdefdea5ffefc6f7e7a5f7e7adf7e7b5f7e7a5f7e7b5f7e7adf7de9cffefbdefde9cf7e7adf7e7b5f7e79cf7e7adf7efbdefde9cf7e7adf7e7b5f7de9cf7dea5 +f7e7b5f7e79cb5a57b3129312929312921292929312921296b5a4a84735a73635263524a524a4a3129313129312921293129314a3939cead63efce5af7de8cf7 +d67bf7d673efd684f7de94efd684f7d67befd684f7e79cf7d684f7d673efd684f7e79cf7d684f7d673efd673f7de94f7de8cf7d673efce63f7de84f7de8cf7d6 +7befce63f7d663f7d67bf7de84efce63f7ce52efce52f7d673f7d673f7d65aefc642efce42efce52f7d663efce4aefc639e7c631efce42efce4af7ce4ae7c639 +efc631e7c631efc639efc639efc642e7bd42e7bd4ae7bd42efc639efbd39e7bd42deb54adeb55ad6b552deb54adeb542e7b54ad6ad4acead5ac6a55acead5ad6 +ad4adeb542c6a54aad94637b736b4a4a4a1818210000efbd10efbd18e7b521efbd21e7b521efbd21efbd29f7bd29efbd29e7b531bd9c31947b39635231737363 +6b635a6b6b636b736b738c84738c847b9c8c7b9c8c7b8c7bad945adebd5aefc663efc64aefc64ad6ad42bd9c4acea542c69c4ac6a54ab5944abd9c52ad944abd +9c52b59452bd9c52bd9c4ac6a55acead52d6b55acead42cead4ad6b54ad6ad4aefd684f7efcef7efceffefcef7efd6fff7d6f7efd6fff7def7efd6fff7def7f7 +defff7def7f7defff7d6f7f7defff7d6f7efd6fff7defff7d6ffffe7bdb5945a524a3129313129314239317b6b5a7b6b527b6b5a7b6b527b6b5a8c7b6b736352 +423939312931312931393139846b39efde94f7e79cf7efbdefdea5f7e7bdf7e7adf7e7b5f7e7b5f7e7a5f7e7bdf7e7a5efe7b5f7e7adefdea5f7efbdefde9cf7 +e7bdf7dea5f7e7a5f7e7b5f7de9cf7e7adf7e7b5efde94f7e7b5f7dea5f7de9cf7e7b5f7e7a5efde9cf7e7bdefde9cf7de9cf7e7b5f7de9cf7de9ccebd8c4239 +312921292921292929292118216b5a4ae7ce94e7d6847b6b52524a42393131312931292129292129312929a58c5aefce73f7d66befce6bf7de8cf7de94f7d684 +efd673f7de94efde94efd67befce73f7de94efde94efde84efce73f7d684f7de8cf7d684efce6bf7d67bf7de8cf7de8cefce6befd66befd67bf7de8cefd673ef +ce5aefce63f7d67befd67bf7d663efc64af7ce5aefce63f7d66befce52efce39efc639f7ce52efce52efce4ae7c631efc631efc639f7ce4aefc642efc639e7bd +31e7c639e7bd31efc639e7bd39e7bd42deb542e7bd42e7bd42e7bd39e7b539deb54ad6ad52d6b55ad6ad4adeb542deb539deb54acead52cead5acead52cead52 +cea54ab5945a3131312121290000f7ce29f7c618ffce18f7ce18f7ce21e7b529cea539a584317b63394a4231312931211829212131525252737b7373847b7b9c +8c7b9c8c84ad9484ad948cb59c8cad94ceb55ae7bd42e7bd52e7bd42efc64ad6ad39cea54ac69c4abd9c52b59452bd9c52b59452b59c52bd9c52bd9c5ac6a54a +cea54ad6b563d6b563d6b552d6ad52d6b54ad6b552d6b54adebd5af7efbdfff7cef7efd6fff7d6f7efcefff7def7efd6fff7def7f7d6fff7d6fff7defff7d6f7 +f7defff7def7f7d6fff7e7fff7defff7dea594844a424239293139313973635ad6c6a5e7deb5bdb59c7b6b527b6b5a735a5263524a4239393129313129314239 +398c734af7de94f7e7a5ffefc6f7dea5f7efc6efdea5ffefbdf7e7adf7e7b5f7e7b5f7e7a5f7e7bdf7e7a5f7e7b5f7e7b5f7e7a5f7efbdf7dea5ffefb5f7e7ad +f7e7a5f7e7b5f7e7a5f7e7a5f7e7b5efde9cf7e7b5f7e7adf7de9cf7e7b5f7e7adefde9cf7efb5f7dea5f7de9cffefb5dece9c52423929213129212931293121 +2129524a42d6bd7bffef9cdece9463524a393139312931292129292931312931847352e7c663efce5af7de8cf7de94efd67bf7de84f7de94f7de94efd67bf7de +8cf7de9cf7de94efd67bf7de84f7de94f7de94efd673f7d67bf7de8cf7de94efd67bf7d673f7d684f7de94efd684f7d66bf7d66bf7de84f7d684f7d673efce52 +f7d663f7d673f7d67befce5af7ce4aefce52f7d66bf7ce63f7ce52efc639efce42efce4af7ce52efc64aefce39e7c631efce39efc642f7ce42efc639efc639e7 +bd39efc642efc639efc639e7bd39e7bd4adebd4ae7bd42e7bd39e7bd42deb542d6b552cead5adeb552deb542e7bd42deb542d6ad52c6a55abda5637b63422121 +292121290000efc642debd39b59429a58c297363315242313129292121312118292921312921313129313129315a5a527b94847b9c947ba58c84ad9484ad948c +b59c8cb5948cb59cb5ad63efbd39deb542e7bd39e7bd39deb542bd944abd9c4ab5944abd9c52bd944ab59452bd9c4ac69c52c69c4ac6a54acead42cead5ad6b5 +5ad6b552cead4ad6b54acead4ad6b54acead42efd684f7efc6f7efc6f7e7bdfff7d6f7efcef7efcef7efd6ffefcef7efd6fff7d6f7efd6fff7def7efd6fff7e7 +fff7d6efe7ce847363423139312931393139847b6befe7bdfff7d6fff7c6f7efce9c947b6b5a4a5a524a393131312931312931423931947b52f7de94f7e7adf7 +e7b5efdea5f7efbdefdea5f7efbdefde9cf7efbdefdea5f7e7adefe7adf7e7a5f7e7bdf7e7a5f7e7b5f7e7b5efdea5f7efbdefde9cf7e7b5f7e7adf7de9cf7e7 +b5f7e7a5efde9cf7e7b5efde9cf7e7adf7e7b5f7de9cefe7adf7e7b5efde94f7e7adf7e7ade7d68c6b6352292129292129292929212129393131b5a56bffefad +efd6947363523129293129312921292921292921295a4a42d6b563f7d673efd67befd66befd684f7de9cefd684efd67befd68cf7de9cefd684efd67befde8cf7 +de9cefd684efd673efd684f7de9cefd684efd673efd684f7de94efd68cefd673efce73f7de8cefd68cf7d67befce5af7d66befd67bf7d67befce63efce52efce +63f7d673efce6bf7ce5aefc642efce52efce63f7ce63efc642efc631efc639f7ce4aefce52efce42e7c631efc631e7bd31efc639efc639efc639e7bd31e7bd39 +e7bd39efc639e7bd31e7bd39deb542debd4adeb542e7bd39e7b539deb54ad6b54adeb552d6b54adeb54ad6ad39d6ad4acea55229293118182129212900006352 +3939313129293121213129213129212931313139313139313942393963524a84734aad9452b59c528ca58c73948c8cb59484ad948cb59c8cb5948cbd9c8cb59c +adb57be7bd31e7bd39dead31d6ad4ac69c4abd9c52bd9c4ac69c52bd9c4abd9c52c69c4acea552cea542cead4acea542d6ad4acead4ad6b55ac6a552d6b54ace +ad4ad6b542cead4ad6ad4ad6b54af7e7adf7e7b5ffefc6f7efc6f7efc6f7efceffefc6f7efcefff7cef7efcefff7def7efceffffe7fff7d6cebda563524a3931 +393129314a4242ada58cffefc6fff7d6ffefc6fff7d6ffefbd9484735a4a4a3931393129313129314a3931ad9463ffe794f7efbdf7e7b5f7e7b5f7e7b5f7e7ad +ffefbdf7e7a5ffefc6f7dea5ffefbdf7e7adf7e7adf7e7b5f7e7a5f7e7bdf7e7a5f7e7adf7e7b5f7dea5f7efbdefdea5f7e7adf7e7b5f7de9cf7e7b5f7e7adf7 +de9cf7efbdefdea5f7e7a5f7e7bdf7e7a5f7dea5f7efbdf7de9cf7e7a5847363292129292129312931292129292929a5946bffe79cf7de8c9484732921293129 +312929292929312929294a4239c6a56bf7d66befce5af7de84f7de94f7de84efd67bf7de9cf7de94f7de84efd684f7de9cf7de94f7de84efd684f7de94f7de94 +f7d67befd67bf7de8cf7de94f7de84efd673f7de8cf7de94f7de8cefd673f7d673f7d684f7de8cefd673efce63efd66bf7de84f7d67bf7d663efce52f7d663f7 +d66bf7d66befce4aefce4aefce52f7ce5aefce52f7ce42efc631efce39efc642f7ce4aefc642efc639e7bd31efc642efc639f7c639e7bd31e7c639e7bd39e7c6 +39efbd31efc639e7bd39debd4adeb552debd52e7bd39efbd39deb542deb552cead5acead5ad6ad4aad8c4a181821292129212129000029212931293131292931 +31313931314a42425a4a427b6b4a9c844ac6a54adeb542efc639f7c629dec6428ca5847b9c8c84ad948cb59484ad948cb59c8cb5948cbd9c9cad84d6ad39cea5 +42c69c4abd9c4ac69c4ac69c42cea54ac69c42c6a54ac6a54acead4acea542cead4acea542cead4ac6a54ad6ad4acea552cead52cea539cead4acead42cead4a +cead42cead4ae7ce73f7e7b5f7e7adf7e7adf7e7bdf7e7b5f7e7bdf7efbdf7e7bdfff7d6f7efc6ffffdeefe7bd9c9484423939392931312931635a4ac6bd9cff +f7c6ffefcef7efbdfff7cef7e7bda59c84524242393131312931312931524231b59c63ffe794f7efc6f7e7adf7e7bdf7e7adf7e7b5f7e7b5efe7adf7efbdefde +a5f7efbdefde9cf7efbdefdea5f7e7b5f7e7b5f7dea5f7e7bdf7e7a5efe7adf7e7b5efde9cf7efbdefdea5f7e7adf7e7b5f7de9cf7e7adf7e7b5efde9cf7e7b5 +efdea5f7de9cf7e7b5f7e7a5efde9cffefb594846331292929212929292929212929212984735aefde8cffe7a5ad9c7b29212929212929292929292929212939 +31319c845aefce5aefd673f7de8cefd673f7d684efde9cf7de8cefd67bf7de8cefde94f7de8cefd67bf7de8cefde94f7de8cefd673f7de84efde94f7de8cefd6 +73f7d684efd68cf7de8cefd67befd67befd68cf7de94efd67befce63efce6bf7de8cefd67bf7d66befce5af7d673f7d67bf7d673efce5aefce4aefce5af7d66b +efce5aefce4aefc639f7ce4aefce52efce4aefc639efc631efc631f7ce42efc639efc642e7bd31efc629e7c631efc639efbd31efc631debd39e7bd42e7bd39ef +bd31e7bd31e7bd42deb54adebd4adeb54ae7bd42deb539deb542cead4ac6a55a42393121212921212121212900004a4242524a42635a4a6b5a4a8c7352a5844a +deb542efc639f7ce31f7ce29f7ce42efc631f7ce29e7c6399cb58c7b9c8c8cb59c84b5948cb59c8cb59494bd9c8cbd9c94b594bda54ac69c4ac6a542d6ad42de +b539d6ad42cea542d6ad42cea542d6ad4acead4ad6ad42cea542d6ad42cead4acead4acead52cead52d6b552cead4acead42cead52cead42d6ad4acea542deb5 +52f7de9cf7e79cf7e7a5f7e7a5f7dea5ffefb5f7e7a5ffefc6ffefbdfff7ced6c6a573635a312931312931392931847363e7debdfff7cef7efceffefc6fff7ce +efdeb5847363423939393131313131392931634a39ceb573ffefa5f7efc6f7e7adf7efc6f7e7a5f7efc6f7e7adf7e7bdf7e7adf7e7b5f7efbdf7e7a5ffefc6ef +dea5ffefc6f7e7adf7e7b5f7e7b5f7e7a5f7e7bdf7e7a5f7e7adf7efbdefde9cf7efbdf7e7adf7e7adf7e7bdf7e7a5f7e7adf7efb5efde9cf7e7b5f7e7adf7de +9cf7e7b5ffefadad9c6b3931312921293129312921292921296b5a4aefde9cffefadcebd843931392921293129313129312921293931317b6b4aefce7bf7d673 +f7d66befd67bf7e79cefd68cf7d67bf7de8cf7e79cefd684f7d684f7de94f7e79cefd684f7d684f7de94f7de9cefd684efd67bf7d68cf7de9cefd67bf7d67bef +d684f7de9cf7d684efd673efd673f7de8cf7d68cf7d673efce63f7d67bf7d684f7d67befce63f7d663efd66bf7d67befce63f7ce52efce52f7d663f7ce63f7ce +5aefce42efce42efc642f7ce5aefce4aefce42efc631efce31efc639f7ce42efc631efc631e7c631efc631efc631f7c631e7bd31e7bd42debd42e7c642efbd31 +efc639e7bd39e7bd52d6b552d6b552deb542efbd42846b4221212921212929212921212900009c844aad8c52ad8c52b59452cea539efc629efc621f7ce29efc6 +31efce39efc639efce39efc642efce4aa5b5847ba59484ad948cb59484ad948cbd9c8cb5948cbd9c8cad94bdad5ad6ad31debd42e7c642efce4adeb542d6ad39 +cea542d6ad42cead42cead42cead42cead4acead39cead4acead39cead52cead52cead52cead52cead42c6a542cead4ac6a54ad6b54ac6a542e7c66befde94f7 +de9cefde8cf7e7adf7de9cf7e7b5ffe7adefdead9c8c734a3939292129312931423939ad9c7bf7e7bdffefbdf7e7bdffefbdffefbdcec69c6b5a523931393129 +31312931392931736342d6bd73ffefadf7e7b5f7e7b5f7e7bdf7e7adf7efc6f7e7a5f7e7bdf7e7a5f7e7bdf7e7adf7e7b5f7e7b5efdea5f7efc6efde9cf7efbd +efdea5f7e7adf7e7b5f7de9cf7e7bdf7e7a5efdea5f7efbdefde9cf7efbdf7e7adf7dea5f7e7b5f7dea5efdea5f7e7b5efde9cf7e7adf7e7adffe79cbdad8442 +39392121292929292921292121295a4a39e7ce9cffe794dec694524a42292129292929292931212129312931635242dec673efc652f7d67bf7de94f7d684efce +73f7de94efde94f7d684efd684f7de9cefd694efd684efd684f7de9cefde8cefd67befd684f7de9cefd68cefd67befd67bf7de94efd68cf7d684efd673f7de8c +efd68cefd67befce63f7d67bf7d68cf7de84efce6befd663efd67bf7de84efce6befce5aefce5af7d66bf7ce6bf7ce63efce4af7ce52efce5af7ce63efce52ef +ce42e7c639efce42efc64af7ce4ae7c639efc631e7c631efc639efc639efc639e7bd31e7c639e7bd31efc631efbd29efc639e7bd39e7bd42e7bd39efbd39e7bd +39e7bd42d6b54ad6b55ab5944a3129292118212121292121212121290000d6ad42cea531cea54acea542efc629f7c621f7ce31efc631f7ce42efce42f7ce42f7 +ce42f7ce42efc642adbd847ba5948cb59c84ad948cb59c8cb59c94bd9c8cbd9c8cbd9cbdb573f7d663efce4af7d663efce52f7ce5adead31d6ad42d6ad39d6ad +4ad6ad42d6ad4ad6ad42d6ad4acead42d6b54acead4ad6bd63c6ad52d6b55acea54ad6ad4ac6a54acead4acead4acead4acead4af7de9cf7de94f7e7adf7de9c +ffe7a5ffefadcebd84635a52312931292129312931524a42d6c694ffefadffefb5f7e7a5fff7bdf7e7a5ada5844a42393931393129313131313931318c7b52ef +ce7bffefb5f7dea5f7efbdf7e7b5f7efbdf7e7b5f7e7b5f7efbdf7e7adf7efbdf7e7a5f7e7bdf7e7adf7e7b5f7efb5f7e7adf7efc6f7dea5ffefbdf7e7a5f7e7 +adf7e7bdf7e7a5f7e7bdf7e7adf7e7adffefc6f7dea5f7e7b5f7e7adf7e7a5f7e7b5f7e7a5efde9cf7efbdefde9cffefa5cebd944a4239292129312931292129 +2921294a4242d6bd84ffe79cefdead635a4a212129292929312931292129312931524239cead5af7ce63f7de8cefd67bf7d67bf7de94f7de94efd67bf7de8cf7 +de9cf7de8cefd67bf7de94f7de9cf7de8cefd67bf7de9cf7de9cf7de8cefd684f7de94f7de94f7de84efd67bf7de8cf7de8cf7de8cefd673f7d67bf7de8cf7de +8cefd673f7d673f7d67bf7de8cefd67bf7d66befce6bf7d67bf7d67bf7d66befce5af7ce5af7ce6bf7d673efce5af7ce52efce4af7d663f7ce5af7ce52efc639 +efce39efc642f7ce4aefc642efce39e7c631efc631efc639f7ce39efc631efc631e7bd31efc631efc629efc629efbd31e7c642debd4ae7bd4ae7b539efbd42de +b54a5a4a391818212921292121292921292121290000dead31deb542d6a531e7b529efc629f7ce31efc631f7ce39efc639f7ce39e7bd39e7bd39cea539d6ad42 +a5ad7384ad9484ad948cb59484ad948cb59c8cb59494bd9c8cb594b5c69cefd67befd663efce6bf7d663efd66be7bd39d6a539d6ad42cea542d6b542cea542d6 +b542cead4ad6b542cea542d6ad4acead5aceb563ceb552cead52cead4ac6a552cead4ac6a552cead4abd9c52dec66bffefadf7e7a5ffefa5e7d69c9484633931 +312921292921293931315a524ab5a584f7de94f7e7adefde94fff7bde7ce8c8c7b6b393131393131292129312931423931ad9463f7d673ffefb5efde9cf7efbd +efde9cf7efbdefdea5f7efb5efdea5f7e7b5f7e7b5f7e7a5f7e7bdf7dea5f7e7bdf7e7a5f7e7b5f7e7b5f7dea5f7efbdefde9cf7efbdefdea5f7e7adf7e7bdf7 +de9cf7e7bdf7e7adefdea5f7efc6efde9cf7e7adf7e7adefde9cf7e7b5f7e7adefde94ffefbdd6c694524242211829292929292129292129393131c6ad73ffef +adf7e7a57b6b5a292129292129312931212129292929393131b59c5af7d673efd66befd673f7de9cefd694efd67befd68cf7e7a5efd684efd684efde94f7de9c +efd684efd68cefde9cf7de9cefd67befd684efde94f7de9cefd67befd684f7de94f7de94efd67befd67befd684f7de94efd673efd673efd67bf7de94efd684ef +d66befce6bf7de84efd684f7d673efce63f7d66befd673f7d673efce63efce5aefce5af7d66bf7ce6bf7ce5aefc64aefce4aefce52f7ce5aefc642efc639efc6 +31f7ce42efc642f7c639e7c631efc631e7c629efc631efc631efc631e7bd31e7bd31e7bd31efc631e7bd29e7bd39deb542debd52debd4a947b42211829212129 +2121212121292121212121290000e7b542e7c673dead31e7b529f7ce31efc629efc639deb531deb539cea539cea539ce9c39cea542d6a539b5ad6b8cb5948cb5 +9c84ad948cb59c8cb5948cbd9c8cbd9c8cbd9ca5bd9cf7de94f7d67bf7d673efd673f7de84e7c642deb539d6ad42d6ad42d6ad42d6b542d6b542d6b54ad6b54a +cead52d6b54acead5ad6bd6bcead5ad6b55acead52cead4acead52c6a54acead52c6a552ceb563d6c694ffe7adc6b58c5a524a2921292929312921294a42426b +635284735aad9c73ffefadffe78cffefadc6ad736b5a523129313931313129313931395a4a39c6ad6bffde7bffefb5f7de8cffefb5efde94f7efb5efde94ffef +bdf7de9cf7efbdefde9cf7e7b5f7e7adf7e7adf7e7b5f7e7a5f7efbdf7e7a5f7e7b5f7e7adf7e7a5f7efbdefde9cf7efbdf7e7a5f7e7adf7e7b5f7e79cf7efbd +f7efb5efdea5ffefbdf7de9cf7e7adf7e7b5f7e79cf7e7adffefb5dece8c635a52292129312931292129292129312929b5a57bffe7a5ffe7949c8c7329293129 +21293129312921292929313129319c8463efc663f7d663f7de94f7de94efd67bf7de9cf7de9cf7de84efd684f7e7a5efde94f7de84efde94f7e7a5efde8cf7de +84efde94f7e7a5efd68cf7d684efde94f7de9cefd68cf7d684f7d68cf7de9cefd68cf7d67befd67bf7de94efd68cf7d67befd67bf7de8cf7de8cf7d67befce63 +f7d673f7d67bf7de84efce6befce63efce6bf7d67bf7d673f7d663efce52f7d663f7ce63f7d663efce52efce42efce4af7ce52efce4af7ce42efc639efce39ef +c639f7ce42efc639efc631e7c629efc631efc629efc631efbd29e7c642e7bd39e7bd39efbd29efc631efbd39cead523131312121292121292921292121292921 +292121290000cea531cea542cea531cea539d6ad31cea531cea539ce9c39ce9c39cea539cea531d6ad31dead31e7bd39c6bd6384ad947b9c848cb59484ad948c +b59c8cb5948cbd9c8cbd9494bd9cded68cf7d684efce6bf7de84efd673efce63d6ad31d6ad42d6ad39d6ad4ad6b539d6ad4acead42d6ad4acead4ad6b552cead +4ad6bd6bcead5ad6b55abda552cead52bd9c52cead52c6a563ad945a63524a4a42426b5a4a312931211829292129312929524a427363527b735a736352846b5a +bdad7bdebd7b9c8c634239393129313129313129313931317b6342debd6bffe78cf7e794f7de94f7e7a5efd68cf7e7a5efde94f7e7adefd68cf7e7b5efde8cf7 +e7b5efd68cf7e7adefde9cf7e7a5f7e7adf7de9cf7e7b5f7de9cf7e7b5f7e7adf7dea5f7efb5efde94f7efbdf7dea5f7e7adf7e7bdf7de9cf7e7bdf7e7b5efde +9cf7e7b5efde9cf7e7a5f7e7b5f7e79ce7d69c6b635a2118212921292921292921292921299c946bf7de94ffefada59c7b312931292129312931292129292929 +3129317b6b4ae7c663f7de84efd684f7d67befde94f7de9cefd67bf7de8cefde9cefde94efd684f7de9cefde9cefde8cefd684f7de9cefde94efd684efd684f7 +de9cefde94efd684efd684f7de9cefde94efd684efd67bf7de94efd68cefd67befce73f7de84efd68cefd684efce6bf7d67befd684f7d684efce6befd663efce +73f7d67befd673efd663efce5af7d66bf7d673f7d66befce52efce52efce5af7ce63efce52efce4aefc642f7ce4aefc64af7ce4aefc639efc631e7c631efc639 +efc639efc639e7bd31e7c631e7bd29efc629efbd31efbd31e7bd39e7bd42debd42efbd426b52312121292121212121292121212121292121212121290000d6a5 +39c69c39d6ad42cead4ad6ad42d6b563d6ad42deb54adead31dead29e7bd42efc642f7ce52f7ce5adece738ca58c7b9c9484b5948cb59c8cb5948cbd9c8cbd94 +94bd9c8cbd9cd6d694f7d684f7d673efd684f7d67befd67be7bd39d6ad39deb542cead42deb54acead4ad6b54acea54ad6b552cead52d6b55acead5ad6b56bc6 +a552cead52c6a552d6b563b59c6373634a3931393129313129312921292118212921295a524abdb58ccebd84a59c7b7363527b6b5a6b5a52635252524a423931 +393129313129313129314239319c845af7d66bffefa5f7de84f7e7adf7de84f7e7a5f7de8cf7de9cf7de94f7de94f7e79cf7de94f7e7adefd684f7e7b5efd684 +ffefb5f7de94f7e7adf7dea5f7de9cf7e7b5f7de94f7e7b5f7e7a5f7dea5f7efb5efde94ffefbdf7e7a5f7e7a5f7e7b5f7de9cf7e7adf7e7adefde94f7efb5ef +de9cffe7a5efdead736b522121292929312921292929312921298c7b5af7de9cfff7b5bdad7b3931392921293129312929292929293129316b5a4ae7c67bf7d6 +6befce6bf7e79cf7de9cf7d684efde8cf7e7a5efd68cefde84f7de9cf7e7a5efd684f7de94f7dea5f7de9cefd684f7de94f7dea5f7de94efd684f7de94efde9c +f7de94efd67bf7de8cf7de9cf7de8cefd67bf7de84f7de94f7de94efd673f7d67bf7d68cf7de94efd67befd66befd67bf7de8cefd67bf7d66befce63f7d673f7 +d67bf7d673efce63f7d663efce63f7d673efce63f7ce5aefce52f7ce5af7ce5af7ce52efce4aefce42efc642f7ce4aefce42efce39e7c631efce31efc631f7ce +39efc631efc631e7c631efc631efbd31efc631e7bd39efc6429c84422921312121292921292121292921292121292921292121290000dead42e7c66bdeb552ef +d68cdeb54aefd68ce7bd4af7de94efc652f7d673efce5af7ce63efce63f7d66bdece6b94b58c7ba5948cb59c84ad948cb5948cb5948cbd9c8cbd948cbd9cbdc6 +94f7de8cefce73efd684efd673f7de8cdebd42d6ad39d6ad42d6ad42cead4ad6ad42d6ad4acead4acead4acea54acead52c6a552cead63c6a55ad6b55abda563 +7b7352423942292131312931312931393131312931423939948c73efdeadffefbdffefb5efdead8c7b6363524a63524a4a39393931312921293129313129315a +4231bda563ffde73f7e7a5f7d67bf7e7adf7de84f7e7adf7d67bf7e7a5f7d67bf7dea5f7de84f7de9cf7de94efde94f7de9cefd684f7e7adefd684f7e7adefd6 +84f7e7a5efde9cf7de94f7e7adf7de8cf7e7adf7de9cefde9cf7e7b5efd694f7e7b5efde9cf7de9cefe7adefde94f7dea5f7e7adefd68cffefb5efde9c7b735a +212129292129292129292929212129524242c6ad84ffef9cc6b5844239422121293129312921292921293129315a4a42cead6befce5af7de8cf7de94efd67bef +de94efdea5f7de8cefd684f7dea5efde94efd684efd694f7e7a5efd68cefde8cefde9cf7dea5efd684efde8cefde9cf7de9cefd684efde8cefde94f7de9cefd6 +7bf7d684efd694f7de94efd67befd67befd684f7de94efd684efd673efd67bf7de8cefd684efd673efce6bf7d67befd684f7d673efce5aefd66befd673f7d67b +efce63efce5aefce5af7d66befce63f7ce5aefce4aefce52efce52f7ce5aefce4aefce42efc639f7ce42efc642f7ce42e7c631efc631e7c629efc631efbd29ef +c631e7bd31e7c639e7bd31efc631d6ad314239311818212121292121292921292121212121292121212121290000e7bd4aefd68cefce5af7de9cf7ce5af7e7a5 +f7d66bf7e7a5f7d673f7e7a5f7d673efd67bf7d66befce6be7d6739cb58c7b9c9484ad948cb59c84b5948cbd9c8cbd9c94bd9c8cb594b5cea5efde8cf7de84ef +d67bf7de8cf7d684efce5ad6ad31d6ad4ad6ad42cead4ad6ad42cead52cead4acead52c6ad4acead5acead5aceb56bbda56b8c7b5a4a42393129313129313931 +393931313931394a42428c7352d6bd8cfff7c6ffefc6f7e7adffefbdf7e79c847363524a424239393131312921293129313129317b6339deb552ffe78cf7de94 +f7de94f7de94f7e794f7e79cf7de8cf7de9cf7de84f7e7a5f7de7bf7e7adf7de7bf7e7a5f7de84f7de9cf7de8cf7de8cf7e79cf7d67bf7e7adefd67bf7e7a5ef +de8cf7de94f7e7a5f7de84f7e7adf7de9cf7de9cf7e7b5efde8cf7e7b5f7de9cf7de9cf7e7adf7de94f7de9cffe7adefde948c7b6b2921292929292921293129 +312921294239396b63528c7b6bb5a5845a52522921293129312921292929292929294a4239bda563f7de7bf7d684f7d67bf7de94f7e7a5efd684f7de8cf7dea5 +f7de9cefd684f7e79cf7de9cefde8cefd68cf7e7a5f7de9cf7de8cefde94f7e7a5efde94efd684efde94f7e7a5efde8cefd684efde94f7e79cefde8cf7d67bef +d684f7de9cf7de8cefd67befd67bf7de94f7de8cf7d67befce6bf7de84f7de8cf7d684efce6bf7d673f7d67bf7de84efd66befd663efd66bf7d673f7d66bf7d6 +63efce5af7d663f7ce63f7d66befce52efce52efce4af7ce52f7ce52f7ce4aefc639f7ce42efc639f7ce42efc639efce31e7c631efc631efc629f7c639efc631 +efc631e7c639735a392118292921292121292921292121292921292121292921292121290000efce63f7e7a5f7d67bffe7b5efd66bf7e7b5efd66bf7e7a5efce +6bf7de9cefd673f7e7adefce6bf7de8ce7ce6ba5bd8c73948484ad9484b5948cb59c8cb5948cbd9c8cbd948cbd9c9cb594efde94efd684efd673efd684efd67b +efce6bdeb539cea542d6ad42c6a54ad6b54ac6a54acead4abd9c4acead4ac6a55ac6ad638473524a4242292129312931312931393139393131423939736352b5 +9c5abd9c52debd6bf7e7b5f7efbdffefb5f7e7ada59473524242312931312931292129312931423129a5844aefce63ffe79cefd684f7e7adefd684f7e7adefd6 +84f7e7adefd684f7e79cefde8cf7de94f7de94f7de84f7de9cf7d67bf7e7a5f7d67bf7dea5f7d67befde94f7de8cefd67bf7e7a5efd673f7e7a5efd684f7de8c +efde9cf7d684f7dea5f7de8cf7de94f7e7adefd684f7e7a5efde94f7de8cefdea5f7de8cf7de948c7b632118212921292921292929292121294239396b5a5273 +635263524a524a42393131312931292129292129292129393131a59463f7d673efce63f7de94f7de9cefd684efd684f7e7a5efd68cefd684efdea5f7e7a5efd6 +84efde94efde9cf7de94efd67bf7de9cefde9cefde8cefd684f7de9cefde9cefd684efd684f7de9cefde94efd684efd684f7de94efde8cefd684efd67bf7de8c +efde94efde84efce73f7d684f7d68cf7d684efce6befd673efd684f7de84efce6befce6befce73f7d684efd673efce63efce5af7d66befce6bf7d66befce5aef +ce5aefce5af7ce63efce5aefce52efc642efce4aefce4af7ce52efc639efc639efc631efce39efc639efc639e7c631efc631e7bd31efc629f7c629b594392121 +292121292121212121292121212121292121212121292121212121290000f7de84f7de9cf7de84f7e7adf7d673f7e7b5f7d673f7e7a5f7d673f7de9cf7de7bf7 +e7a5f7de7bf7e7adefd673adc69484ad9484ad948cb59c8cb5948cbd9c8cb59c94c69c8cbd9c94bd9cded694f7de94efd66bf7de84efd66bf7d67bdeb542d6ad +39cea54acea54acea54acead4ac6a552cead52bd9c5a84734a4a42393129312921313131313931313939394239396b5a4aa58c52c6ad5ac6a552c6ad52c6a552 +efde94ffefb5d6c69c7363523931393129313129312929313931316b5231ceb56bf7de84ffefb5f7de94f7efb5efde94ffefbdefde8cf7e7adefd684ffefb5f7 +d684f7efb5efd684ffe7adf7de8cf7e79cf7de94f7de8cf7e7a5f7d67bf7e7a5f7d673f7de94f7de84efd684f7e79cf7d673f7e7a5efd67bf7de94f7de9cf7de +84f7e7adf7de8cf7de94f7e7a5efd67bf7e7a5f7de8cf7de84f7de9c94845a29212929212929212931293121212942393963524a735a526b5a4a63524a423939 +31293129212929212929212939313994845aefce63f7d67bf7e79cefd67bf7de8cf7dea5f7de8cefd684f7e7a5efde9cf7de8cefde9cf7e7adefde8cf7de8cf7 +de9cf7de9cefd684f7de94f7de9cf7de9cefd684f7de9cf7dea5f7de94efd684f7de94f7de9cf7de8cefd67bf7de8cf7de9cf7de8cefce73f7de84f7de94f7de +8cefd673f7d67bf7d684f7de8cefd673f7d673efd67bf7de84efd67bf7d673efce6bf7d673f7d673f7d66befce63f7d663efce6bf7d66befce63efce5aefce52 +f7d65af7ce5af7ce5aefce4af7ce4aefce42f7ce52efce4af7ce42efc631efce31efc631f7ce39efc629efc631efc629deb53942393121212921212929212921 +21292921292121292921292121292921292121290000efd67bf7e79cefd673f7e7a5efce6bffefbdefce6bf7e7a5efd673f7e7a5efd673f7e7adefd67bf7e7ad +efd673bdce9c7ba58c84ad9484ad948cb5948cb5948cbd9c8cbd9494bd9c8cb594d6ce94efd684efd673efd67bf7d66befd673debd4acea539c6a54ac6a542c6 +a552cead4ab59c5a8473424a3939292129312931312931393131313131423939524a428c7b5abd9c52c6a55acead4ac6a552cead4acead52c6ad639c947b4239 +31312931292129292931312931423931947b39efce73f7e79cf7e7adefe7adf7e7b5f7e7adf7e7adefdea5f7e7adefde9cf7e7adefde94f7e7adefde8cf7efbd +efd684f7e7b5efd67bf7e7a5efd684f7de94f7de94f7d67befde9cf7d673f7de9cf7d67befd68cf7de94efd673f7e7a5efd673f7de94f7de94f7d67bf7dea5f7 +d684f7de8cf7de9cefd673f7e79cf7de8c948452292129292129292129292929211821524a39cebd84c6ad6b6b5a4a5a4a4a4239393129312921292921292921 +293931317b6b4aefce7bf7d67bf7d673efd684f7dea5efd68cefd68cefdea5f7de94efd67bf7e79cefde9cefde8cefd68cf7e7adefde94efd684efde9cf7e7a5 +efd68cefd68cefde9cf7e7a5efd684efde8cefde9cf7de9cefd67bf7d684efde94f7de94efd67befd684efde94f7de94efd67befd673efd684f7de94efd67bef +d66befd67bf7de8cefd67befd673efce6bf7d67befd67befd673efce63efd66befce6bf7d673efce63efce5aefce5af7d66befce63efce5aefce4aefce52efce +52f7ce5aefc64aefce42efc642f7ce4aefc642efce42efc631efc631e7c629efc631efc631f7ce39736339211829212129292129212121212129212121212129 +2118212121292121212921290000f7de84f7de9cf7d673f7de9cf7d673f7e7b5f7d67bf7e7a5f7d673f7e79cf7d673f7e7adf7d67bf7e7adf7de7bbdc68c84ad +9484a5948cb59c84b5948cbd9c8cb59494bd9c8cbd948cbd9cbdc68cf7de8cefd67bf7d66befd673f7d673e7c65ad6ad42c6a54acea54ab59452847352423939 +292931292129393131313131393139393139524a427b6b52a58c63b59452cead52c6a552cead52cead4acead52c6a552c6a55263524231293129292931293131 +2931635231c6ad5affde84f7e7b5f7e79cf7efbdf7e7adf7efc6f7e7a5f7efbdf7e7a5f7e7bdf7e7a5f7e7b5f7e7a5f7e7adf7e7a5f7e7a5f7e7adefde8cffef +bdefd684f7e7b5efd684f7e7a5f7de8cf7de8cf7de9cf7d67bf7e7a5f7d673f7de94f7de94f7d67bf7e7adefd673f7e79cf7de8cf7d67bf7dea5f7d67bf7de8c +ffe794f7d6739c8c6b2921292921292921293129312121294a4242cead6bffe78cf7e7a57b6b5a423939393131292129292929292129312931735a4aefce84ef +c652f7de7bf7de9cf7de84efd684f7e7adefde8cefd684f7de9cf7e7a5efd684f7de94f7dea5f7de94efd68cf7e7a5f7de9cf7de8cefde94f7e7adefde94f7de +8cf7de94f7e7a5efd68cf7de84efde94f7e7a5efd684f7d67befde8cf7de9cefd684f7d67befde8cf7de9cefd684f7d673efd67bf7de94efd684f7d673efd66b +f7de84f7d68cf7d67befce6bf7d673f7d67bf7d67befce63efd663efce63f7d673efd66bf7d663efce5af7d663f7ce63f7ce5aefce52efce52efce52f7ce52f7 +ce52f7ce4aefce42efce42efc642f7ce42efc639efc631e7bd29f7ce31b594393129312121292921292121292921292121292921292121292921292121292921 +292921290000efd67bf7e79cefd673f7e7a5efce73f7efb5efd673f7e7a5efce6bf7e7a5efd673f7e7adefd67bf7e7adefd67bcece8c7ba58c7b9c8c84ad948c +b59484b5948cbd9c8cbd9494bd9c84b594adbd8cefd67bf7d67befce52f7d673efce52f7de84cea54aa584426b5a394239392921292929313129313931312929 +293131314a42426b63528c7b5a947b5aad9452c6a54ac6a54acead4ac6a54ac6a552bda552b59452c6a552a58c52393139312931423131947b39e7c66bffe794 +f7e7b5f7de9cf7e7b5f7e7adf7e7bdf7e7adf7e7bdf7e7adf7e7bdf7e7a5f7e7bdf7de9cf7efbdf7de9cf7e7b5f7de9cf7e7b5f7e7a5f7dea5f7e7adefd68cf7 +e7b5efd67bf7e7adefd684f7de9cefde94f7de84f7e7a5f7d67bf7dea5f7de8cefd67bf7e7a5efce73f7de9cefd684f7d67befde9cf7d673f7de849c8c632921 +29292129292129292929211829423931c6ad63ffe794f7d67b94846b3931393129312921292921292121293129315a5242d6b563efce63f7de8cefce6befd67b +f7de9cf7de8cefd67bf7e7a5efde94efd684efde94f7e7a5efd684efde8cefdea5f7de9cefd684f7de9cefdea5efde8cefd68cf7e7a5efde9cefd684efd68cf7 +e7a5efde94efd684efd684f7de9cefd68cefd67befd684f7de9cefd68cefd673efd67bf7de94efd68cefd673efce6bf7d684efd684efd67befce6bf7d67befd6 +84f7d684efce6befd66befce6bf7d67befce73efce63efce5af7d66befce6bf7d66befce5aefce5aefce5af7ce63efce52efce52efc64af7ce52efce52f7ce4a +efc642efce39efc631efce39efc639f7ce31deb5314a39312118292921292121212121292121212121292121212121292121212121292121212121290000f7de +84f7de9cf7d67bf7e7a5f7d673f7e7b5f7de7bf7de9cf7d673f7de9cf7d67bf7e7a5f7de84f7e7a5f7de84d6ce8484ad947394848cb59c84b5948cb59c8cb594 +94bd9c8cbd9c8cbd9c94b58cefd673f7d684efce52f7de7befce63c6b57b73634a3931313129312929313129313129313931393131314a4242635a4a9484638c +7b5aa58c5a94845aad945abd9c52bda552c6a54ac6a552b59c52bd9c5abda552b59c5ac6ad527b6b52635231cead52f7de7bffefadefdea5f7efb5f7e7a5f7ef +bdf7e7adf7efbdf7e7adf7efbdf7e7adf7efb5f7e7adf7e7b5f7e7b5f7e7adf7e7bdf7e7a5f7e7bdf7e79cf7efc6f7de9cf7e7b5f7e7a5f7dea5f7e7adefd684 +ffefb5efd684f7e7adefde8cf7de94f7e7adf7d67bf7e7adf7de8cf7de8cf7e7a5efd66bf7e7a5f7d684f7de7bf7de949c845229292929212929212931293121 +2129423931bdad73ffde73f7de73a5947b292129312931292929292929212129312931524239d6b56bf7d673f7ce5aefd66bf7de9cefd67bf7d67bf7de9cf7de +8cefd673f7e79cf7de9cefd684efd68cf7e7a5efd68cefde84f7de9cf7e7a5efd684f7de94f7dea5f7de9cefd68cf7e79cf7dea5f7de94efd684f7de9cf7de9c +f7de8cefd67bf7de9cf7de94f7de84efd67bf7de94f7de94f7d684efd673f7de84f7de8cf7de84efce6bf7d67bf7d68cf7de8cefd673efd673efd67bf7de84ef +d673efd663efce6bf7d67bf7d673f7d66befce5af7d66befce6bf7d66befce5af7ce5aefce52f7ce5af7ce52f7ce52efce4aefce4aefce4af7ce4aefce42efce +39e7c631efce39f7ce39846b391818292929292121292921292121292921292121292921292121292921292121292929292121210000efd67bf7e79cefce6bf7 +e7a5efce6bffe7b5efd67bf7de9cefd673f7e7a5efd67bf7e7a5efd684f7e7a5efd684d6ce7b8cad8c7b9c8c84ad948cb59484b5948cbd9c8cb59494bd9c8cb5 +9494b594dec65affe784dec66bb5a5736b63523931393129313131313129313931393931313931394a42397b6b5294845a9c8c639c845aa58c5a9c8452ad9452 +a58c52bda552ad9452c6a552ad8c52c6a54aad9452c6ad52ad9452bda552bd9c4aefce7bf7de8cf7e7b5efde94f7e7b5efde9cf7efbdefde9cf7efc6efdea5f7 +efc6efdea5ffefc6efde9cf7efc6efdea5f7efbdefdea5f7e7bdf7e7adf7e7b5f7e7b5f7e7a5f7efc6f7de9cf7e7bdefde94f7e7adf7e7adefde9cf7e7b5efd6 +84f7efbdefd68cf7dea5f7dea5f7de84f7e7adf7d67bf7de94f7e79cefce73ffe7a5f7d67b94845a292129292129292129292929211821423939bda563ffde63 +ffde84a5946b2921292921292921292921292121292929314a3931cead6befc64af7ce52f7d684efd66befce6bf7de9cefd67befd66bf7de94f7de94efce73f7 +de8cf7de9cefd684efd67bf7de9cefd68cefd684efde94f7e7a5efd684f7de8cefde9cf7de9cefd684f7de94efdea5f7de94efd67bf7de8cefde9cf7de8cefd6 +7bf7de8cefde94f7de8cefd673f7d684efd694f7d68cefce6befd673efd684f7de8cefd673efd673efd67bf7de8cefd67befd673efce6bf7d67befd67befd66b +efce5aefd66befd673f7d66befce5aefce5aefce5af7d663efce5aefce5aefce52efce52efce52f7ce52efce4aefce4aefc639f7ce42efc642efce42efce29ad +94392921292121292121212121292121212121292118212121292121212121292121212921292121212121290000f7de84f7de9cf7d67bf7e7adf7d673f7e7ad +f7de84f7de94f7de84f7de9cf7de8cf7de94f7de94f7de94f7de94dece7b94bd947b9c8c8cb59c84b5948cbd9c8cb59494bd9c8cbd9494bd9c8cb594b5b573a5 +8c636b63633939393931393129313931393931393939393939395a4a42847352ad945ab5945ac6a54ab59452a58c5ab59452a58c5ab59452a58c52c6a552ad94 +5abda552b5945abd9c4abda552b59c52c6a552c6a54ac6a552e7ce7bf7e7a5f7dea5f7e7adf7e7adf7e7adf7e7b5f7efb5f7e7b5f7efb5f7e7adf7efbdf7e7ad +ffefbdf7dea5ffefc6f7dea5ffefcef7dea5ffefc6f7dea5ffefc6f7e7adf7efb5f7e7bdf7e7a5f7efc6f7e79cf7efc6f7e7a5f7e7adf7e7b5efde9cffefceef +de94f7efb5f7dea5f7de8cf7e7adf7de84f7de9cf7e79cf7d67b9c8c6b292129292129292129312931212129393139b59c52ffe78cffde7bad9c633129312921 +29312929292929292129312931423939bd9c52efc64af7de73efce5af7d66bf7d684f7d673efce6bf7de8cefd67bf7d66bf7de8cf7de94efce73f7de84f7de9c +f7de84efd67bf7e79cf7de9cf7d684efd68cf7e7a5efde94efd684f7de9cf7e7adefd68cefde84f7de9cf7e79cefd684f7de84f7de9cf7de9cefd67bf7de84ef +de94f7de94efd673f7d67bf7d68cf7de94efd673efd673efd67bf7de94efd684efd673efd673f7de8cf7d684f7d673efce6bf7d67bf7d67bf7d67befce6bf7d6 +6befd66bf7d673efce63f7d65aefce52f7d663f7ce63f7d663efce52efce52efce52f7ce5af7ce52f7ce4aefc639f7ce39f7ce39e7bd424a3931212129212129 +2921292121292921292121292121292121292921292121292921292121292121292121290000f7d684f7e7a5efd67bffe7b5efd673f7e7a5efd67bf7de94efd6 +7bf7de94efde8cf7de94efde94f7de84f7de9ce7ce7394b58c7b9c8c84ad948cb59c84b5948cb59c8cb5948cbd9c8cb5948cbd9c7b8473393139393139423939 +423939423939393131423939524a39947b52b5944ac69c52c6a542c6a552c6a542bd9c4aa58c52b59c52ad9452b59452ad9452b59c52b59c4aad9452c6a54aad +945abd9c4ac6a54abd9c52cead4abd9c4acead52efde9cf7de9cf7e7b5f7de9cf7e7bdf7e7a5f7e7bdf7dea5f7e7bdf7e7a5f7e7bdf7e7a5f7e7bdf7e7adf7e7 +b5f7e7b5f7e7b5f7efbdefdea5f7efc6efde9cffefceefde9cf7efc6efe7adf7e7b5f7e7b5f7de9cf7efc6f7de9cf7e7b5f7e7a5f7dea5f7efc6efd68cf7e7bd +efde94f7de94f7e7adf7de84f7e7a5948463292121292129292129292929211829393131b59c6bffe784f7d663b5a58431293129212929212929212921212929 +2931393131ad9452f7ce6bf7ce4aefce52f7de84efce63f7d663efd67bf7d673efce5af7de84efd67befce63efd67bf7de94efce73efd673f7de94f7de8cefce +6bf7de94f7de9cefd684efd67bf7de9cefde94efd684efd68cf7e7a5efd68cefd684efd694f7de9cefd684efd67befd68cf7de9cefd684efd67befd684f7de94 +efd67befd673efd67bf7de8cefd684efd673efce73f7de84f7d684f7d67befce6bf7d67bf7d684f7d67befce6befd66befd673f7d67befce63efce63efce63f7 +d66befce63efce5aefce52efce5aefce5af7ce5aefce52efce52efc64af7ce52efce4af7ce42efc631efce317b63392121292121212921292121212121292121 +212121292121212121292121212121292121292121292118212121290000f7de94f7e7a5f7d67bf7e7adf7d673f7de9cf7de7bf7de8cf7de84f7de8cf7e794f7 +d684f7e7a5efd67bf7e7a5e7ce6ba5c6947ba58c8cb59c84b5948cb59c8cb5948cbd9c8cbd9c94bd9c8cb59c7b94843939394239423931393931393931316352 +42947b4ac69c4acea54acea54ac69c42cead4acea54acead4ac6a54ab59c52ad8c52bd9c52ad8c52bd9c52ad8c52bda552a58c52c6a552bda552c6a552cead4a +cead4ac6a552cead4abd9c4aefce73f7dea5f7e7b5f7e7adf7e7b5f7e7b5f7e7adf7e7b5f7e7adf7e7bdf7e7adf7e7bdf7e7a5f7efc6f7e7a5f7efc6f7e7a5f7 +efc6f7e7adf7e7b5f7e7b5f7e7adf7efc6efde9cfff7d6efde9cffefc6f7e7adf7e7adf7e7bdf7de9cf7e7bdf7e7a5f7e7b5f7efbdefde94ffefbdefde94ffe7 +a5f7e7ad8c7b5a292129292129292129312931212129393131b59c6bffde6bffe78cbdad84312931292129292929292929212129312931393131a5945aefc652 +f7ce4af7de84f7d663efce5af7de84efd66bf7d663f7d684f7de7befce5af7de84f7d684f7d663f7d673f7de9cefd673f7d66bf7de94f7de8cefce6bf7de84f7 +de9cf7de84efd673f7de94f7de9cf7d684efd684f7e7a5f7de9cefd684efd684f7e79cefde8cefd67befd67bf7de9cefde8cefd673efd673f7de94f7d68cf7d6 +73efd673f7de8cf7d68cf7d67befce73f7d684f7d68cf7d67befce6bf7d673f7d67bf7de84efce6bf7d66befce6bf7d673efd66bf7d663efce5af7d663f7ce63 +f7d663efce5aefce52efce52f7d663f7ce5af7ce4aefc642f7ce42efce4affd64ab5943929293121212929212921212929212921212929212921212129212921 +21292921292121292929292121292121292121290000f7de8cf7e7a5efce6bf7e7a5efce6bf7e79cefd67bf7de8cefd684f7de84efde94f7d67bf7de9cf7d673 +f7e7a5f7d663adc68484ad9484ad948cb59484b5948cb59c8cb5948cbd9c8cb5948cbd9c7b9c844a42422929314239396b5a4aad945ad6b552e7c663cea539ce +a542c6a542cea542c6a54ac6a54ac6a54ab59452bd9c4aa58c52bd9c4aad9452bd9c4aad9452b59452bda552bd9c4ac6a54ac6a542c6a552cead42bda552cead +42c6a552cead52f7e7a5efde9cf7efbdefde9cf7efbdefde9cf7efc6efdea5f7efbdefdea5f7efbdefdeadf7e7b5f7e7b5f7e7adf7e7bdf7e7a5f7efc6f7de9c +f7efc6f7e7a5f7e7bdf7e7b5efdea5f7efc6efde9cffefceefdea5f7e7b5f7e7b5f7e7a5f7e7bdf7de9cf7e7bdf7e7b5efde94ffefbdefd6948c7b6329212929 +2129292129292929211821393131ad945affe78cffe794bdad73393139292129292129292929212129292931312931947b4ae7bd4af7d66befce52efce5af7d6 +7bf7d66befce5af7d67befce6befce5aefd673f7d673efce52f7d67befd68cefce63efce6bf7de94efd673efce63efd68cf7de94efce6bf7d67bf7de94f7de8c +efce6bf7de84efde94f7d684efce73f7de94efde94efd67befce73f7de8cefd68cefd673efce73f7de8cefd68cefd673efce6bf7d684efd68cf7d67befce6bf7 +d67befd684f7d67befce6bf7d673efd684f7d684efce6befd66befd673f7d684efce6befce6befce63f7d66befce6befce63efce5aefce5aefce5af7ce63efce +5aefce52efc64af7ce52efce4af7ce4aefc642f7ce39debd424a4239181821212129212129212129212121212129212121212129212121212129212121292129 +2118212121292121212121290000f7de94f7e7a5f7d673f7dea5f7d66bf7de9cf7de84f7d67bf7de94f7d67bf7e7a5f7d66bffe7a5ffd663ffefadd6b54aadbd +7b84b59484b59484b5948cbd9c8cb5948cbd9c8cbd9494bd9c8cbd9c84ad9463635a7b6b52bda563e7c663ffde8cf7d663efde8cd6b542d6ad31d6ad4ac69c42 +cead4ab59452cead4ab5944abd9c52b59452bd9c52b59c52ad9452bda552c6a552c6a552d6ad4abd9c52d6b54ac6a54acead4ac6a54acead52cead4acead52e7 +ce7bf7e7adf7e7a5f7e7b5f7e7a5f7efbdf7e7a5f7efbdf7dea5ffefc6f7dea5ffefc6efde9cffefc6f7dea5ffefc6f7e7adf7efb5f7efbdf7e7adf7efcef7e7 +a5f7efc6f7e7a5f7e7bdf7efbdf7e7a5fff7cef7dea5ffefc6f7e7adf7e7adf7e7bdf7e7a5f7efc6ffefadefd69c84736b212129292129292129292931212129 +393131b59c6bffef9cffde7bc6b58c393939292129312929312931292129312931312931947b4aefce6bf7ce52efce52f7de8cefce63f7d663f7d684f7d66bef +ce5af7de7bf7d673f7d663f7d673f7de7befce5af7d673f7de8cf7d66befce63f7de8cefd67bf7d663f7d67bf7de94efd673f7d673f7de8cf7de8cefce6bf7d6 +7bf7de94f7de84efce6bf7de84f7de94f7d684efce6bf7de84f7de8cf7d67befce63f7de84f7de8cf7d67befce63f7d67bf7de8cf7d67befce6bf7d673f7d684 +f7de84efce6bf7d66befd67bf7de84efd673f7d66befce6bf7d67bf7d673f7d673efce63f7d66bf7ce6bf7d66befce5af7ce5aefce5af7d663f7ce5aefce52ef +ce4af7ce4af7ce4af7ce52f7ce427b6b392118292921292121292929292121292121292121212921292121292921292121292929312121292121292121212121 +292929310000f7de8cf7e79cefce6bf7e7a5efce63f7de94efd684f7d67bf7de94f7d673ffefa5ffd652e7d68cb59c427b735a4a39397b846b8cb59c84ad948c +b59c84b5948cb5948cb5948cbd9c8cbd948cbd9c84ad949c9c73d6b552ffe794efce52ffe7a5efce6bf7e79cdeb552d6ad4acea542bd9c4ac6a54ac69c4ab594 +4ac69c4ab5944ac6a552ad8c4ac6a54ac6a542c6a552d6b552c6a552cead42c6a54ac6a54acead4abda552d6b54ac6a54ad6b54acead4adeb552efdea5f7de9c +f7e7bdf7de9cf7e7bdf7dea5f7e7bdf7e7adf7e7adf7e7b5f7e7adf7efbdefdea5f7efbdefde9cffefceefde9cf7efc6efdeadf7e7b5f7e7b5f7e7a5f7efcef7 +de9cf7efc6f7e7adf7e7b5f7efc6efde9cf7efc6efdea5f7e7b5f7e7b5ffe7a5e7deb56b6352211821292129292129292929211821423931bdad84ffe794ffe7 +94bdad943931312921292921292929292121292929313129318c7b52e7c65af7ce42f7d684f7d66befce5af7de8cefce73f7ce63efd67bf7d673efce5af7d67b +f7d67befce5aefd673f7de84efce5af7d66befde8cf7d66befce5af7de84efd684efce63efd673f7de94efd673efce63f7d684f7de94efce6befce6befd684f7 +de8cefce63f7d66bf7d684f7de84efce63efd66befd684f7d684efce5aefce6bf7d684f7de84efce63efd66befd67bf7de84efce6befd66befd673f7de84efce +6befce63efce63f7d67befd67befd66befce63f7d66befce73f7d673efce63efce5aefce63f7d66befce5af7ce52efc64aefce5aefce5af7ce52efc642efce42 +f7ce42ad944a212129212129212121292129212121212129212121212129212121212129212121292129212129212129212121212129181829947b390000f7de +94f7e79cf7d66bf7e7a5f7d66bf7de8cffe784ffde6bffe794e7bd4ac6b5847b6b395a4a422921312921292118296b73638cb59484ad9484b5948cb59c84b594 +8cbd9c8cbd9c94bd9c8cbd9c8cb59ca5ad73f7ce52f7e7a5f7d673f7e79cf7de84f7de84efc65ac6a542c6a552c6a542bda54acead42b5944ac6a54ab59452c6 +a54acead4acead4adeb552cead4ad6ad5acead52c6a552cead42c6a552cead42c6ad52cead4acead52cead4ad6b54acead4aefce7bf7e7adf7e7adf7e7b5f7e7 +a5f7e7bdf7e7a5f7efc6f7e7a5f7e7bdf7e7a5f7efbdf7e7a5f7e7b5f7e7adf7e7adf7efbdefde9cfff7cef7de9cffefcef7e7adffefbdf7efbdf7e7a5f7efc6 +f7e7a5f7efc6f7efbdf7e7a5fff7ceefde9cfff7bddece9c6b5a52292129292929292129312931212129423939bdad73ffe79cffefb5bdad8c39313929212929 +2929292931292129312931312931846b4ae7bd52ffde7bf7d66bf7d663f7de8cf7d67befce6bf7de8cefd673f7d663f7d67bf7d673efce5af7de84f7d684f7ce +5aefd673f7de94efce63f7d663f7de8cf7d67befce5af7de7bf7de8cf7d663efd66bf7de8cf7d67bf7d663efd67bf7de8cefce6bf7d663f7d67bf7de8cefce63 +f7d663f7d684f7de84efce63f7d663f7d67bf7de84efce63f7d663f7d67bf7de84efce63f7d663f7d673f7de8cefd673f7d663efce6bf7d67bf7d673f7d663ef +ce63f7d673f7d67bf7d673efce5af7d663f7ce6bf7d673efce63f7ce63efce5af7d663f7ce63f7ce5aefce4af7ce52f7ce52f7ce5af7ce4adebd424239312121 +29212129292129212129292129212129292129212129292129212129292129292129212129212129292129181829524a39f7c6310000f7de8cf7e7a5f7d663ff +e7a5f7d65affde7bdec673b5944284735a4a39312921292118312118292921292121292921295a5a528cb5947ba58c84b59484b5948cb59c84b5948cbd9c8cb5 +948cbd9c84b5949cb58ce7ce63f7de94efd684f7d684efd67bf7d66befc64ad6ad39bd9c42cead4ab5944ad6ad42b5944ac6a54ac6a542cea54acead42d6b542 +c6a54ad6b552c6a54ad6b55abd9c4acead4ac6a54acead4acead4acead52cead42cead52d6ad42cead4ad6b54af7e7adefde9cf7efbdefde9cf7efbdefdea5f7 +e7b5efe7adf7e7adf7e7b5f7dea5f7e7bdf7dea5f7e7bdf7de9cf7e7bdf7e7adf7e7adf7efbdefde9cffefceefde9cf7efc6efdea5f7e7adf7e7bdf7de9cf7ef +c6f7e7a5f7e7adfff7bdcebd8c5a524a2118212921292921292929292121213931317b6b5aefdeadffe79cb5a584313139292129292929292929212129292929 +312931846b42e7c663f7ce5aefce63f7de94efd67bf7d673efde94f7d67befce6bf7de8cefd673efce63f7d67bf7d67befce5af7d67bf7d684f7ce5aefce73f7 +de94efce6bf7d663efd684f7d67befce5af7d673efd684efd66befce63f7de84efd67befce63efce63f7de84efd673efce5aefce6bf7de8cefce6befce5aefd6 +6bf7d684efce63efce52efce6bf7de84efce63efce52efce63f7de84efce6befce5aefce63f7d67befd673efce5aefce5af7d66befd673f7d663efce52f7ce63 +efce6bf7d673efce5aefce5aefce63f7d66befce63f7ce5aefc652efce5aefce5af7ce5aefc64aefce4aefce4af7ce526b5a3921212921212921212921212121 +2129212121212129212121212129212121212129212121212129212121212129212121292131bd9c29ffc6310000ffef8cffe79cefc64adec67ba59452735a39 +4a42422921292121292121292921292121293129313129313129312921295252528cb59484ad9484ad948cb59c8cb5948cbd9c8cb59494bd9c8cbd9c8cbd9c8c +ad8cdece73f7d673f7d673efd673f7d66befd673f7ce5adeb531d6b55ad6ad42bd9c4ac6a542cead4acea542d6ad4ad6ad39cead52d6ad42cea552d6b552cead +52cead52cead52c6a54ad6b54acead52d6b54ac6ad4ad6b54acead4ad6b552cead4acead4ae7ce6bf7e7b5efdea5f7efbdf7de9cffefbdefde9cffefc6efde9c +f7efbdefdea5ffefb5f7e7adf7e7adf7e7b5f7e7a5f7efc6f7de9cf7efc6f7e7adf7e7b5ffefc6efde9cfff7ceefde9cf7efbdf7e7b5f7e7a5f7efceffefadc6 +b58c4a42422118293129312921292929312121294239396b63527b6b5aa5946bad9c84393139312931312931312931292129312931393131846b4ae7bd52f7ce +52f7de94f7de84efd673f7e7a5efd684f7d67bf7de9cf7de84efce6bf7de8cefd67bf7d66bf7d684f7de84efce63f7de7bf7de8cf7d663efce6bf7de94efd673 +f7ce63f7d67bf7de84efce5af7d66bf7de8cf7d673efce5af7d67bf7d684f7d663efce5af7de84f7d67bf7d663efce63f7de84f7d673f7ce52efce5af7de7bef +d66bf7ce52efce5af7de7bf7d66bf7ce52efce5af7d673f7d673f7ce5aefce52f7d66bf7d673f7d663efce52f7d65af7d66bf7d673efce5af7ce52efce63f7d6 +73efce63efce5aefce52f7d663f7ce63f7d663efce52f7ce52f7ce52f7d663efce52ffd64aa58c42292129212129292929212129212129212129292129212129 +212129212129292129212129292129212121292129212129212129846b31ffce31ce9c420000b59452847b634239313931312118292118292118292921292121 +212929293129293129312921293129314a42397b6b4a94845a8cb5947ba58c84ad9484ad948cb59c84b5948cbd9c8cb5948cbd9c8cb59484ad94c6bd7bf7d67b +efce6befd67befce63efd673efd67be7bd42e7c66bdebd5ad6b552debd6bcea539d6b539cea542deb542c6a542d6b542cea542d6ad52cead52c6a552d6b552ce +ad52cead42cead4acead42cead4acead4ad6b54acead4ad6b54acead4ad6b54aefdea5f7e7a5f7e7b5f7e7a5f7e7adf7e7adefdea5f7e7b5efde9cf7efbdefde +94f7efbdefde9cf7efbdefdea5f7e7adf7e7bdf7dea5f7efc6f7de9cf7e7bdf7e7b5efdea5f7efc6efde94f7efc6f7e7a5ffefadada584423131211821292129 +2921292929292118214239396b63527b6b5a6b5a5263524a4a39393931393129292929292121292929313129318c734adebd52f7de7befd684f7d684f7dea5f7 +de94efd684f7e7a5efd684efd67befde94f7d684efce73f7de8cefd67befd66befd684f7de84efce63f7d67bf7de8cf7d673efce63f7de94efd67befce5aefd6 +73f7de8cefce63f7d663efd684f7d67befce52f7d66bf7d684f7d663efce52f7d673efd67bf7ce5aefce52f7d673efd673efce5aefce52f7d673efd673efce52 +efce4af7d66befd673efce52efc64af7d663efd673f7ce63efc64af7ce5aefce6bf7d66befce4aefce4aefce63f7d66befce52efce4aefce52f7d663efce63f7 +ce5aefc64af7ce5aefce5af7d663efc64aefce42efc64affd65acead4a4231312118212921292121212121292121212121292121212121292121212121292121 +21292129212121212129212121212129212129efbd29efb531d6a539000031293121182929213129212929212929212931293131293131313131293139313142 +39397363529c8c5ac6ad63f7de8cdec65294ad8c7ba59484ad948cb59c84b5948cbd9c8cb59c8cbd9c8cbd9494bd9c84ad94b5bd84efd67bf7d673efd67bf7de +8cefd673f7d67be7c663e7bd52e7ce7bdeb54ae7ce7bd6ad42deb531d6ad4ad6ad42d6ad42cead4ad6b542c6a54ad6b55ac6a54adebd52cead4ad6b54acead42 +d6b552d6b54acead52d6ad4acead52ceb54ad6b54acead4ae7ce73f7e7b5f7e7a5f7e7bdf7e79cf7e7bdf7de9cf7e7bdf7e7a5f7e7b5f7e7adefdea5ffefbdf7 +de9cffefc6efde9cffefc6f7e7adf7e7b5f7efbdf7e79cf7efc6f7e7a5f7e7b5f7efb5f7e7a5fff7ce9c8c6b3131312121293129312921292929292121295a52 +4a7b6b5273635a7363526b5a52524a42423939312931292929292129312931312931846b42e7c663f7d673efd67bf7e7adefde94f7de94f7e7adf7de94efd68c +f7e7adf7de8cf7d684f7de9cf7de8cefd673f7de94f7d684f7d673f7d684f7de8cefce63f7de7bf7de94f7d673efce6bf7de94f7d684f7d663efd673f7de8cef +ce6bf7ce5af7d67bf7de84efce52f7d663f7d684f7d66befce4af7d663f7d67bf7d663efce4af7d663f7d673f7d663efce4af7d66bf7d67bf7d663efce4af7d6 +63f7d673f7d65aefce42f7ce52f7d673f7d663efce42f7ce4af7ce63f7d66befce52efce42efce52f7d66bf7ce5aefce4aefce4af7d663f7ce63f7d65aefc642 +f7ce4aefce52f7ce5aefce4af7ce42efc64263523921182929212921212929212921212929212921212929212921212129212921212929292921212921212921 +2129292129181829736339f7bd31c69c4ad6a53900002921292921292921293129313129313931313129313129314239396352429c8c63c6ad63debd6bffe794 +efce4affefade7ce639cb58c73948484ad9484b5948cb59c84ad948cbd9c8cb5948cbd9c8cb5948cb59c9cad84efd684efde94efd67befd673efce73deb542e7 +ce7bd6ad39efd684d6ad42e7ce7bd6b552d6ad42d6ad39cead42d6ad39cea54ad6b539cead4ad6b552d6ad4acead52d6b55acead4ad6b542c6a54ad6b54acead +4ad6b54acead42cead52d6b54acead52cead4af7de9cefde9cf7e7bdefdea5f7e7adf7e7adf7e7a5f7e7bdf7de9cf7e7bdf7de9cf7e7bdf7e7adf7deadf7efbd +efde9cf7efc6efde94f7efc6efdeadf7e7a5f7e7bdf7de9cffefc6efdead847b633129312121292929292921292921292121297b6b52e7d69ce7d69c846b5263 +524a5242423931392921292921292121292929313129318c734ae7c65aefd663f7de9cf7de94efd68cf7e7b5efde9cefde94f7deadf7de94efd684f7e7a5efd6 +94efd684efde94f7de8cefd673f7de94efd684efd673efd684f7de94efce6befd67bf7de94f7d67befce63f7de8cf7d684efd663efce6bf7de8cefce6befce5a +efd673f7de84efce5af7ce5aefd673f7d673efce4af7ce5aefd673f7d66befc642f7ce52efd66bf7d66befc642f7ce5af7d67bf7d66befc642f7ce4aefce63f7 +d66befc639efce42efce5af7d66befce4aefce39efc64af7d66befce52efce39efc639f7ce52efce63f7ce4aefc631efce42efce52f7ce5aefc642efce42efc6 +42f7ce52f7ce4a947b42211829292129212121212129212121212129212121212129212121212129211821292129212129212129211821212129181821393131 +dead29dead31bd9442deb53900003931313931313129313129313931314239395a4a4a84734adec694debd52f7d67bf7de73ffd66bf7e7adf7d663f7e7bdefd6 +73a5b5847b9c8c7b9c8c8cb59c84b5948cb59c8cb5948cbd9c8cbd9c94bd9c8cb59c94ad94dec65af7d673efce6be7bd42efce7bdeb542efd684deb542e7c673 +debd52debd63e7ce73cead42deb542cea542deb542cead4adeb54ad6ad4ad6b552debd63d6b552d6bd5acead52d6b54acead52cead4ad6b54acead4ad6b54ace +ad4ad6b552d6b54acead4adec66bf7efb5f7de9cf7efbdefde94ffefbdefde9cf7efbdf7e7a5f7e7adf7e7b5f7de9cf7efbdf7de9cf7e7bdf7e7adf7e7a5f7ef +bdefde94ffefc6efde9cffefb5ffefb5dece946b635a292129292129312931292129292129292129948463efdea5ffef9cefdead7b6b634a4242393139312929 +2929312121293129313931318c7342e7bd4affde8cf7de94f7de8cf7dea5f7de9cefde94f7e7b5efde94f7de94f7e7adf7de94efd68cf7e7adefde94f7de8cf7 +de9cf7de94efd67bf7de94f7d68cf7d67befd68cf7de9cefd67bf7d67bf7de94f7de84efce6bf7de8cf7de8cf7d66befce6bf7de8cf7d67bf7ce5aefd66bf7de +84efce63efce52efd66bf7de7befce52f7ce52f7d66bf7d673efce42f7ce4af7d66bf7d673efce4af7ce52f7d66bf7d673efce4af7ce42f7ce63f7d66befce4a +f7ce39efce52f7d66befce52f7ce39efc639f7d65aefce5af7ce42efc631f7ce42f7ce5af7ce52efc631f7ce39efce4af7ce5aefce4af7ce39f7ce39bd9c4229 +2929292129212129292129212129292129212129212129212129292129212129292129212129212129212129212129212121292131a58c31f7c639cea531e7bd +31efc62100003129313931314a42395a4a4273634a9c845ab5944ae7bd39f7e7a5f7d663f7d67bf7e794efce6bf7efbdefce63f7de9cefce6badbd847b9c8c7b +a59484ad9484b59484b5948cb59c84b5948cbd9c8cbd948cb59c84ad8cc6ad4ae7bd39f7d67bdeb531efce7bdeb539efce7bdebd52e7bd5ae7c66bdeb54ae7ce +7bd6ad42d6b539d6ad42d6ad42d6b542d6ad42debd4acead4adec67bcead52d6bd5acead52cead4acead42cead52cead42cead4acead4aceb54ac6a54ad6b54a +cead4ad6b552efde94f7dea5f7e7adf7e7adefdea5f7e7b5efde9cf7efc6efde94f7efbdefdea5f7e7b5f7e7b5f7de9cf7e7bdf7de9cf7e7b5f7e7a5efde9cf7 +efbdf7e79cd6c69c524a422121292921292929292921292921293129299c9473f7de94ffefb5e7d6a56b635a3129313931392921292929292121293129313929 +318c7342efce63f7d67befd684f7e7a5efde94f7de94efe7adf7de94efde94f7e7b5efde94efde94f7e7adf7de94efd68cf7e7a5efde94efde8cf7de94f7de94 +efd684f7de8cefd68cefd67befd68cf7e7a5efd67befd67bf7de94f7de8cefce6bf7d684efd68cf7d66befce5af7de84efd67befce5aefce63f7de84efce6bef +ce52efce63f7d67befce5af7ce42efce63f7d673efce52efce42efce63f7d67befce52f7ce42efce5af7d67befce52efce39efc64af7d66befce52efce39efc6 +39f7d663f7ce5af7ce39efc621efce42f7ce5af7ce4aefc629efc631efce4af7ce5aefc639efc629efc631f7ce4af7ce4ae7bd394a3931212129212121212129 +2121212121292121212121292121212121292121212121292921292121291818212121292121212118296b5a31ffc639cea539c69c4ae7bd21f7c6210000846b +52947b52ad8c63a58c5aad8c52cea539efc629f7ce39ffefbdefd67bf7de84f7e79cf7d663f7d684f7d673efc652f7d66bb5bd7b84ad947b9c8c8cb59c84ad94 +8cb59c8cb5948cbd9c8cb5948cbd9c8cb59c84b59cb5ad5ae7bd31efd684e7bd39efce73e7c64ae7bd4aefce73deb542efd684d6ad42efce84deb54adeb539d6 +b539deb542d6b542d6b54adebd4ad6b54ad6bd5adebd6bcead4adebd5acead4ad6b54acead4acead52cead4acead52ceb54acead4acead4ad6b552c6a54adec6 +63f7e7adf7e79cf7efbdf7de9cf7e7b5f7e7a5f7e7adf7e7b5efde9cffefc6efde9cffefbdefde9cf7e7b5f7e7b5f7de9cf7e7b5f7e79cffefb5b5ad8c393131 +292129292129312931292129292129423939b5a573ffe7adfff7bdd6c6945a52522121293931312929312929292121293129313931319c8452efc65af7d66bf7 +e7a5f7de9cefd68cf7e7adf7de9cf7de9cf7e7adf7de94efde94f7e7b5efde94f7de9cf7e7adf7de9cefd68cf7e7a5efde94f7de8cf7de94f7de94efd684f7de +94f7de9cf7de84efd68cf7e7a5efd684f7de84f7de94f7de8cefce6bf7de84f7de94f7d673efce63f7de84f7d684f7d663efce5af7de84f7d673f7ce52efce5a +f7de7bf7ce63f7ce4aefce5af7de7befce63efce4aefce52f7de7bf7ce63f7ce42efce52f7d673f7ce5af7ce39efc642f7d663f7d663efce39efc631f7ce4af7 +ce63f7ce42efc629f7ce31f7ce52f7d65aefc631efce29efc631f7ce52efce42efce29efc629f7ce397363392121292121292921292121292921292121292921 +29212129292129212129212129212129292129212121212129212121212129423931e7b539efb531dead31deb531efc621efbd180000c6a55ad6bd7bb59442b5 +944abd9c39f7c631efc631efce4af7d67bf7d66befce63efd66befce63efc64aefce6befc652efce63c6c67b84a58c7ba59484ad9484b59484ad948cb59484b5 +948cbd9c8cb5948cbd9c84ad94a5ad73dead29efce6be7bd39efc64aefd67befc642efce6bdeb539e7ce7bdebd4adebd5ae7c66bd6ad31deb539d6ad42deb542 +cead42d6b54ad6b54ad6b552dec67bcead4ad6b552d6b552cead4ad6b54acead4ad6b54ac6a54acead52cead4acead52d6ad4acead4acead4aefde94efdea5f7 +e7adf7e7adf7dea5f7e7b5f7de94f7e7bdf7de9cf7e7b5f7e7b5efde9cf7efbdefd694f7e7bdefde9cffe7adf7e7b59484633129312921292921292929292921 +292121294a4239c6b584ffefb5ffe79ccebd9c4a4a4a211821312931292129292929212129312931393131a5844aefc64af7de8cefde94efde8cf7deadf7de9c +efde94f7e7adefde94f7de9cf7dea5efde94efde94f7e7adefd694f7de94f7dea5f7de94efd68cf7de9cefde94efde8cefde94f7de94efd684f7de94f7de9cef +d684efd68cf7e7a5efd68cefd67befd68cf7de94efce6bf7d67bf7de94f7d67befce63f7d67bf7d684f7d663efce5af7d67befd673efce52efce52f7d673efd6 +6befce52efce52f7d673efce6befce42efc642f7d673f7d66bf7ce42efc642f7d663f7d66befce42efc631f7ce52efce63f7ce42efc629efce39efce52f7ce5a +efc629efc621efc642f7ce5aefc639efc621efc629f7ce42efce4af7ce399c843129212921182121212921212129212921212121212921212121212921212121 +2129212129292129181821212129212121212129212129bd9c39efbd42bd944ac6a539f7c621efc621efc6180000deb563e7ce94ce9c31c69c39e7bd42f7ce42 +efc642efce52efc642efce52efce5aefc64af7d66befc64af7d66befce5af7d66bcec67b8cad947ba58c84ad9c84ad948cb59484ad948cb59c8cb5948cbd9c8c +b5948cb59c94ad84deb529efce4af7de7befd673ffefbdefce63f7d673debd39efc663e7c66be7bd4ae7ce84deb542deb539deb542deb542deb542d6ad42debd +52d6ad4ae7c673d6b563d6b552d6b552cead4ad6b54acead52cead52d6b54acead4ad6b552c6ad4ad6b552ceb54acead52debd5af7e7adefde9cffefc6f7de9c +f7efbdefdea5f7e7adf7e7bdf7de9cf7e7bdf7e79cf7e7b5f7e7adefde9cfff7c6dece8c7b7363292129292129292129312931292129292129635242dece9cff +e794ffefb5bdad94423939212129313131312931292931292129312931423931ad8c4af7d673f7de84efd68cf7e7adefde94f7e79cf7e7adf7de94efde94ffe7 +adefde94f7de9cf7e7adf7de94efde94f7e7a5efde94f7de9cf7dea5f7de94efd68cf7e7a5f7de94f7de8cf7de9cf7e79cefd68cf7de9cf7dea5f7de8cefd68c +f7e79cefd68cf7d67befde94f7de9cefd673f7d67bf7de94f7de84efce63f7d67bf7de8cf7d673efce5af7d673f7d67bf7d663efce52f7d67bf7d67bf7ce52ef +ce4af7d673f7d673f7ce4aefc642f7d66bf7d673f7ce52efc639f7d65af7d66bf7ce52efc629f7ce42f7ce63f7ce52efc629f7ce31f7ce4af7d65aefc631efc6 +21efc629f7ce52efce4aefc631efc621f7ce31d6ad42423939212129292129212129292129212129292129212129292129212129292129212129292931212129 +212129212121212129181829846b39f7c639e7b539c69c42d6b539efbd21f7c621f7c6210000deb552e7ce7bcea529dead31efbd39f7ce4ae7bd42f7ce5ae7bd +4aefce5aefce5aefc64aefce63efce5aefce6bf7e79cf7de84d6c66384ad8c7ba5947ba59484ad9484ad9484ad9484ad948cb59c84b5948cb59c84ad948cad8c +d6bd5af7de84f7e7b5efde8cf7e7b5f7de8cefde94efce63e7bd39efce7bdeb531efd684deb54adeb542d6b542d6b542deb542d6b542deb54ad6b552d6b552de +c673cead4adebd5acead4ad6b54acead42cead52cead4acead52cead4ad6b54ac6a54ad6b54ac6a54acead4aefd68cf7e7adefdea5f7e7b5efde9cf7efc6efd6 +94f7e7b5efde9cf7e7adf7e7b5f7de94f7e7bdffefa5cebd945a524a211821292129292129292129212129292129736b5ae7ce8cffe7a5ffefbd9c947b313131 +212129312931292929292929292129312931423931b59c5af7ce5aefd673f7deadf7de94efde94f7e7b5efde94f7de9cf7dea5f7de94efde94f7e7a5efd68cf7 +de9cf7dea5efde94efde94f7dea5efd68cf7de94f7de9cf7de94efd68cf7dea5efde94efde8cf7de9cf7de9cefd684f7de9cf7dea5efde8cefd684f7dea5efd6 +94efd67befd68cf7de9cefd67befd67bf7de94f7de8cefce6befd673f7d68cf7d67befce5af7d673f7d684f7d66befce52f7d66bf7d67bf7ce5aefc64af7d66b +f7d67bf7ce5aefc642f7ce5af7d673f7ce5aefc631f7ce4af7d66bf7d65aefc631efc631efce52f7ce5aefc631efc621efc639f7d65aefc642efc621e7c621f7 +ce39efce4af7ce31e7bd295a4a311818292921292121212121292121212121292121212121292121212121292121212921292121212121292121212121291818 +214a4231e7b539d6ad42ce9c39e7bd31efbd29e7bd21e7bd18efc6210000d6a539c69c42e7b531e7bd31efc642efce52efc64aefce5aefc64aefc652f7d66bef +d66bf7d66bf7e7adf7d663f7d67befd67bceb54294b5947ba59484ad9484ad9484ad9484ad9484ad9484ad948cb59c84b5948cb59c84a594c6c68cf7de94ffef +bdefde8cf7e7adefde9cf7de9cf7e7a5e7c631efce73e7bd42e7c65ae7ce73deb531debd42d6b542e7bd4ad6b542deb54adebd5ad6b54adec673d6b55ad6b552 +d6b552cead4ad6b54acead4ad6b552cead4acead52cead4acead52cead52d6b54ac6a54adebd63f7e7b5f7de9cf7e7bdf7e7a5f7e7b5f7e7b5efde9cffefc6ef +de94ffefbdf7e7adffefadada584423931211821312931292129292929212129312931948463f7dea5ffefb5f7de9c8c84733129312921293129312929292929 +29292129312931524239bd9c52efce52ffe79cefde94f7de94f7e7adf7de9cf7dea5f7e7adefde94f7e7a5f7e7adf7de94f7de9cf7e7adefde94f7de9cf7dea5 +f7de94efde94f7e7a5efde8cf7de94f7de9cf7de94efde8cf7e7a5f7de94f7de8cf7de9cf7e7a5efd68cf7de9cf7dea5f7de94efd68cf7e7a5efde94f7de84ef +de8cf7e7a5efd684f7d684f7de94f7de94efd673f7d673f7de8cf7de84efce63f7d673f7d684f7d673efce5af7d66bf7d684f7d66befce4af7d663f7d67bf7d6 +63efc639f7ce52f7d673f7d66befc639f7ce42f7ce5af7d663efc639f7ce31f7ce42f7d663efce42efc629efc629f7ce4af7ce52efce31efc618efc631f7ce4a +8c7342212129292129212129292129212129292129212121292129212129292129212129292929292129212129212121212129212121312931bd9c31ffc639bd9442c69c4ae7b529f7c629f7c621efc618e7bd180000040000002701ffff030000000000}}}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid7413393 + +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7413393 {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid7413393 +\par +\par +\par +\par +\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid7413393\charrsid10828774 +\par }\pard \ltrpar\qr \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid7413393 {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid9965382\charrsid10828774 \hich\af39\dbch\af40\loch\f39 Author:}{\rtlch\fcs1 \af39 \ltrch\fcs0 +\f39\insrsid7413393 \hich\af39\dbch\af40\loch\f39 }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid9965382\charrsid10828774 \hich\af39\dbch\af40\loch\f39 Administrator +\par \hich\af39\dbch\af40\loch\f39 Version:}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid7413393 \hich\af39\dbch\af40\loch\f39 }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid9965382\charrsid10828774 +\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 \hich\af39\dbch\af40\loch\f39 Date:}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid7413393 \hich\af39\dbch\af40\loch\f39 }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 +\hich\af39\dbch\af40\loch\f39 2016/3/23 }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 \loch\af39\hich\af39\dbch\f40 \'d0\'c7\'c6\'da\'c8\'fd}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 +\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid9965382\charrsid10828774 \hich\af39\dbch\af40\loch\f39 Summary:}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid7413393 \hich\af39\dbch\af40\loch\f39 }{\rtlch\fcs1 \af39 \ltrch\fcs0 +\f39\insrsid9965382\charrsid10828774 +\par }\pard \ltrpar\ql \li1620\ri0\widctlpar\tx3420\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1620\itap0\pararsid13965460 {\rtlch\fcs1 \af39\afs32 \ltrch\fcs0 \f39\fs32\insrsid13965460 +\par +\par }\pard \ltrpar\ql \li1620\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1620\itap0\pararsid15945847 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15945847\charrsid3374631 +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13965460 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid15945847 \sect }\sectd \ltrsect +\psz1\linex0\headery709\footery709\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3374631\sftnbj {\headerr \ltrpar \pard\plain \ltrpar\s24\ql \li0\ri0\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\tqr\tx9900\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14763118 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af39 \ltrch\fcs0 +\f39\lang1036\langfe2052\langnp1036\insrsid13965460\charrsid10828774 \hich\af39\dbch\af40\loch\f39 Physical Data Model}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1036\langfe2052\langnp1036\insrsid11233620 \hich\af39\dbch\af40\loch\f39 }{\rtlch\fcs1 \af39 +\ltrch\fcs0 \f39\lang1036\langfe2052\langnp1036\insrsid13965460\charrsid10828774 \hich\af39\dbch\af40\loch\f39 order}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1036\langfe2052\langnp1036\insrsid11233620 \tab \hich\af39\dbch\af40\loch\f39 Report WORD}{ +\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1036\langfe2052\langnp1036\insrsid13965460\charrsid10828774 +\par }}{\footerr \ltrpar \pard\plain \ltrpar\s26\ql \li0\ri0\widctlpar\brdrt\brdrs\brdrw10\brsp20 \tqc\tx5040\tqr\tx9900\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid659613 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 \hich\af39\dbch\af40\loch\f39 Sybase PowerDesigner\tab }{\rtlch\fcs1 \af39 \ltrch\fcs0 +\f39\insrsid11233620 \hich\af39\dbch\af40\loch\f39 2016/3/23 }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid11233620 \loch\af39\hich\af39\dbch\f40 \'d0\'c7\'c6\'da\'c8\'fd}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 \tab +\hich\af39\dbch\af40\loch\f39 Page }{\field{\*\fldinst {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 \hich\af39\dbch\af40\loch\f39 PAGE }}{\fldrslt {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1024\langfe1024\noproof\insrsid3090370 +\hich\af39\dbch\af40\loch\f39 2}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 \hich\af39\dbch\af40\loch\f39 of }{\field{\*\fldinst {\rtlch\fcs1 \af39 \ltrch\fcs0 +\f39\insrsid659613\charrsid10828774 \hich\af39\dbch\af40\loch\f39 NUMPAGES }}{\fldrslt {\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1024\langfe1024\noproof\insrsid3090370 \hich\af39\dbch\af40\loch\f39 9}}}\sectd \ltrsect\linex0\endnhere\sectdefaultcl\sftnbj { +\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\insrsid659613\charrsid10828774 +\par }}\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13965460 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13965460 +\par }\pard \ltrpar\qc \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5928154 {\rtlch\fcs1 \ab\af39\afs32 \ltrch\fcs0 \b\f39\fs32\insrsid5928154\charrsid10828774 \hich\af39\dbch\af40\loch\f39 Table of Contents +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13965460 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5928154 +\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid13965460 +\par }\pard \ltrpar\ql \li540\ri-82\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin-82\lin540\itap0\pararsid3422426 {\field\fldedit{\*\fldinst {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid3422426 \hich\af38\dbch\af40\loch\f38 TOC \\o "1-4" \\h \\z \\u +}}{\fldrslt {\rtlch\fcs1 \ab\af38 \ltrch\fcs0 \b\lang1024\langfe1024\noproof\insrsid3422426 \hich\af38\dbch\af40\loch\f38 The 'Table of Contents' field needs to be updated!}}}\sectd \ltrsect +\psz1\linex0\headery709\footery709\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3374631\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid3422426 +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13965460 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7827759 +\par \sect }\sectd \ltrsect\psz1\linex0\headery709\footery709\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3374631\sftnbj {\headerr \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\brdrb\brdrs\brdrw15\brsp20 +\tqr\tx9978\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 +\f45\fs20\insrsid6556251 +\par }}{\footerr \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx5414\tqr\tx9978\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 +\fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par }}{\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 I\tab}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 + +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\pard\plain \ltrpar +\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 \af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil +\cellx4989\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\trowd \irow1\irowband1\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 +\cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'c3\'f7\'cf\'b8}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'c3\'f7\'cf\'b8}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\cf19\insrsid6556251\charrsid3090370 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'cd\'d8\'d5\'b9\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'cd\'d8\'d5\'b9\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0\'b1\'ed}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\cf19\insrsid6556251\charrsid3090370 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\cf19\insrsid6556251\charrsid3090370 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow6\irowband6\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'bf\'a8\'84\'bb\'ce\'ac\'bb\'a4\'b1\'ed}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \cf19\insrsid6556251\charrsid3090370 \loch\af38\hich\af38\dbch\f40 \'bf\'a8\'84\'bb\'ce\'ac\'bb\'a4\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\cf19\insrsid6556251\charrsid3090370 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow7\irowband7\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd\'bb\'a7\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd\'bb\'a7\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow8\irowband8\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed\'b5\'a5\'ce\'bb\'b9\'d8\'c1\'aa\'b1\'ed}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed\'b5\'a5\'ce\'bb\'b9\'d8\'c1\'aa\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow9\irowband9\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'fd\'be\'dd\'d7\'d6\loch\af38\hich\af38\dbch\f40 \'b5\'e4}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow10\irowband10\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b2\'ce\'ca\'fd\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b2\'ce\'ca\'fd\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow11\irowband11\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8\'cf\'de\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8\'cf\'de\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow12\irowband12\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'c3\'bb\'a7\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'c3\'bb\'a7\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow13\irowband13\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'c3\'bb\'a7\'bd\'c7\'c9\'ab\'b9\'d8\'c1\'aa\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'c3\'bb\'a7\'bd\'c7\'c9\'ab\'b9\'d8\'c1\'aa\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow14\irowband14\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow15\irowband15\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab\'c8\'a8\'cf\'de\'b9\'d8\'c1\'aa\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab\'c8\'a8\'cf\'de\'b9\'d8\'c1\'aa\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow16\irowband16\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row \ltrrow}\trowd \irow17\irowband17\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf\'c3\'c5\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf\'c3\'c5 +\'b1\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow17\irowband17\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth4876\clshdrawnil \cellx4989 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9978\row }\pard \ltrpar +\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 II\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\rtlch\fcs1 \af42 \ltrch\fcs0 +\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 II.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'bf\'cd\'bb\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'bf\'cd\'bb\'a7}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bc\'db\'b5\'c4\'bf\'cd\'bb\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9 +\'ca\'f4\'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bc\'db\'b5\'c4\'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'ca +\'d3\'c3\'b7\'b6\'ce\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'ca\'d3\'c3\'b7\'b6\'ce\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell +\hich\af38\dbch\af40\loch\f38 1-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf\'b7\'d6\'b2\'fa\'c6\'b7\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 2-}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'ab\'b2\'bf\'b2\'fa\'c6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr +\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bc\'db\'b8\'f1}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bc\'db\'b8\'f1} +{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'f6\'b5\'b1\'ca\'ca\'d3\'c3\'b7\'b6\'ce\'a7\'ce\'aa\'c8\'ab\'b2\'bf\'b2\'fa\'c6\'b7\'ca\'b1\'ca\'ca\'d3\'c3}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'aa +\'ca\'bc\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'aa\'ca\'bc\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bf\'aa\'ca\'bc\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow6\irowband6\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'e1 +\'ca\'f8\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'e1\'ca\'f8\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bd\'e1\'ca\'f8\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow7\irowband7\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow8\irowband8\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c9\'f3\'ba\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c9\'f3\'ba\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell 0-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ce\'b4 +\'c9\'f3\'ba\'cb\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c9\'f3\'ba\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow8\irowband8\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 III\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'c3\'f7\'cf\'b8}{\rtlch\fcs1 \af42 +\ltrch\fcs0 \insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 III.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'c3\'f7\'cf\'b8\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b6\'d4 +\'d3\'a6\'b2\'fa\'c6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b6\'d4\'d3\'a6\'b2\'fa\'c6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'b1\'ba\'cf\'cd\'ac\'ca\'ca\'d3\'c3\'b7\'b6\'ce\'a7\'ce\'aa}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'c4\'ca\'b1\'ba\'f2\'a3\'ac\'c3\'bf\'d6\'d6\'b2\'fa\'c6\'b7\'d2\'aa\'c9\'e8\'b6\'a8\'b6\'d4\'d3\'a6\'b5\'c4\'ba\'cf\'cd\'ac\'bc\'db}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bc\'db}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 +\af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ba\'cf\'cd\'ac\'bc\'db}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb +\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt +\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 { +\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 IV\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'cd\'d8\'d5\'b9\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 +\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 IV.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'cd\'d8\'d5\'b9\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cd\'d8\'d5\'b9\'c0\'e0\'d0\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cd\'d8\'d5\'b9\'c0\'e0\'d0\'cd}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cd\'d8 +\'d5\'b9\'d6\'b5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cd\'d8\'d5\'b9\'d6\'b5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b6\'d4\'d3\'a6\'b2\'fa\'c6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b6\'d4\'d3\'a6\'b2\'fa\'c6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 V\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 +\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 V.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow2\irowband2\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c0\'e0\'b1\'f0\'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c0\'e0\'b1\'f0\'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 VI\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 + +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 VI.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'fa\'c6\'b7\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'b1\'e0\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'b1\'e0\'ba\'c5}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa +\'c6\'b7\'c0\'e0\'b1\'f0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'b9\'e9\'ca\'f4\'b5\'c4\'c0\'e0\'b1\'f0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa +\'c6\'b7\'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa +\'c6\'b7\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa +\'c6\'b7\'c0\'e0\'d0\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'c0\'e0\'d0\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow6\irowband6\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c9\'fa +\'b2\'fa\'b5\'d8}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c9\'fa\'b2\'fa\'b5\'d8}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow7\irowband7\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa +\'c6\'b7\'b9\'e6\'b8\'f1}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'fa\'c6\'b7\'b9\'e6\'b8\'f1}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow8\irowband8\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bb\'f9 +\'b4\'a1\'bc\'db\'b8\'f1}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bb\'f9\'b4\'a1\'bc\'db\'b8\'f1}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow9\irowband9\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bb\'e1 +\'d4\'b1\'bc\'db\'b8\'f1}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bb\'e1\'d4\'b1\'bc\'db\'b8\'f1}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow10\irowband10\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bc\'c6 +\'bc\'db\'b7\'bd\'ca\'bd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bc\'c6\'bc\'db\'b7\'bd\'ca\'bd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow11\irowband11\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'fa +\'ca\'db\'d7\'b4\'cc\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'fa\'ca\'db\'d7\'b4\'cc\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow12\irowband12\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'fa +\'ca\'db\'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'fa\'ca\'db\'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow13\irowband13\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'fa +\'ca\'db\'bd\'f0\'b6\'ee}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'fa\'ca\'db\'bd\'f0\'b6\'ee}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow14\irowband14\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7 +\'b7\'f1\'d7\'e9\'ba\'cf}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'d7\'e9\'ba\'cf}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell 0-}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ce\'b4\'d7\'e9\'ba\'cf\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\loch\af38\hich\af38\dbch\f40 \'d7\'e9\'ba\'cf}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\trowd \irow15\irowband15\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b8\'b8\'b2\'fa\'c6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b8\'b8\'b2\'fa +\'c6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d7\'e9\'ba\'cf\'b2\'fa\'c6\'b7\'b5\'c4\'b8\'b8}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \hich\af38\dbch\af40\loch\f38 id\cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow16\irowband16\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow17\irowband17\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c9\'f3\'ba\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c9\'f3\'ba\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell 0-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ce\'b4 +\'c9\'f3\'ba\'cb\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c9\'f3\'ba\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow17\irowband17\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 VII\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b5\'a5\'ce\'bb\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 + +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 VII.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b5\'a5\'ce\'bb\'b1\'ed\'b5\'c4\loch\af42\hich\af42\dbch\f40 \'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'b1\'e0\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'b1\'e0\'ba\'c5}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5 +\'ce\'bb\'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5 +\'ce\'bb\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow5\irowband5\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'c1\'aa\'cf\'b5\'c8\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb\'c1\'aa\'cf\'b5\'c8\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 VIII\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bf\'a8\'84\'bb\'ce\'ac\'bb\'a4\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 +\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 VIII.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bf\'a8\'84\'bb\'ce\'ac\'bb\'a4\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d6\'d6\'c0\'e0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d6\'d6\'c0\'e0}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'a8\'bb\'f2\'d5\'df\'84\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'aa +\'ca\'bc\'c8\'d5\'c6\'da}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'aa\'ca\'bc\'c8\'d5\'c6\'da}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'d0\'d0\'a7\'bf\'aa\'ca\'bc\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'e1 +\'ca\'f8\'c8\'d5\'c6\'da}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'e1\'ca\'f8\'c8\'d5\'c6\'da}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'d0\'d0\'a7\'bd\'e1\'ca\'f8\'ca\'b1\'bc\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'f0 +\'b6\'ee}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'f0\'b6\'ee}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b9\'cc\'b6\'a8\'bd\'f0\'b6\'ee}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'ce\'ca\'fd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'ce\'ca\'fd}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b9\'cc\'b6\'a8\'b4\'ce\'ca\'fd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow6\irowband6\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7 +\'b7\'f1\'ca\'b9\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'ca\'b9\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell 0-}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ce\'b4\'ca\'b9\'d3\'c3\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\loch\af38\hich\af38\dbch\f40 \'d2\'d1\'ca\'b9\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\trowd \irow7\irowband7\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow8\irowband8\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'d3\'d0\'d0\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'d3\'d0\'d0\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell 0-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ce\'de +\'d0\'a7\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'d0\'d0\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow8\irowband8\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 IX\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bf\'cd\'bb\'a7\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 + +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 IX.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bf\'cd\'bb\'a7\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d0\'d5\'c3\'fb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d0\'d5\'c3\'fb}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'d6 +\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'d6\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8 +\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8 +\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 2\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 2\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bc\'d2 +\'cd\'a5\'b9\'cc\'bb\'b0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bc\'d2\'cd\'a5\'b9\'cc\'bb\'b0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow6\irowband6\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b0\'ec +\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b0\'ec\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow7\irowband7\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'d5 +\'bb\'f5\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'d5\'bb\'f5\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow8\irowband8\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8 +\'d3\'c3\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 1\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8\'d3\'c3\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \hich\af38\dbch\af40\loch\f38 1\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow9\irowband9\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8 +\'d3\'c3\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 2\cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b1\'b8\'d3\'c3\'b5\'d8\'d6\'b7}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \hich\af38\dbch\af40\loch\f38 2\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow10\irowband10\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd +\'bb\'a7\'c0\'e0\'d0\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd\'bb\'a7\'c0\'e0\'d0\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell +\hich\af38\dbch\af40\loch\f38 1-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c7\'b1\'d4\'da\'bf\'cd\'bb\'a7\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 2-}{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c6\'d5\'cd\'a8\'bf\'cd\'bb\'a7\'a3\'ac}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 3-}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\loch\af38\hich\af38\dbch\f40 \'d3\'c5\'d6\'ca\'bf\'cd\'bb\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \trowd \irow11\irowband11\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'b5\'a5\'ce\'bb}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow12\irowband12\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow13\irowband13\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow13\irowband13\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 X\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed\'b5\'a5\'ce\'bb\'b9\'d8\'c1\'aa\'b1\'ed +}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 X.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed\'b5\'a5\'ce\'bb\'b9\'d8\'c1\'aa\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'a5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow3\irowband3\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd\'bb\'a7\'be\'ad\'c0\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bf\'cd\'bb\'a7\'be\'ad\'c0\'ed}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XI\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4}{\rtlch\fcs1 \af42 \ltrch\fcs0 +\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XI.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'ca\'fd\loch\af42\hich\af42\dbch\f40 \'be\'dd\'d7\'d6\'b5\'e4\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d7\'d6\'b5\'e4\'b1\'e0\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d7\'d6\'b5\'e4\'b1\'e0\'ba\'c5}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d7\'d6 +\'b5\'e4\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d7\'d6\'b5\'e4\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XII\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b2\'ce\'ca\'fd\'b1\'ed}{\rtlch\fcs1 +\af42 \ltrch\fcs0 \insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XII.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b2\'ce\'ca\'fd\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d7\'d6\'b5\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d7\'d6\'b5\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'d4 +\'ca\'be\'d6\'b5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cf\'d4\'ca\'be\'d6\'b5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'b5 +\'bc\'ca\'d6\'b5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'b5\'bc\'ca\'d6\'b5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c5\'c5 +\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c5\'c5\'ce\'bb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow6\irowband6\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow6\irowband6\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XIII\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'c8\'a8\'cf\'de\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 + +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XIII.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'c8\'a8\'cf\'de\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8\'cf\'de}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8\'cf\'de}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8 +\'cf\'de\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8\'cf\'de\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XIV\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'d3\'c3\'bb\'a7\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 + +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XIV.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'d3\'c3\'bb\'a7\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'c7\'c2\'bd\'d3\'c3\loch\af38\hich\af38\dbch\f40 \'bb\'a7\'c3\'fb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'b5\'c7\'c2\'bd\'d3\'c3\'bb\'a7\'c3\'fb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\trowd \irow2\irowband2\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d5\'e6\'ca\'b5\'d0\'d5\'c3\'fb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d5\'e6\'ca\'b5\'d0\'d5\'c3\'fb}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'c7 +\'c2\'bd\'c3\'dc\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b5\'c7\'c2\'bd\'c3\'dc\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c4\'ea +\'c1\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c4\'ea\'c1\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d0\'d4 +\'b1\'f0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d0\'d4\'b1\'f0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow6\irowband6\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'ca +\'cf\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'ca\'cf\'e4}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow7\irowband7\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 QQ\cell +\hich\af38\dbch\af40\loch\f38 QQ\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow8\irowband8\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'d6 +\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'d6\'bb\'fa\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow9\irowband9\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b0\'ec +\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b0\'ec\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow10\irowband10\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9 +\'ca\'f4\'b2\'bf\'c3\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'cb\'f9\'ca\'f4\'b2\'bf\'c3\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow11\irowband11\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow12\irowband12\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'cb\'f8\'b6\'a8}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'cb\'f8\'b6\'a8}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow12\irowband12\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XV\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'d3\'c3\'bb\'a7\'bd\'c7\'c9\'ab\'b9\'d8\'c1\'aa\'b1\'ed}{\rtlch\fcs1 +\af42 \ltrch\fcs0 \insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XV.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'d3\'c3\'bb\'a7\'bd\'c7\'c9\'ab\'b9\'d8\'c1\'aa\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'c3\'bb\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'d3\'c3\'bb\'a7}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7 +\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XVI\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XVI.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bd\'c7\'c9\'ab\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7 +\'c9\'ab\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow4\irowband4\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XVII\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bd\'c7\'c9\'ab\'c8\'a8\'cf\'de\'b9\'d8\loch\af42\hich\af42\dbch\f40 +\'c1\'aa\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XVII.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'bd\'c7\'c9\'ab\'c8\'a8\'cf\'de\'b9\'d8\'c1\'aa\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'bd\'c7\'c9\'ab}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow3\irowband3\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8\'cf\'de}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c8\'a8\'cf\'de}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 +\ltrch\fcs0 \f45\fs20\insrsid6556251 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af42\afs40 \ltrch\fcs0 \b\fs40\kerning32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XVIII\tab}}\pard\plain \ltrpar\s1\ql \fi-432\li432\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx432\wrapdefault\aspalpha\aspnum\faauto\ls1\outlinelevel0\adjustright\rin0\lin432\itap0 \cbpat17 \rtlch\fcs1 \ab\af42\afs40\alang1025 \ltrch\fcs0 +\b\fs40\lang1033\langfe2052\kerning32\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'bf\'c3\'c5\'b1\'ed}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 + +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af42\afs32 \ltrch\fcs0 \b\fs32\loch\af42\hich\af42\dbch\af40 \hich\af42\dbch\af40\loch\f42 XVIII.1\tab}}\pard\plain \ltrpar\s2\ql \fi-576\li576\ri0\sb240\sa60\keepn\widctlpar +\jclisttab\tx576\wrapdefault\aspalpha\aspnum\faauto\ls1\ilvl1\outlinelevel1\adjustright\rin0\lin576\itap0 \rtlch\fcs1 \ab\af42\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1033\langfe2052\loch\af42\hich\af42\dbch\af40\cgrid\langnp1033\langfenp2052 { +\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 \loch\af42\hich\af42\dbch\f40 \'b1\'ed\'b2\'bf\'c3\'c5\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\rtlch\fcs1 \af42 \ltrch\fcs0 \insrsid6556251 +\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard\plain \ltrpar\qc \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'c3\'fb\'b3\'c6}{\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b4\'fa\'c2\'eb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 +\'d7\'a2\'ca\'cd}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow0\irowband0\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil +\cellx2494\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr +\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \hich\af38\dbch\af40\loch\f38 ID\cell \hich\af38\dbch\af40\loch\f38 ID\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 +\ltrch\fcs0 \insrsid6556251 \trowd \irow1\irowband1\ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 +\clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 +\insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf\'c3\'c5\'b1\'e0\'ba\'c5}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf\'c3\'c5\'b1\'e0\'ba\'c5}{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow2\irowband2\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf +\'c3\'c5\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf\'c3\'c5\'c3\'e8\'ca\'f6}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell +}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow3\irowband3\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf +\'c3\'c5\'b8\'ba\'d4\'f0\'c8\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'b2\'bf\'c3\'c5\'b8\'ba\'d4\'f0\'c8\'cb}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 +\cell \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow4\irowband4\ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrnone \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row \ltrrow}\trowd \irow5\irowband5\lastrow \ltrrow\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl +\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil +\cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell }{ +\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \loch\af38\hich\af38\dbch\f40 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \cell \cell }\pard \ltrpar +\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af38 \ltrch\fcs0 \insrsid6556251 \trowd \irow5\irowband5\lastrow \ltrrow +\ts11\trgaph113\trleft113\trftsWidth1\trpaddl113\trpaddr113\trpaddfl3\trpaddfr3\tblind226\tblindtype3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2381\clshdrawnil \cellx2494 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrnone \cltxlrtb\clftsWidth3\clwWidth2494\clshdrawnil \cellx4988\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 +\cltxlrtb\clftsWidth3\clwWidth4989\clshdrawnil \cellx9977\row }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par \sect }\sectd \ltrsect\psz1\linex0\headery709\footery709\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sectrsid3374631\sftnbj \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\af38\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe2052\loch\af38\hich\af38\dbch\af40\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af45\afs20 \ltrch\fcs0 \f45\fs20\insrsid6556251 +\par }\pard \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14183836 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid7827759\charrsid13965460 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100e96c4e8db4060000ab1b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6f134714bf57ea7718ed1d62277688231c143b36692110c5868ae3783dde1d32bbb39a1927f886e08854a92aad3814a9eaa587 +aa2d1248ad54fa651a4a45a9c457e89b99ddf54ebc6e1288286a891089677ff3febfdfbc599fbf702b62688f084979dcf4aa672b1e22b1cf87340e9adeb57ef7 +cc8a87a4c2f110331e93a63721d2bbb0f6e107e7f1aa0a494410ec8fe52a6e7aa152c9eac282f46119cbb33c21313c1b711161051f45b03014781fe4466c61b1 +52595e88308d3d14e308c45e1d8da84fd0b39f7f79f1cd83df6edf837fde5aa6a3c34051aca45ef099e8690dc4d968b0c3ddaa46c8896c3381f6306b7aa06ec8 +f7fbe496f210c352c183a657313fdec2daf905bc9a6e626acedec2beaef949f7a51b86bb8b46a70806b9d26ab7d638b791cb3700a666719d4ea7dda9e6f20c00 +fb3e786a6d29caac7557aaad4c660164ff9c95ddaed42b35175f90bf346373a3d56ad51ba92d56a801d93f6b33f895ca726d7dd1c11b90c5d767f0b5d67abbbd +ece00dc8e29767f0dd738de59a8b37a090d1787706ad13daeda6d273c888b3cd52f80ac0572a297c8a826ac8ab4bab18f158cdabb508dfe4a20b000d6458d118 +a9494246d887626ee3682028d60af02ac1852776c997334b5a1792bea0896a7a1f27181a632aefd5d3ef5f3d7d8c0eee3c39b8f3d3c1ddbb07777eb4829c5d9b +380e8abb5e7efbd95f0f6fa33f1f7ffdf2fe17e57859c4fffec3bd67bf7e5e0e84f6999af3fccb477f3c79f4fcc1a72fbebb5f025f17785084f7694424ba42f6 +d10e8fc0311315d772321027dbd10f312dee588f038963acb594c8efa8d0415f99609666c7b1a345dc085e17401f65c08be39b8ec1bd508c152dd17c298c1ce0 +16e7acc54569142e695d8530f7c77150ae5c8c8bb81d8cf7ca74b771ece4b7334e8037b3b2741c6f87c431739be158e180c44421fd8cef1252e2dd0d4a9db86e +515f70c9470adda0a885696948fa74e054d374d3268d202f93329f21df4e6cb6aea31667655e6f903d17095d815989f17dc29c305ec46385a332917d1cb162c0 +2f63159619d99b08bf88eb4805990e08e3a833245296edb92ac0df42d22f6160acd2b46fb149e42285a2bb65322f63ce8bc80dbedb0e719494617b340e8bd88f +e42e942846db5c95c1b7b8db21fa33e401c773d37d9d1227dd47b3c1351a38264d0b443f198b925c5e24dca9dfde848d30315403a4ee707544e37f226e4681b9 +ad86d3236ea0cae75f3d2cb1fb5da5ec7538bdca7a66f31051cfc31da6e7361743faeeb3f3061ec7db041a62f6887a4fceefc9d9fbcf93f3bc7e3e7d4a9eb230 +10b49e45eca06dc6ee68eed43da28cf5d48491cbd20cde12ce9e611716f53e73f124f92d2c09e14fddc9a0c0c105029b3d4870f50955612fc4090ced554f0b09 +642a3a9028e1122e8b66b954b6c6c3e0afec55b3ae2f21963924565b7c689797f47276d7c8c518ab0273a1cd142d6901c755b6742e150abebd8eb2aa36ead8da +aac634438a8eb6dc651d6273298790e7aec1621e4d186a108c4210e565b8fa6bd570d9c18c0c75dc6d8eb2b4982c9c668a64888724cd91f67b36475593a4ac56 +661cd17ed862d017c723a256d0d6d062df40db71925454579ba32ecbde9b6429abe0699640dae1766471b139598cf69b5ea3be58f7908f93a637827b32fc1925 +9075a9e748cc0278e7e42b61cbfec866365d3ecd662373cc6d822abcfab0719f71d8e1814448b58165684bc33c4a4b80c55a93b57fb10e613d2d074ad8e87856 +2cad4031fc6b56401cddd492d188f8aa98ecc28a8e9dfd9852291f2b227ae1701f0dd858ec6048bf2e55f0674825bcee308ca03fc0bb391d6df3c825e7b4e98a +6fc40cceae63968438a55bdda259275bb821a4dc06f3a9601ef8566abb71eee4ae98963f25578a65fc3f73459f27f0f66169a833e0c31b628191ee94a6c7850a +39b0501252bf2b607030dc01d502ef77e1311415bca736bf05d9d3bf6dcf5919a6ade112a97668800485f3488582906da025537d4708aba6679715c95241a6a2 +0ae6cac49a3d207b84f535072eebb3dd432194ba619394060cee70fdb99fd30e1a047ac829f69bc364f9d96b7be06d4f3eb699c1299787cd4093c53f37311f0f +a6a7aadd6fb667676fd111fd603a66d5b2ae006585a3a091b6fd6b9a70c2a3d632d68cc78bf5cc38c8e2acc7b0980f4409bc4342fa3f38ffa8f0193165ac0fd4 +3edf016e45f0e58516066503557dc60e1e4813a45d1cc0e064176d31695136b4e9e8a4a3961dd6a73ce9e67a0f055b5b769c7c9f30d8f970e6aa737af134839d +46d889b55d9b1b6ac8ece11685a5517691318931df9615bfc9e2839b90e80df8ce60cc9434c504df53090c3374cff40134bfd568b6aefd0d0000ffff0300504b +0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72 +656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995 +719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0 +f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014 +000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d00 +14000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d0014000600080000 +0021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01 +022d0014000600080000002100e96c4e8db4060000ab1b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d +6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000be0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000b90a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000009d +8eeca384d101feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/documents/订单管理表模型3.25.rtf b/documents/订单管理表模型3.25.rtf new file mode 100644 index 0000000..f8f9671 --- /dev/null +++ b/documents/订单管理表模型3.25.rtf @@ -0,0 +1 @@ +{\rtf1 \ansi \ansicpg936 \deff0 \stshfdbch1 \stshfloch0 \stshfhich0 \deflang2052 \deflangfe2052 {\fonttbl {\f0 \froman \fcharset0 \fprq2 {\*\panose 02020603050405020304}Times New Roman{\*\falt Times New Roman};}{\f1 \fnil \fcharset134 \fprq0 {\*\panose 02010600030101010101}\'cb\'ce\'cc\'e5{\*\falt \'cb\'ce\'cc\'e5};}{\f2 \fnil \fcharset2 \fprq0 {\*\panose 05000000000000000000}Wingdings{\*\falt Wingdings};}{\f3 \fswiss \fcharset0 \fprq0 {\*\panose 00000000000000000000}Arial Bold{\*\falt Arial};}{\f4 \fswiss \fcharset0 \fprq0 {\*\panose 020b0604020202020204}Arial{\*\falt Arial};}{\f5 \fswiss \fcharset134 \fprq0 {\*\panose 020b0604020202020204}Microsoft Sans Serif{\*\falt Microsoft Sans Serif};}}{\colortbl ;\red0 \green0 \blue0 ;\red128 \green0 \blue0 ;\red255 \green0 \blue0 ;\red0 \green128 \blue0 ;\red128 \green128 \blue0 ;\red0 \green255 \blue0 ;\red255 \green255 \blue0 ;\red0 \green0 \blue128 ;\red128 \green0 \blue128 ;\red0 \green128 \blue128 ;\red128 \green128 \blue128 ;\red192 \green192 \blue192 ;\red230 \green230 \blue230 ;\red0 \green0 \blue255 ;\red255 \green0 \blue255 ;\red0 \green255 \blue255 ;\red255 \green255 \blue255 ;\red0 \green0 \blue0 ;\red255 \green255 \blue255 ;}{\stylesheet {\li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \snext0 \sunhideused \spriority99 Normal;}{\s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 1;}{\s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 2;}{\s3 \fi-720 \li720 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin720 \rin0 \tql \tx720 \itap0 \outlinelevel2 \ls1 \ilvl2 \i1 \fs28 \loch \af4 \hich \af4 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 3;}{\s4 \fi-864 \li864 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin864 \rin0 \tql \tx864 \itap0 \outlinelevel3 \ls1 \ilvl3 \fs28 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 4;}{\s5 \fi-1008 \li1008 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1008 \rin0 \tql \tx1008 \itap0 \outlinelevel4 \ls1 \ilvl4 \b1 \i1 \fs26 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 5;}{\s6 \fi-1152 \li1152 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1152 \rin0 \tql \tx1152 \itap0 \outlinelevel5 \ls1 \ilvl5 \b1 \fs22 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 6;}{\s7 \fi-1296 \li1296 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1296 \rin0 \tql \tx1296 \itap0 \outlinelevel6 \ls1 \ilvl6 \fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 7;}{\s8 \fi-1440 \li1440 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1440 \rin0 \tql \tx1440 \itap0 \outlinelevel7 \ls1 \ilvl7 \i1 \fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 8;}{\s9 \fi-1584 \li1584 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1584 \rin0 \tql \tx1584 \itap0 \outlinelevel8 \ls1 \ilvl8 \fs22 \loch \af4 \hich \af4 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 heading 9;}{\*\cs10 \fs24 \snext10 \sunhideused \spriority99 Default Paragraph Font;}{\s15 \li1920 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1920 \rin0 \itap0 \fs18 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 toc 9;}{\s16 \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \tqc \tx4153 \tqr \tx8306 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext22 \sunhideused \spriority99 footer;}{\s17 \li960 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin960 \rin0 \itap0 \fs18 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 toc 5;}{\s18 \li1440 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1440 \rin0 \itap0 \fs18 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 toc 7;}{\s19 \li1200 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1200 \rin0 \itap0 \fs18 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 toc 6;}{\s20 \li0 \ri0 \sb120 \lisb0 \sa120 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \b1 \fs20 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \caps1 \sbasedon0 \snext0 \sunhideused \spriority99 toc 1;}{\s21 \li1680 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1680 \rin0 \itap0 \fs18 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 toc 8;}{\s22 \li480 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin480 \rin0 \itap0 \i1 \fs20 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 toc 3;}{\s23 \li720 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin720 \rin0 \itap0 \fs18 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext0 \sunhideused \spriority99 toc 4;}{\s24 \li240 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin240 \rin0 \itap0 \fs20 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \scaps1 \sbasedon0 \snext0 \sunhideused \spriority99 toc 2;}{\s25 \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \tqc \tx4153 \tqr \tx8306 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sbasedon0 \snext24 \sunhideused \spriority99 header;}}{\*\latentstyles \lsdstimax260 \lsdlockeddef0 \lsdsemihiddendef1 \lsdunhideuseddef1 \lsdqformatdef0 \lsdprioritydef99 {\lsdlockedexcept \lsdsemihidden0 \lsdpriority99 \lsdlocked0 Normal;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 1;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 2;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 3;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 4;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 5;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 6;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 7;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 8;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 heading 9;\lsdpriority99 \lsdlocked0 index 1;\lsdpriority99 \lsdlocked0 index 2;\lsdpriority99 \lsdlocked0 index 3;\lsdpriority99 \lsdlocked0 index 4;\lsdpriority99 \lsdlocked0 index 5;\lsdpriority99 \lsdlocked0 index 6;\lsdpriority99 \lsdlocked0 index 7;\lsdpriority99 \lsdlocked0 index 8;\lsdpriority99 \lsdlocked0 index 9;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 1;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 2;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 3;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 4;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 5;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 6;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 7;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 8;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 toc 9;\lsdpriority99 \lsdlocked0 Normal Indent;\lsdpriority99 \lsdlocked0 footnote text;\lsdpriority99 \lsdlocked0 annotation text;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 header;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 footer;\lsdpriority99 \lsdlocked0 index heading;\lsdpriority99 \lsdlocked0 caption;\lsdpriority99 \lsdlocked0 table of figures;\lsdpriority99 \lsdlocked0 envelope address;\lsdpriority99 \lsdlocked0 envelope return;\lsdpriority99 \lsdlocked0 footnote reference;\lsdpriority99 \lsdlocked0 annotation reference;\lsdpriority99 \lsdlocked0 line number;\lsdpriority99 \lsdlocked0 page number;\lsdpriority99 \lsdlocked0 endnote reference;\lsdpriority99 \lsdlocked0 endnote text;\lsdpriority99 \lsdlocked0 table of authorities;\lsdpriority99 \lsdlocked0 macro;\lsdpriority99 \lsdlocked0 toa heading;\lsdpriority99 \lsdlocked0 List;\lsdpriority99 \lsdlocked0 List Bullet;\lsdpriority99 \lsdlocked0 List Number;\lsdpriority99 \lsdlocked0 List 2;\lsdpriority99 \lsdlocked0 List 3;\lsdpriority99 \lsdlocked0 List 4;\lsdpriority99 \lsdlocked0 List 5;\lsdpriority99 \lsdlocked0 List Bullet 2;\lsdpriority99 \lsdlocked0 List Bullet 3;\lsdpriority99 \lsdlocked0 List Bullet 4;\lsdpriority99 \lsdlocked0 List Bullet 5;\lsdpriority99 \lsdlocked0 List Number 2;\lsdpriority99 \lsdlocked0 List Number 3;\lsdpriority99 \lsdlocked0 List Number 4;\lsdpriority99 \lsdlocked0 List Number 5;\lsdpriority99 \lsdlocked0 Title;\lsdpriority99 \lsdlocked0 Closing;\lsdpriority99 \lsdlocked0 Signature;\lsdsemihidden0 \lsdpriority99 \lsdlocked0 Default Paragraph Font;\lsdpriority99 \lsdlocked0 Body Text;\lsdpriority99 \lsdlocked0 Body Text Indent;\lsdpriority99 \lsdlocked0 List Continue;\lsdpriority99 \lsdlocked0 List Continue 2;\lsdpriority99 \lsdlocked0 List Continue 3;\lsdpriority99 \lsdlocked0 List Continue 4;\lsdpriority99 \lsdlocked0 List Continue 5;\lsdpriority99 \lsdlocked0 Message Header;\lsdpriority99 \lsdlocked0 Subtitle;\lsdpriority99 \lsdlocked0 Salutation;\lsdpriority99 \lsdlocked0 Date;\lsdpriority99 \lsdlocked0 Body Text First Indent;\lsdpriority99 \lsdlocked0 Body Text First Indent 2;\lsdpriority99 \lsdlocked0 Note Heading;\lsdpriority99 \lsdlocked0 Body Text 2;\lsdpriority99 \lsdlocked0 Body Text 3;\lsdpriority99 \lsdlocked0 Body Text Indent 2;\lsdpriority99 \lsdlocked0 Body Text Indent 3;\lsdpriority99 \lsdlocked0 Block Text;\lsdpriority99 \lsdlocked0 Hyperlink;\lsdpriority99 \lsdlocked0 FollowedHyperlink;\lsdpriority99 \lsdlocked0 Strong;\lsdpriority99 \lsdlocked0 Emphasis;\lsdpriority99 \lsdlocked0 Document Map;\lsdpriority99 \lsdlocked0 Plain Text;\lsdpriority99 \lsdlocked0 E-mail Signature;\lsdpriority99 \lsdlocked0 Normal (Web);\lsdpriority99 \lsdlocked0 HTML Acronym;\lsdpriority99 \lsdlocked0 HTML Address;\lsdpriority99 \lsdlocked0 HTML Cite;\lsdpriority99 \lsdlocked0 HTML Code;\lsdpriority99 \lsdlocked0 HTML Definition;\lsdpriority99 \lsdlocked0 HTML Keyboard;\lsdpriority99 \lsdlocked0 HTML Preformatted;\lsdpriority99 \lsdlocked0 HTML Sample;\lsdpriority99 \lsdlocked0 HTML Typewriter;\lsdpriority99 \lsdlocked0 HTML Variable;\lsdpriority99 \lsdlocked0 Normal Table;\lsdpriority99 \lsdlocked0 annotation subject;\lsdpriority99 \lsdlocked0 No List;\lsdpriority99 \lsdlocked0 Table Simple 1;\lsdpriority99 \lsdlocked0 Table Simple 2;\lsdpriority99 \lsdlocked0 Table Simple 3;\lsdpriority99 \lsdlocked0 Table Classic 1;\lsdpriority99 \lsdlocked0 Table Classic 2;\lsdpriority99 \lsdlocked0 Table Classic 3;\lsdpriority99 \lsdlocked0 Table Classic 4;\lsdpriority99 \lsdlocked0 Table Colorful 1;\lsdpriority99 \lsdlocked0 Table Colorful 2;\lsdpriority99 \lsdlocked0 Table Colorful 3;\lsdpriority99 \lsdlocked0 Table Columns 1;\lsdpriority99 \lsdlocked0 Table Columns 2;\lsdpriority99 \lsdlocked0 Table Columns 3;\lsdpriority99 \lsdlocked0 Table Columns 4;\lsdpriority99 \lsdlocked0 Table Columns 5;\lsdpriority99 \lsdlocked0 Table Grid 1;\lsdpriority99 \lsdlocked0 Table Grid 2;\lsdpriority99 \lsdlocked0 Table Grid 3;\lsdpriority99 \lsdlocked0 Table Grid 4;\lsdpriority99 \lsdlocked0 Table Grid 5;\lsdpriority99 \lsdlocked0 Table Grid 6;\lsdpriority99 \lsdlocked0 Table Grid 7;\lsdpriority99 \lsdlocked0 Table Grid 8;\lsdpriority99 \lsdlocked0 Table List 1;\lsdpriority99 \lsdlocked0 Table List 2;\lsdpriority99 \lsdlocked0 Table List 3;\lsdpriority99 \lsdlocked0 Table List 4;\lsdpriority99 \lsdlocked0 Table List 5;\lsdpriority99 \lsdlocked0 Table List 6;\lsdpriority99 \lsdlocked0 Table List 7;\lsdpriority99 \lsdlocked0 Table List 8;\lsdpriority99 \lsdlocked0 Table 3D effects 1;\lsdpriority99 \lsdlocked0 Table 3D effects 2;\lsdpriority99 \lsdlocked0 Table 3D effects 3;\lsdpriority99 \lsdlocked0 Table Contemporary;\lsdpriority99 \lsdlocked0 Table Elegant;\lsdpriority99 \lsdlocked0 Table Professional;\lsdpriority99 \lsdlocked0 Table Subtle 1;\lsdpriority99 \lsdlocked0 Table Subtle 2;\lsdpriority99 \lsdlocked0 Table Web 1;\lsdpriority99 \lsdlocked0 Table Web 2;\lsdpriority99 \lsdlocked0 Table Web 3;\lsdpriority99 \lsdlocked0 Balloon Text;\lsdpriority99 \lsdlocked0 Table Grid;\lsdpriority99 \lsdlocked0 Table Theme;\lsdpriority99 \lsdlocked0 Light Shading;\lsdpriority99 \lsdlocked0 Light List;\lsdpriority99 \lsdlocked0 Light Grid;\lsdpriority99 \lsdlocked0 Medium Shading 1;\lsdpriority99 \lsdlocked0 Medium Shading 2;\lsdpriority99 \lsdlocked0 Medium List 1;\lsdpriority99 \lsdlocked0 Medium List 2;\lsdpriority99 \lsdlocked0 Medium Grid 1;\lsdpriority99 \lsdlocked0 Medium Grid 2;\lsdpriority99 \lsdlocked0 Medium Grid 3;\lsdpriority99 \lsdlocked0 Dark List;\lsdpriority99 \lsdlocked0 Colorful Shading;\lsdpriority99 \lsdlocked0 Colorful List;\lsdpriority99 \lsdlocked0 Colorful Grid;\lsdpriority99 \lsdlocked0 Light Shading Accent 1;\lsdpriority99 \lsdlocked0 Light List Accent 1;\lsdpriority99 \lsdlocked0 Light Grid Accent 1;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 1;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority99 \lsdlocked0 Dark List Accent 1;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority99 \lsdlocked0 Colorful List Accent 1;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority99 \lsdlocked0 Light Shading Accent 2;\lsdpriority99 \lsdlocked0 Light List Accent 2;\lsdpriority99 \lsdlocked0 Light Grid Accent 2;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority99 \lsdlocked0 Dark List Accent 2;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority99 \lsdlocked0 Colorful List Accent 2;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority99 \lsdlocked0 Light Shading Accent 3;\lsdpriority99 \lsdlocked0 Light List Accent 3;\lsdpriority99 \lsdlocked0 Light Grid Accent 3;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority99 \lsdlocked0 Dark List Accent 3;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority99 \lsdlocked0 Colorful List Accent 3;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority99 \lsdlocked0 Light Shading Accent 4;\lsdpriority99 \lsdlocked0 Light List Accent 4;\lsdpriority99 \lsdlocked0 Light Grid Accent 4;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority99 \lsdlocked0 Dark List Accent 4;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority99 \lsdlocked0 Colorful List Accent 4;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority99 \lsdlocked0 Light Shading Accent 5;\lsdpriority99 \lsdlocked0 Light List Accent 5;\lsdpriority99 \lsdlocked0 Light Grid Accent 5;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 5;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority99 \lsdlocked0 Dark List Accent 5;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 5;\lsdpriority99 \lsdlocked0 Colorful List Accent 5;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority99 \lsdlocked0 Light Shading Accent 6;\lsdpriority99 \lsdlocked0 Light List Accent 6;\lsdpriority99 \lsdlocked0 Light Grid Accent 6;\lsdpriority99 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority99 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority99 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority99 \lsdlocked0 Medium List 2 Accent 6;\lsdpriority99 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority99 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority99 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority99 \lsdlocked0 Dark List Accent 6;\lsdpriority99 \lsdlocked0 Colorful Shading Accent 6;\lsdpriority99 \lsdlocked0 Colorful List Accent 6;\lsdpriority99 \lsdlocked0 Colorful Grid Accent 6;}}{\*\listtable {\list \listtemplateid325517324 \listhybrid {\listlevel \levelnfc1 \levelnfcn1 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'01\'00;}{\levelnumbers \'01;}\ulc0 \li432 \lin432 \fi-432 \jclisttab \tx432 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'03\'00.\'01;}{\levelnumbers \'01\'03;}\ulc0 \li576 \lin576 \fi-576 \jclisttab \tx576 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'05\'00.\'01.\'02;}{\levelnumbers \'01\'03\'05;}\ulc0 \li720 \lin720 \fi-720 \jclisttab \tx720 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'07\'00.\'01.\'02.\'03;}{\levelnumbers \'01\'03\'05\'07;}\ulc0 \li864 \lin864 \fi-864 \jclisttab \tx864 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'09\'00.\'01.\'02.\'03.\'04;}{\levelnumbers \'01\'03\'05\'07\'09;}\ulc0 \li1008 \lin1008 \fi-1008 \jclisttab \tx1008 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'0b\'00.\'01.\'02.\'03.\'04.\'05;}{\levelnumbers \'01\'03\'05\'07\'09\'0b;}\ulc0 \li1152 \lin1152 \fi-1152 \jclisttab \tx1152 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\levelnumbers ;}\ulc0 \li1296 \lin1296 \fi-1296 \jclisttab \tx1296 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'0f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07;}{\levelnumbers \'01\'03\'05\'07\'09\'0b\'0f;}\ulc0 \li1440 \lin1440 \fi-1440 \jclisttab \tx1440 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08;}{\levelnumbers \'01\'03\'05\'07\'09\'0b\'0f\'11;}\ulc0 \li1584 \lin1584 \fi-1584 \jclisttab \tx1584 }{\listname ;}\listid325517324 }{\list \listtemplateid391467813 \listhybrid {\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'00);}{\levelnumbers \'01;}\ulc0 \li360 \lin360 \fi-360 \jclisttab \tx360 }{\listlevel \levelnfc4 \levelnfcn4 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'01);}{\levelnumbers \'01;}\ulc0 \li720 \lin720 \fi-360 \jclisttab \tx720 }{\listlevel \levelnfc2 \levelnfcn2 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'02);}{\levelnumbers \'01;}\ulc0 \li1080 \lin1080 \fi-360 \jclisttab \tx1080 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'03(\'03);}{\levelnumbers \'02;}\ulc0 \li1440 \lin1440 \fi-360 \jclisttab \tx1440 }{\listlevel \levelnfc4 \levelnfcn4 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'03(\'04);}{\levelnumbers \'02;}\ulc0 \li1800 \lin1800 \fi-360 \jclisttab \tx1800 }{\listlevel \levelnfc2 \levelnfcn2 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'03(\'05);}{\levelnumbers \'02;}\ulc0 \li2160 \lin2160 \fi-360 \jclisttab \tx2160 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'06.;}{\levelnumbers \'01;}\ulc0 \li2520 \lin2520 \fi-360 \jclisttab \tx2520 }{\listlevel \levelnfc4 \levelnfcn4 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'07.;}{\levelnumbers \'01;}\ulc0 \li2880 \lin2880 \fi-360 \jclisttab \tx2880 }{\listlevel \levelnfc2 \levelnfcn2 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'08.;}{\levelnumbers \'01;}\ulc0 \li3240 \lin3240 \fi-360 \jclisttab \tx3240 }{\listname ;}\listid391467813 }{\list \listtemplateid946230203 \listhybrid {\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'00);}{\levelnumbers \'01;}\ulc0 \li360 \lin360 \fi-360 \jclisttab \tx360 }{\listlevel \levelnfc4 \levelnfcn4 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'01);}{\levelnumbers \'01;}\ulc0 \li720 \lin720 \fi-360 \jclisttab \tx720 }{\listlevel \levelnfc2 \levelnfcn2 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'02);}{\levelnumbers \'01;}\ulc0 \li1080 \lin1080 \fi-360 \jclisttab \tx1080 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'03(\'03);}{\levelnumbers \'02;}\ulc0 \li1440 \lin1440 \fi-360 \jclisttab \tx1440 }{\listlevel \levelnfc4 \levelnfcn4 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'03(\'04);}{\levelnumbers \'02;}\ulc0 \li1800 \lin1800 \fi-360 \jclisttab \tx1800 }{\listlevel \levelnfc2 \levelnfcn2 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'03(\'05);}{\levelnumbers \'02;}\ulc0 \li2160 \lin2160 \fi-360 \jclisttab \tx2160 }{\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'06.;}{\levelnumbers \'01;}\ulc0 \li2520 \lin2520 \fi-360 \jclisttab \tx2520 }{\listlevel \levelnfc4 \levelnfcn4 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'07.;}{\levelnumbers \'01;}\ulc0 \li2880 \lin2880 \fi-360 \jclisttab \tx2880 }{\listlevel \levelnfc2 \levelnfcn2 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'08.;}{\levelnumbers \'01;}\ulc0 \li3240 \lin3240 \fi-360 \jclisttab \tx3240 }{\listname ;}\listid946230203 }{\list \listtemplateid1459094540 \listsimple {\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'00.;}{\levelnumbers \'01;}\li780 \lin780 \fi-360 \jclisttab \tx780 }{\listname ;}\listid1459094540 }{\list \listtemplateid1459094551 \listsimple {\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'01{\uc1 \u61548 ?};}{\levelnumbers ;}\dbch \af1 \hich \af2 \loch \f2 \li1620 \lin1620 \fi-360 \jclisttab \tx1620 }{\listname ;}\listid1459094551 }{\list \listtemplateid1459094562 \listsimple {\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'00.;}{\levelnumbers \'01;}\li360 \lin360 \fi-360 \jclisttab \tx360 }{\listname ;}\listid1459094562 }{\list \listtemplateid1459094573 \listsimple {\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'01{\uc1 \u61548 ?};}{\levelnumbers ;}\dbch \af1 \hich \af2 \loch \f2 \li360 \lin360 \fi-360 \jclisttab \tx360 }{\listname ;}\listid1459094573 }{\list \listtemplateid1459094584 \listsimple {\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'01{\uc1 \u61548 ?};}{\levelnumbers ;}\dbch \af1 \hich \af2 \loch \f2 \li1200 \lin1200 \fi-360 \jclisttab \tx1200 }{\listname ;}\listid1459094584 }{\list \listtemplateid1459094595 \listsimple {\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'00.;}{\levelnumbers \'01;}\li1200 \lin1200 \fi-360 \jclisttab \tx1200 }{\listname ;}\listid1459094595 }{\list \listtemplateid1459094606 \listsimple {\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'01{\uc1 \u61548 ?};}{\levelnumbers ;}\dbch \af1 \hich \af2 \loch \f2 \li780 \lin780 \fi-360 \jclisttab \tx780 }{\listname ;}\listid1459094606 }{\list \listtemplateid1459094617 \listsimple {\listlevel \levelnfc23 \levelnfcn23 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'01{\uc1 \u61548 ?};}{\levelnumbers ;}\dbch \af1 \hich \af2 \loch \f2 \li2040 \lin2040 \fi-360 \jclisttab \tx2040 }{\listname ;}\listid1459094617 }{\list \listtemplateid1459094628 \listsimple {\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'00.;}{\levelnumbers \'01;}\li1620 \lin1620 \fi-360 \jclisttab \tx1620 }{\listname ;}\listid1459094628 }{\list \listtemplateid1459094639 \listsimple {\listlevel \levelnfc0 \levelnfcn0 \leveljc0 \leveljcn0 \levelstartat1 \levelfollow0 \levelspace0 \levelindent0 \levellegal0 \levelnorestart0 {\leveltext \'02\'00.;}{\levelnumbers \'01;}\li2040 \lin2040 \fi-360 \jclisttab \tx2040 }{\listname ;}\listid1459094639 }}{\*\listoverridetable {\listoverride \listid325517324 \listoverridecount0 \ls1 }}{\*\generator WPS Office}{\info {\author Administrator}{\operator Administrator}{\creatim \yr2016 \mo3 \dy28 \hr0 \min2 }{\revtim \yr2016 \mo3 \dy28 \hr0 \min2 }{\version1 }}\paperw12240 \paperh15840 \margl1134 \margr1134 \margt1440 \margb1440 \gutter0 \ftnbj \aenddoc \formshade \dgmargin \dghspace180 \dgvspace180 \dghorigin1134 \dgvorigin1440 \dghshow1 \dgvshow1 \jexpand0 \viewkind1 \viewscale100 \splytwnine \ftnlytwnine \htmautsp \useltbaln \lytcalctblwd \lnbrkrule \asianbrkrule \allowfieldendsel \snaptogridincell \hyphcaps0 \pgbrdrhead1 \pgbrdrfoot1 \nolnhtadjtbl \expshrtn \noxlattoyen \dntblnsbdb \noultrlspc \nospaceforul {\*\fchars !),.:;?]\'7d\'a1\'a7\'a1\'a4\'a1\'a6\'a1\'a5\'a8D\'a1\'ac\'a1\'af\'a1\'b1\'a1\'ad\'a1\'c3\'a1\'a2\'a1\'a3\'a1\'a8\'a1\'a9\'a1\'b5\'a1\'b7\'a1\'b9\'a1\'bb\'a1\'bf\'a1\'b3\'a1\'bd\'a3\'a1\'a3\'a2\'a3\'a7\'a3\'a9\'a3\'ac\'a3\'ae\'a3\'ba\'a3\'bb\'a3\'bf\'a3\'dd\'a3\'e0\'a3\'fc\'a3\'fd\'a1\'ab\'a1\'e9}{\*\lchars ([\'7b\'a1\'a4\'a1\'ae\'a1\'b0\'a1\'b4\'a1\'b6\'a1\'b8\'a1\'ba\'a1\'be\'a1\'b2\'a1\'bc\'a3\'a8\'a3\'ae\'a3\'db\'a3\'fb\'a1\'ea\'a3\'a4}\fet2 {\*\ftnsep \pard \plain {\insrsid \chftnsep \par }}{\*\ftnsepc \pard \plain {\insrsid \chftnsepc \par }}{\*\aftnsep \pard \plain {\insrsid \chftnsep \par }}{\*\aftnsepc \pard \plain {\insrsid \chftnsepc \par }}\sectd \sbkpage \pgwsxn12242 \pghsxn15842 \marglsxn1134 \margrsxn1134 \margtsxn1440 \margbsxn1440 \guttersxn0 \headery709 \footery709 \pgbrdropt0 \sectlinegrid360 \sectdefaultcl \endnhere \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 }{\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qc \li0 \ri974 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin974 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri74 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin74 \cbpat13 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\b1 \fs40 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Sybase PowerDesigner}{\b1 \fs40 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri74 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin74 \cbpat13 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\b1 \fs36 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Physical Data Model Report}{\b1 \fs36 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qc \li0 \ri974 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin974 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\b1 \i1 \fs32 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Model: order}{\b1 \i1 \fs32 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\b1 \i1 \fs32 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Report: \dbch \f1 \'b6\'a9\'b5\'a5\'c4\'a3\'d0\'cd}{\b1 \i1 \fs32 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \af0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\*\shppict {\pict {\*\picprop \shplid0 {\sp {\sn shapeType}{\sv 75}}{\sp {\sn fFlipH}{\sv 0}}{\sp {\sn fFlipV}{\sv 0}}{\sp {\sn fLockAspectRatio}{\sv 1}}{\sp {\sn WrapText}{\sv 0}}{\sp {\sn fLineOK}{\sv 1}}{\sp {\sn f3DOK}{\sv 0}}{\sp {\sn fShadowOK}{\sv 1}}{\sp {\sn fillColor}{\sv 134217732}}{\sp {\sn fillBackColor}{\sv 134217728}}{\sp {\sn fFilled}{\sv 0}}{\sp {\sn fRecolorFillAsPicture}{\sv 0}}{\sp {\sn lineStyle}{\sv 0}}{\sp {\sn fLine}{\sv 0}}{\sp {\sn shadowColor}{\sv 134217730}}{\sp {\sn fShadow}{\sv 0}}{\sp {\sn wzName}{\sv \'cd\'bc\'c6\'ac 1}}{\sp {\sn fUseShapeAnchor}{\sv 0}}{\sp {\sn fRecolorFillAsPicture}{\sv 0}}{\sp {\sn posrelh}{\sv 1}}{\sp {\sn posrelv}{\sv 1}}{\sp {\sn fLayoutInCell}{\sv 1}}}\piccropl0 \piccropr0 \piccropt0 \piccropb0 \picscalex168 \picscaley168 \picw210 \pich126 \picwgoal3150 \pichgoal1890 \pngblip {\*\blipuid 2d13776e2d13776e2d13776e2d13776e}89504e470d0a1a0a0000000d49484452000000d20000007e080600000051474fd7000000017352474200aece1ce9000000097048597300000ec400000ec401952b0e1b0000001974455874536f667477617265004d6963726f736f6674204f66666963657fed35710000ff9049444154785e6cfd059ca55795b60faf7277ed6a779774c7dddd08098440082481e0320c3203030cc330f8e0ee920011e2eeae9da43b6977efea72f7faae6b9f6a98f7fffb2a145d75ea9c47f6b3f45ef75a3bf7d8dfbf3c5e303c101db50d3156581055f97c97e4444fef403496144633ff16e7e64643714ee4678dc74864c7a9b58571e781be9855981b23e3c3f1dc8edd71d1e81391dddd1ad9f9b99195931363a3a3115959fc8fef6cbfb3d3ef31c6310686a3bbf1b4289bb23c1697e7c61b9d03d15498179dc3a3e9f82579d9f1bdcd1d71667551bcd0dc1533cb0aa32c46e385f6c128c9e530834391939f1fe3c38391cfb12b0af2a2a3bb3f96d496c5ced6b618c9ce4be71cee1f88d1c2c2c819e8e7f79c18c9c98a7c3e3bcc7de60c0e46764e6e0ce5e6445e6f5f54d454c65b964e8f43fdc331ad242ff6f60d476d81f7371e2d836331b72c2f36740dc59cb2fce818cd8ad1f1882d0fdf17b7fff8fbd173687fe4b16ebcc4d7788c0d0f476171692c7bdbbbe3e4775e13936aaa624f734b6cbee50ff1d09ffe10834383515050c8528cc5c8d848b03a51909b1f454d33a3e6ed1f8cc2a5abe2f4babc181819e62fe33199b5691d1c49f75accf51e60fd8ab997327fe6f562d6bb28372b5a0646581f7ee66f87b8cf3ceeb994df3b865dd5acf473f7c828471ce7b37931c833eae3bbd267c67f2d4323bccefaf33e3f3f321651cfb98746c7623fe7f16f35f939b17fc0cf8d4703eb33c6b176f77b4cdecbefbd3cf67d83a351ccb5d6156447ebd0581ce4bb82633616e4c4c1e1b1d8cde7ab798ed38a7263ffd0786ce5f7f29cec98c3fbbb918f75fdae4924f9e2b6620bf7dbc6719b944364633fd7b36380fbcbca8e193cfb42deb395eb6de382ab39ce949292e8f9c3f7a3edefbf8a31d626f354bc428fca4f3c53bf94cdc3af2539e578232343e9a5f4ceb1b1282a2a8bfc7ffd41e4ce3d3a8ad63e1f39dce3c1c9336290d74791e9be51e4687c2472a75595c79ceadab86d4b6be41417c5684d41f4b380a32cfd0807cbe1e0793c981e2eb285059b5e9e1777eceb8dcabcac6842e13a46b2635a455e641f1a4479c6223b298e8f6d3ce94d160be86ba12271fde32a63767e6c1caf8a39635908d378f0b128e7616eef1be1df88275bfba3cccff0d08739eff4e2bc78fd605f14f1d96c7ecf4e8bc2370fb300a5e81b40d9b9c1f1b1e1f420ab787f574f5f8c72ee5104259f05192a407986108ebc3c75397239ef080f2677700005cb8d2553ea105c1e280f6a9837f81e05673dca33ad243f76f58e44451ecac81f0ef50dc5dcf2c2183dfbc2b866ea8cb8ff87df8acdafbc14f928adf79e93571003037df1e2ef7f16c32d0762e57b3e1493a74c8ed3dfff91c8abaa8d877efea3e8ede9e2fdc528470ef73818831885f13d5b62e877df8ed9effe583cbbeac4a8cc1e8b93781e2a8e0fb616216ee6e742cea112350f0ea334d949890ea144c54909b2e320afe765e746197fd338f934cab8ef2e149ca5e6d9e5453ff7da3f368ae1cc6719c7a31d25aacccf4ecab6a77f28dd7f0342dacf7aefe3d835ac6f05e7d9ce3a0cf2b7a945283a6bbd8bbfe5f3ac9a10fa6614660f4a54cb1ad6f13c77a37c6d28ce24aebb9ab5db8291eae47853786f7dfa7d242959237f9f8a92ede4b37b8646a302e19f5d88128e8cc79bbc677c3c2b1616e64401f7b19163768c8ca4cfcfe49a0e71fcd739ae323193eb5591f6a0544317bc2bf237bf11836b9f8b71ee978364646642810e2bd3e1d7c690911c3e9b832c8c62dcd2fb783603dd1d91f5e76f47de677f1e63d58d18c1bec0f4f23d1603431868f503a3949b8f06d62064453cf8a2c1de086e68a0a43646589c61cedbcdca63dff91ee3e1a01e5c5017375c99971b8fa33ce5dcd0a4dc81c81a1fc513653c9017979489f767f3ad12258fc4f17c5f7f14c72b7d85d1d9c943419986b0f04b39c7a6fef1286521371fea8d9978c3eee1210480cfa220dd2cce180b328e30040a30ce75733a16702cfab1b8336bcba303cf92cd4d0db028a33cb0b1a2423cd0000b89f9e3bcd9bc3ec2f5e6a5d70a92d9717d6b6a2a627a4551742014b3f0383b7a87631282b21fa155b87251e05e14725e71416cef194e42d389451ce4412f59b92246bef03f51f3fb9fc7ea7befe021f040b8be1cae43affcca9db7c4a1fd07e2b24f7d2e3aa6ce8e232fbf2a26354e8a1bbff9d5683f78208a4a4ab91d8499fb19e23e7931b6fefe7b51d9d119d5e75d14aff78c4509d7390b577c0081c9653d6bb8a6fd5c6b1e6b5ac5bdede75a54a82aee6d1fd79cc733d00874b25639fc5ccab5b4ab44dc6c657e5ef4a15cde8f3f8fe0153bf4441c474fb6a77f506b8737c98f369e451b6bdb8010e773ae4dac8b4f5745684338f6720d1a9706ae67f7c018823f8657ca8b721ef5463c7a1f8a369375d4abbcd1cb7a214bb3f95d5178b97b3806b89ed9c52828e7dd88c2b4a3dcd3502a95643b0ab33b295556cce698ed5caf4a8464a154f951caeb5bb9d783dc4b098a3707c51d61edb762047a386e557965d45ffb9968f9da47a3b7752fb2890c2899130a9591d37f7ef97b469934c8f859d605618dc0d00c6e5e1bb9b7ff3cb2dffdf918dfbf376af66d8bbecacae8abae8ffc1cb40365ca1ded6a8ffd87c6a272b03bf2b050fdfbd1f8aaeae43607314b27d61663454678c884502581901a7ea150fe9dd083a7193923bdc829ee5d45e1011ed6fa14d24d78a374d94676bcaf232a23673c2766e48dc7d3cd033c8c3c1efc4012d22578b961166c6a4d4ebc7aa88787981f877a07513e3c9b66d2c5e0dc59789702167c8c075d80152dc3836feb23f42b2a8a3e42ba6c5e73d1f48c43086a2ea1dcb84f5093cce7473967360a358a90adc41b8d2004953cc44e1e9ec100b785f08dc7fcb2dcd8c9754d2fce8f1e1e9a42aa07d8868599599a17dbdbbaa3615263bcfd735f88dcbac6587bf39ff036dd29f4cce601676515c49e979f8e3ffec767e3ec8f7d3a9a8e3f2ef28f3935aefd5a65dcf28dff8a6debd7456979050f3a1f078c3211668f773447d76dbf8c4d2857dec917c6490d84d8781905712a42d5c2cf0a678da15252a89ca4f01925ca845f877ccf84a21d623df53a1abf5e9ee50021404552a271423dc3c1dca428bb5154bd4b1de1dc2194ab8335a9e37c3eb8cd78a202de33c9d086356fe662ea394f090abc8148826025856aaef91bfcce9dc70c7e1fe6f7cd284901b2b010a5e94148d7756742bf15a584d6c8d5eb3d4814f7b30025d358af4719da315233508e3a6e7407e7dbcf73a942b6a6700f8693ebb9d72e2212bd501dafefe5d93473cdb9acc52cde53923516cdd3e746bce5bac8fdcd7fa364a61a19d93c1ccefd3f9a3411f68d196a738c949aa48097e884e738f0f0df226fd9f15131e7c8c8dab7150f941f590d45913b3684d71e8adceee71f88ade535d1585d93dc79f140778ced2c8d96fac9d1925f1427d5e6c773ed5c60561e96683c9e69cb42b9b07c3c9cbc2c970b0731dc8bd74091525e941cd2446e84c355990e5f318bea423767d7102ee661791068166d2e0bfafc819e281bc74df2908bf8405ef678f4a118475415c79a969ee4d1b2bd4916436b91e3c5a610aa371a8af2a3b56f20ddb87a3cceb50ce717462eb9888b97c5c3cb23581dc823f462b1c738778c625d3104931aea08570b526ea4b5dcdc3d145309e514aa062caf216dc6aa0739d268cc2acd8fbdfcad1e2bada119e2bb296b347611ef5c72c38763ce9cd9f1f7ef7f277a9bf7a14c0423867a0545d1b6795ddcf7b52f44db07fe254e38e79c285971645cf8a5ff89c7befb3fb1e1d597a2a0b80ce38255e5ba868650a6ced63878ebafa28987b4facccba29c4539a95a01c7b223405351ec762203ec68f21e7acf5cae7312d76528a60133673998942808b5c82311c85ed6b78a9f0759137fafc2a0a083b187cf979ad7b006fbd08a013e3409851ae0feb613ca56a06cb5865f28451b423b43a1e71c1bf03c635cc55cc2e96e8ebd1137548e1133546bc6101d60bd6b78ce5350ba032883a15b033fcf646d0ff2f34ee24343c6595cf721d67a3d0aeb71179193bbeeeb596b9c5d4ce35e2671dc6d1c4f452e44d897266f371e9bb8c75eae53efdcc8b7f7b68508863c20aacf784b146f5b172d2882c2917225b5366393335fc90364a454d9ca42aeb3098dc788629240b32e2318ddfe3f7d3bc63ff78b189fbd3c86badba3bc1d83575a4a8ec4a1f73e7d5fb29cc535f5915358126593a6c754bc532556b165e6c2689d3c29f68eb23058ff5e04d464f7e8eaecb8757fc469f505b1be67307246fb638c1bcce6e6d2e518ce4de471fe638e848e10968dc730c73a985315852c4cbf82c8e29944f7a234cbeb4a6217a081497e2b2186b9402e2ebc1725c99a08d3c8d25158ce953c0e1e829f271595c6e6d6ae2821f41a46d0d2c951ea1c167498f76713d68ca83c2a140b358a0266eba110f0a3a7d644270fa21eebd98c609a63b898638437d5e4819b0941669516c44ec21a95476b6e9e642eb5a527933f1de273053c8cbcb1c16838e9acf8c094a9f1d76f7e2d76ae594d1e54941e520ee042e7817df1c477be1259ed8762f64557c4d4790be38afffc7adcf1bfdf8c2d2fbd10b908ee783fb91dc9eb107953f475c6fedb7f179d5dddb1e06def893584796508ce4c94484fe4f36fc2ca1f4409b4b593b9877d8479de7f23426628a81733d76947f8fab8f66a2ca900430fbf97b026a418dc37b9a94002c2bf0def6b483f956375f14741865a144f8fbf81bf65c2b1fcf4ec36b026953c87c9e433fb590373a246bc483d9ab983eb539166b06615782dbd5227e79fcd3d56a13886721d789de97cd6506e2befdfcbf96a79de2acd413ce52ef2a7020ce152c25aede646ded3c6b537f1fe460c402b3f1fe4bce3acef02eeb1887f0f621c5b384f39b25887f267a358ad577e280a51a6fe6d6f44561e20d5ffa345ffd0a67f78ab64a8599b71ae6f228489712297a15d9b23e7e61f44ce0ddf887272df92cefdd13b6b418c16949073b390633c9cae7dbb932be9d8b9290ade7c214aaa1aa26aeef26829ba0434243f1aea6b620f9adacf8d758e64b1a0d9c4ed39b111379d3dd21f435a44c38009f793014454289528f3a26e92d4341aeb1b41eb0a53d258c8a228e0e358c052acd4defdc371545d69ece8ea8d26ded3257ac445669be3a034a359f991373098d038dc116116a10e42a16728419a3a0869c658ac3c112fa5cbb87742a10cef46f012b82c7299f198d6501193b0a487b08a855ce35e2ce41c3c8e39d2645ef72199030e0b56f06d4eb1a96b386680ea35f3992a2cab8baed79a074ab20d6f568fdee42d5a1c177df16bf1d2af7e182f3ffc40c69b62ac7251eaa1de9e78f067df8be33a3aa2e69aeba2abb231aef8f72fc5eddffa46ecdeb01e63d416fd7d78782e7d881c31b27aa2ffd15b622bdeb8e8c277c6b1932b5208637e36d56be43af4385310fc0308da30a192399c4ad4cf7b9a5028433b3d511d02dac71ab6e3512a5937c5e450fa59902297f04d25cc2864336b7108416ee2337aba75ac492e0b3a8f737692cbecc06be9590c23b7712e11b3597c4ee3b7092511f15b8c57f11c6bf152021e8b5040bffcdd647d09ebe855bc815713245ac07517e78cc736d69df4398571f55c9bf9d14eaec563ace0fc1e750f6b90bc107f6fe07dfd3c9fed1a7364790af75285f21a461ec43065136d55bee3a331f6fdcf20a7ae6d06aefa875b9ac8ebff61fd0de7586ff3a531f3d609a1360d187ae6de285c74740c1e7351f4ef1d8f420d5a0e6b33d8df93de67726c169883b20c93b4b7756d8ed8b1316e79f5f1c8af9d1c878e3d3986a6ce8ad286a9b1a7bc1e6b407c8dd5ee6551278d9a23710c15094ba0f930844b681d37f60f2fcac31cce25b1af2cc762e6c42ec085e39bca630801cf377e1f1a4e895e250bda756028164e2e898d873ab006c455296ccc206a4508581fb9508e307879491ce8e80323c90645e1012a80dc47b1b99c712cd737c6bd1904193288e4e5a080595ceb114d55d1a615e57c2dfc6b68d08d553417c8e7d23b7978b3c883b4d2b351b06616ad0a6b2bd8ab45369cd980f22c001af7f326fcc2d25bdbbb63e5fc1951fbd92f463e79d3eadbfe42b886627b6e51430cc80b7ffa55b4b7b6c6251ffa58129491a2f228053dcd4559c75b9a63b08fe7c2c2993309938f3d726b2a3fbc79c93551c4359d50892744d8f58e331148cf6fa8a912e945fa53f8e7eba309f2ae23d7ece4de5af9aee71ca0ce492155ae623d068a22d8301d65d88e9274a28433cd79cc8f10f442dee3dff6f03743b2e97a1abcf21bac8dcf77119e7900257e9330b0081998579c1d5d68d336d6ac082362e8a632efd238f1fb7c43531ed61a94ceb55ea0d271a07549e922e62694309bd02fe3856a39ff64bc5d173f6f338fe559ce4089051d34067aa77243539eb5caa467d2db96f02c2b91a9b1634e8eb14bae8d43377e1f79faff847613663ee39232d29a011eccf15526a52a83460ff3ec726ffd690c2d3a869247714cdab931ba2635456e1e5a3748fc972d58205297d58f3e0903724108705f6b4bf41d3a18ab37bd1ef9a51551376771f42c5d11e593e6c6f6d265d1dcd313f3470dbd882b0db73865d27713fbff7381664aa32a52613d17944bc2695810d48008f5b04b4737f1d0bb7bb1e8840d5cac49a7717e0b0f7180f0a8ac1f656591f2f138e39c47c5ca37c44361b2c985c62bca63a017d4918794cd228e718e11bef3d170f1fe7cde3386a26429b45cd79c866ace95176d3c2891b03e05070fbb1560631642b187585d656fe7a195b0f06214dd842a73001fb6a03cb341f7f66389ebb87eafb303a55b8c70afef1c8ae908766b775f0c91935df7a97f89126a744ffefac7318472e4e02d45900c4b37dc7b6b0cecdf15654d3362acaf3f0a2a006180f30d913ba94d0de0bd3450a3dce7d0605f1c7ce8b6e8c71bcfbfeafdf13a6b504170be80e46d0f6b2470308d306f2f82695e330d25da471da38bfb9a6c0ec97d58d349790fc73c80620b51b35af126c97eb5790c0599cd0005bd28e11c3e6fad683bc7abc578f8de2d285b0fafcd27d41ac188beda3d920479364ab08f187217c98c5eaa896f3dc6015e9b8cc13217d6dba7dc0a85121edf85b237a3cd93f8b9114ddac37bf7b3be7a92e9ac6917f7b011a55461e672cd1ac143441eedc8905eaa86fbd798ede13e449567737d02183dbcd6c279b4e1b5bcaf10e3dbc5fa75a2c0f9e7bf3dcadf78393a5e7f8aa426e31dffdf6469e21541aa0914cf5ce9705eae51c912153eb83b4a6efe5e8c5dfbf58896bd912d9abaf0535f237e7c3d5e7b8683fba089df4710bae11cc42de53ad64548eaf879a0ab2d76bdf878ec5efd4c54344c8ab6a79745f5b4c991bb08255448157e3439f3b97fc67809b9e306752ac345b5d42144fd32a8c4a65ee2591e46218bb7b5793c96537cddddd58f55e31abb7a42c0552023574431af388a863aa39ffa8b5ec5506994c5cd1584c0ea66a38086750518866142bf6c9276af498b9ecfe20c22c039fc2d977ce5a8491524eb43e457f92939afc7922b6c225be6417a9d6214e8201658a5d97538dce3bdd55cab50ab567f168ab5b66328e6f19e83089db073199f7bb373381655909c23e4a7bce39dd154571db77cff7fa3f7d08184e8890cb10cb1ed9517a27aef9e98bcf808b013c0105665a4a42c0a401e458eb28739178083ca1494277a9eba3bf650eccd3ffbad513eb93a855886517aa5dd28411f3f5b77dba557c1245bef39801075f0b385dd1e144b4fd488c5f7116c229c6be07e2c9e6ec07868c5e7a1282dac858a319575f17e36726c2f78017febb120caf1eb500251bced08523b1f9c8de1a9e4bd5b5907a16f3db65e743b61bfd7381f4517bd13e533b2d04b1561e4cca75ccb191cab06e36a6dc870dddcca22aed7b49b6b363598a507d5c0721f7aaa323eaf5219f774f2bb5ed950d5e32a5f42eabdd8f552becbcacaa2e43d9f8cc1afef8cfe437b32d1d3ff9fafc3a29bf14c99106f44843a8112fc9342bcfb63f43d5f8ed639cb22efd0dec85d76c18551957d76ec3ef7bd7154766fac7fe999687dfdb518dffe2679d3de5485cfc52c127d61498df58d99b9e883fba27dcfcec85e302bb2179f9410917fc0ddff80eed4eccc0d19b28d8ce7456f41ad694bb214035c649e583ddf1bc8b57a40f076835675c24cc82199ebc61315e652e3a2583966f51d44cba46e90ef42eb48e5d531d8d11e054525a07f3da94e32a6d2713e13e63c1676a8a83841df09eee6e178ee99f5550934e9f34de66dbc66587680447d010567f3a02908c17e04c27a523716ae5037cf7bf55cb3519e8dbc6721689ff9542d42a802b461611755e895f06a2896c5d07ebcc00c2c76ffe9e7c53b0174eef8e67fc5fe6d9b519a223e43de8435ee38b42fc6df202758bc22b2b9e7d9cb56445d6951dcffab9fc400f9927526c30a156a00cfd4fcf0cd51dbdf159b8076874b4be28c5ac24f245761d443ed42500d9be6a05cfbacef705dd3b90f85ddbc671a3f0b875b005750ad4bbd817751c8f536bb050a0c6b5903c3f337015512b2c6f1f6e0cecc9fac0fe9a9cdab5c46f31dbdf6568e2972ba38291cac05944c885c6456c5de81619139311fefcf234fac8502ce31dfdc874554290d3bf54aa544172a94307c25c7a84580cd970de586b8fe29e4af7a4415bb9b67adc1f67d42f9e64c3d1310761d325b80f7ee460efa672f88f2b7be2f867ef69f690d94d9545acad445fe4f14e58b1963af4c65bcd2448987f30c5936b8eb973174e567a26c8f70787f37352762638a920b78d0fb1ba6c5bc8bae449077c78babdf88c69d6b63fdb3cf4476ebc118efeb8ee16c720e8ba27a1d0087629811595c89611bf7902c83229701bd7dcfc405713183b995d195571e4b102c8573788c85e0fd2dc32c86351a84a403c5c82e23c4c1020ca274852d588e92ca94ec1790d40d2a80849c792ca2379325c242f830d2d31903a0777908de108082a1aa619e0552719a210d0054a13c0aa0e66542c786427b78f053100a1903295742502c029be389dc71a90826390139d276c2d19908c43e14ac01ebebc3e4478ab9b9f1e68457d273c930502877e16d975414c41614ab044f37e9d8a363e83fbe164fc284d8bafaa50c3c2ea2878074b6ec8fd1d78762fe4967c6f1175c10fd6555711e4c937bbefb3572a9362847c52c3929ba05edbeae38f8c4dd096099f3ce0fc5f31d509f58fb55e46adb52684601977b3307ed9e6086585c5500a7b056866c7bbd7fee57a17b15a3508f0c5807dac887f56a0bc9c3f45e7a8b2684dabf6f35cc260f5a84d29882ab4405e643840f2ae93ed64ef6854c05616f73b8e99cc39ce8008a29cb412a580d68a875aa83601b75ac4b5301c684ebf43352896af936f392fe646460a8280d4aefe2fdb8b693ac2771ff168c0dd53d878091752b8bcd16e545fc0a795db0c890d0e755407e5d7efa4531fac64bd1fae49dc8b121de6125ca284ee6fb9f4a65bea403d1e667f225e403191cbde77791b5f8e8e89d7f3cc6c3f88213e4103a084f17e0151a4a0ba3a76172cc3d67762c2cba20dacedd1f47b66f8d871f7d2c0a776c88ce6d1ba9f1f4a51316a048266516ad525c994992d275a44b49ee939fc8a3da47cbe2d07821892f611c0f650548d76ee2605122738a3e10155df2906e948438071858846d4c1a4cc7c11845b88685bca388101115246f2a42b18609d7ac65a4ebe1b35dfcad040f358cf015584bd2f58bf8712dcb41ea8ca5357fd64a32516886a654296d05887906d674274262ae93e1dce5004ac8044031b93f3f370d88f0cd8ee1588c07da41c2ad12aaec0ae902eecb5c694e0221440fa9e9907faca378bb7cf9d2a8fef7afc4eddffd66ec78e1c9f440449154a69e8e96d8f6f233f1ea6ba7c4cc634f8a65679f1f5928dbddb0203a0e35e3c5401c7decacc9305ebae3a97b622bc25279d9b531795215ec01439bac588cb20b18f45ad414cd4b549d51c2b47c2c378938426dcd2c072b2d843d198fda040cbd96dc4fe3b198ebb6feb4176f26f3208576d67778ae8b581b693efe6d12da2b6a676d49687b0eef15b8d0d399b3cd67fdfcb246a5422ce0efcac82edeefeff37c3fcf7b2fe71ae29eac0155f1ac548e169446e5a9e1353dc7218cb76baf922a237d18e60ece29a25825222af2cc1bac21e9452b6432f0afb5ad015937fc5746be63cda797e791ff0e388d5bd74240d899b8a119aff44f05fabf7c3cafd9882a37e5b6084acaa19083deee28bbf94731f6f92389943801a29a2ad199c3a0547ce772e11558fc6c046e6e636dcc5b3a35d6cd3f2e4ecee98ebb9e783e166e591d5b5e7836aa26d5a7f7c86848be28295126d4c95c1aaf268fc54d5258cd2d3c10edf533201e528f62d1f5464714678152916c53941ca2089cdbdd966a3c395c68e48127531b4a742316afa4851caeb28e1c0eafa4faa02c239d40c68444e63f8670398440bed7a8ba84cff6e597a75a523e61dea2bab284be89c2199699949ba037a93413e081c85d991e0fab90c3794b91a07684744122d80ec77cc23fc18826bc52170fdcb87ca68208a976211e68d78462090e599b9a431d6a3b425a4b783adcdf1f854d93e3c35ffdaff8e557bf1aeb1e7b10ef2adac9ff50aab6bdbbe3d1effe775cf4e92f44efcae3a3e6b8d3e36d9fcb8e9bbefac5e86a6b218c2d4e4f6cd4c22d86afeda9bba2b2bc34f69effce38905310a7a7306f046f021246f86488d6c1cf33b8cf76622643a559e4850af2168c85394e051ee2952eeb4ac0db022e78e00e8ebd8835ca812120ab416048d4ce7cb2d5fa103f13e1a673992f2e44c1b4d8bb26684c124e07103ac34c8feb790441543a1c500a35559edd84d3020ad33056b2329a53290368ddb04dc22deb6b886cad515455016e53a9b87e89ae16660d052da5f86f01ca2230e1b9f44ca3285131efc9c79bf7f15a17eb36822c664d9a16756ffb70ecfbd11732dcba94181df648fefb7f43bd14e0f13ed042d28e5188aae68be3d45dfbd6bd14150ffe9174824b12f5c89110ca1f558142d4b61de1f7e26508179b97004434f25a3909dbd453cf8db32ebb20fef8eaa6281b5943a8b72d09fae1684e654c6002df1319128552281b103bc7d7ee8ad5ad2747c99439d15c3525bab884561e4e674f3f16343bcab5b6d9104c730ba3b0ab2386aaea22b7ed002b84a290178c0134e4f2af7cb9b1ca9a186e6b4d5e6f8cef12bd5169799480760da258f9784daf230beb9dcb035a3c7b7242030504acea4bf5d1822584d0bc8ab52b43a8762338d341eeb6ffc32b217c843afbb1f2f5586fc10897d904fd4d3c8f35a48d846f5351466b2cdabf5a146b3d4a270341744f5e9ce0c52e3cdc9c529265e0ee0b50969aea8a78fab69b53426b0e9a8327eed9bf276efbef2fc6891ffe742c3be7fc685f7e725cf2f9afc6fddffecf3874e0402af2e62030490080c7b7def3d76880afb8e06dd7c433ed432977917e23e296c2bfc4b21ecdd06e10600bebe63953410895fe37085965444ce17e366130647bafc02bf5702fc2d716676b5833435c0554a5d1e36c270614289accda084eec07796be01812542d52b74f10544b788fdc3cc337190f7ab856944305112d4c6507fe262a27143e09a686f9aee19f399154244b12fd5c9790ba625e05a54aaa503ff2d96f788f125a84f5baf45616a27994b03532a50f15c8d04e7a59319076168ad777e2d951ba7e7574de77236fce78cfe47d12bbe170ee947108494284509527590f528ef81aa1b8df77fb2f134490e06ab1f7148e6181d409dd28a500980824e2bca0d591919d45885435021a369c1f4d931ba3ac7d638c1aec4ed0d5ffe11d0f7b25b37bbe8608050eedd81badfb5e8902b8670d8b96c74b2b4f89d1598b632db9c03896090612972095a780dc0985aaac4ebfeb79c60d1df1502330707380dc47c9a3b20985a4098da25ca55a1a7ecee5fa64630db0f06508590fe4c542b86f79e5e5b1b8b62471e9662208d6862cacee46b0a5fdf86f930247686beb80454cc396de09e6850a67e1d5704de5119490f53093cfb6f1d4e4bba9989bb1ec8b2b0b50aca15473eae333c8140c04422014534f98c8a0847c33eb2aa3f77d9f8871c09297fef6a794672665429006db0ec60b3ffe7a4ad0979c757e141d7b4a1cf5c92fc54bff8b321ddc0fc1034fad90e07db3c6fba3e5c1bf253430e7accba3aeba38d6620c8c04e65afbe15e84bc0de76438584b52a17ca686593309b1cc5bd6703f86662bf4b83c2fc3c185ac9188ad75a652a44550a10d0197c9a0f2f939c3402173810a85d750cec73e03af64d86c5d4bb91052372cdaa782f0776b5e8238a2a5aeb3a4db52d6d0daa49e482f620ee597e19e8a2041d5705020c130da03eb7172796f0fcf5e902185f8ac4d21f2da27ba4a8a901c040a642693940d5e633fc6abf8f2f7c5f886d7a273c7fa947b1f569b8c526562aa7fbe86345a5f529154cfe4c4507001a1845cf08a9640c8d9ca74726cbc8e514d71b69654cba62519412bedffd06a150d53081d46b811be5c9421c58e87af40ed9dc88fe80688deaec1e8a34e5442ad641c4bba7fcd4b116fbe16a5536645c9d263a370ca7c5c25611ad75d4835799c073a6e4c8be60f94d5467e4f077283a0a030e93c5c4faa7d95110a761ca2fd6312e1db5014e3df078087736d99b0c82ce8c031274f6ee09aa95320dc0a67354ad2c7c33284933aa3c53bbc6026ee92301b5880edc448b34a73509a115a27f052296cc3e22299f9a2981c5c41105458d3319094723f4a992fa4cff74e045a6f2608d18082bade8215f341fcde6ceb8b4ad6ed9c0f7c143a0e79c86d7f24ecc090b16ed91885eef69678f3a75f4ffd4223c79c19b38f3b354e2760bd0bce5e5f67c704f2079ac79a8c0ff4c4fe7b6e8c855595b1f79873a29b6b3ba90ab605a1d5287993d0f37e04d89c6101ca60ae245fd2d78950632ded2272f366f1cb1641053cdc328c865e601b5ecade23a940bb13b40d9303a511a8d88bd2189acd07a51c66ad0d9315f47a8ea3e149b42b84df568a0efe6e2f93a0802460bd896c0c575e98ddaf56ae5168dc1c47c53574b690ab47305f5278bb44438d24f8a590f7093074625084014400f3e08592ed2524cfbf650b3a704dea5d177229f8e059cbf550750d51f0f60f44ee773f3d11e24d24f8e96a26929d090f957945102a033e8c599248ba04c733b53170e15e94a19c87b1c2ed174844424faa4443789f8aa5cbd4559b700b0664a14ca31635e5faeb0e3db0ffe9bd3c71321a58805e227b8a673968a17ca77c2cc608eeb517fed2c0815d9157d310158b8e8a9c994ba208cbda03a0900fbda357081c05c9015d440be929ea4f5e280b60621c8549d024c71b239e2ec08a0f57d4f137149c9bed2e298f62bc580e10f1929a92749ff9c6e13cdcd908b73992289c689ccd7c22788667fbf8d7fc672fffd6635d0ec97436e69767c7edc85ed889109a0fe99d6cfadb81b7a9e33d83dcab167f7e6a0424914f2450c3487a7d30d7af9347cd45e8b6a2908694a544006ff64078fdf047e261b8822ffce15789749b3c13f735003bff891f7d234e44107ae1f11d587a725cf4a9ff88fbbefd95e8eeee4e2c64d7c0beab2cd0bc8d7ff9654c07895a70ea79f13c3c1bd9018b78367ba40f250f8547e1fa3a10466b427a868dacc374eed7b06c6b2a82462ce5faf53ce65873799f7994a1aef2319fb51358b17d438046a44e0550c02d50cb64d04ba98493f53adca7b52bc3b749fc5d24cdf7eb55cc736ce1d00bb96ebe57c6b9a05542e44c2784b4115c15aadb1206d720c549b196b5d1c7b396be542caac96b86ae7ecef7a9680228fd2890cfdf68ab08d9a3a09042c25e40a9c1952744d9e96f8dce076e842e7758913291d461e3fa7f7f32c4cbc6bbfdf34b4c81139a2c7be1ac594ad80ce544438c3b7d9df54ddc27176d002db40ea05095644196845c2973c05ea4a4355ea95fbc96f2246fc8e32e3c3e165d3d9f46abe76327ad0326dd895babd79275803235b7ec8bc2379ea51b715954cc984fa85248be0494cccdda4ba4c06483d48d9411f2e185c626cf8c6cfa7746c9a3f261e20e11eed17e8b57a2b6616723ef5520e7cf98922844e263e6305a3a2da15ea9c3222c2ec887e47d198a15884262380ed38a9a796d6e29f9c304fc2d4aa7e7117050707a1100a1623dd83a2cbba8dd46de2bb15582a8167c0980c32b6d925c331c3e93f93908e41af32894d566ca29575c0bf7303f9ef9ddcf92b53316d7488cb435c78b3ffc9f988d975871fa59d175fcd9b1f4fd7db1e6e7df8c5ee85cb9207b166c53ab0040cd3e58e36324c205cb8f217f013cc0bd0af25a2095326498ba98735ba43557d243691cb7705f555cb3d7b3972803f41ea5a16cc0670d85055d1af08e9d08b3f98d055e434189b2cad02450411ff93e3eab21b518ac1790496f5f9a7d4cfe6ebb875f8d288c808c8d88d6c04445cb65d3606033a15dc60bf999569f29822ffd48ba92e7134cd0b0596f92a3616e24bfcef70bcb2bbfaadd00118eb266f8a75c2be383bcb72fa1791838193057dc10c31b5f8d1e5069fbddfea94099d02eb5e46462bdf4250c6ee4e0bf361ee61af389d90d72d0d410c7e2f97e2fc69b4c5a8c6752718ae189b6279a89dc343dd2508c9bf4a7cf64923353ad8c03cc7826e1eb61da033aebe7c7ace533e3109ca79a0dafc681671e8d3d6b5e43a1faa0f2085971e37ca89fca7fff81bdb4f5be1095f396440da15f8e1c27ce310ae23e0ea0908d77ca96ec4a9c9b33113e4a4c1d04f12b401947ea9a220fe1cb1505d4f371a38710a5d9b9a3c93b4c235f91ec5927950521b3af4876b700834a32dddf27fedd8d159e4cf8a3f792fdad20961916b21ee605be2692b7882ee1351d83e9bd86375a413d8e0a7544655ebc0c0860139c0ab713ad59cefb5f69cf1cd3db5f87675b564598fad677c7029ef4163ccb20464ab26b3689706f6b73ecfcc5373937713eb9e5bc0b2fa3e03c18cffcf8dba9ae27fb4464d4d6f55e6a52fbfffad338a2a63a36652d403941f050889d08b4a18f219b86c4da8f9e67946724643d05af548d51712db487730d015118db1f84f7edca3dac04a29d226736021a1637da952c2381f75aec36bf3417f41cb65554913bd8df65186ce82782a98732dc54b8ad2f2977f65d0930782e15448f23c0e0578d3c44d65584ce22ac4ae5fbcc9dba08edfa317e761ceb0874107dac85d7281c6ecb8ff2299268415f7a6e295e458a549f8cf1ca8a28b9fcfac8fbe117e0d3891267fad9fccac8f6e15ce91fbac4eb967c6c02947983b0cb2e50690ccc5c40c33ce3c0a448e9f3820d267019af6568638f085ce6a4483ec009bd4deffd078c682cc95f46b298b9904f57201e62477671ac3cf9dc685b7a7c9cbe6f53bc7cfbadd1fcfa8b310ed236ea4a5a38c50af7b6b747eff38f4771f9ab51418f7cf5bcc520872810b5a4b1de8e18ada8490cee71c23773a131bc5201795460894136128a370e543cf6e8edf1e4dd3746d3655747eb91ab6219d640eb5645cc2f75c690ed80055604dab908f2eb5a79bd8a9b35b4d14bc9b4b6b2add39553379d5067338ab610cfb31605b0b0abc5b6e8eac3dc09ba2591751da19d9e4bd68021a5b9f6eaf6517aacf2e20d40894a2cbc56fe758ab92ad60e5a52603ac689d75c0be7112f70d3cf0113b0b92a13219c6c92977ff8b538f55f0149969f10a5675f1117f220eff9f17712d294903cf2a561befbe183bdfeebefc4921bfe2d8ae7cd8b5780df9b5012c3b954d761ed56022a184e799f7352ce43131d8643e1149db4482d9f4dfa9139b32de87a733db925822eaecd7534ffb015436fde9814220b8345f11ca150414484f7c808e718c2e02a8e0a23f34180c1f3a9707a48d0f78cc2f05f8bbd579cdf760fbd905eb003cfab7ceaa99433bd920564410ec3583d8ff0b95ed78cdd75570a8764e7702c7b6c31d944537630482b62d400afe5cb2e3fe6ec28dff046b4ddf51bea9899bae8ffd59fe428fee1948c5a8890b836bbb1533febe134db77794122783a3dff388a0548d0b0d0387f773152f31cffe5d11da8c7c923bcf9872bf4448675994c2969f2685e6554524c144a37c4eac58a0de6c02b9bb72272cf2d8ad2394745f6fa17a37ffbfa18821a349cfa8da0a720405dd48d7a3a5aa3070e60199ea672d6fca4d4165707509a42ae758010b010c91b2dc814cd7278ff38b311c6766d8af6352fc41828dfce1f6c8dfda75c1c7d6f796bcc69ac891a9abeda3400869edc9b61c000d7477d353d0485653b49f61484681780c31c1a72041cb4c49ba1cc482132912f5779787a381750406a49d69950a2b528913987c2d123ef8cd0f035e2e36578a75d3c79d7732a7f5711175390398087f441cfc70eac41298fb8eabda96de3a5dffd243521aac5d9b2b69bf7c653fffbd538e2135f8ef974dbee3feb8a38b1ab2b5ebfe3e6e8879fa7428d2b3078ebbe5d5b62db9f7f18d3aefb7494374e81b960617538f51699d7992bda24b8909ccd190e72f544d20cd776a3347aaf1978e99e899c4a2fe3dfec8552b11a09e5b4fc229ee636b69e783c0d9340cb14e442cf2d02aaf1b5254303bc0b0555c06dfd70fd13ca677b3b8a2e4863be242862e1551ea0519150b8d07b06b5b3a912e4d3412e08b7af19a219fa89d2f9958fb7d129787dfd84764625a9bb192f62576e1ff9bdde4938bc80d7f2f97bb7f5c70baf221a7a36fa911d2cfa3fdccfff89eafee128bcf6718e25b1d561068915209aa48066c0c3c4314d1638833bfcb358eb0d7bf59249cb88b57c7036a4f9214f96e248fe2e9ea573f238e305d570e60c6bec7d91e642ad808f6c6fed40c8404fa6ce8cb16973a2befb50f46d5a1d2d2f3d89421d8c91e14cc22dc4d8d37c30fadadb688edb1d7573174731541f59d4fd55f5cc9ae84bad12238472590013e3e555ac20731e6009f47575a67bcbe96c81d2f1c7787cddabb1ffaaebe3d0aa95506a00147a06621a618f45da6913b0b802b1cd622d31be219e61cd569448c44f968085421faa05ce79d48456c37058827557296688d0a1590236a2592ae37228448676e6440aaf9f737ad22b7c6e9e541c8486f4291d6383351dacb49fefbbe4aa381e93f6fc6f7f9a72a0d4ba4e3ed447357ec38fbf4a6ef49598b1eac898fbeef745dbbefdb1e7b597b9dff618e7f85acb6142bf96f5af47ee5f7f19477df033f16c5b3ee70399a3aeb1d376709e8f7c3aefc96763d1563b6e47acf9700de197eb62e1541a954654a5b1f9b1863591192fc050cdfb84adad1d0963ebddf5202274dd7873f348db195ac9ad342a86d4528154b01694d47bf5350d98b0baca61e7ae219af998f5a83c8e67fb87cfb255fa9811925e5e3a11d7e71a6af4051d5418734e913d3d5142edec7ae5ef5d7a2bde9f48c9bc66d1decf7760acc6f8cea1e45278e5c762e4fb9f4d2d2c1330f43fa3aca45aff37e4e3f8a40f29b44b45a6a4001957a6eb15864ece65e23ba31f9978d3f70c61bd8bc607021b88b60136f8ba7ee870fd2845781cd7f6f1e2daf473ea9161515b70a345702a3aa48a4c849e83bae162e846275d1c3316ac8c0e064ef4bcf844f410ce9044c12ec7f5b2587dc387624fcf7351b26373d42f3f162637c549a9edfc5b0097ce863fad8cb49e79c71d1b4fecd91e037833f38051728efc6d6b62e3f7be1cfbcfb834badef2b6583aa99cda12aff330cdff0ce58ced25b15a40f4be7c2003ac4d39c7d5322e41015f862eb01cf7f50a61990d8e5b90103b7b6db590423397d7de8495b908cbff3ade497268263c223f9221618320b99a822bd97519ca66b2af05460ec95384d20ba2faad57473b1e7cd35f7e9da0f1c3538a5a766e051aff464cfed4bfc7cbb0e57b797f09fd4c89ed0e0362048332aa25c6ca36bffa6cbcf6e75fc6c277438be1be6c9bb08bb531cd79c88cdd9a83e71188b1af6932d0b4e5104339796dd32646a599dfd84e2102996922ccb4a39b185b8f329a11f514add3bb29c0530995952589b00663167735a4feaef71270107e9797279aa8a155c9ccd7ad3ff95e0bb6a615d6896c20d40054f31e231e0106a941ca6c4942e8c8f5e523ea2d90bd7ca070154b10a2478080e758824753e9f448e9bd1c43312c204a22bf883151bc93a1c6dd7f132fd2913d91f7ff333bfabfe043a6804bad2d93d3e84675bf7ec6b0ec70b8a7a0278bcedb529837e1e38639f910a3894463b2133dc8a3a050bc3731657d1f179f45476b417175523205293128128b022f83d08d495197c960272c6d04c3cea083a45a48dda466f12a42b3e7a377cd8bd14107ef2831739a67c7c9ba50b0fea7ee8fca9d9ba3e4881322bf7146caaf44006da958be6c61cc387145cc3ee28878e08f7f8c5daf3c97846b8063e475112edef9bb787cd31bd17dd5b5317dd9523885309309d9cc7ff42833c87b84afa763c137a3240e4159475ea3c0bf821239d5c73c4976830082e8510992b489a1280b78efeb8478b3533e8252b246c2c7ebf8db11e4425bf1765a6985c3493c4b50367b7d6461a3637843284c08643b7904696f9cf3deeb535fd5eb7ff9bdd3631230934b38dbb2e9cdb8e33f3e134d33e712d2929b501ec8c23afa30badb617c70517ab2619ed3bea7ee8bca7ad0cdb3df0697322fe56742ddd60605199cf960886a7d27791e7eb10fc93adb7eaf43a15709503a0106f322675a18ba99378ab825c642f2520c57e1735283ec0d727d6c0214c6b686a757f6b80dacf1209f377f527aa6a2942a847d532a8def51e80de33c8e25984abcb22c1143bf5ee76e2073bea6a11e445154e2b114c265da7acce93bede7320f3284e36f465d8384763d960df87c9e1e45a5b4e6686f1d8379b22f787714d1bbd4b71fd68e1cbbe4560e030eff2ff090144916f04c2d23c29f6b8171828a61d29641e326c2b34cc693e2d72df4cff9c77e6843d9145a8b6a65314fb8bc09254aca649f506e19bcb8e2895a95ac6ae14a1be97cc0b019b8953ee81e25f43f0d159730acb10b1637d02df4a0ce325a848f3a3dea8f3d2d7a5e791a8ad133d10917cd0e5351aa712afaad0853c7ee6d51bf887e9e152710fa94441d3d5273aa49360801a62f5d1a577ef13fe385bbef8c176efd1b6d172d316093a0c325df7c3e5efce6b6d875d155b1f7dc8be3887a06ad60dde7a03c6b1974a225362fb2e7683356dc42ac3cb4728bba58c64e166926c43189ae4bca736235cab304704182e7745b27e417f2604de405178e4009b5dcc2e2d54c50b2d0b918c04294cf5a8c4ae41c88791cc311592ea91cbe7d48c3c9ef7d3f43ccc6e2e93fff36f1df12f7104bdd4763590bebd93877092c97cc28a982d24a88bce4a1a09c3e870440f0cbba3b6f8a95842ec3a75e00637c282176b647d82aae8049d6d523f98c45307d56d68e0ce50c6f050444f1ea615ee483e43a4bcf3985c2de7a567975e625d2a2f456227c96f7ad25d96a6101580f236c6e5a2d115563ea6015695b22740738871ec4f7288346072a87b529fbc00412e40b5aaf2b2437d14899430944b86029b453f9384f2f0ae4fb5c83323b5df9b99bcf1b61781d298f02781841a9462caef2ba6502c7c375374e8fb22b3f1ac33ff80c698caaf70f9421fdfcffcd9972f73677476b4169ec24869f4ee39c8964d708b98779537ab7fd1dc49b08ce7a2c73265924e9b336ccac0609ab7e1ffecae0ed2646bc51e8bcb4066b80bbe7675b12f45d5aaa6d4c57b5b86b086533a0135abd79a70b257d67d8898a98c409e26ad5096747fdaa63a31d846ff7734f45efc13d49a16ce41be501ec7df1a928d9be312a161f1533675e1485f0c82ccaee83c357535210f39911d7be73476c5ffd0acada1dfd207cce44c8eb6a8ee69b7e1c9d2864eb95d7c7110b6711833bc195c6422ca9535f45a3f4c40a492bb9cc2280033b7c9792d3e8790cdf36a070b29d45026d2c939ee254d18528e59b28d112943175dbb256f528df0e946809dee910c266ed861f1304bd08c683a8a111c1348bc2d6bb389e88e0b2775d97e0ffe7fefa47d648a34778c37a7530b1c827db48b9a061e6f498b5f4827816fedece37d6fc63488c219e14ab376efe5dcca3683d69d5d149a0f681e659dfd143d969eb3dce60bd146a85d8e2a8e8ad1ecbc76cd3a0064270c476930c6f512f640ec9182c9ea728a0ac0611397318853c85cd7a25deefe725afaa04d69af41afbf47ac888b0b8e1a49f97a2243d49c6851e41d8dbeb2a40a9ca51229553e683f0b7efcb4cb592989a51a051a21e217221734108c3405542cf2419592fdb879a64cb8ab0104b64a424e75b1beaef8cac15c744c9b167c3b2bf0b1954c5feaf573a2cf399182e7790093d5b0fd8ca8cb622209d87baa2b9b032f6b50e441bb1876c5ef1854e2e0ae7932c570af378a0b94ccdc9c5fa649aa32686424aedf18429d623d7a2ff88a79db84d4e8fb199ab9c30a7cd196c2ccca8644d2941249259ba6592e91cc2b3d10258ce847901a83008345e4ca35b27e043eec917c5bcf92ba2873ad3c1179e8a1e5ae1c76c45e0383d0c5cec69be2bee78ee9168b9fced71cc2597456d5d1d2112163f4bef48524cdb77615979e475d02a42ee34084f2a8702d6e8cb8fc4967d3ba3ec9a0f44350a7b546561ac691b881574b9aec1f5ac103020a45b4c7ef426219f60c1260ccb3c07a1245e1e10ab600deb60eeb309c53217da86275bc867f44c19e58076441867ab82d57ee95735089c9db436e289f269bf26196e216cc2c9ba86833ca76915c55176dd07a28b22ecfa7bff9ebc4f661c34c28a3215b0562b2ebd2cea8e3d314e645644cf7f7f219af7ecc9b45f589cb431907ad40ec087d28aaad8d1303d8ea896e16da7acf919a193a1dc042a27c020a8624155485a4fea8c0b937567df19863905d62f7325855485335d10f6f6f7341a8cffe4e5f9bb8084ac0889ad2aa1ca626e54867298b7b9861a0fbd918a680869ae2ae35c2fe85831bd9c9febe6387aa0d2941b5937320fb22a2a5588f03735f8a1e4d618f54036528aee25fa906d19f4a925cf64c79af01857c81a397cda6b1d40b1f22eff7014d3e4dab76fc70417ef30249e4966127e2dae300434bca685ea38c2f50408570f6e6d0342d783a57d8087db6ca24b876615f17101149622dcbad3738a89254779a0e33cecdcd20caef78fe82e792873213c1bcd7c7a31dbcb15a54418c48ab4e38e845785d9536b15804101d49e11e61c140a0ca0905aa6718e95e754207eeeb05e04d49b9b0f6be1c40b633ede67ef330fe1a55ea24bbe3b25e243285f174345eefad1f762ed734fc7c9efb8869a535df46e5a1bed875aa2b09c99cd0399e25f1ec044c7011aea4067044ff2f66e8ed5dfffaf5872c9dbe3b1732f8f93a794c7dab6dee4795e05915b88f01bbe48f2b420cd98b9c4db129dab253b779cafa8d826c2b3a5846c167f4db6152127dec8d9db828219ba69ed858c8594e5e109475becd50c2974d29526b1e6124b45b69c2371c8d97daccf3b3ef9a9f81306603db3c7658b679e27a8d98e2db1eea51763f2f255310f34afef239f8efbbefea5e89597c7bda61a0b216d37b0f8869b7e11477de4dfe858ad40b820a7ca60e0385b6c99981839ac4289a419aa69d5bd261136954648dc304ca3a8c05b88f53573254377271519feda7067ae6351b595504ee8dab0cd1ace0ed62729dd3f180e1c0383635dc922ae398bbd4a7a1ecf611e6fdd48cfa4dc58b015b933d7b19951d9b238ec6be66e32befb14728108435ceebf17a32d3bc754c679443220ccc1b229e5a4316cbcb70f02c1a80aea8cf6da6a20f177c7e02fbf9a80b10c4670b8fb2da34cbe943b8a952e70a81e373e28740ca9744d4b6f0642dcbb3fca0891c6473b62a0a7307a4de6b16ead1435f3723a630a9736a4bb528d0ce352ce27ac6068675488ab04fa16563fdcefe4712dd63929d50727ceaf9b255a4c6e586ac5886e9445cfe2e10f63b56b19f1dad7c335311c7da8bb2bf52c8db4b54577595d349c7559941d715c743ff940f4307da77ac6ccd8fed2b3e97d3b57bf1c37ad5f1fb5d3674555d354ba4c09483d2fed17475d74490c553745eb6b2fc69bb7dd986063f96a39bd9db1fe963f46edae5d317ec5bb63d1823908cc40129e6156520be9f0ca2c7ed6823b60c4a129997c27c3df9b2bfd06c1ca24dc8683163569e14670fc9b90b1c54f732df97cce84c8289143eb6d15a787a9ac20ba38866193f51615cfd0a53287ba0ca6e7e27ff974ea225ef3f843896fe7d35410d6ddfaa7a86368ff824bdf1e0b4e3a0da8ab236efff6ff24a0c54237293be303883648a4d780e4355df581a867f30167ccf510634d46f1330a9519d4ef242243525908c2cf36f7a5116018478bab064b8902c47f7a4f3d839db28200d68d14de8cd722f44cf0355e2cd1949c0d98691aec4131f6a5dc28535bf2d88951ce7b2cb2ca84305473608bca526687b40ac4f36a9de84352c998d291e13a3a4108791235ac90ac6a6ecf7b05305484427272cdbe0c8a213c506a21e7b369d41b572a87b48cd28133e3b384ff8f3e374ad6bc1c5dcfde0d7a9c09f1fedfd97884760525300d2697c7e307fb63a0ba2e7248d2b358d41ce2c46142aa1c1e401679461eda5d60c10adedb502f975cd41c45c4fd0508b7adb86ae5448929418ca9a783b06e28a72431038cbd9d2360bd610fc320656e8bde2990c3f682d8c7e34c6f62ed5116589edc30de2f0fab6007aed56b9195712bc9de064c71190c2d3eb29aa9d1f0f6ebe3ecc6caa866a8fd81d75e88077ef3cb38f8c6ab10656931d8ba01c5ea8c86390b23bfac221a972c8b39279dccc362b6c09279513e6b6e6c2177d8b9f6f5cc020df747fb8b8f4527d0f9d8d5081af9c42aa6676c75370abc8a1e44c83b3118501e07ec3b93c042a48268986b8e252dc6f04c24503838337cc4a4d85cc0b60a6949280942a3d5ac484560fb95ac2d21bcf2d908afcc5b0b1daac23aa481f6bc2fbfa6368efb10833c78465b18a09219a78607634d1e67d6432106b1f49c0ba3e6b40be3ecb6f678e0173f4c2c09a74325f081f71d7cf6a1a8620ef94e1812d91c7325899ad182caabe110864f0002a223a266d2bf1734cf10af1c2531f7316749ed0f7807216c7ff7de526b38cfd23a52c6c3c87314ea77a6831db9d67f54baccf1eb277223674a18b6198da888da63f9807a18cf61ff92e19f80432f7257cc3d57b32e963764971b064a132a25a251e95c47eb44feaca1b6742affce31c3867666eda31c2387d42587f71590ae18ab199076e5505ae11d0e9e6cb8e89d31b2f1a5e805acb2a3f61f009ec1805eaf1fa17f8db2bcf0ead0c40cba041e20dc790535c9c36889f307fb19db4a5ec460c33c3e599e030d879bc934f0a53039f3957ec7ddc93ec8af66a0796656b483fc44b9c6b1e69d848c0e2691a75464814c2222566b980e4fc33ae3598b5ca32cba56ab9336f45cbd93bc3ce731f82f75a37cdbc951a87142d2e2a97363d29c26148756f9a34e88abe62f8ac7fff297d878f7dfa207efd5d57c809d053aa38ee117f38e3c92d09276716640ec039d3be3b4e341faa645c36d7f8a971fb80f451a2467c478ecde1caffce0bfe3882baf89e7cfbc384ea92b8a3d9dbd0002146a113005de29438660ce9c1055926e655dc8de26dbd4e5f1e975ac0f65682b52607208a932cd83a2642eb7399679d22c1452ef63022e437d9364d1891910e61f9ecbc18ffbbafa62e1ace991f34986f37fe973d1ba752386cb116aac1b46e8b19f7e9fc2746d1c7bca8951fad62be3e0be7df1caed7f4da194855da7e238e26bd33d37c7bcbac9318959116b001ecc636713c2cb42d1cbaa14867a4e73359f10f256708c2af45c0991e3591fee8c55f1a597c90cf75cf676898609260c23ac166f0dd3adc7a91c7a6df332c10559f7aec5143fc397f4256944898b47f8a7011506f77376c6da9aae2791256ebe9481c233f3c39d15681e643a5182a2d8eb9641f298afae91e7988ee14e459b14dab93d0b2c1973a8a4586cb583672a05782a211cccad6f8af273af8efe9bfe37455fff57e6d3b10ac82d406fa37288841e387b6ff1ece87700bc6db536d5612e0c4f8668e92e3417a2df258750a7a893863efa6fb279dd95fd7f2608f1bb93533774e7d3b10aaf4a26354a64bcda4fc234ea6419fb42c8a18a6d243cecd11c2d2c9821d3973032dfced6f2a2e8edc633b24036c8f523a8453656c9fc4599c6b0807934efcd6716c30184cb46332bd2f9b01ccebfe1433117a579e5a63fc496179f8b2118e707d6af89a7e0075ed8d41459cb8f60e03a03db1909bc7c466334ddf0d1689a3d371efaf31f21cfc22ab74d843d9f56b33dcbd4ddbba300853a6a5a6d1c2437d4a2da93e5985fc3196b1b22527a8f29800d7a29a79c9a27a9245a5f95c3bad36e3c99fc3c95c8876e8d45cb2ffdc8bd987c4a820dd69b9c5094a1c83038c4c63ca459c19dc2e7f775f644d5f419f1d64f7f3e6efaaf2f44d7de5d89e0ea770fcc90977ff6ad28a10dbd69f1d23887b9e472f5363cf3187bfed0af65fd0e411b6486f5cedbfe10e395f551387f31f74387702a94675a2032d386a0150981739d0ecdd4ca0b1638e445a597bc6b31da70d5ed612438ab302a85de45a045083d938fd0e8970009dacf39be32a9125ab4959625b22be02200a180d6721e8f63e869182758506fe923a173192fa41daf721809c750969b9523aedb4e58433e9d45cf446e648a21dbdb64c32956025d39c9033173436a1befcde7decbc60608ef042418339065af1d79d609e745d59aa7a215a0cbdeb87f86772852f5b657c945ca32133e9576b47c6fd3f4e8a1366075c061112eaac325dcb141576a245618b43eb048ba3ee3cd0c0898e1e9f9e5fc927d7d1038070e4499f3a955387740e8a44d5c06b7ca877b1dc3ace5f2bbad1879c2906eb8c54d74f3a0ddd243ca895bb038a9b41f6b9b47a839c80538d4c4515b59e62f4d8d4920bd961682e3491649594cf7175a7cd4313177c1fc587de7edf1cc6d782750ab5642bd3bbffa1f71dc3bde1d675e7231b953516a0a14666d7ccba5513f7326a1e1af63ef9bafa7dc229b7972fb1eba13afb63f46defbc1583a7f2667b275cc9a1896d316eb94db002e70af36f359e414c656b97c9f90af4558f31fc33fff96d938cc6943197a923b3c68e5a52265b696b1ad23d35ca9e21ce017efd37359c44c9b822102c30b97c6859ff84cdcfd8daf00b41c4a5ec9bce9c0e68df1e48fff37def6c5ff6298cd9438f5439fa28ed616bbd7bf09f840d8e23345587af66d8f03b45eacf8f0e7e3e5910ae0ef9c448f52d1bd6e87d3785d0ed79767a902a03f69c685f98b6c0541020d84f42947985932b05d440353e3045e9eb74aa5c208717befa29616682b90399528539c2522419244f0040e643258a03504ab334a42016db190679719680292cbb154e6565e4ba3da50d8c36de7ed1278d1568834a9ed5c051e72d00f3226cc3dec6461fab7b229c216a354f96c9ca761d72bb5db4e811328c02b9523036eee5074febba27be716d29ece7fb60c097fb73d7273ea6e2d84559d2d3a0731b494915c5d0b8fe28eeb106898d89cbc8605f4815a5ba9c50de60cf526b799a10589aecaadcb60775a924166d8f5518faa80d26f4fcd30ca30560a178e70a200a51855f0250d12fab99dcc200f801a65660e383757eca85e800d27908e03eb0e3145551042d2ab567218f4cad0af18b4f1884995a96ee5ac823c16cd07224528f1bed82e66b8ac24de7afdb5b1e4e8a3e21e72a7cd205b9d070fc6a33ffd411cd8b821def1e10f80ced447016ebf0b6f78c4912ba39601250ffef6d7b1e6b147380fcd8b2c66cfeb2fc423df6a89a10f7c9c7d919633868a99d43605128e6d038d4b5387dcc582735bedb7e9d3dcd069a70affee346c85cdb19042bb6bcd41f460e649a9b3d4e63feec1f7d9cad18162e98d64a41b268a7ec986d082dbb1eadaa7212c34ee959f7052345fffd178fa87df88413c6f9a354e387c1056c8edec8e71d9bf7d39a6cd9f1fc77fe8d371ff573e83c2b5647619b4f582fbee80e5b1eee6dfc692f77c94f585b90e6ccf1c95c4f04885589f7be2cc65e83cd27bcca3048a125ccd33116c30df913ea4e7912f27795526835eca10d159ead2a8329db53969088a8f5de2aa330345fd1ae56572fced1c47a0ea300ceecc893d185d73d0c3834fdc96468594042c11b65aba1832e4b048eb46caa3a19ded126e49e4a66ece6974c6e218b22d18624776217d6c481be90dc60b90ccb0b410252ce7f5220d3ed7df8ac20dcd39226a4f7b4becbbe357a986773857caeddabb83052f66cf22c612a10c0ed670524ddef30f454ee3d428993e2fc61ba7d144372b46605b0fba938373ed805f9d3190996397612c98179903e9c5fab3e1b095b21153765fe43936cb990ab016d2982d2e72889976e936444c7ce8a22742922ccc883d25bc5f2b236c29eda71f6be2a82dcfaf3732fccca37a3fa7a9164b25dd0f578de2681d4d8a0ba80d194ee8eeebd1d00126b31ebb72594c9bfe9ff1d86d7f8f476fbd25fac89dd63e741fb5965d71c5073f10b3571e49e2ca82b1dbdf9ca6ba28fbd8c762eaac19f1c8df78af8d83e466797b36c7e3fffbb5e87bcf07a2fbe4536225b0f5eeee8104110b36282c2244ee726883a0de4a455039f4300a9955fa246028441a44c96b26f0861d821353502c913195b00ae115a87046b721a48550912d730a0dc50c9458ef2639f3cc8b2f82e970309eff3d5b8f5810371fc2f8eca1f7ebc9df4f8e23aeb921e6ac5c19a7bdef23cccbcb20793244f44ac38032adcf3f16fba6e16d4fbd349a70b5a92b162f63b8358bff132cb0902a345d93bc252118a1ba05e552acb7208521995e780a5642a44f2687e3cf6446a86c86753e1377c81074b0ae249860f7b0b42b15d0ad5e54548f5be2dc0c410ebca39c3af32921755be51d572ce0a0f7b1686d1da9d9ae6be776f05ac5043a37866cf5026f43fe49d07816b9519a5582472aa78c631f9c1d0b9d5690f45c2896f33e8c19c5525bf218404a74e3ce27553d2d5174e40931b0faf168db4f6d49904db0a178d1aa1866fe7416f301dc0daf1f18b81f4dcb014acea6de90f3f2e3504e18a15b3b89f1c4f369b49bcb4e156ef148d1941bf6798d9be7688b3447138958c77859f41757e255c87198ec53ca4c813c04319f7fc75086422e4a6b26abc1df9dd13064e8967aea61e4e271b279c07945847578a56c20ef2cc3bc74d55818fe964f4d6815b41e6368e9353e6003a949143da59e5879cfb41c6be9788df33b08f3f2ebae89d90be7c72dbffa4decdbb431f6af7b337ef5e5ff8c8bafbd2e8e3aefbc6874ae37dbcb4c667cf2d197bc25da60a9af79ec31109b43d10f6091cbd0ca177efebd1806e4c83aff028ab2940452713533e45feb28bb4101b72dc1a944863bc2c886347a15673ed8042843daeb36ce57100d0d0f1042a9841e4f25b2ae64886518e4671c6ea9f9b2607a78e7be0604713f68e889ef78578cc1927f9ec1fd397c5ee3a800af0616af262f2c0516af3bfd823811e3f1d81f7f9d044a2324f43fc8b3d9ca3cf255d3e744ef82e5b11ae19d8702d9dea0d731cfb3d0ea573a2f526498a71c4a07f21e0c037d44720c0593f462a25ed699d2de4c1385589550e5b0a0ea982f43463d978a68ce3849a68bc56099e98212288f7429eb4f498134b2781ac1288df9a1d400985120bd92c4016b83a9e6c4bf0ef2c94d9e86f540b1f2911fc5d5e4a40f4fe356a845289be0828c1851bb4e5e1fc08097baabe5083b5a325641e0adafa23e4a2fbc2e5a7ff469d222e4d23a52d1bfff30b2980bd7bb7d13b519e6a66d5f1759f4058d50e51f01ead3b2f5d3df93c3e49aec0d6bb060b93165d18218396e2a2c1e3c11684cdac08990442117461ce3641de3cc5740680a598c7e20f201a6f80c53dbc9394842ecb8e189c111ce51761ec378ea29029274e32bdb83a12d116ca6ddf80620b37a9c71fed51b8dbae710c3e4574eaf4f6dd18a611a98218a9e36622271756c16f9451942e07c0985c926ba3ec8b1c2cc479f7842cc9e3b3bfef0b3dfc46b0f3f18fd903c6f6636f7de6d5be382f7be37a635d6b167ee50226a16b0f345095bd1e4f12f811535adce447c7ded0f3f41c95a63f49def4a0083535f6502d865aae731f4b1c6a2477207bd4c0d2a23542a84054e93742bfda27e5aedbd7800f305430e6789a7501001d38a27b643ea81ca2899a3bd14540d8900812453f3a3c5efba3e3ac995365063d2234925b2a7e9a9dfb17d2343628e3bf38cc879db7be3c09eddb18da2b53b195ac290f9304887f11b7ff9552cf8e0e76312fbde4aeb940ed5c47a0adf7bed2abcd72ddd29cd5e48a16ba633555044b04080a5826bf1ef87b819eb45d3f1423e0bbd94b2e2982d61723b700f921b59a07742acf7ea86ce020c7a37c789d943b45faa11df461a53ad5161c40fa4c1fab6a5bbbd0ba1646242d89e213bddda14de1fd9325a1ac203d95e6237b5ddade641da7da39f12c2db6c9e9f395327f524dd5129615df538c46cfd03c76f87083040db8f3953f5acd9d1cc6803f70a4e39e94e879fb067ecf08ac6442371de413e025fd6bc1b2effe6c8deb93ec6b6bd19c3745c0e53dc33fecc1e9d19ad14618a0ab114d524c8dc684e01ab35c605d09831324481358fd65d92595d71ea063799d4dbe059f426268d2a94df5a946c722741853c5caa90760e717e550d5e8d90ac00ef3484e288ac088ad837525e591aa734b09931564f02a4e1a5ca6288a4f536c625cd4849b17987a39bb4940a9df519f7e1a9a9af8f8f7dee1371f3f469f1f8dffe0a4cde1a4fdff1f738446fcf39575f1d756c69f9ea1b6fc4d62ddbf0caeef5cab92d3c7343bd78ee6c3a7677dffdd7b81f8f79d6b5d7463d615a2361a44221fc2d446c6e24cf4c4ea1dea8150c56c552892cbe5ab711a873670ce7e629a02aa3a19bca66b828b7cc30cb64df445d4b21542c146eee214c2c18d16d0dc6f68bc6ea28f8c0c7d828615fb46c59971eb414aa218cc5abbffd61943436c6b4854be28cf77f34fa3104adbb764c6c5d3a013e6c5b1ffbeffd4b8cbffdfdb19bcfae601a91a2258aa8a74c1b312307c2f54941c80df53042fadea3cc0ff1816db0cb130299e844198f93363b4b5e2933076413c750a81d9f2c422c2c7e0064d2f57208a51ed3f15de647fe5d22b1c22fdba3c55d4b38aec3246dcc3437de0b226b5858c0750b56f9d0dd8a452572f0a93c93d194db389597eb258ccbe35e86909701c717737095aa0c25cae3330384816db9a0c35c4f1e286e059bf095f0addcd69e7851ec66604a4a4d3ab9d942b4174c2d23682c8456bdbf694e644d591871e2c591d7d3963c49e1f6b531cc83296da4fe7188c9a8dc452f4976397cb4425b958bdc188b58b30bb12e3e100db31ba288f0ab1fda91455595c1b973fd9050b373c999b014797a23216f63522e4825b14e54944725ba8dbab9503cb321064d181da64ffee6718e6baa66a1327db8ac69021a446624225a77497992afb1f826ac56c8cd296c10b3af4786b379d40871f4d5d7be2b1aa74e8dbb7ff39bd8bf6513b3ce9f8ced1bde8ca94b8e48db7f98f35984cb292b8d0533a7c5de5d0dd1bc11fe15bb738c100eb53dfcf7b813c57f0b79d6309b484f95b18dd00b8ddb52a017c28ea4f9777a15818546de63f1d23517cd4bc327b1eabe5f21d5c2eb7df49e5a444340271b69fd1db66208289aa52716161761933f606dea20cd8a858d93e3e24f7c3a6efeaf7f8f6ea3093b8e59cbe62d1b63355bcc4cfedc97a21d927249d3348abad2c45933902839948318b53d4fdc477e3c27a69d79110a025a874cbabb9ea4d40436705e010f113301169f8133c2fd5d6fd0c56674a2711a36191a2abb85d9294c7935dcde91206fa95599ddd79b316eae99b429372c53075428810469498eebd284b8f9f23e8e674858c7b329e6e158e4de8f60eb818a30180e68d1a8daf19a1999253f5465b3b9cf5c0719d30325da1046161930b4ab207c2b73777949aec85b07434a8d0c8a90cd52fe666eefef3dc8ef487651d42e3b3aba5e7d8c71d2fb61cb10ea28c829b5d1db7060b5b38b78d13d56877900c3cc4728a4753bdbf9736ec9b8ee8e1804cd1200e8ec6040791b536830ff452c403e8bdb7cb03b76bcf1f328a34f26961f1f93d8b2a41554d0ad59526b3a37a86465e3fd46611ae41a427a936e2b030a978fd0f6c201ece706249a8e38b698b06edc91bf285115ca7902dec8853369b7d5d89fd1e5e481d2ee7d3c1cadb5431bf54e16430d098cd3b5aa0e4cd472e5b129400f1ee4acb34f8b064299db7ef213387acfc41030f1ce979f8b8605cbd80b6a7222889e71f6a9318f64bd03a6c7137ffb0b13526fa5480c0303c1cb79e6beb8190370d1473fcefc8872e669db88664e64724b7e8350a81c32acf5342a95cd845a5e0106b7b0341cd4531bdaa9588ef7727b143dac219e541b8f673b87a19cc54c798f7b104a730fa79e0aa58b7c15c2971c6108e729efff583c02389276014c7d4c0cc364e6f8edfff36590c96931420dad88676338ec3ea9e3ac8fb37946406577dd7963e435cd8cf1398b18ee920138cc851ca85fcd35b4595342885318c7b5a66127dc83398e219a219e5e4c2f25fa677775662e9e0d7d36f0d935cb3e5162fc489e1e281161f15c2a6b1ecfd5d76c32349f92dba7304f9980cf1daabf9bebd1a3cb326f70e212cfbe9bf03f9157f99c74a01cdb25a0fc6888736c7614c1a3f8af2215a0549530590cef94cd6e5eefc70bb9477131ca53ccfec8b9fc8d64243af32050b33b4a715f5bd4b4ec8c92bdeba28366caf6836cebd2c78319d0f55bede53b47f63627109ed50ae9a92a31f589ec9085cba344ec065f9210c7d8847814cd1e26f91b1c02eda3c1b0829904ad7bf645ebce6dd1bd7f77b4c051aa9a392f8dd82aad698a9c8626e044a0cf744e778ba0faec00157799709b41624ef73172ccd7083ba2395cd2a29409e0c058610226964eab4f4aa107d222bb6587f51817b14880817f155ec1066372e93ad297d20e05fcac40387bc0bf59d728203cecc32a2f5b3827cafeed7371f7ef7f174fdd7927dea63f0eae7b0d01eb8ff9c71c4f7bc29264c1265595c529efbc3af2c9fd1ebbe9a618a48ddd5839ffa547e3aeef8dc4d9ecc2973fa926edb4618140e8b886138bc4e9492cba6a65adb949993137527184b715e896945f1912664254db2eac1b5563e145f24cf4ebedcde1bd69eb9989063b8f6fb2afa06add1bc91fcbce383b0ec01b5cfda75ffe03c913a1dacfb4dbecf9cb99e53039537220a72d6656e0681bf98b39a54450f2a53db7ff3e8efce817182556c20e1cd94c6bcd301976607c4ce04510bd8e6d1808731c5153e304991f82131675952315a385374af15189acedb8a999dec97d675d0f5bcab7d969cb4d3a67cf70cd10ce7e2cd76a06de2cad27afd943a5571458a84f7336584b9cc290ede27cae52a2b3a28361184351f2f54e822a846f16fd2dbaea6984b855e36e5e1fb4f14f240f50a10814d3baea80b42b950ee52ceede178d3dcd51488bc50863b4f75322c83feea268804a945b0a1d443799e2470b4edc84025ac9dd17a7e942e2f0994997a58442c689638600e61c0c10d182255947200a3996dbadd4ae3a3ebab2aba263db8618a441ef2073128a769167c0ff2aa2d85b366b21a1c7d4d42a31dad39519780f136174902783f0e6389f8ee18fc5a0853dc6d9226f5895d47681d76a7999589f3acefcc62aae8dfa03d76061ce07e0c299888b24892299101be6f937a91d26b20aac4c651f9e1e4a45b3f6d5c3f090a90db5f18e8f7e341ad8cef0cedffe2e55fe0f6e589b266bee39fdb458366f66ecefeca3bb333f8e837a538432dd4bf17600af9a0890ab9f8c47be3f18277cf893b1623aad0cdc8fb99028dd2442a366e062c335099344c5cc0867c455623ffc33377223656725d8f6aef734acd39b490deab5e03c416235d936df92f09a1033f207c99e868b6ed1e2bc3893e773ae7e77f4ecd9111b1eb937ed3867f3a69db387d8d7a7a8aa26ed12689dbe987597bb372e8398b5b2bed4be6e756cbce796987a195b6e627cb672fd0eec7597723d8dede0b6aaeb25d3107c79711a0ebb7d6dbb7067730c47dad98f90c1f577ab1891384330773c1754b019d22aa4619de7717b4d87a428936eeb22774e457330a7ca279361aac61023701005726aab6a56e2d86a190a76c582429bd32ac3a2c08e3370b475198a6527f70032d5417bb967d633d5c0ee2944b98c3e9ce6d44768970b27b1aa635714b7ed8e2c946708a3df42b3ea50495d8c1eb99494a624a65083cc9d8395d1ea27082f3168fdca587427f4c81d3346d7227841c55c4e674f7bda9b283775a9fa7e519ff443d45495c67cf6ea2cbd8499685b485a9fa709efd5a7a36bf70ea063466cb981180d7845ecc554c298ad620ac0592851766773eac83597aa41986d2bafc3f27762795af82642485336cb77bc16bb0eed8a839b37c5ce638f8b1356cc4b7c36134abd9465273d5282a2b93885cd39052a9b70ad4d605ad4d4b08732a9683e54ad9709b2fd5965a04b67bee3ca28a09bf4b69ffe94ad3ff7c7deb5afc4a3bff979147fe4e3316b4a431cecec4f3d39cbcf2787041cb9eb673f8921d0cf9463bcf9723c0fa360e8864fc6c9731b627f6f7f82aa2dbed610fa7a2d5e9bdc3c41039544244c5248239ecb9c43b4d03055085d26845e4a05705f2673a752045522abf0b8b5a68234f28a30c5d7b95f2177bdb43bb337b3f3c789d77f387ad9557df71baf27f68a80493f8d7e07b7ae8fa625b45d5c720546af9dbd9bbe9104298d9972b022e1d0be876f8ffa39f3e2c0a2e3a2168fea58638bb49d288863b1aa0963fdbd1dc1353f350cf51e3762b1959999bc5f459715aed2b8f5a5e0828a6158a7ece8a5543c1b271d1de6973bfaf97c0ee2c9dec0a05a56a877eb170d20d7b89730df7a9223b427c98057f89d114e7d31135da1ecd2704c5b509012aecff46218215149343f7aa51a8005c9d9e6465d165d311045e4bef59dbba2b475670cb3115c8fca5a4427035bbe1213830714a55d44dcce68b06976e436104de4e382bc48e77bb1c34aa203c9b6f6d2540fc32117c25e8d3134b4af0d8f24813529d2c430482c84d5df3286121611971683ae951e7154942c3b2ab20e5e11afdd79578cb15b7aff9e2d3148cd6a849d227ae17e15c293ab61665d11db6c08726455d6d270d7197327d74437885d4319089e4a81a519860839461da8b5bf1a4fd61d1b9f7e2e0eb059f309ab16c58953c9b508f1a4a478b5d68e44f3864d107950e652e64526c3d6020425cc9f4cdeed913154d5fa1937fb305ce413ce3b37eaeb6be34fdffb4134b3cbde2b8f3c4c676d6f5cfcb18fc7c279b3936712655b76fa1909a6bffd173f47e90e2418b9f7cd1763cdafbf1fc3d77f22ce4299f6b137ad089eb5a0b44b02e76eb1f88ac29813d8b2e0eb165c45fc6446e8250520544085ccb06e1f2194af99179833e909bc07f305f97fd65744fa2621cce6562a97a047c1d4c9b1fceaf747fbb7be1cbda093093cb156427c5f3a6506a1f782984afb451f46eea91b7f97b6e1fcc79c3cd0da4d7fff731c39636ef4b107f06bec135dc3f5dbc16b6eba1561d18b682c2c1a0b24580b34e434c2d1233573dfb5dca04361cc61dd61d03609217b6b6eb23f5ec3456b4cac17e981f466ab19f72a1a27d820142eca291a2873c16640376836af7774c140ca810ce501adc8658c4b525e449a40f49ef89b830014ca43a98a0563c54d21ccf57b1d0fc77b8b00d6eadbf7467e1b8346312c5dfcada79cf0b786ef2ae684d391e071ed54e8060eef122a576744e992bdb0a5410b2e0a06ca569492136532d311ab861baf8f910b0c50acf42312470dedc66103f8b77c16a598560c78b4e4075833073022d86b718539479d19c54b68dddd45b8b771750c11f679a1bdee680e1568d8fe232e3017d7590a752537071225507aa7add8848cd2f7af3c625a8c2f9d1ccfbdb13d5edf0c1c8f321f6010fdcd2f6ea5a6322bde32a70221344495569fd941c36bf74e8cdb9d56a37099ff19530b3648c84dc2cd3aa85ce65bfeebb5146533b8f198a3a2f84b5f8c3f7cf7bb78a5d7e34d80884140854b69ae5bb67861ec8728ebe4d545a731de1e25bce7e73fa74b776fda08ccb6f80dbffd711493f01f3fa326da6892343753d56d6c74d0bc5bbe548832713d2ab3af19061edef5cfbf1f667c9bbc4f0262771b1c13775f3704f419aa7cce50d050a49f27e84542d5162a5b79662b4e383e069bdf178ffcf03b99212aac9300c4c1375f8d8e671f8b29975c1e0d97be3ba6af7b2376d22ce9f69c528dcc97bab66f888d7fff534c7ac787086768fd17e4b0cf88353674cd8cdf729707c1874cf7abdec75ca6846b9a4b9dcdb06e7bda209af200b262f8d9c67bd6c132d720bbe199ed16a469b11aa5d22fcdc008a86836096e048df4b3359c6b3602edf5772103f677d92326e8946351de9a18796dbebba6186910cef662dc0b29bf9401a214c29b732475afc3f681b605bdcabaf7b2b3ca9ec86504f610bfb70a3a342c88f15ab60222c550a6c6449e93c702ee7782af303ad2554cba93bb8710a508f68016d1d1c0ba49d83b894727dc2862229498d9370925e34286d26e7d4aa7b5191355ef2903458f958000a19aa261de90e1520b0334ac32670977336aab70f652d8e3cd31ca264d031bd74437034dbad913289f1c2a8f7fc7995fbd05959e396f167557800d166b31352537031ba45675f949cbe2884533e3d7afec25d721ace4813fd4ce108fcd8371c5e49c381e92980f56dabe8082c2651c2f8ae7cfe61a996946309d9027637df3280997a25042e6ded3201fca85dc3893c2ed47befcc5f8ed77bf1f9b9e7d2ab6a3507ffdfad76288e6ba9547b0b33bca5444fd68d129a726657a1c8e5e1b39c908b1781b1b57affb2d82f5814fc47c363973374215db82b1244f590b2a88d722dab69fd70cdf0c8dac3fa914e640a275165ff536a2621aaecc56938e26cc0c1ed13ba9a48e6176a8895e6c6f524ae76e131e52609e7dd685d1ba715dacbee7f684881ae28d92c7bdf8c75f45f6b4b9b1ece8a323e7ba0f47f317ff85500f1687dbe670c5d288f63df3704c5dba2ac68f3a2d5e643f28372263ee4dba7ec7210b243838468ea09db61a27371cf3cb5dcbf5300ed19fe956993c0307610a54c86260f86c52bcd5bce6739bcaf5caf593e8fa065ec9b5309f729b1935d249adf2ecdcbeda5911ae0ff17ddabd312bcddc200f348a518eb9f63a36f12eb03d86fb6dcb05f145ba8bd867ab8e8d948bdbf6d3e9cd1c0ff2fc5608dc039366447645759ad4e461c7501841076b4a321d044f44ff8ac7dd581945e5f5dc36f62c1ac62318a609c7169344e7a9d5c480f6a268bd8592f548fa8c5c62473967dd348be949ec5d928e313ae249b92126ff18bf9a8f08ab9b18b662b9ca70ab6e8c3584d5b00729a01c6543fe2b5f765c0c61ed62cbda1864e6f7384ada455bb8c5c3ae3df3622a1b1367715327ccac4b0fc4490052878e6c288db655d3e2d6bd994d83a70321395de7a9162c3b0ff67846e9d98230c642e885fcd2721b8a64866b641031ffa492f9d07d3056da4d6055b8f437ae3f1f6f59dbd010d77dfa5fe2cf3f2d8b371f7b38f66eda14b77cebeb31f2f17f896547ad628e0216100fb6eca493a2bda32b56ffeda6e860408ba3b0f63fff64bc0e81b4ecfd1f8e2a664f946364f418d685549264c4b816f32195410f696ea1b21d20b9b7a8ad4f95e1a0320994c886b016655b83a1922deda906c5454b4b5211053644f73476d6ae54c012bcc9e2abae8b7ddbb70202ad4dd34455a81e42bced37fe326a9a2631287c551c73f9d5f114de34edac2e72256c8ce0bd7ecbefe2383a8e674f9a9eceb581f3dbc334cb21263c1b15c8747932f7e13dc95090916f7bcb42272bb1d6af933b5977322f72eaab5e660dfd0f4643ee396bb1b68bcfbcccd0186b6d4eac9d0aa7d1905c63d0064a2c3dc8bcc89519332fc57858ae1175163e36df564eca07d8b183507b8890ae0df85a86473e60595dfbbe286a67cc0094af2e58343d155353ff96e517373290c920d43d941448b45410ce2943b228f0a01ae12cfab67431fecd49416aea1889db18284d6ba771ae854c1480d6ec326ea2906d518a811e2bf92ea51e212c585cc176929ccccfa4f975085e753d3520b6a594b291d877dc538b93697095a9239d1786b108160685234dccb3aa1946c277f95127468e2386df581da33093b340f34660546c6740492df1fb4b7903b1080f35ada2308563321a1600325cde944567a7b9840089a45076e1ee1c8bdbf68e42821c8b23ab459732cc75bd8c022aaa2452697867089729425bd4cdec2c21522684acc2e93dccb7ac64d7d4d6c4359ffc58fc1596c3abf7dc09e0b1396ef9e6d763f8139f8ae50ca33424f0b3b3a74d8a8d508a0c57ba5298d71fdb1e7f20cde43bf97d1f84784bab0142640867cd486fe8b78559abff8632e2a4ad288290b3f9d2e1c2adcaa4d24b435251441e35782a9cd75f0b5a64b8276956b683d34c155adb3a84e1f742c89d3a6d6a9c7add47e2ef5ff9f71822bc76c0a73d4c5b51f892bfff354e45e1732e7a7b4c6693835d2f3c4e88e746d0ee4c42211ba46f1bcd92b3defdb1d888955ac26c0a8ba2094d93a181bcc87670a3b266dc8db5a2f950c6cde93621ecaeb9ddb0cebb9004bb9601328ecb1299ab4681a8c1c70bccc7f09a27b31eee612b19d99983d2a81c1e39cd6e059ecb0039731f1e48ca8fe51437681399353dc805cad7f8f7128a7532a24df4adbc734794b7ee86de45b902816c29ae89413aaa47e9c5ca964d439462f8d64758d7032f6fcca94476cd1abae997750e3c979e6c983686c5a6222a9643f4b340414670890a7d3610612960412f1ae8201205bd83b06598f02f31b251a485ad9d12b6a30861f22b3b9b9dc4f14c15554cb8611bc74106e6db5da8229a38a61e1a3e20c5c2b027f521e9099cd1ad87e2182a867cafaa1547c600dbb90cd1a0368e52e5b3a3842eb463fb96b877cffe78697b5bac5cb5983d6d2b12abe1507f569c5ccb43a0d895e73c096ead06857210c95ff744fc70eb401c7560382e9a561cd3b168033c1d7d93f7ea78b1547c4e95e80cecaf85158010622ee45f2da09e29c1fbb66ae1934bf0d4577fe8fd8cfb2a8c676efe6bb48246def6edafc7e0473e11cb98c5ddb57f5f3cfbdccb30ea8ba2ac01ebce3d77113e8c5287d8fed80389e478f27baec552cb04a04e826208849813d98fa432a9386e942c48701868509132a89fed21d26d32efd59a3bc548e42fb3b157a6374a8f25454945354f1462f79e04370ee13d2b96ad8a93ae7e6f3cf6b3ef270549e3c684b781ba2b162c8d39a79c1ec75cf3fed4bbd5d776288d8e3e3ce473c7530f45e5fc65cc84383bd683b0398e7a3ab5ae728d036bbcd95e298ee5a6d0d68b36a62d339df1609b0328a2de8671527aac4c5e941905fd06376612e1a6cef5bc4f087c23808e9c49c3b7a9849272e6ba28535833f2f3f9ce91608d255c67597416be56d841e594ad02bc6843fb812801e91d438154823eb65c1daa9bc6a8b88a147d39a454106210b91f40ced35c7b7bf0e84d528649a7828921a99490f6fd4ab90c86d6de25de37482b50ee10f592a2eddb92b0e7a2bd399595a9573e770cef82b60dca05231e355771a65a1e9aee98e071044c77e702179063e56121ab274d220fe2665900cf2565c5b96d3aa384eef1440b0428ace720cdb28e0fa3290ef5e8a1286a9d6390fd658338759c826069e7a1b8e48495b1f550773cb7ad852939bb1820302d8e69a4c708aa921d9d1925d2c96760fcaac2a138b232e2998eecb86b4f7fecd9d71aa7ceaa8a23a756a51e2837e335ced53aaa286944732aec9a336594c83c4a6e579a32cbbda43968c2f3561d38dfe5ef7d776aed7efac63fa54944b77de79bb1f1a5d3b074e4657015ed05d2cbe53368a508fa90ccf1215ae3b73f78674a5e4fb9f22ab63401511386e7b8021cd65e5a90b8720c81e8972dd42a82219b39948d871673f548867899e1f4748c9affa090f66a192e492c75be85855e154d0fdc60219573c87c90bc5b494e3772ce45319d7c6ffb130fa575f7befa80f03711e235ce9e13fd738f88256fbf365ef9c5b733a3bf925702d1b445fdce3fc72a180f1584e8b654a4c1a10004298f213d902f686dc8be228bb4023d16645f6094590612c758238ceeb0be164433a175bc6698e8fdbec4ec37274f4de19ecbf9b0ad3b5d304afad2fc0a94d6a13c1a66bc0f506a1a966353e8b02c18a287c28ee668686103bbd6bd4986dbf13e3d538e887148bbb60da5dc5fb416604b36c3c4b6781464593b6444933b82e2f413da69698da8ccf9b3d1133d90f67700c44ea5b2bf20b77cfdab51ccc5143a3c0330ae635f71744d9e9c36af12792be68cf6c28c72a7f9f6b0ef70c363a6f9d81d2be2e7a01204a0c45e9bdc0a465e0d441d3f4b1a944ed205d0904f0c9e9f1ab21c5ec2a2a4714840ee5ca88ba9c0553099a8c55e152cbf6ed74191838d33631ef9c7f2b955b184d067c1dc9678746b7bbc86c2edeea398cbfb4cae33e0fce12f61efac585a951367f7653376b830361dec64d0c7a6d834bb31ce5c32355972eb600a9e30adcb66fd49abe96e728659d6a452e83701b618b6584bb3ddddc5143ebefc9a77a5857c16cfd48f00bece78acc9f0f34a989d670bfc922318ac32651abcbd8db1f9a17bc899f6d1a0d81d5bd939a2b0bc224eba88a195a09645b6cf73cd6920a3e04382be331bbba93819702143fa54b152eb394ae473111a36dcf3678d81219eb99548ac94a3d4223e01a1cb134b4457deb787e752cd733cfdba0fc6dfb66ea14d7dc7c45e4cf0f160f9bf487bfe691ffb74149d73496c27e46b66d2ad1bbf254089fbef6630cc9e076e8da3def3c1b8af79302ac8fd96d0c3646ebc8928c41c4d56c36ce450cedc1a42380dd54cae250d71c1386fc173097089cc4930b53de42506cc780c95af166fd1ef9eb71d6cf983472f653dea919304128180ca3c91cdad471947b1e46b961ed81ac5071833dcd59ada233a2b1aa3af8e0de9a4a299ebcbe4710365944ee0c00653490639a2cfac8f63b87cddbd09dda45c1f093e9788ad86db7acc01e4d628a5c05c1f67231a989bf5dbff8e91aaea18649f213b59cb6b88ed27cd8ca1d98ba297387f0824cd6d53447eb246baa3bc04ab53c7a8285cf3181a90c583ca47d9f279c06f76b2ab5d3fdbaf1096d4b3b00314b92a3b0805b970954e8d91843a2205484a3b2f0df0f324ea580edb30cfea0639117b320ccc43014f6e84df8482e9398e9e5e17aba656c7b33cb8c73ac6092bdc62122a7e9edbbb67065998d1a0e3295cbab8b100046934ee6cc71a33f072dd4baf46e7bebd71ca712b624943491af5256c6a4ea8c7cc78a4cc049bb42d25e7ef944da157e2c87a24679d274553c1b8cecbdf7375026a9ef8f3ef5317efa14d19b6f5f4458be398f3cfc32355c611271c137723e8afddf25758e36d78acf6d878f31f23871ada51a79e9c06ad68402cd0aa142a8e6d038e2d165a9697a712eb8504246cc1367ccbfc4ceb79caadb0d4fc6cf15685731c95efd1ba4b2f328f32e4b1f654c03353c8dd107a84fadd09575f1b0f7f1739b0619363e8990e3c7c47ac81215e73e6a571e47b3e1c4fd19b669bbef7a622e999b63d764f4c5bbe324e66e87c33e75b8f07124cb0902a95681f0af438136f4a083b568120184a6f25677ecd7d64793ef300285cf356ae6f3b46c4f07a11796fb52c0640851d0c9ab1589b76b3205f1fe5c1f66288dcedd1fd851dd766e493c77e59866e85cddb5377707b11f5b029cb58d046a2a7c2349a5859ebb3378eee03a9407a173b65f3b090aa87b9fba0f4a1340acb7444ef636b872a83f2240cdbb00ec081bfdbea5390787bc8835d09e35367b129d51e048c90291ddca0901340172994195c3f39869b66c4f0d4d9310c9800232266cc87bac3f49d849470de4216adb48e417af3e73138b228dac1fbf77740f541400a580819de29f26481c6a001c9971bc3938da5fc43fa0bfb8326248a704b4b60f2cfe7564d6274d64437af7323fa52b35e6e5c3cb518056346402fc9b3711137df58ecd8ae4c31563b9181bd23ae9a5a1893c76be2eeeefdf4dab4c5a157b6c5bdd0950e9d795a1c316f4a6af032ccf373166c7db0d6973c9f141ed1322d95239d148544d15799300a8584a3cef5bbe01d6f4bb3a30df3848c0f3006ac86115f6e7a964792eb71cebae20a58eb43f1c65db7128974b103dfa1d8fca75f443e4d8f8b81d02be8d474b291f5197b6ed2e07d7e6ee1a2640bb8d09244652ee8290d01cd97bc4ff3226b372a8f4a6367a986478f94144d74cff5e5bd322624f09a3fd9a95b4bbd309b0942330016b6de7b9bd04b66d026c8ec3646944d225fea98b33c1acebb32fafef4fd04b567e6ba3bc4a6275efbfb5fe2f4d90b63e70846b8b21c8f4348cadabcc1642a8bce2b9297726a128a41bd48c2eb52d9c53cb656d663174aafa749db6ff21cfa796db3e3dfb8ee261a269d09310218d6d1d691e0e93c72a27cf2f3717bda3a0e4641339dddec1d6c5da7bdbc2906a7c3942985206deac1b50e10590d11ee594bd2db1886153a1b443991dd417de9f0943aefc9b107a2bf06c743137b2c49e656e90cf1b3f45e86b9c8446feaa8150be0ef93fe0d2a8b73b01957356e77acb3dce8981da3b1af03d269b0bd4a0e56b98b934e396a65e4be6549e4b245630139888b91ada7e2a28bea67466e4d5d146259b2001e76570dc5daadc08b8a22e88e16b598d83ae54b08d73856bc9f58b588a22bc388a21420a385c5f6b6c4fe0d178faa73f87ea6d8abb535ee77ab4ec32bd1a1c94ca36846d014aacdbd7a0cc209908be9d0338cb945eacc878e9cc2c51ebb20eea4a72aabf520f0fa9bf138f5aaf673cf8b138f5d11654e3ae37d3e3ce430950114561734f1fc5016efd1302ad5a10425784fe65f73c1ecb8f09def4c8af2c2ad7f8d415817bb99d6d37ce2b13173e182a8a00da4039ace39575d49932435b2c71fc6cbf6b2d7d3bed8c490c68aca4fd3a33019b40e3a144a6168a6c25a3b918b675dc68513a933fc53d90d01535ec4f5982389d4796d9256532320f7618e2400b11f37a1b7b3aee4fb84c3355eee55241bbd0cb4eba4775d1b2debd6443b0c0e01281b02bb68f67cf18fbf88259ff872ccbaf0f26879e5a9e8847b97e39eb506c41ca765c3ebf1c67d7f8f5319a6b9066ff01ce94a3e9f9fcf7328e57adcb163bfedf628d0b1109a9d63b8939d0985b7a539cd61eb9a228ed30600d22c48814198c126d7ceb06ba7b76a7f37b33a78aec5800d95ccdec8c63807b2994d5bcf183ff714c02e685a10a3e5ecd8e826df1a3ece3b04d2980689ca72f019dab222af5d363e61dd50e297ea7d882b30a669433c158dcf0e3bc258eb29cdc83ea689ae058d8c039147310c264939800d3a9e5c513df38971ea3401042d7c5c7402aed2b909ba4f662c8cb3a9d5105353fab76d8c9c2abc8853754cf28cdb8d39b96135b2b50f577e88915ed555894d3b3ed243372b376dee45bea3eb1ce0bd051cd34996053ce0ca82926863a4543323845b068a68d9f058de50c4515084e49d79ec3421c87b3638b1c2acc7e146ccadac1555f0901e39381c7fd88ef5c76a1d5387d79a52942ae7a2732ee47cbc690de3670fd0059c87420fd2a3f3321ea475fffe38e9bc335361d4e9320aa91cb7c488e01c99991419c532a752c02df6babb9f9e424a4e510e444d16f8d26bafa126381aafdcf6d738c4fe45b7fff00771d5673f1b75d3a7b3153de823a6e0fcebae8dbf1302ee7af15994a98f50707dbcfa879f47c94751a6ca32c21859d254e031507a2495c239109edff04d4a92d7601ef50fd4cefd706d0844d16d5350b1f49eb2c47dbe1675dd6ea5038114d0180410b115dc754d2c73fb87689f3ee25def8b67bff395c4644fc36c786e9dcf3e1c075702ed9f76694cbdf28618fdde7f40e4ed4c7516433c3b7ab63d74474c654c725efd6cf6c12d4d967b2b685e0bebe80e1767f0ddcb7dec60e304a16c09ba0d847ac3fcdcdbd593787a655ce3a26af21f950aa4584a95e940857b35252a482b067e3bac6be6b5eb49509c81a64591c5a6db724524d28eabe044010ec9b1d0ebce8f39186d05dfdcdc2d52cd7dd2f8b7a420194a929e67d4e63c630f4b246eaf692782cac41b04b9c745f4f8ddbcc8664053935c09071c7bd082ac0261ecea845315c0e45fcd2ce0e1b97d6436c3d8cb569e98aac3f96d6f024bdf95d9a539454313580727d8f1f813b161ebfd51cb82962d5949bf7b1104d70c1d7f1077ec49a5af8fe185cae0335959a672c9e04970601e98ee3bc7397540e9f62369d10af87914c5cdc4e49902af684932165a998970cc574eaa750a514edcb8a6351e7ea93db66ecc8ff31736c4f2c9558973b77e6773b4b4b30d0dac72e296c886c737c44cec8d77de1add879ae3e4cb2f8b19d5a5848f20935241122a9e81c83333a533ec088ba70ab5e14826bccb78be3c98f0cee9bbe83def06341a8c35f7de11fbd7bf117f815af4cecf7e2e2ae8b62d0370e921943b9b6edabf83ec1d5afb5ada63eae0eb2fb34bc49fe294ebde1f07780856faa5f51882c976684b10b9489b3912424771d376730187b48710da9f2613f158540c09b0e675e65426fdce5b70ea8e1dc3cd848f4609ee90a731723c98c7ae01c51b67fb9cfad357d3f5fb970cfca9754610b7dff4cb5844ce9c0dabbf6cd54931facc8389548c7b493ba98fd346b2e6f61be3d48ffe7bac6d6e8b83d06e1a68305c40feeafeaa6b992d2f97d3412f65c5d08850e2369e85c373ac4dd6f19d4bff544b3b212f73274a010e265780be6988d9b666082064b0bb2386d9aea67ff2fce82b6f60bd3379ceb8c82fdb008d3b40d4c2b1ed361853a7c9a67d8df04cd63b242fbb7b49419af18dec083ab8f309d725cc90423a67dc19b25a9e49793ae7d0801bf271bc52942743a54316509e7e515de443d9ce5538fc6306fdcaf0d23ca9d164611617e30561c16dcfada065c103dbdfef466119c22adc341e4e07359dd1833b62ef2daf47d63d7f8d22ea414553e7440130762ede6e54fe9c9b25f3e5cceab435a3e390b112ba5b6738e410eec851ebdbf266dc75c7d6d877fe4571e4b1aba2b19c84d11dccbd54cfe87094094425e9b3c92282bf8a9d15ea56d5c7adaff4c6eb6b36c5cd50619e9c3195eec5ead8bafb10731fa89aa3c84df6151116ecddb0210e6d5c1fbb1f7f301e46a98e78db3b62d154e8f113795366cf5c590fe64d8ed7ca289104cdc335a7ceb44b42661b92623c9356f18af75fcf83ef8a758f3d147bd6be1ab7fce88771d5a799d54ddda218cf344ec9e1dcebae8f3bbff3ad68c373d91c28aa570ab873d4659723dc209f9861831101053d5266f809dc49944600c11de9ac1d75a1f19d3c0f1543efe8941e2dbe5fb65fc81d1436974931801713f5d300658693a86c19bace7ae6329431cbf088b7bf3b3a687be9a47e94ed5c37be07997bb7edc69f47fe51a74636b3fdf23146e0761098d3f0e8f49f63a2d73df948341e7f56622274f38cd73733ca4a5e1c79927cbb16bccc1ebe056c2ab8a602915994be050f671422c2389d91d9f918973ec61cf4eda318683b84ed1d7356f12f64659e430ef799e3a836aec39cc9e26d1fa5843ea2a85c43097b91d20e1c288983441d38cae73caf9191b9915dcf69008a3b9fab58297f920993591f23a35c942e1fe5f32f4a9f9f33b44b993d72a04ceab912e32725e6d6473440fc9c2ba4cccf69f3650ea0874a618e0806e15a623198fc1efe328d603b8a59d7bc230a2e617e38f947d74b6c0ab6fa85e864b7bd42f2a6d2c933699998198595555672511c901f4f22839641f829e6f4dc583ffe1a959dfbd8dbe7b57860cbe6d8f81cad12179c1b2b562c0279626d44fb54e00447a78c2b0113de837592225a20de7e2cad156c4bf9f4234fc781e71e8fe16a98bb0d5379105571dcd2a6386231f91ccabb7dcf01c672dd1e5b9f7d26f63ef7441a6b3cc4865e8b17cc64caa65b4266f226eb30a24ca62a226603133526c3c6140a264f9551ae42e83f7d802967c06070d0ca8e679e886db4aedff6c3e2b8ec939f48835c8af1b0b5b3e7c569d74120a5fda275d7d61820e47de3b69bc83f6b63e929a7507f6328218a6b5e6e5e6437acac7c771a5731b484fbb869d9d382d286711675ddcfe820afab244e75b51ddd5d320ce9e49fede66f3e57154a22e87a786ce69f7ab2bd08631bf33b66bee37db1e97b5f8a3ee85a0a9ff96c37e3d96a1c8c838577b86466580a4641f8d9822e3f6fb9ef966858b82cf68f81d232ece6d86a1811fc6d77073429f2c71272b1193053469cf803c3a29da8c0da4f19395185e82961771f0359da19b6236d298bee5c5907bdcca07337c16cb4cd1eb5723a0206117c67a677006c792df6c15596726c9037f77d1a742296d1160a630a928f91109113144a3d472856c278f5567c46b04e883b8be75eec00c9048365146bc45d557877a1689ebbb0201785d643f9bca19dde29574cdc5dd7d2a860a5d99c2465059962a4e194cae6a3cb1d60fc541a60e0df0f87759c0e94a4946d171b4b1ba21faa7de9e2a36370f12b51b87743da0bb6050b170c572ca11bb36adaacd4d457505dcfaee410e23cafc4404b9d58f3a3e64c479096c6ebcf1f172fdf7f5fec7ee999b8953ce2cd934e8933cf3f2396ce868dab1511594bd87e868caa301bfea54de1b9f8e397cd89e90d9571ff5d0fc48e356b193d4cbfd3f485e47035a946d48770ce9c3a292e7ccfbbe20150a08d0f3f904088a7e823ea7dcffb63d98a25510d774ee5d1e368f5cc37328cf24caf938b24d46e3a61f85748722032a6b16900c57cd7c73e1cbfc1daee7ef5e578f3d1fb01682ae32d1fb821297d19a1e08c9547c7fcd336837cb5a5bd9aba0142d6ddfcfbd445bc70fe1c846130bd37cd3d480c67b750a128cbcd1a5dcbb573a70baf2d331f82ce58c21ac3413fb71925b1fddcc9adf6f4586c56a10ce1378276dab6a1223a5f610d889a46a19ebd7a7bd9dda3f0d833620008dcdcc2279d18e078ed6af6dccd9a4807f288269222a5b5a7a00e50a5321df9cef783c20ec57e3c92bb7254c3ef9b0d006574e3d4a50ebc521e349f126a4239527c76ef8f7e88a3c334818ec1d58c998b699c03c2863d3d80d29511facda864b3063c8dc6ca7e2df3488d5a3510ba4d97ceec96706c23a56c8ab4fb395ec91c284d0ac62b093868c4c60801d3860d2888f29e721efe9ee605f3bf11fe9e3a1d923ae0996caf408912a06d4465a4020fcf35f6337e3eb70babec168ad6073877c62d5a64b53e242267fbadf68f0366d34138aee4b83958523a410f37076357be34f215b7cd497762350be72e8ceaa5cb6378e5695146c837be7e75746f80bb856214338fba62e6fc289ebb1c7406f75e5ecd42109e301968c9e4eaa86571cebce8dc98bd6461dcf98bdf244edbba07ee8d7d8cda3de69cb3e28cd38f8fc68ad2e8872ae2fc6d87a31b8269291430051fb317d31a6ae28a2bdf12f783f6bcfee8133021dba3654e7d0c4d3d128340a8431da5a6ac2c2e7dd795f1000ff6152608f5ecd814cffff47b11f0cd963371b53c8b61940960c88cfcf2d83e98145ba76434a3645a7905d4fcca50a79cfc61881dd7cfa3edfcd6af7d99693e1be9c9ba396ac895ce010ad7b35420b935cc522fad6d4c0d747de4016d3bb6c5b6bffe26f23ff0e9985d5b9e925b61ef94ef709307a506a1402aec1e94c1d06c90db75cf57a936b664c8fef61a84c40fa1401d64c97a27adfe56103cafddb05072ee9b289bc9fc5468ff26fd1bba99eb46ad6ff615ef8d0d9b60e6b3ada89183a0d200a1771a450695ac803074f8c01ec27e580976a49a2b711dbb9e7b349a8e3e25fa4aeb9805511af360ed5bdb39b88ffa19eb54020b66924a01743eb8691be9c01e460bb0a66c7a9635ff287888bc1f811f43b9cbf130d3796f2e209454b33ded7de9becbb9c729e52078dcaff990b9a23d64d9bcaf384d2842511c0f229f13cf64383e6cfa80ac8dc162b0902f129d03b3df1ccf27663e646137d183cdbd4c354c6bf44e09cd737bd84cd8674a93e7a421ff2e0b42802297845f9c5c5d4b431e48dcfaad232030596c3f59c0b7d3574b0bd46a146922a44b752b31741678bc0866362753a8759d5490b09e581f16709850a674ce12363c5e1e2d070eb22fcfabd1b386ddf6d6af8d822d1b683b9f1f850b60034c9e13cbc8abea10fad49bc4036a621849090354ca69a61ba0f6d2c6ec8187fef0e7d8ba6e639c78f6e9b164c902bc99e3bf32747c03ce3c342909b8ce99e39470fde75d765154d6d632b0e4d678ea26067a90d81e4d91d4f8d8f0c47157675d766914a14c4ffe8901fa58d6e77efcdd18a59d60c509c74605b32a0cf3b41e992d6bf4a28609291f4f46264321ca208ec2d0bbb0f04358aa29b367c5251ffb64dcf4dfff4587ea9e788a29a8f98c603ef29493e3f5b56cf8b56e7dda82650c4532b11fa07eb377f58b517af72d517ce57b53dd45b4d030ae86d0567a8f7b32399e4bcfb36ba25664fdc97ea0612cae5ec746b92d289ae85f3d4a623b85d7e72cb93efeb578aa877307410790c8beb6235a16b79dc8bb48e82b2eb82a867efd4df243d0ad74a3ccbb80ff58b7e4e8a8bcecfac879eea1e8bbf74fe9d967683414c3c9835fb9f58fb1e2835f60b790aed84141dedca2b28c1e2649a178dda19d1b995cdb1283c555313c65412a9c8e0250a4966f8ee57e4de5d490e4146e25773b849729c4b84f626067093991ed166da0939d14e894dc5242dde9869bfc2cb1b50f032b7aaad133cf2b944b2783c53cc9cdba2dfe1b8eea391ca7ed8df9bb8003ca97511e23313d97619fcc6f503a270fe98d85c3051a525b45a6d09d7b883d471b76ed043d43736137b44c9d921a95f2886973ecf907dfcf024d1960b3e46c363fd66de92efd4e920b957ca4081e13f13686327ab941b9795a8d0edd254aa997307f1901752958756ae4b2d3dec84e1afca849b4012ce46e5ec7aee453e3a13bb18aa79d11c79d7f3e507555bcfae686b4254b3eb955d5f49931735a43ecd8b63bb6af59137b376f8db5b42c9c70c6c9d1505f9d5a850d5512aa973c7446a11cef25a7efc4534f8cb2aa2a14f14f34dffd8a30aa2d8e3f9b4189223bc29d5ce7c99cd7a7f1e49fff107d0776c7b33f4599863e142b4e3d25c1d74e0c35dc954321046d08a985443693b730b472bcafa1aa56ce7a9061e89c15abe29cf77d80c128df22846b63e6f8f763cb4b2f27e51c07f4c8761f2842e31242e4941863f937dd777b14d08a1fa79d453ccee424b70b95bcc80377a88bbd3df09c689997d59dd9cc0c8e28c825b91f0aa407d58bc965ebb136c5451bba6d9a9890da80820a4ed8ebe370f8e9289f39c53658d6021453e1308e9e705674bffa5c0c3eff489af294469fa1f0fd78a52978f2ea732e8dde75ec38bf1536872ddd5e9e7cbd8dafc60e769caf5f711c392b75228936bb36462775a95e8ceb287cb7b13947f32fd3993c2a0ba9e214b2579710b561ec669828a6f99321aaae242c34bdb05eb8bd63308d55d3884ca606652e6848df8e87ef45ee64681b515502a76be00cb9fbc955731d983f415153818c60c08b53a9478682caa3c7311f729708eb436903093e57a421e17d290c330271fe03eb2cfb4166b840596e1db4f812ac845cb8820186d5236cbdecbb3a5e050c2deceb1823db7aa1fee48acda64a55324029b41b2211dcd30b45a20441e2f7fd6dec3641757f40c04788147a51419a0b0d0d4862219662142b903b9f5dc869f02bd9bb2dfa5e7b26964ca73f8944f219761f7fe9c107621a61a1db603a3b201f1acb85979e1d0ba6d6d3e6d1134f3ff542bc70ff83f1ca9d7f8f9debd6c5f1ccbc3ee64876f5c6228e70c32a502abfa56b754b192c1042b39cbca7b4e28371f72f7f138ffcee77f002dbe29cb75f46fb0acc5f87b7200bcbf1143bdf7c3376bcfc3c73b40fc4f3bff841529aa3ce381525c39dab34289b788b3c3dd9e2226299ddfc040728d4720135844ee653869bf8ea38f2acb3620025baefe73f62807d73ec7ce5b998bcf4881452eb71ea962c8e3d188cc1b56ce3096f6f18aed826760eac98c96423b66ee9057cb0d6452b0f619c3bfb398782500dcf6708a7a7722787023cb41e48efe42ee2820a16729dd96d51bc919f3dc666c76471dea96897fd4d9b29cc5a4075be82396733f3cca576cd78eb35b165cb1b18b483999a21df9df48eb53efaf7a83eed92a83bf13c1a3377a4324586d42aa20b28f2f81d51ccdcf802ba4edb29ecbbddca98e11b1e3a40e14cf09da75041885e0040627fd84eaeb913452dc1c3ccac2a496b68517a3dfc3bbb828d1cea6086cfc67838e446b0a1cb715c3c663d562d9dd48214e65543781ea7000b1b880ca71ad3e11a92832545dcd2cc3b7246e75348b6e638929a05b44c0d8c58340fa3528c60935bbff2efd6998a47615fe099e45d5a87cacdf9fe67e8bfe0e46e82ccc255d04f542c1d08e83a1ba46d1802e6281bf74a4a1567b72e608df5309dbc3fa73436edef8ad262bc10373e2c49d55a541a0649828c328d0c182a22819a70e78a1bc15b4df677284ab366ce8af38e5bc45e3ee571d40517c58b77dd11af3cf8207d50e551074565fa92253167726d74536328e486cf39e7b498337f6e3cfcf73b63e3b3cfc57d3fd81afbcf3d3fcebcf4fca8052a1f82a79520cd64c0339ec3b0c341fad3a64f8db77dfca371fb2f7f1d2fdd7e73ca4bcebde69aa8a2182a7891476e23abbbac7e528afb7b9981befa573fc44a15c409a79ec0e2c1bad2c38a74727c476059421063d0b22bdcf2123363c032ffbadf82c9ebf20b2f89dd9b37c4abf7dd9d42a456da43eae62e8ac6a38f8bea634f8a993cbcd76112ac27974a94a83ddb6233f9d2820f7e36cae02e6e26d6694011ec4a75e6819379041cf62080763039b341206213522b8820fb6387081effd9b2e19c3d4760658630d2b2aee5c703093bcf95b14d48b70d2682a4d1267e173aeea99d169528cbc09dbf4f062ad385437ef6d8dd51cae880c695c747e70b8f3269e9d5cc84223eebd4e8617621d9fffb6f47df92a3a2008a5156fd1482979244e392e253019dc8e7a227d9ceb800c343ef714665264433875cdb4eb8cb3ad40336acacb1270aaf44396033ddb903b6875b4f2374cf8c5da3bf09c5e9a79470b868eebeb9b972f26461b8299e4e81354e611bd7319ecbf52823c9d0fa6deb7ca6ef48b46e9cb02ec9b921217f73138702c33ebd15d7621d0a89cca0dda3577d24723a5b6300e8d104309b05c879fda988a7efc92451256554f960cfae9a13e3d38c2b33348a64eb39791f48ddac29331966c20d747667da31b8b9eeb4ea68356dbfb6323b01c7b0309b7cc379df0e9e14ab973db09019de123f07180a3963da9498f9d18fc50a20e0a76ebe39b631bd4776eea645b3d3ce10c32ce0204a3a1d4acd5537bc379e9c3d339eb9e3ae78eee6bfc43e42d4b3af7c5bcc993915fa08e715ce9c405f2612a744e3a9847d71f107de17f753f85b83f71b21a63efaa20b7990a5f1e2f32fb2ed2a1c04f218e74f58781cc4633bc8a40897b582190ea53e1016d2d068c491cf2a2beb61b26eb7b0b1bd855a0bb6890d919257d685077bccd5d7c72172bdbdc0fb6df432591ec8177821f6efe6c1345d7465b4407c6d86ae3382453cf8f2b351f6c83d5172fedbe01d021ea0b5a37877bd8c6df2bbdc0dc2de29c2964d9c58c0416e9d20834312dd674845778b948c4259481e05649898f803ec3dcaef3b5128bdacca6881b1157a8e9fabe19ecbceba347ade602b1cc2702dbe33a80721df1eb8efaf914b1e557ff205740dec806a26aa9b7a569362f450a82d5c4c1197b05d083a07839ce3f043166b2f0adbc7da16130d4c910d81319789b00925711ddd5f773e51913b595838764b5067a1a7c234f7d06811d6d01a05d94fcb8545f15c6ea01443ebc07defd63db50608eb9cb6ea962d16710729fa6762d0c313576deb517926000573a20c78978ab0fecd7a516a97b019146e5e7aaff88061b65b1cf96cf3cfbe3c1533e513a5cd67a55430db6c14e1c93dc02e157b61d4529ccbefd84bcb224a956a3713d782b643854af3a61b817b0b39460fa1977309844bf379f059741a5a6895a794e89f42d69cb890f7c883aaa5263017a590e9ed67242dca755b71c472c08445f1cc638fc7237fbd397ef995afc6696fbf328e3ae504bc12c327643193875d70c979514e387a3f33e8763cfd44dcb473479c81875975f4ca84ba18021cde2b34b351b4353e06aad0e17bdef5d727ded56b77dd4eceb5316af00e32a09da053535713f9e4367d70f2363cfd78f4ecddc90e14df07b6fdf798b388b97c0cd6306c13c414f749b52dff4318f582ceb54ec3fd8da3912d2d58ea9341a896c3a6eefac67fc0a838102de48723ac716be314ac1aca0ffbbefaf26ba3efc7ff0ddb9a5979d075f6de7b4b2c9fb728b6ce5c145313abc4ed556cdfb6d502f081d032f1ef261aeb24f73691039572b34e22f5c13b84b19b7bdbccb68942e273a54ff1fb2194cfa93b8e597623b94e220a11481be9fcb7977a4f361376eaceb982ee58283adcb7e19021dea135cf4525fbf2d6d4300c13016d21244d3d66a9b889a011a68dbefc70545ffbafc9a0b53013be8b90d13aa4dcca59e43ed676549056580ca9f3174f399bba9241d74160ee37f99b94479b069756523143911c81dc421b4517de57c4b188f035795096c6da5e87e093b3372caa7a3db21ef41acaa4537ef99bc082cda4866de3132deb7a1e5bd1cda794c59423f177079ec83677dd131c4e64e65e5a0e4ab5c06b2d29b7105aba818149995aec2c300734e610e2652d58919ab09c5950bef7a118dbfb24b31cc4e6d5468588d0e1d61b99f5fde7e83b326379b21851944d48966b3ced4edaba4b5bca59d484eed884c7bfb2681d44d9ce009487df7836565e7471cc980d0b828b130a1e4855ea6c0081b3632e88df83b7dc1af7fce267b442bc14675e7555cc9d352d859a9a8f29f3e650f49d0edcc9b0f56d9be22e180307af78479c7cf1f989e1ec508c0408f35e3d89da242052cabd9c7bed7b521fceabb7ff2d41a5758cf92da8ac8815679f1973e6c08ce77d93162e8c477ffee3e88173f8e24fbecb9c867f8bda1933a8c0db8d99412f33dba3d85d9b3981f52c9db249adcf0eb94d36289fd0b0011ad582775c1fafffe23bd10b87ecb9dffd2c4e6424560f136b1c1d55bbfcc8e8c50b0c321f6190b5eb6a66cbcabffe36e67dec8bb11d2e590337018923d5860ed782e4d2edc43bc988102cd88572d93a3dd966402cfc16e788730d0be4dd1107eda090e92ceec908743f82d78a47723643151e288b75e8c3384a6e154e764e46deacc551be6865b491cf5a3f4f600ec2b6ef01c2505e2f597952743ff7203b8e8002a7464b6e1c21eb7efde918db4168580f1b9ea8633a036054c20e946433c08133342af14af35512d6a793d06d03af5b2c16b09a0d554856844a6fbf9a7991e1a37f73cf26cbcbfead9d28a5cfd980096c609433f725ccadd1ce72071391b64429c2b839924b108c4b140cb28f49e5d1031bd659ecb575ddf977024272f2f229c48aa99bffe9099d06dc878149f99175a4013fc85f8cc98db3ad1efba5c66625c219028205e9d97d30766d61eacab4f228aa106961b1219a369c706e0cad793dda1ebf9b7080514714130bd994ac08c128a087c4f02fe52a9c784cd62dd6210397ba6300ff4f07ec13773c449de7c138e6d2b752273a8706d8c9e455030825c001e3632baaabe3b21bde1f3397af88276ffa4bdcf83f5f8bd3ae785bac3cfe98f42036bcb9091493d9018d0cee03b068a651ed89dffc2c3ab1f87ab15aea53867a5a523d84429fdadd6d5720493d1b0f968df0bdc8c01263e439a79e95ea3d436ec4c582af42993b1968f2d29f7ecd049eb5f10268de9c0f7e2e6ad8d5c1099de684b6d60f53fbd04ba5ac3529919071c60b22a7699773dbddb3012d669c797eb4339c711bad0bd27156ffe197b1ec439f897642073fdc78f6c5d14583dde86bcfa75a47fbbad763d7837745fda5ef608b474777b9e54986b2b45bfe5d2ad602734f089af30f7a61dd6f0280707bce69a070a28abbb8100bd29324bf722dfb08996cf517b0b060d98582391454d084749170ad9b6b465058df49279f1fbd0ca619a02d2615e4798eddd4e68a299ed69f7c11613093861ea71543436baee41a6010b73d705b1cf9b12f737e88dbd4a95a9131f39b29c08c1a6e49c2fb20b9ca111480a845999bf8bb1e4530c131c62e6b394660063970e23ff2829ecccfb881b75ea98a026f2a9a9a32702d6ecc9d0ae8895c8dfc0952a4908df743434ab9910f47030898903c6d024b8c2a5058bc4e91889ef78151188691936448452385718faf422609d9729edbc1858e7033ba48ad4cea07c2e2d169916ec4ff723860dfbee6d8f4e28ea8d953c37c86526616e445392c8339175f1975e7bf3ddab66e8e0d8f3d1ac3eb5e8e5e5c7ed6cb8f47095bd897933f954c9a9a9ad8061d4b2c3a62b58c87b674ee94987bda6762fda9a7c5f37ff9533cf2cb9fc41a180627bcf5ed71247bf89451d01b759b0ef760e2c1ac6426c21c36087b8c50ef6ebcd36b4f3d15c54d53010c882fb9d1394c5e3d62c5c2d8b375473c7ae39fe3955bfe126dd4aece7edffb637a533da39a982623e2a67148e29dc9f38a58e0d319ebebfdbff0973f46117949c769a74601752cd1329b0ce70314b45073db0639b38bed24b7fde1a731f8be7f8d0a8acb524a7285b239a4b6c7e36b9ca4f44865529ff4f82ddc8623abdc7e259f759879e5f5d1469b7ffb1bafc4a127ef8f1dd4cc265ff6ae3804d72ea7b43aa65cf19ed8b8634b64d9a64e78dcfae02d51422855bc7445aad9ed71aa1002e7b0c6fd130325ebf8bd1d69d9668196fb9a8c0269c5ad43994b3937a183df65669b4f09424865ea422895814a797ad6b45853591db2174ab3b0d87bd8336befa604c20ceee89e8855351ad4b95f7d326a8e3f271a2f7c67746d5dcb1eab9b529368ca9590ad96352fc55e0af163738f4cbb412ea9a1c3dab913b453b4f37ca5e95481dc2d2c0345e1ab0d99741f5ed750433785d713699867d50abad83931c0d3eb9f444897e801d62fb90f07489a1b9b4be901cdbd34e47ad92c14ab088f9fa208bd8d43246539183f18b2d9d920a7d3f4c37c5eafcb7b6c35357c9757679da900252a50d13892a3b81c94925bbe6d5b82f4dce0cbc6bbb4c39b843f6a1bc314b9ea40522a48a8fa202bdac9d976003a0b70644d4335c9797d1a4491f674a5a096b7f8b8289fcf4366dcd13045b77eea443d1460f3d949bc74f2b4a860687bd174869b30fea806946c165ba414a390c79f7f6ed44e9b16f77eefbbd10e89f3b66f7e2d563ff4409cf6eef7c4a2a38f4ca8d7b8db6d005ad490dbbc1552e88cc58be26e86318eb20d4b236cf31a88a0a79f794a949616c79419b3f09c53e3ce9ffe3cb63df170dc097870ce873f12b308d5b23946dac54f2e61323d3c039eaa349313188cdf0fbf6c0dcd6a8ffefa1771f6473f89403336d93c83055fc4acef5e4099bd8fdc151d2f3c12b9145247dff941b6e104a2c76b18661d9e3c2b8ae779cc930c31f4f332243a38a1359e2e1e7a1e639ba75ff5fee8fbf6e7a1c81c6260fd9f231b9675cdb223a8b760d298913ee5fcb73226eb17a923b58f66c0f67bff46ae3a2bc6808d9dcf7e082f83aea4a12236efed20775261a64ecc74d88923768e02c37e3827392c0263076e3574a61e8c84937cb4e665bc7f987befa78d5f54cbf100e5cc17ccdbba29812ded0e53a465bbf2c205d1f7b79f302597fc59860b71de40eb816863378e9a8bde1375275f1cfd7ff97e8a70fc32c8b596b7f3a1bfc7d12b8f4bf3e83634c35040ce040d665482c6f1ae6e947b777b2f2015055634da0948e6cd2270dde4cd0e47713d4b51b8263c8f0b2ac7ae8f4843e6874aebc4dc12377ee6d882582acfb8c3204d2f7c0e021af42869949dcb600d699c1d27dc0c3c431042f91cbf257d48c549e4549406a83b6d8ce73da55a13ed33c8bbef31ea30c0cc6d993a3d1a418f4ae1840d602d0e8222f9a15287403af0042d8da1366a057b93ebcf401ad44d70a9c3e53569eb7507e81f6ce9a080ebe048048ac26bfeca93a37cd5c93148e1b51f8bdbceecba8e5db7451945c6a2b94b237732935c98a190e5ae7058d77c2c614503a1128c5ea91dcd3bb7c74dfff16f71c47917c609847193a7d2f9c8b588d218231f75f24951cb6c897b7ff3ab443b2a39f1347236307d16c716f2e9d42baefcd77f893b7efe0b58d828d3b7bf11677cf063310fdad13831b35b285a5bf276045b647c9bbf1dfbeeeb80c90763dd5db7455575659c78c387d26c33075e0c31d6a9e1f2f702021c8a0e0a95ad8fde1945754c0a3aefad89d19048ad8634195b9c18101e5b7c4056a0aff91e1f80e0431f4255b1ecc8686440fdaedfff30ed9adefa5758d693fe0bc67a4d428c4a4fbf24ea314407d93dc2d972875e7b2eca9fba3772cfbd3c296529cf5eaacf5e8a296572e5104277b168e519556118cbc9d47b3004949ed27c4287cc182e795d8678f920ab8320ae0e499191513c8ef74171c6617c3baca50bf6c1e0f46591c5cc376b5e45144d1bcf7a6becb8e94719b26a42bb18da02a9b5fca8d3a3fae833e2104ad5cd283507e3d802a347ee66b2ee9ee71e8bd2a3e9c6e5bcb918ea6e9efb7ec007eb8ba296f5b45e4c9251c3718d94f675c15040706df6ab174c30b0e28175132ef6237f1ed75ca69c1ccbc1a68671cac0187fd77b39724d183b1b63adc07bbda98b00f93074331fb2f522c7b02e85a29914a7407683bd4a321d7c962a8fd4a2098a5096c834e72a1aa50b4d63696da9f0819b38318d5cbc9047f8553867191d87d3d8a1ae9a98945e0e772a6865073fdceb7edcb0948b2c4e3ece810fe5c20523297542ff28394d1eb1a22e56be1d4f878a3d2eaf6916444766409084f66f7c3dba5f7b36ba9ebc2f7a09c9763c7a4f2c38e194a8983225f6d0d260b2bf9830efc8d34e8ed61692f05bfe162f81a86d7ae1b938edbdd7c7aad309f7303856ff47087fa6c0cab8f273ff160fdf78239343ef8efb88fbcfbefa9d6908a23bfdd552587ecbc73f113940d96fde7d47dcff9dafc7c0473ec986c447c0ff02def549208c7a0f7b4c64388c61b18ebf9eb1bc08e56b4c23b5563093493a0718b9e46ce93cea6a4d08fe201cb46e862aeebf8d766cda44c68f3b2515e83c62da9d3db5a6248a430a8fb5f289ab97284699d1d0d69dba78e0d31830d2c3d8e043cf3e12cd8441e5f7fc25f2defe01926c8ec19094e2b3df1a45e451fdec78e1f4d61d0c1d990f10944728e824d23a34d53cc81a92799fdbbf54702f1d800a122cddacba1f6fd56b18cfa539372f0763d28710a7967c14ac6c9886cb7ddb6298397cb254fa6aa7c4d8b46558060aa6be9f3a5a16142a1be0c6e04f16bffc54f46c78395399367f70d78e876e8978e7a7a2e18cb746ffdead99443f41c57aa5a1d84368aa57dad1032d8970c889531658cbc99d450c9ddd6018aa8577407d2394209b48874413f1d083a90624678ecf702d466f92970791874e49a908b7f2693eee8eed2a47b6c69fbfd9ba63015636bbd185d38644e464a79b2b39b7d0d02d35735aaa11ea7632b00632390ff403435e94942813d6a521921ccb1910b995ecf5324611cba4317b3743f45e7e04a4060d05791ba07fa68f714b15b36a089526c59e6dfbd2185749a7e56c17d98ee7d9bfb739f2f96c0e564d72e368213d2224d3396cbf02d785874460c6c53802a974d52951b6f8c8585e57c43eb40b63f79a576335ec8456ad3f8a55c79c8345c71c1d85d04fa660f92efde427633134a0077ffd4b36c6fa4a6c7de5e5389d9970d3a74c4a13640658dc2216ec4294acba694a3c82776a6334d6f91ffc5054a244ad284b2ec6e0d46bae65db95b6d8fcd463f1f0f7be196defff78cc39e618e643bbd1472639cde44d785794b912455c453bc52eb6c05c7dd3ef2864d2667fe5b5e9fe1ce451481879889dde07e08b0dc04068b9e557ec39db14416b84c640cb2e435cdf9476cce624a6a9a27a99dc365377f297328466809ac882777f20fa9825d1b39b018ccc965b387749f41f7d6a9a6a5457571b5df6e410350cb9f91abb23ecb8ebaf31fdfa7f896ac29cb4c933d7554fc868076acfc44ee48d020e78bd5660e762180f7572e1303003d4701448a931c5cc3d085af0073b1918cfb31b6a98c74555a71d42f259db7cc12104cba130fd783ac0e0286573ad49d48fb6e275e408fa778bb13d6b9e8dbae3ce88a2854746f1ac25d1bdf11522a10c78a20cf4c280d88fb19872e65ba396f5561c2dbc367718b6018a10964da7cdc25572ec5607d0bb06c0953405a8a054e2460bc3ee38c17d38c3c163e7a238b91a6d955caf640e85c1d12b258f217714efe84c417fcf9ec887724959a406a970a90f29a17999fd9e0cd565f5a87c4e06d618a44e5a8f8507eb77745deab0b529901cb9efbacfa5e6a56a0e2a545dccfe986354dd870f1ec0aaec60942da35d2b7ba369466d6c053d1b05f22e23ae2d2077aa0185ca9bd218239bd9a95c2bab369b80a13cc51261bde8341f19772d13d7f15b287bede4b99048eba3fe9c73630100c186c71f89d50fdc1ffbde7c3dd6bff862ac3ae7ecd42f24b37c317f6f60c6da6390495f45e9f691139d7edd0762d971c7a451b4429fe3c04b479c731e56a12a1ef8e1f7e2e6afff4f9c72c387a36ef66c901b1e124251427b47f9fa0dd1c93c8ad53ffd0ed6e4d3d1b4ea48bc67a6615098da2f43ae43cc8e68cf26297edf27e365e0e9adb7fe16a4b2221aceba182f02399479e50231e518990e66eff5ecde1207fef2b368fcd07f443135ad04978ae44d78230521932765dae3edadc110a7df9d1664e12fa6cd899997bd33d6ffec5b58f7ced8feb7dfc47294b3b7a83cf63df5681a80687d6bd82d1e797fef6b4f46ebf3ab0869cf8e4a434784c7fc474f5ac77a0f900f75718d8efa2a55b808d5a5e1f85508f9380fcacf90db9538b7b0845c6fc6b2182fa9660c35bb2da040d283848a3b13139b3c8cd0abc84e672c72070c93ece9ccb46307c7f6971f4d1e29e5d6e4d0fb28d2cef8f057a3e16cb689817ee66ba36ed0ed0833fcf09ea71f8805a79e13af325da81df352ca56a10db0bcdd015d8fddd2c5ec3a616c8e574684514981d8106c1485ea76ae9d53a62c23e0cdca28fc0fe9104d5dac4b625cad1f25363ad0bea38b533b840e05a5cab76583e79d8841bec7715c822246090954e32f9434ca0415b85e294586f5be47102eb1208c3850acb2114654e33032813a395717f980acdf310eaafb2e6188785ef594285b94e9fb2fe00135743c13953b9f8d234e9c9192f4327aebb76ddc10bbbffd629a34944538948f85cea5f63442ae934b855b6cde583715bda0868ca6790c8ce17de9d1f8ddcfff27969d7771acbae4ad3175ce9c38fed2cb62d10927c6f377df95683b7b185a78dcdbaf8ac619d3533259ceb8b0d3afbb01b62fb30e10aadbfef3df62d755d7c6b16fbd02b8146a8bdb77b200538e3c36cefefc57e2b1effc4f3cf4cdff8e636985a89c352f06119871f86d76a08eb090dd7b76c6ea1f7f33c63ff2d998be8aa1f09cc3ba8f96c830cfef5aba5d4bc8df967fe033b1fa5b5f88377ff7c318d8b135f2b9967e869668fd0a20f91620f48ecded80d15e70fb1fa3f8ea0f922467e051d1243d8fcb6d7c9f410c334d93f6009590af9863a6cdb018909277dc9951b3e695687ee2dee8dbfa66bcf9cdcf4729e5842c20e83cbc963bbadbc63e88700ed308d8f9e8eddcdfc218818151883415a130fd5872ab5b76f396205c8ef5ed4459c59ecaba61afc05c198249df4d0d64b092fc94103e8763ab40b9942b6c1770969c02291bc1b66ff38821d6d839e68e2170b849012167f6d95746e7c6d728e0cb68c05c108e0db2db48d7dae7606c4c22b2a03d66887c8b4e00777f700dba6862dcf6f83d3cff2be90466fb1b16fb203b65b8f199dc333b67ab512e43276b78cdfc4d26b7826f1e5ded00146b41bcd6c75a08730b25a4264f01330ac3627f891060417802c54bf3e9f15c6e6e6771551044c5c903c593d12d7a6b2b8528633f489d204a5240f3308e558c77d288981f29c79a41e7e6395acea1ff847b586c3edc8ef51a71373e0a8a0906a5fea4f6951b2eba15060dff9366516c25b11b1f65a7b5455740a5e1a1bdf444b4bdfa5264bdfe5cea9c2ca9630f1920d23c9265c7510dd05f62c5799c38b58aa6baa3aebe26b6cd98126b09e7d63d727f2c39ebfc38f6d22ba289b9de67bcfbda987fec096914f02dfff5c538f2bc8b62e97917b0ad6011e14a2b885c69d433faa975c76636c4fa66ec46998f7edf4798c70fb44d189783c5aa86e479dae7ff2b9ef8fe37e321fa80a61c755cf26e03b035cae7cc8f251c6fdbebafd1da7d57acf9f1b722f713301596638db5563c20b9722eb300cd1855fc59a083391ff94c3cfb3fff0e73e2e168623fdcbc622675d296d174dad90918594f28d64a53e0a1476e07959c1d59675c90f6e9a1aa9129cafa6005682c9c27af645e96112c8b9ace82d36839b3a2f6e277450fb59a9e7dbba30b067a21afb99199d344f31174374c563d5dd31ea0e6038fdf15d32eba2ad5553c07917fa664408867539e6ddb652d7b50203678e3b5814a8c49d34266676030097b55943104b017b4a453463b826727abd41c69370e5fd1939410d6963aca8b630caa5486cd3316443d75c403f7dd98f1020a2bcadb7cdb2fa3847d87c7616518728da5d9e5d2c170c5789ead8fdf17d36196b7f64080c580bbb140993033114837cab39fbcdbd670b7689142e4b90512dc81cf42bd6d365e95e1642eb99239bbf9d8a86454ce2931daf30d4967d3e338f44494164fee5697291c4d48de4407ac8a4332e434a84c2d35b35973a1e4d589baa080c3604a53dcf92fb33181fbce16f1fc4b359a75b47367398298f8d443a76dd06d2d30de648147404c0a86984be760475a2a989ec50d530daf9cc2fea32816c5b8b1e9cbc974f7452fc85c0b496633897109b175e54ca834f3964636b417e3cf59b3a6034d37015d2f89fa058bf11cdf88e7fefceb58fff0fdb1ea8aab6215b59afa790be2ac4f7e2e15689d60ba75f52b31f538aae65075ba0fb54435b49dc9285e2b1cbccd903bbbd9c1e268047d06f5a5b4172ddf8d4d4d71c1a7bf108ffdf05bb1938d879b16af8c8aa6c9b10acf57cf449fa5b4453c515591a689aef9c5f7a2f4535f804e485b339ec9fa92947d9dbd9bae394b7ace9147c7c07b3f1c2ffef4dbccfade160df397c4b4134f8d69002526a50574fdbef8ed2fa50ed10377fc2172a7cc8eec390bd2a6d3e6a95ad7d47c6888c5bf69deb8008721018265e133d198f0046530341acf7d7becfcd30ff9959a09b0784d03f42188c4452062c5cc113f78f79fd2ce87e2801dcf3e10a5941c1a59b761b88a86455880281c6002148343863bdad3e4d06114688c8db27208734b6dbbe6993bfda6cd109c8f0838149a64f3d561895f5493d7acb1c953b0383eee007fe442e2b0d7adbc0c003c1410650cb6372768388b3c6218eea6139972d80338854c72d912ef31c3f8e8810dbefe890763fa05d4ccbad9d904a5dc8d6731127087932a5a2acc5935e4ce62680358b2d94fc512ed2b94c9eddf39ee28f9e130cfc8a2b51e54a5c94131343449d9642e50832b90786ab8665dc90e5809a91a24d549abc9b32a96292352a74138ac3836bd2643a839c9dc4bc528c7b3506bbd4933234bc2d9418d5b5f8b8e0adac441a446aaead2582c4b2c16a846d9e6328f590dc3b45d67cac6d422a282789cf4192bdf7990f60aac572e0fbb9af06e9c9b1a56a936bf117bd9fa328f7ca29c86bd4204a4b7142b575bc140495a2bb8c0ba19b3f130cc98c6423cf59b9fd2057b772c7ed7fba3e68453a3ecb40b63e9aca5b1f9c65fc5ee5fff04059815157c4f3af7a2c801726e38eee4243c52761effd2bfc6a928ceb2638f454a71f71caf89eed8b77ceef371f7f7be1dbb0129aa50ae1a76a4cbc2b22b1ca7e1194d5857df72633cfdc36fc7319ffc7cd4c166207e49794ceab912f5116943a0975e7029f9d5de580755a700206601b31544c124d156c1505f7cf507e2d51f7c357aa1111dfcdb2fa38a7ca99f699a5a471f84dec8654f79935d9e58406c295634a3545a3f93e32c2282c613ce20547c9ebd729fa2a5a29531176531e9987745f98225914de7f108e159df3d37a6bc74888db13a9fb893cd0f1a008978668ceb1d69dd0fc840a980fc6aac612e3527788394150a00266c54ebd3abe081c6095f0b512a8541051ce62245d94a79363e6af3cfbe89f1c936d4e5517f32a4b248ad00e6d3965e07289273fcb971f0aedf2b91296330679215524c4492cdfdb98672f05255692271df0d13a672d529148f31e228e6e190cdbe9f6e4024375cf61c2a6e3e5ed3c1a07a5dbd919dd1699889f0bb7b3c214f52c1520dcf39123c7fd1bac4fa4621ec3c70e2aab3ec3c6a9e281d1ec7ee04216eed9acd87ee742e0a995ac9b52842dc0ea214c2d710883e260587e9c3ecbb113da5c6d0e79a732f7d39089756b1c41d0798a53066bf083522248bc18f55b833ea097d84142e300fa1858d960fed3fc45e46c4eee408e641436ed54218e145e69284bb376c158d5d7d3b36264f55923505d4ece1d878ff9d514112ddd7d9490da63e665f794d8c50986cdef0466c61f2e8a3fff5d9683af18c98f2ee0f4539f9cde28f7e2ef63c7a5f1cbce32f694ef37416ba897907fd247af5679dc738be8678e647df8ac7bff6c5c8fbf8a7e3685ad1ed82744251250278c9273f13f7fce03bb19e9d20662c5d1a0b4fa2b62507106f7bea35efa537a835363f7c4fbcf69b1fb37bf767a1bb604553adca702be1248945e07f8bdfc6849d5d204fb453ef86fd300303e1d0fc6114aa0484ade694570873f09228413105c8fcf3af4a96584beb8c072d6c6a0c4c2000c7b7aee1df856dad45781e215eacea1448a29d9bd733328c1d1480bde5e00d3333c1f0a58e91586dabd99717b85ab9ed78e385a8600df3a8c3f5892c9562109ac87d788ef984a1598486ce53ef48c797e4999f9a14ed3bb210ea41342ef627a9288657d6c51ce8e2e66b36d275b9ed28d72d14ee0c05b38441d6c99d2d72569d198578a501dac613fbdbfbb5e6071a5c0aabc5beb60ee44025cd34e21162c21f3cf8c26331fbc2ab635f6b4766d793e4be015ff03895e5b6dbd85f462ec4793a014b7494f222cdc54ab886741132b42d87e02d85d013028780e71261a51d507849544d3042302d31183256921d286cfb702fd9c4344e5db07a30c11f0d5ba20ff13eb77019017d14e94c0824c7b4765402ff2e156365b6ecbd06d40eed1c777771e2cb021e5a00eb6653d5ce25b6cedf8d062e46fb845871ab230edb9022518396d321366603150a8607665f1a0ab229169e20a6123e54b2435f1903cc6b1a1ba28efc67eb86f5ecc87057643122b976fe52f6a801d665de432e7591655ffcdf68619ef44e7a70d67de96378a71b620e39d4b44b99f2c9ae79ab0903d7a03495effb50d4cd999d0aa7d3563057e10bff1df77dfd3fe381ef7c950d9fbbe2c44b2f658dddd59a196928c6053014eefade77e2fe1ffd6f7a10738e3f2143afc7621ec326c59db0ac0f3ef348bccaa0cc45effd509ac6c3e4dd244c8910cccfb65b8f318c70ee7b3e129d8015eb68a7cea771ad90b9d7820d838235175d13c55b311ccca66879e06f3169cadcc887d02999d644d5e3d83ce7b633227bb9bc60ec9eda9e6597e8118cef118c425aef9b4ebd2076ddf5a7e86728c89e076f8b596fbf218561a3844cf5c79c1e7d77ee4e3be939ce6bdf2b4f46d6bbfe95218d8c6106d6725c551f214e3f310e8e27a158b2f147e0df89de19a8588f113dd41326c0c6396eb20312274d022ed187054a74c3766e4321c76775d2ef25adc766c212de9f67ffda31e7d0b3f4eb141a26eb235c4c745270ec79788c9268ffe337d26454152d9565785bf3b30f46c591ece0c1142aa7fc5820cee61af43add8c1710f0b0a7cbb4a2887c2eedada5eea014c3945b1c6b90c233e42f8b92cd889b078814eb4ca404f1fc0b26c669394ece9c4aa8defaa186d2da9253830af94e0d9852ba44e950986176f54b868f6f5142fb98722956db119b76a54081c0f6520da99fad6272fb09e53aec106c9084e8e010bb2033a853095234bd7b5d0cadbd994577f1338cef5dcf3c8947b93fc5b379c4dc85f0e9cab8d9ccbc0492698a5d76b73a2ddb0945bddce8963ffc240a6efd734cbbe41d310fc267fbb675d171efadd1fbe36fc4bc2bde1915000105a086f3a1e12c5ab62c1efcd2a7e315f20e85f2d86b3f18b350989ac953e3f9dffe0ca5f9729c42d1741edc3bad673985c979e75c1caffceea7f128b3167a79d027bdfd6dc4fc16eb80f40129cefbf8bfc6ed5fff4a3cf003b628c1e2d5b13f501f8a58525b172b2ebf2a9e6492ecfe07fe4ed2d814332f797b9ab720db37b3643214b82fdb4328304f7defc763f3373f1beb7ef3bd68ac65cc172d10c31cab953c24fffc77451e0d7903c0cbedf7fc31ea989d3e02ba679fbfdf05ac91ec87d456617ec203caccd236fe73747286d10e8f222a6154b7415aedc29ab7d338d7f60ae829f9596cdd4e24d00e2a46888dd1533806f15c03077646c9bc25106481b491823cb96a20475ebf40833076be2125e8979dc442c98a7411025c849114b5b4b8698827c7ac8c70ce4ff7f23e954a6f2a245d2cdb98ebed4df3e2a8d988709e707e94ac7e943c112f99c238a9576c3549ee34f9d82b91a11363dfd3f7a2e0d28a3c2acf86fa95f079e33957c59e964e52065904e6e87c13ce150b26184e79adee2a6e711579324c345f2a60af2a853da5740a3aad18c2dcbe96903deb4b44597a9c4cff906d14209f7c40085b785fba8f7bc28e633ce431a489593eabe4951c499c61f3a4d672ceedee7d1258fd9cc7f4647e2a772a43f8d240747725d75ac8c615681087a74037da4eb20ab65f514f44cf8db4e73444fef5374416c5c321d0973e16a36beb1be9e6ca80974b80c3f3d8163175a480f68d33a935ef5836f83d1ab6c2fffe47acfbce7f806ccd89a557bf2f967ce64bd0491e8dadbffb31431b57c632e0f022e6aa6553af6a04d6dd47acbc861ca679d38638f9639f8949cb56c6491ffa64bcfaf7bfc5c33fff41a2ea4c3fe5cc186597ee81e68351c31ea8addb37c7b33ffb4e4ad44fb9ea5dd473684546d94ac8572efc97cfc52d5ffd129eebeb71d267bf1c15cc6093133e24939a493e2d0009fb6efb2dd3652745f5f1a71122cacbb3b12c0363276512525dc6fc874bae8ece3fff3872a1f4645ff76f69ca6a1eb585dc0570038f3c3506c95bba36bd16f94fde1b858cfb3516b73ddc31cc291fb1b6627c2e81371ddd5a9bcaebd636ba431e3a65853a9ae6fa890cf43a079eba9bed4a501ca613654f5d188d18c01db47c8f12c79b17b63fff60e42e01a5040eb7a0e88376df227b72dc0c4c2a962c817ece518299d5cbf89af946af7d38c840b1b52a3d14d7d08e1132bc2dc610e642d7b0d8dbed763ebcee8a14633c4bc89364d40f1603872f3f35b2e9ad32e7c8c03550835e7a24ba161f13c52b4f8dfcd79f4df328248a4ad1d1c81e7aeee12875a36e50c402f2b7041288406254fafafa13a54af6b673181c642318947accac6fc1c83114351b52b104b4b2dc7293eb719b163d87db62e6e09d32bb9fa0349251d3962ea28c1a306a7e4e1492c54f2dd516f474f97c1965d86bd4cfb3d5343894f3f06e14a91f492023d5c708178bb7bf193556b629c6f51267cb64909e6127639eb902a1d8da977745fd34049c03b54108ed5b22fcdbc4e29c065a8128521d1fa443b287025c3bc321f3cad646990550142b87b8dd59d4c5d565b169ea4c5abad9e4967e9f0de443fb1fba3b8e7eef07a3e188a318d97b633cf48dafc45466bdf551a791ae732483dd8779b8af31cef7be7fff441c4bbe34e7f4b3e3083c58119cc0a77ff78bd8fae2f3b459d450186d41d156c49cb3cf8bed4f3e18ab7ff7131e7e6e9c78c59569e7357b6e0a38f7291ffdd7b8973ad4f3dfff7accbbfc5d09e5697991ba075ea3829ca2bd794f1cb80966773d3b1b400e758133885bc6cd9bcfd872947fc6db237be39bd14ed25c47af4ece1997a72457083d6fdafc841cd904d7f1f49d3189622be384f006e408238442c2c0c48dd6313273fa3379928d6522417217dd397d14d0261fe64411d76528e3b62ae62a4decf16a69610ca8bd8cba4c073d5d4c1f8941847864fdcb9175ec394920ad7559d577a0a5d42d49c9ce823356107048e0476225b0591cef97bd603bba9657e12d4dfc33940c436449c063c9c63697b2f6d22d73dbd897f3987715d2923efccaa3d1bf7f47a6270905ee63767c27752577b32827cc6fb180fb0faf8462d33cdab3966778d245b1f7109b384cd4722c00e790df955bcc57b958138bca29c4d61170cd3976b3822a1b7958df743d456db39de46b34215b21b54f581762f772fdafb990141f01092382090533f210091c81b52062a772a411921ca794e7a802a7cf25ee60c61bb939b321a3efcbed6630df80dba81fdccac0fccda9b0e5c25ab81a83a336b87b5d1cdc79305a9a7b98a95011f98beb229be12659bbd911c061f45086f22beac883aaa20204c7ceda9e1deba29502650b96a79c9c61989efe411265fbe74ffcf867227fc61c48b0bbe2a5bffc2eee66f7ec85a79f1babaeb901cad02bcc2cf8751aff3afbf47362cea5082b8ad4b4ead8788abad1a35ffbf7e8661aeae2b75e85429d0739b63c5efef9f7d822a5251a692d587cd915145d1b62c6f127c6c3dffe2a1daddf4bdba62ca376644da897fac440fdb458c88cead7befae9588fb25501188cb14005f44fd1a7c1c41c040192edd88d3f8db1f77d91b1b8840f12617950863e52ecb56e597918934bae8b7ebc710f885545e38cc89ac15077ee338bfa8ed67d94c13003ee7ef1e41d5171d1b5d11a25cc96736a91da634c226a24b0e11c6bf314627f90c44198d5836cfde91631a3959340b718d6f8c4df81b7bba373c3eaa83fea94c842f17159d108a9b597b685e13ef6dce51edb9fb9279a1897356c31341151955b5138f21b590cf2cd4c6152a26d7f9610b26d2a4ea6c2f21a762536034c01ae5165743eb73e738050addf1972fc665b4311258e44eae4983dd477a075443eb9d2e05dbf4ab077f24b285ff7cb8f45095ebce2d873a30b45978160735f22bf20862d4fdc15c5cb4e608a127b1573adfa3baf618010ddb608b7014dbb43f2b77c0cbc2199e1568e8563fbcc2ca67a1d46541652533b7bc633197d09d4e4395d955f52d8c6595580a404a9f89a21abaaa136e915a5560a3b6c555a6b7678328e376a19c1a959023abc5f1043a3286c9ebbefe2eb93569ab889301583bcc99bcba127bfa6171afd9ed529014dd0a20ce8f5af50f8eccc706a80548b59d85c42b8b48f88e10fc96e39a151395382f63fff3082cf4ee56abf6e910b6d6b3ec4ee0cb368ab981a277ce2f328cc79f1f22f7f18bbfee58638fa868fc7a95ffe56bc0ebf6d3f8d6cd3185f5b42fda798f0f0a4cf7d855d1b7e89a7f9312d07adb1e4eaf7c7b4a38f4fc4d89768b4ebc28bb9511409520c1797c7ca0ffd2bed1c5f89e77ff4cde8ce6322cdf10c2de461f7c9ec45e0ab687f3ef4b3ff8e42e850456ce1d87ace3ba20f667af611a7b0f9ec176298875f0c58d047cee3962fc6ea0a9e2398526d02cb97df00abe39c7746f7df7e14e3bffd9f28c5e28e00578fb229576e2262924320c8edac59057f6b64c0c9a0db7b0ae9128a0ca40186898842bde7500c30ef7a004574b0470e1347cb972d82393213efc3885eb6726ca66664cbc27e728d86b77e30296301d75889e2b4bcf05066a6005399da5f259762c7f811dc9d8d7fa9ed1ae1b3356284eb19f21ef47e8477f61be904ac6d2536037ed74d0c72d314556172bec9fffc2ab2b58239787aa161d6c0560fc5c009b415845d0925033ce87fe6ae443f4af33d3896b95bff9aa7a2ee0c0cdddc15e47d4fa686be8c00233378a53ec67a1561305a4825fa11700d51aa1901d927c0d9b1012a174a681e94d820a28c72e830e6d672f492691b16271a590f32a75529653428c3166e450e1342671ec47b602c1426b2b5ca2860ee086307ecc3e8c8c2ebbbc8c86efe8427d32b15c84231249cf0660902af25cfc8763a9054070bb108e318acdb61da9e87996557baf529a83a14044d5265694f591443cc271be2816973b44ac534e0155183ca66b88517ea0e17938e3826e65c78317597df40c2bc232a27d1460d17eea55bfe1cb3d883a7e994b3a298cd8a27a30c16429ffacae7e2fecf7c2896bce3da5871fdc762cbfd7f8f177ef29d58f48ef7460909f63848d5f2f77d1c8bdd176bfff21b98cb9db1ec867f418856a134d0787ef4f5d8c0b1a7bc8d360717b9b221e67ce873f1ead73e13ebd803b509c1ec6064b163a37a0c13569c16e3e7b0e1d81dbf216c9d13878a2ae118764629b3c8f32e7e6f0cfd843ad08337451921d9d0a263b846f210eed7054cccdf09383bffc833230f1674f76b4f45366dfb793c54e15d43c63c50be11061c8e80567543061e870e35c630198d8a4087ed0be30c541c079868a3e03c928f6162dfd60a6a54f96c536fc1d1716689b274ec59d1c5bc383d5c27004c056174e1bce55c096dd7ab4ec5d2bf422edb9610ad01aea57fc58999fa11429ed9db09ca8d6c016b7e86664e294551c601164664aa6bed15d9945719ac6446335b9c4fe088a0034a3fe6785fd6c149bcce594fc0814c73942a910058bfca63ce8a967b7e9fae2d7d21981dc0e3f9cb4f8e32f2c74e4251ef2d33a1d5f1d374c7bef8784c5d751a3932b28491494681486080a8c7d698045fc8eae66fb667f8d9341fc95c5056beed3ec2fb52d2ccef551a88ae6278327aac65f91e21f0ccc8b0c3034fd8270a267ada3729e34393f268308bf0f076bf9a07a55d2af47ac93bc104414f7ae06326385c45aa220ca964d7b33c428a3e7a4e7ab080c3c095860da5392017f0c1ea16d64765253d2765d3e9e23c9e9d26164539fd2a63e0e8ddd075066927e8d8f33c7c3b7a8d66e1f208f34a6b6b1255680e35a14ed809691700847f84187f3d2cecfd1bd6c5f4134f676edb4c8a8fafc23e58c12cbdead8f6f4a3d1c214d6559ffa1210f08c78e5b73f8d79175cc6fcb433d30c825ac08c4e66886f87fd3c84e59e7bc3671875bb22265dffa9d8fcd36fa476e0d18bde95368f1eae991a25eff860747cf7df62cfcfbe1e591ff95af4c007ec65e17399665478eae531864076bcf458d42d3d2e3ae61fcd4c3e1801331647d6995744dfed3f8fdcfbff14c5e4834370d212dd9e05168048ad0116f778683558dacebdec9e40abbd4340f2cc1f4fb934e5315d4fdd119d08f621fb71d86ba8f19853a307687794a229d6204649d2fd2e58727c5491f7b95bbc8c01d13cc3c96421c94b0470aa579d12fb1eba1986093cbbe71ea08d825012852b84289b0f823508e526c5ee84d6a558f8bce398956031548193ab46b1d0d6fc5e90d73cb8797a053d9508a5759f3e49c5489335258952092d4b5b916636adf6f584c821517acd413766d623592e60fe452ab95a9fa1ae944d7f92395e22b40a60c1c818dbf26a54ac3c258a0185a43765011ba7ba0fdffd30c9bb1ce9356b4574339074dc4e5d3e979736fb36ab733e21abe1363f30bb133aace81be6a1346e102e149d88d29a789f958464d90fac41e230a89c2863da7cccd6878950cfcdc61cc22940a3f7139d34274c980f9f51699c072ebd59b6b75b5f52998b86ac56a6c776324c062a54e7302d146ed3e1f50c5224e566738c3bb1fcd928d1781e6e8c2d11648f748f15c11cee67a771ea4cd2348ae859a20e34be70554293b4ac7deb5e61ccd4ced87fef5f63f24a662a40eb99066237eb9def4e02b4e7d17b630b0c8643c4fb4e1db5806b016ee6c59747158c861e50c4d7a1ed3cf1e91b50a62fc73c5a1e36fdf2fb58b1b508745d74beb186e12147539f5911fb9fb83fcd622bbde1f3d1376f650cbfeb63b1f537dfa6ff86fd6bcfbc3c9a11989c7cb6eb0491ebdab6368a6efa5e54bcfd530c138482a23289f49c7f0d39ddc6c8bdf5e751750d4a565a93ac51c99167c4d87a86356ea2c3f7b1db22ebecab930776173fad65669498739f099b08af8a8f3e375aeffb23dcc2fca85af696c8993a37850ef3ce796b6c627fd3563a7f77b2e39d9f315f81fe1e8533974629004811b94182543981f95711deac4f06b616d622a0882a05c1f263ce8c8eb52f462fc04e07b9461970f3f0e479e46077c51808571ef725aa687ed343a857b7ec383c60656a5190812d274d76c2e16b1f61ed6c24b113d51d08d3563b5c831b6d2b4cc2e2a54e501500e16fbd367a1aa223bc25d284b8341134f9776e8e6cb1558b9edfc4c66ad099daeef943c62325f184d94d2e94bde0e8283dfe42f2baf519af941277f33476a778eaae684296c6e973334f4a790be15c22ccca1d94e9adc7d12339160c05b4189a7424cd9c230f9a402bed49f26a0cfd527d4c2537dc4be19cf41eb8821668bdba04aa20f21a6194458f936070eba57824d97595d19994a622bb37cad9d2a614e529cc82804063a48c8edc5dc75dc8d68cf0ca48240b6050e750989566d1c185e40c1d88ac97fe9edc3ae21efdc4afecd24b8e7230e54dd6678a4156c6c9538650a85cdaa48b28ac56f5b4c6de87ee24d7f965142330734e399b8522ff22949b41935ccdaae3e28ddfff34ba99f3904f48984788d3cb08e1624c403668d98a4fff676cfae3cfe2a56ffe7bccbbee93319501895ba83715bff23cfd4cb4b25ffaee1863bb8f3c9a105b7ff79d342e69f89d9f8c81b947455ccc168eb7fd2c8ac9952a6828cc7ff589048d0e1382f63f773ff91bfb259d7645e2bd69f5734990f32e7e5f74fdf1eb51f5e09f23f7c2f767d01aea60a5a75e4608bb3d7a8070abe61d112384863edb6cb66ed1a517986b00ada68a3fe15501e8d4109e3a48fc1d6b568607a8a5ebb37bdee2e8d8bd9dc6bc56e0f98d31fbe2f744f1a42969eeb4434514607b6a0a105a0b96e602a9cc64ebff84281a36e59a7f729efe037f64ac02fcb45b2087ca40f1f3848099063a474991efc079ec67c7fadc234f4f026f839aa15df25012910595dcc75714d2e9b4dc8fca6c576911e3752c145bb7c9361c34a4957767215966422ae05288377d5071f454099a76600af9b61422e6d9e53d7b5fe2dda5613736d31dda1d63f42815cf5e4687015e1e03934db2ef710c9b8760bc8f1321e4553551f42584c42bb9a58cd1513e2db0a9f89ac003ee9173a8107a1c2940b2d6d3ac44bc9c86308595090697d590616e6ba4541c6776a7fd6339b7d76611574762b770c5584f54451724b86ee6e3f5f00c7b61e5f4515fc5a1f0dcd37882c4ce48312bffa6c58cdc9574ace6e3020b44e088df3beba6b03b44458c53682d66e0a36e2f174b37caf7f0b2f3a0cb70116c159f053d6500967297cd6150714aa6300f81879abdea8498b5eaac980e72f6fc673e98bcd31bf7de1c07818a17bdfb86283df2b8a858bc2ce65d7265bc0462d701f9b20c86c0d6c7ee4fa15a0dd373faa99fd4bcf753a982fefab7bf10d3def7d92885bb76e8e75f6303deb6e8ca2da3f24d0074ec8540ef5dd1f3d71f50cf60c0fa45b4892f3c2e7a8fdd1dd914436be0f7e99efbe6ac8cac55e730f4f2aee87ae84694694ae42c3a3a41ecd2e70b50c8c1131872f8c8dfd876667e8cfeffaa7a0f285bcbeb4cf33bb9ea54bc75f3bd64b88040846b4020040821218132b20d8ab6d5d3ad712f8f3dee5e1e7b6675af99d5c1a3d5613c2d8765b7ed465956460921242482c819441039dc9c2b9f7cce3ccffefe923d572edfa26e9df4ffdf4eef7ef7bb2f7c675cfc84d1d5a04cb55e7d36b5eefc769afecddf4760104522ec28283d1a92b592cc71fa205397bd2f1dfe16b25d507666590c3007be354f2d3924071f27dd5b39b43be4886b34b72b6ee90eeb50a3da510b8ea191474a3effae3159cb04f6cb1f8b7ee9fbeb2ebc222d0021b728d0731f8a0367d75ea44944ce944418978c621527e28a1d750a74268e56f81c5d0b6b5340d6a6082c8cb9d4cc28293195421ad98730e831750979468b73fb721e4cf65f87be45ac4c89b36ac3562e5adec32a5d6c4ca55a9c6a3af7d2347fc7776276c4df15a438f6e06de9b8f32f4feb184bdf7ff38d61fc5197189550273a4ccabaeec37f4033382b38a9ad2ed3410761b4f48fa9a0b0fd0010466020e21defa3caefa95b67d4893a55a3098081b282b111cb0b9fa24e94719a7bebe818b35c4bf9cb28c3dfe335e68ca0a055e4cc654650bc9e96137c90a00965b4311ab201a11391fa901c1d146b115a87c7f08e875fe70340991739e91d4b87f62c4051a1f155194fab27d3c4c36a2b78fa1279ae5cbb3ea4c9b6702da94b77f5c954671752e5651a738c966fa6a97adebffcdf1048596538ee4be99e7fff47e9f8cbd9e876d16569e999c7d3c957bd37554e3f231d78f02ed2ab97589f790be8db9e54be1631420897ae0f69725376fdd5bf4bd337fc5e2adff087e9e057ff3c4d7ff3bfa7a9777c24909be1855743d2dc9f967fc6f6061ed37ccbfb53ffe2772214b22f95408a9a675d94562ffb104008436bd06e3a9ffb0fa9f5239482a8395ce06bdd53a13e1c7fd3b56999455a4b3ff9071659c12f142d7be151261f519fa515b0f4c21369fcb13bd2d89bde153734a65fedcdf0bd894059e6f6a96f4cddd3ce6132f4b1d47ae8b674ecac0bd368c389a42b17a6894d9bd2e30ceb0908bcf6c09de9b4134ec7f8b2e0612f264ff19e9136e5b1f0f0727a3eeea140413628cc04839c43b167df776ecca455225f43b17e400ac7fa7b0fa21cbbffd588302d66859ae8748f232d6ce332bca83d129901a66e7a62bc7ba748c962db1d742d376e84a00df55114de1c56a3a57158de9cd0b48a3d91fef86fd6333c2e063b2dca89568b5c8f1af7a6f6e89dc0f68bb996c100dbbb5f4478ff21240d18470110ea59269886598f70f8979fb8274d23a0c2563a400f6a37f5dfa50e39ddeac5b106d2b9cb6090e2237950ed0d232ab0f46a8cb0671d09e16b1139864f3094a3a464d433441b53b3896a8b7a507904948382b5c31d15fcd048fc8cf14d6687c70ffd4ba389fba00165bd8f3563aaeea2280e2abf1d5ffeb14ee7593eb0835683276f4bee4fda4d7f630aa6f6f853f7a79ed2c67cf029109b2a141585ef87db2ecd63dbbca92e87f1f1bfffb354025438e9cd6f4b13679e9b26d801b49e59fddda47bcf7cf62fd2ae3b6fa589f986b4f5537f947a3bdf04e1f31da9f3f5bf4f2bf7fe24b5188f9860ddcb3808df105dba710a79258517beff8534c1605fed9adf4a4bdffccb34d5f95c1abcf5fa904daa9273f79fba2fadfcf0b350f0a1e3d093289196ad1cdcc558f69e80297b206a558ca374359bc5bff117a9fed3afa5fafbfe451c9418eca2f730fe4e66813efbef52f99b7f91c6117cef03399740dcccb6db1cd885077e9c3693ded5d6336c2785c88295ebd4e841fa5d41fc05f2efe8646a160ae7834f3f9a8e832b378b408bc8521a7b4b5acfdcd601a2d55152ae95ddaf066b5caa4e4ca4da51b716914f26933988b2020166124553d2748cff8d9d83da2c3cb5d503af71d85bc89d9d9826aff9089c376a3558217bbf8488a5b51259c62a40478de858164de408c8ab0bb14c6b62217161680e70f498e4a015359006a24ebbe9ab23112d678a3c43f66704018c703a6a0ca60724bda694a45aea4846b610ff2967a53abadfdd476fc77845f838985ccf85877e92b67cf2dfa659180f877efebd781d07e922a2c1f15c42de6be65ae4d1707075ce9adbea5ddd6354f280bbedd1c8e0609dceb604ebc2050ad3d432cd11fa22a3a5b46e341f5186dc05f22d630f804b55a28c5849ec3ff2bd149137beb7b717d692696e61581a4b0ebb91d28721654b2bbecf92dbfeacba098d8049f2d80679bdcb6e9711f2189ab78324cdb1246afd0ebc06ece611f3374b675f91124dd3c4e2b023af90cb128a5d9255053eae90d66dbafcaa340dcda74cfefafa1db7a26ffd505afa37bf9f4efcf5dfa286b834cd82a66d475278d7376e4cfba0cff4bff3250c96da85c850bfeae3dc50467a7ff68d9468f0f6615b4c50970caef80d8a3d3c2111659546df94902c06b0f4edbf246a7e3795ede2937b37b9e06e6b5bbce573698a835e0600285ffb3b69f94b9f4e33f77d3f8d40e81c59a89e7f65aac1e6587ef8b6b401a3289d7b391e0d27c06177cab779e97bd22a4656337fe6aad7e8878d110516499356e8d8af3ef4e3b41e238df921a49eea0b189b125fa4c26d760a6da629ad66c5f3b77c0b3db7fbd2cc491f8b494f76caa46d57bc2b2da0aaa47ec421d8db4d34ea2cf46597fb7ad61e4603a5a18471bd91de548e6e08707880ad26ea2ec8de79399175774414f535c66177b83eb3c2e88992674b2f3e99a3d9f38fa63e7352a313ce346804cc6d72e28ea458902d12a6f736c55c4be3ac25a268776ad4a6ac8fc9f591f59411342f29b097939766bb32d5d591d295da9e17ee538b5e5a8deca0f6cb87a2092b622508d07a95953e6c726c9c7951aa3c727bc0d7d9f11b8141fda8358797bd17a3a316233b6a692c3e1751c99861af680219adadbdc36976944180d92a42a2a4668d12a919b425f96f394ee910f2e883eb0ce2a7393b0b7677ee8fe6dfcc13a8b94725c324228e54bba2b6d2b9ad19548e441a52f4b249ed5af3301094c3c213a2d7807c6584af093edc5c6d6fda7e3182f4a0382f22b6beb8ff201acc84cef3df92baa79f8fc786e3466a57813eaf7ef50ae2900da3d4b18574d17ffc9b10ec78ed075f4f8ffd15853cbcb62af0f80001f9f5d7fd2e039ff3e9d09d4c94320438f3ae8fe3c93980e800ccf3ce56b9d0436aae21cf5be3e095b69e926ae7bf95f7c1d83435ceacbd98f7fe4f69f91b7f9e265f463f41a6011e77929c7ce9c5c753eb8737a6e6f5ff0a6daae353ffed1f4ecb3ffa1c7d2c04f8cf20d5e26337afb88ea8f1545ab8e35be8e1f19e80fde3808ae4c109eb81d4693433a79f9b9a18a03d9d09a853af03621c45e06306f18f06ef211649038b779134ebe0484a184373f3749a43db612f6b5b76df731b84cdab529f9a4ce8761287539fd980fd2da7c34f3f94b61db8163932b67e00a5868c3387d9de899d1aeb236f9cc5bf7a78cec8080c44f685476ed2f8ac3d7267ea42695a64edca0402f70d8c9e85ac69e28d97a4d5579ecd59053559fb89bbd20475a89cc181074580c05e928bb44cef3810aebec9488a8d5bb77dcbe0708e2a4fa62aefeb3881c3731c85eca53d68be5f725d1db5ab5be4c4556042381ea2c8688974b743a4ec91ee7ae244fcfa38ede55ffc3c6db8fe0fd22469ef121cbc9c3a811a82bc9519fc9b47766c1d734e0e28aeefcda78965f664ad1ee5bfe7d364972f50b36936a034a7306006b1ca021e46f200363423d1c01c3dd6ea4cdf6444993012be4c99d70c267e1e0fc8695b6404f9f7c360a21e2e2297d78cc76a448507a00c0282551b59144b75cc3e07522f340ed9736ccf3cb036bb7a805e178916fd671e482dea216faaec5c35dd1a279ccc82e1b350d18495cc017c0570a0c9cd1c3cfb6c5add792528daefa6f2493bd3811bd16a3bf2bd344587bf71cd6559a186f4698182738041cc9c7f05da04c8df1215ea67fc5a6a1335e222fcf41f52edea8fa5114658a78ee973c0177ef03fd2861b106fbc0656c14d7f1dfb6b2b1cf826116cf4f40318d86752f5e737a5c6d51f0754b898e782c6f393af71c8311aa25d83e850a3e1dc7af6c1d47ee096d48437b716c6650bcf906a1ea287a4675247bbc4a4a90bc466e8611d6485e741e84f5b613cb4379d840433eba3859d717367b06f652b7a612bcd93d2e6cbaf4d2f7ff37fa49780fb4ff8d8efd12b1a4b6de4c84c15d5876b33f97a805a69bb868cff3425f2809b6e458dc281a852a477a35eca9e5381100f8a87be06ba39bbf32de9d0ad5f63f87229ad3cfaf33486728fa9eec41b2f4c0bf7fe1022ef9ef0c02d5a12b5cbde8f9cf471181369ac8c732171a1673db3754e91fbbbe749c2a886121c3201cc8884fa1a0eba02f5d995071227a74ee376a2d5792aeb167971abe1f6f919bdb431ce41eb0522649cbc9c2e2db2dda2792aa015c65c917dad81d29076a2601a473575e099b4fe096a9895233c2fc6a532953c059e769cd90f59ed15f8788e924bf50903d2667c054751b2d544cf2bcca30005f2df7cb635c3d14e0ae27044a6788b45cae647966459d8a30c971cc132c6a0a5c59e65feae4ed02ba9d2e02adb2c95b08711187e590a90862b6c99e6c2ac604483f3de080d04d6311f72481edb465d6891e9d706c89d733ae5030798c04473e0bc37a71648d19ee79f4ab507ee485598bd9342d508ecaff2a2f3d045a66ff9429abcfcfd506a2ea0e09c4b07819e0f121dd651c334c98d87a75f98aacf3d0c878df9163bd8b77e318d51bf94d631a660738f14e6c877fe3a6dfced7f9bfa57fe7a5ab9f3bb64377311bc9bb0af07f0bd96effb214c8c1d61488908b4f495ff922a3ffe5240daaadb8cf0e4256ec0fc137723037c1e6a48acada1ce93d335ce887c074fe942ad197a357a59898feb68da2ae2e8d2e471f052c18a3c8cc62e22040ce7266811e0f5a5c59cf88ef7a4fde859ec4653a1c7f3b6a636a4169e57d9dc0a8ea93f5c4d87d0b998bbe46d690eca948bcedcd2e0f3c58805efc34841db2734ba4dbd3c10c1861695e3ef316ac11a342c21e6d62f1f499d7dafa432804395d4769afbd0a6791b371de0a54f442891a2fabc0ac6441ae5c1f010c9f3e3080a2a98e689fd1981ac7fa25ee0cb1e5705af6f6a282a183354ea7dc8c4ce961ea95f8c37c04374b9b76f3884e96974978cca8c58b8afd87e96a3dddd7b6e4a1b11e13ce1928b820ae4bc5bdd495cb32323e7fc2b193ae7a9b23863e8d692da6144826a4eef92361b5d4a8aeb18f19c298a50f98f35cddae18f7435ec827be40065f13b46a6d0b233f284e115d14683d239d880f77f5e2a6f8211bcf025d92031a4c51dbf16443dad5278909c2244c2e7560ea46741b0da0835d6d1a2abad7f3e8d40da94c06a108dd6c3811b9e725a4cbaf641aa9659dc7be84b5f4d936ce1ab6da27f73f2792c60a6a1793ba28187f6e10d4f48139ffc3f21621e4e4b3ffa42ea0113cf52f897491bc651195aadafa463d4457314ea8de318983be5dc94aea1f8fff1574214c4faa806b09118b31e8700d9e2d0cc7f9726eaf5d0864801db777c334d7e80e8871398a1cee9ee7a1e38fbab68c26d4b150e567adbafa7c5afff3937f3c5e00596f9aa927ab6a971e6efbd396da7312bf7acd406382032aea7e658763481b469c37b7e1b07b301040995253eefc26d5fc52828e241cadc97334993661d46e4a09b6b28951c9b811275c25bdf959efde25fa7c370e41a447a0d408f6dc75d044ebacf1228e714ac7853b9658c2cea156e9ae75b44cf110f177f9992faa8bcded3838cb80af4a5a97391c4bafb96d0d85b79f42e284da7c5accc18f0be46d6656e690020d103711c8736d4c3e9b99825a285e503f7db866d184e6154a67452668c9c216629b4ac17c7b0d68a70a7951d0c5431c9431b037051946b60a4c88a94f033774a4dcf2233fcd62bd3e08559284013a1d63a8ee0896a44f6d13cc31a430f18dd59217758e9f17d3b8231019117199a513aa755193db30550a3bf656a67340f20200c2a63d741102e224aa46bc5c15f33ae883ea460a108ebff543b0a6bc946138615085d91fae9e0e2798ab4cf7a96dfa96e7bf4f638545e802e456b07c0c1826f8e26d4fa8d4d9011bac5a79c9a3aeb8f4b8d134167a86dd47d5e21279791602eda8641e0087a65233b419995e97d8b1106c08171a169d2b7796b1e52c409f4c09b78fada87ff281dc330f67de93f7351511265bbf9d4d997a485fb7f988ede7553a21b95ea577c3072fd1e9a716dde630364aac3e327de4473f7ca1b52edc02b69e18b7f9a56a9b366dffaa17414a4adc7e3c740f014a39c7df3bbd3417eb6fae08fd33451abbc9d294e6aa80e28963d9d399ac45586ee8e40e1912530fbd84fd32446e7c4af2297e5332f4e53dcd8a547ef480d58d8692b118b1b5aa756ab3e794f5a855f37c95e548de96cb6246f22f773745bb76856e30dde00a36382d4ae0bfa58a6a6923d9cceb880e298552da4622d44198f92266e7ff355c83faf8b8d1642dd23275c790e2942fe9dd30b0c9f836d7a2454eec1e514b24e051008926a1f22f10aac87f14baf2565a64fc6e71d0374e859b8db8fe1da7571524dae814dd9bcdb49c020a743fe71119769da50d8ddf4a8f0e04620d3bc185b9086a3597bd63837b53e482a194d1dadbc494472c67ae822f2793b9088e7b66d649323910ee7545e87915d78766c7cf420fab746d246ed3524b3fc394ec30827c811408b08233f8b8186300e8c5f47df757306918d0b3da21736c0106a000cd65f614be1270ad42da24eaee11c6c8cfe5250bc72ba1cdbe90b346e2db5531b221c860ec228b49606faa135f030220d2da78fc1b59b5d4469933f4bac3804a74624708a065e1318716f3a67e766eaa66de991d1645a41ebba0227cfd03ec98acab4991a83a279a5029d03f19465d2942637af893155a1792cd2c13ef4f5cf440ab0f983bfcbf3f21c77ff0030e3b534fee66bd2047d94c3d45c7dc548308e0660c37ab4d00ef3a68fdef51da818c0abc0a76552c13ebd06e1e906f58472c5ea70bb4a71e6ea8f522fdd98c668a24e5f05dfed7b7f97ea000ce33bce25152045c263cec3349e3cf14cc6c2df90a621981ea20827c9669bfad93810f855c87bad90f6ec7be2fe74e2b51f4ffd9377a6ae8289a43f15580f43d0c525ea8db11d5057c8f74b9bc7e280aed0582c3f767b7ae3458cbabbdb55422717d4466717a9e02150eb2493b3c75df1cef4dcd7fe3edef7f1effbcd340d65484ed701e0fd17bffb459ccc0be9084cf78d6f86ccc96757d05e3a4cdf6956c2c4920292a10928131b63921bc7cd8dd612ffdd3ce154c42fcf8c9aa37794034c8f468756268a4f030aad3076116c07e0fb16c4d63e862fdc6ed434be44df275295ac9ee46e20fb49de67a1eed833e0a9b1d9c9f56a6838b0fd6728f89b50cac63a0000805465fb907cc62eb2c37b5fdd871c1722a20bf481e6a1de7058f5057dde745ffa918613057d4e2d3dc011797c2f05e8f1abf4ac38a8821c118348fd3ce1f11e8d64a6aa181276152cf688fa5a4d51576683c94693c101234811710a70c1ffca2044369a301cc3da3f49dff2af1606a9a115696bd4aedcf96a8f31021b6555366a3b4c55ea41552115185bd90de40a9171913165f6c72a665877cd0a30668ba629972b3c4bfbe831e0cb1675c5d98c239ccd38f46d686d831c01c3ead9ca448716de7b0602659df4e9280c81a52f7c3ac4283741cd69d1ab3976eff7d37ac99ee75d9ed65ff309246cd9ba70fb37d2f8238002e4d673a46f2bf489063480d3be97539d466b9568557e034002733bc77ef6f5b4e5fa3f4c3da2da11eba097ce496d607d29406dfa47c7884adb50d999c449f44d85189118bdf870e81a8c88c07370d20eb3406bc1c94fea308117259b46bcf61846de0629ac53b38df8be7c94f100de9fd1a085918d1d7c9db18dd3991c75ab5ccedde73928ae15b1b7b2e14d6f4dbbd85ed1a3b15b43b6cbe168e1f0715e73dc5e1022207b1fbe13eee005a8b9921138062d69b418af360a79473d846430514385303fa728faf418c5c40597b3b7e889108f6c53874d5c7025cc141adadc83b16d272185fc22b71ae37ce1b154b3518d1392a01ae72d18de1aa6d5875b1af8debd516cb06f60304ab14d75309a3e5d7f8ca7d682fec4b4ae72d461041cdc2ef5a2a0489b026e8569ea25b6fed590bb3e82ee618016463ec18d883aa46d0e150641f41f0f791e111749cb91253309b24104c33c78797903a211aba46211da2046b0068e4c9903a3b7c695c357369ef8f32b63cadcc0f891c610bda4cc51cf40c25a0d64e0c9a864fee5b57e11466a0d567c9e6cb0f9bd5627dc3e01697519017d29fe40212126beb8eb60baef99e7d310ef56d9c993c2afb34fe19b32af2d494141ba769c3ed251d2871a94fd0e72c07378fd79d0bb3da05ed3a0489bafbe1e35ce4720747e0138f3dd28956e4e0b74af27e85735a9a7c60022d48c38fcb3af02b7c39322dad92768e3e1da2b886b209e31ce24ae73398768c49631d2d6e3f0e78c7c44c019008bfd4c652e81becd41f3e9bcfa743a0a376e9c01be2d577e30b5a1e51cc52bcf3d7917437c3b18c35e9f96886e870043d6bfe386985d6acc6e4b5538704ba4901370c47a3024bca9314cc66b97f8790be0a3898ae810c31f8286d9c05e397628bd76ef9de954e0dd71eea20b8183da234cec01c38ba3cf0ce3f9f2740001f93ef3461d461ffcd3d87c3cef7d2786b48783cecf691f54a6ce075aceb418530bf5bc5d236a83d39f0b3a64c6433e00a2ab42b26344e006ba19433e438be75ab547c35c95e975530494223fb8ea38cd12d7a2b485c6f49ac70d76065b31a0333547ab34321790e325d2908a57f992bc6ccd134660e4c268da5872972fbdb48c0919103d8712699c2fb142a70b77d2081242f6d61d513b1569d05abde1298c9c32279641608d2ac5536da4cc91aa48d4e2f7ac61e57886d0a4871ba3e84359eb013a48c6ad14514a432c6c299e3b1624600011058ba7ccbda3fc674dd638228e8ea4c0b5736db496021aad32649e577b9a6e460218af55adbefdbdd0ef1919a688ae40fb986257ac32455b3630237fee9674607a475a74b420a48ef0d21cf055f2f1b6da62bc8ac57895c32db7ac056f6e3fd3a0a1db4cb1eb0b1cf8c957d3260e6c95da69ef37fe323530b8ed1ffbe3d4dacbf8c2cd9fa583fd3b0ca1fd2635d4616a9acfa431febd019567fc0d6fa266fa11fd867b3828e7a70a9cb799b75e47a1ff0f699c83b044d374e20294749ebc3bd6b41ca1f6993df94c52a477a5dd78797b409b9003ebef7931adc234de4bcf651ce31ba275307959251dbd8da6eb22c2971024d346205aa2e12a0369e340e5a573ae882a2472602254e5cd8017dff91b9a877744bae88cd0385f9277f7c13bdc7e25fd20a4855d75a38776039e92b982024e566e6104e4086b21f723e3d57cd3556980c39a46a87f6ee7a5e9e0437701781c4d2bc0eab3905bd59bab73fd44ff7a7c35d592e36667b26986bec3a93af8c6e1887c9eded438e9740b435523bcfff48369e2bccb628b78cdcf4c9ad891d18f52ea002737c56acd8d5368679797705eb000aa1234153d04bd25d5ee2c32d68e42548b6de96833c65230b2b6508ab2285751aa0b135c2f2e834216b92317a2934a7075001aca109c1b109a433eabf0dc7174c380f2dc531859d1c7c9205f3eb806955cf01735a79f51f02350043f73063542ea0c4356c4b40f85a98c210946c4c689b080bcb840c3caaf970d2c6c3552b87f04317cb91c08f3ef1949e357f9efa24910915b445627e1dc9ece54fdf0201f8f9cfd608e86101063b75dea10f83ea9f4f2c3691a66c3de23cb312d0b3c87c1a1f3a2c5c2cd6bc39f0af1439eac0924be00fcdac0fb8e23bcb14861abe7987acb7bd9727138edbb8d340d78ba6aede25428b2bbf5777c2caddefded340fb8d03cef2da9420a167b69f97b06a0a04e236f343e89b1dd08947d731a83cdd040d8a38c61f578bc35c01122540d039d83e6b40017ee20c36327bfffb7d0c33e8305002f22cdcb2122c21a25f741d177cf6a8388187ad7bfb837a6365d63a3607c85faccc3d086c1503f838e3bde54864170b978ddc47bb0b9593f1e15a10f61fce84ebcc838fae1271e4e071f7f30cdbdfd03b9e742e41065533f5b6d871918c303e0ed8de75d9c0edc7f476a03a9cf5e74451031e798cc9d254a1ea1cf731816c8d64baf06dddcce3e546a1a0ece2c8857f491b8810d6769dcd22dec4bcda4ae028dff385896ff13f4e78ea01fa1331b3cfe00d7faced4403ebafeda13e9148afc990de368a6d02cdeba2ecd6d7c14a45470c1056bf9e0443cc0e006a4f62a34382dbbb4aa70bd4693d1340d468a9191c0031c808064560e452059f6a7a24827cd835fa9611895f2984291528531f992228ff9efdc23cb87368ca338ed7979763ef90aef98bb656a4fa626ac3d261b46164971c983c8a7d25a46d150c41284086a90cf96c740fc0c1a48482bf0b71bd15589f5f7e397dd5e2e335de49269d93e1cbeae925ff6bc48fbfbb0cc55ca1ac931e467d579e686b4fcc17167a411436f63abf340c42fa5179e7832ed999ea0272175c48b99b74a7815d459eb70e05584a9118dbad42e553cdf0a44d51e29ca141de92a6b2f0fdffb833425e7adf94bc6ad1f4aeb3e4124022a9ffff2ff8394144c80ab7e23adfca7df25afe740630cb5f77e3275befbb76995546ac8b05e4250a44a33547a4e651b9ada880d268608572065ce5e791db0fa9e3449041abf0af5219e63ff57fe2c1d79ecee3443bdb18ffecd313413ca675d96d20e86f8d8acb100876b62e7dbd04140c80574af432faa4a9f6808cb7b60914eb4e9bcf60c5a7ecfa5fea9e7e7b91d2f381ebf7a0e93bc1063a7cebd9889ddf3d30c8a403bdefd1b7cae27a871ee256d45096716e0859b257ae7de5d11b04091a8a7a6a963f6b368ebf0fdb723bb7c49d64e038a5e476be1288dda1651f4303b6337aa984ad0eb703256a0e2b8cbd55ad348e54a52a758ed25395f24c1c0e824337b1ca199ed975c9cca875f64d4691ac1995fb03b1766fdf50040d367534ab947d5c3e4446aeea10ce8c738a4e8418a9a44f859f558c4ed5bb0eb97c1f257884c61408e5a841c81c725236a796ca3e0654a8a2d80039fdf65056b80416c7e0828c3c3eaeb693339da68c439cbcb89d6dac4adc54e4408e1f4b528e2ef14065806a38fd796a5ed75708ad674d2095a8109a39336c1b5b30f18c2951a95753186e13db1be74819806a1a1c8d2ef3962eedf449c2edfe7139fdb0f42e33a1c99ff46b0785ba6a47c80ea0a50a55b088493abc7d8b2c01b5fa557338bc26a73761665190394ea38581e397b9f225343ea533cd7192d6f409da9ba1f9619fd0170ee0c1dfd2e2293363b9b57df90162050d649b9267fffd3a9c55233b5d8d227ff2475ffee3fa4c6937732f97932349bd954421f3c31a22c0976e5cfff3855319e327a67357eb6023830cfacd018056c1384aa72f219a9c3a0de14e9db08ddb489c3bb48d110fb6013a0b5cfc677fd0e2452147c4871ea020440cbb5cb59e6f5f93f4dbd171e4f257ec64ecd585dbf8ad2acda7c651807362a3b44bbfe33f7a7d2691832974f63883bf96b507d1efe592a818ccde0c91b1ce4d953cf4cebf83af222622fcf3f939a0860aa6510836f3c50a33223b617344e6d34054278f4170fb17cf9d934cd7f2f93924e9db5334ddebd15fa15dae6f4e254a7ed00d0b8c14e74ce05ca793c1c459e70fe7d2632053356d378199a0c29d90ca9196b0652eda370f7caa731e21e269621ecc899f2c66e1b8a39e9cf797f60df450d130c6ad134f2383d791c6b7f8ff3a011694ca1b5adb6b807a948afac27040a02892b10b758f1a25e059f4f7ea0a2253e9f404036aafc36b2556643f63b1f2fdf6f8ddba651d904f6774ca98d1ef9d13c0fbf5bb5716b3fcb88c3bdabd39faa9a4e72fd14a55400b447e6d20685eeb0aad2518ad8bc470c8f7566a28901e7e706b33f8f522e1c4b6e34c75a581da2a9a4ee20e68f64bb9bf2e90c329a58dd0f5b7b2307bdcaa8b2da0232bbbb222beeb5217c8d240aea3d73078a70472f03fabf9b06fc7945d6b07a03f49734acee4bcfa432cc803edca8fe2df731a3830227877df8ece3a9fc817f060feecb6982146f0538d602bbfa2fff34f51929ef7ceed36982d44cad81018dda65eaa74910a62abd0f85443a44bf31fa3cb31ffa5484e18337fedfd47547827fb708cb6208e830ba96c6293fefbefa541a61385dfa436590aac1056f0fc5a3b8584fdd13c36e3df87303546d12e44e956906d471a3b92dcc317d1e160069ea31a0e42d2716878e9450bd3e10bf451aa835d2d53e208b335b9b2e7c4b3a087cbd047cbe0a93bdc1cd759b87b0b1876d8542d8225836fb7a648d3596c34fb0bd83e1b66964a9860c365650fc19b27ef4c80b4fa70de88b4fb2786099832da76d6b83063840408301b3c9710ca74caa8dd1542167c2f1e035b20eb787376eaac5b8da7871d00b2f1f47afb0a15c3d179eb6f8611899f54aa1712db935b2a7fc337520fac120c8354dd6efcebda6981236dd138870a5a4874a0ea2fd38ce51a78de290ca3ffc3ccbe314a95d1cdffcbe1d278f749546ff287623517328fee861e533459de5df34736b6a59a8294e339dae2e392f83a5188db3490b4c462b803354218878add6606cfd58f3199ee1b514929f650aab9cbc3cb66e6489f8c35f9a87461b919be710cd0cc2acb2c68a45f2f79aa65d88a97481ba9d03f18d0634c9059d9e6ea63996fd1e5de4a578260543fcc0d244160f1f6439efc134c6a1abd1bdefe0493b74d5eba070f5994d14b878520eb03966853ecac011689aab9d5bbe1c689cde6df15b7f9bc67ffb4f1015e48230c63dfbd17f9d56611ef46ffd0a0c5ee0760c68819526431eb38eb521b3d77c982d0f37a616a95c9568d184fc39bdf38a74e0f6efc220fe351aaa20510ce3954f06f1a371bb74f7cd29d90cbe84e6ed4dff3dd5400907d4502e05e8bdf4642a513f8da0128d680e0fb6b385821bd2951dce0d118decd3286e10b9d4a2d3d37a304e9ac3a1b0a7f6f9c7ef8e2ddddbde795d78a90d88afc8bcd6402ac0e2e3d46572d516834e5214bf3a1c0ee6f4391701ba6c48f30fdf9536530fb54022fb2c7473e25326c4c4ba8934d97e399d0ae76c9279991a2300d5e40880fa712af608275b30671e5be8a4aec1d89ed1f075feceffffc0ae214ff10fb9aa0fefea090bda9c072cbaf5f9a005ea5540c91906ce074c83caa3f26b0656a473d144d58f5302c8db54fe388c0b444f763a8fd359a997185f2e6950c60da3a83801cbd3abb8a4618e513376e94f2ebdfc2c4608a0e5888693cc8eacc0789fbeeab749a31619b0a49511ce83d436f6218a22662761f5e3e7541dd577ae3e45d07a42a22b4b471bb365f0384d5b07a56e14cec531120346acdfe4fd8726acc6e865f37734bae2fa877c66d4776a5a48f370d5a5d8bc9e86f760f36ea98308075eb3ba0b68561d322f3a444967e3dd0b5397938701d9efa8505b451e4b5ad439cc418444e9ac92377d40ca36a0086e88b07ded2f40c7de9206d7ff5eeac1141ffbc81f46541afeec5b6868d3908429d0f96f7fc4da4452a6777e8451879fb298f8e450414d679e975ea3997ae8c1dbd3d48e37a5ce4ea2cc2f9fc839aa2000a0c5c0e12f46bddb3470a720aff6602174d45b50e107146b043c3e401fae4c5fa946ea3620128c785fc3077f12f344ee47ad605c6588b3fda7e1c5f1fb439e733383371b98795961eab3410374ef3db7a70dd4442575dd6047cc9e7d01229377d184467404e721de63d1aa08bd80806aa7e6d7ee9f9d66b3bbe9651b9ad114eb6236548fa5d3ffd915f011919e4270dc266cb9f458dccc28c4ad893c2dd297e2c09802f90a8171e5f42cdb46fc291c6efc5b51a6179129f74dc2c5e6ee6236bc881019a28e14c73ac2fa4ef4cb94c67fc628ac797a0ef3b99bc8192adf9b2f20e0646ac5b79248279bd415225b4ce596a8473c742e326b92add4599a00a399c5ceeb782f95d0479f7f15e68a62986e5ea4b6da761a3ccb1d67535fa347215d8be7d278eb00420d46d1e771cc0d74352053c5fb0d6a92dfe5422b387a8e9feb1c9caff33a29a515ab5bc2d87303350c86cf102c85a26e9363a8c1c81d89caabe84979f64def4cf7d6d696aa4318db4a02dda35e8d42092f593efe74bac384453ee4c4f377c44a9001f9a54a2bae1559c5383aecdae9d2dc9b862c59a7b83dca1a431b8d4d1449471caa559aa3be932ac57c15d5d6a187134301e24bed5bbe94c6e8297531a0f14d1f483d7a30a5db6f427588aefcdfffc734f6f4fda8139d99da8c664fb1117d02387ddf2100827b7e902610692f939e8dbdfa3cf5c533a90ae56884771276ec22d0588718bbf26db681dbdf223296013f7ad45813d4416d4082112cefdef5ff4b1a002a94d57e561a0a61cc2efcbf04c17600e9b5c6f845ef22044fd6b1200b28b98ffc6f0d16461303de34a6fa0e85fff41408e06569ffb7bf900eb0576a826834063230b5f584b41b4453d0a18e786388d5934ace836cd618faab20b4d10388a9c2e13befdc13d238229b63d50e10f4f38ce8531fca628e18b1465db1659f91a9b8f951cb1491411b302aac994ddce03849b9ee28fe7b0dd15a0b4e61445193f87b5a878fcb4614df17c1ca8797a9852b4c4257fd92c24a247495679d6c63a0ee37e7648c335145a7818b124ded817fcb049119435f928285829e61c21869b0f6a0271614278715014d88b08b15ba570768101b95fca3ac17f4abb94ffcef34f8cf4a03e698943796f5ae88e70807d97feed1109bac330b172aaac5fbf6e11a424ce7e7cb16d428b382109c94289c4d283e6cd659cc8ddd80418c42962e9a25c658d32035d2b8d6feae11cacc2d5faf90e80ac394502b871d93ece03d6a1c2a8b2b2f7817f87548ae5f856c1ab3f84af172a13ad422cde391e3657c6285a69f28d704ca360348a32d9804e6c965e837e6b44627478e6d0296a1dc541cbbd6a7f2fbed1f32ea7df9bbd3e23f7c869e1062240016b1aee4ba7f9e56e91dad70d0d5116f5cf681b480f8e2fc61684c6fbb2cd54e7a636a93c62ddf8a441630789934ade59a4db3579e6700eda7fbc14fa574ffad6900e1b6ca087a9f7aa8446f88a53ab1e5a18cec551f0ded06fd941a9cb4553eb753ad6522d81063f5908c604d0cf89d717ee71436a0bb9d42147a0168b54a2ad9ed7f3eedbff3b67422116a40da506a2fa4ad67ec601a7385e87633db1ea86b681734312694024234c35db61dc253c7de83f2551b2c44482fa83d628236c287f9543e536b4367116dc2b3fe9383bf56e1140126824a1181224a0405267be8acd2e3a91224c869db1abb3c56ac00a9473334786e1a325f6a3c9066ba00b9bb0574ab4fd3b3c6b808c39e46942efda936bfd3a6781f3a74c79b7686ca97b525a2e5ab68ea67280941f3fdaa866c8910873aaba136d16de83f735fd4530149731c952d2831d93c8d835b6628d1be951f2476144b917af681d4c590421c9f7b65640cd53b33299c8f555a680e461a6674ca5128d65ccae133dd2e662b644898bec95dd4b0fc5f06c54de532082265cac8164ab5a1466474f222db432a207c8391f9bffb84544f752da0fea30117c54ddb6542ae1f522deaa33450fb74ac67d040184024ed82ec4d809a69381d9a78966d0d7a3a151aaa5d2ec6d0a69c435e70dff426f67b8647f6a0c1b69e28369f56bffbd95405b9d2d24f78f70de9c88fbe9646344da758f0bb87707f08e8bac7c1aedcf5bdb48050e324630f4924cffbc16bab5f57fac49fa42a877d4834a91045f48a7df51648d712916c04ad68f8ce1bd200436df0fd2af55082275786e7d7a791ab46b62aa64310b9d2776197f31a6d8608c7f8ead36fea431b9ab8eea3f4aca663b49cc522e84270402e3b0fc5d1f974d2815bd2ec4c3d6d38bd9a9666764687bfbbebc958cfb202c4d64609c7742753517213d0e32205a841ca38cbbf57794cacf92df2a8925dfd221f0f8bf2307a93ff495a16695dd88a06f8ab042e235a45bf2652343dbd5e1b073274e791377f086a65831661190554bb4d34ce6b337026318cea445a561f0e81d055b4b25b23b789c0fde39903f533c589d72e1a9c1a8c5bfca092b583a317294e786df51532a5cd7c2b9361ab5e049c8cdd5d77fed6149771f812a6fe48b9301ea3665f8beca4462fb1cab0646f91cc4594cc344ca17f58ff5d40a631225f5532acafe3912faec35ae33516d3c4f88311c38a271b508fbe8f489de3ea433e9f4ab8d1fcf55c15c9705c5b1ea933f00982c76076cde70d80c27bc997dfeb2cfc79f5f84b58a7b89d1407946d4401485e1207a034413e0c9c2d8ab2c878c302fb8caae0ee865e556b9a4c5c5649ff96d01f309acc321a2c8d680962e4c831015f14dd6a3f8af0739f06a8e9de22ea3ed614ae89dcc060da2a924dcb4cc9a6b7be1fa1c6bb52edd49d14f9f7a6a5ef7f36d5d088a8ee7d0dc11086bb60610f80d347a48f1504354a5262a8abfa0002e96fff2f8c657baac37d6b42e1e9a28234744cfd29ea1cb66bb799231a47b0b076c5fb701053a9828a4de5475f8ef18e3e84d6d2a9e7114b682c33fe5d7ff789698ca9e1b14d732c2aaba48d87ee49dbd0592bc1352b8df8ad695afd9fa076e4ec0f7108dd63341e515b5a38dc49cb2b74f6e9f89befb7969689ecc8e1bae8ab9895b1496d577c0863b9b58ab7e73ad7f9fda85d49438263569cbdb8a70555c8dccd3c7d0d96d593469a56e43521c5ab1c955d7637c901f13aeeddda87cc196330c329d81b275c88bc56351d6599f501a6775b0b7c9671b4dcaf01e9649486d1b9780f014373282dc43d4fa1556aa1a40fb62723a4afcf2edeaa5bebaa1841434526771219396c86ca5c8ffa211bb769556cce331ab99ed2e629c8db388c92f66ea86851b4e77a6505d5a68d977d30e6c97a4f918d70ad8d0fca6ad7e1fa8d884a03863c87509b54b70a8a4f6873e76822081413bebe976c23f1bcca377bf225fbeac045e28a1e40ac7059ab1dfd0c716ef93bef5bca71cae7d22433b092fb61395e62a4e3c2c6188645a16faaba041fcb31023e7086c385bb599bc887ee83f0b5178fc55a8c0a1c31e7802c24278906d64a2d360f68443550b032949e1e285b8548d4a7b6310f1ec0c59ba49befd4a47ade8bf7c389a3617b0c09e4e139442ec7ca3fffe954a221dc861d51c16b7701244a40d2259807031ab6237e2791d20d81d4073cff803473783c94228cb8673f0cb8bc6cfdf40674b88960b53dafa50eccedce9d3f486504474a675f849ad049b1b265ec0534d63622fedf25ba5e7a56da34bd27ad6ffd3035d753f7fdcf97a0f0c9e51bbc42ea26933c6b55479225db585fe1ec0c6ce763c7da2c1900498236155030e94d178046aa4c5c6455764c15b4183d1bcfb5408374e918e22293fe0e874118c97f761348a1bbdde7f1a2a8ce05a99b40f5ce8da32eb4cbaeb1540084881cfd32d1834e528b01cc36dcb3d6a8918e3e706b3a74d3b7e0bfc1a183203bfdb1abb10a1a8ded49a4d15e0ea36cce006bab32041fcf65621eaa3818a6840ed67160fa3621633c249299820d1ec95618b78758c30b0761da5a747a62d82e30f4e2302bf5ccefebe5470a34da162893fa9b21c86d64fcdcd710be6f01187599906e38350d4a1b741d8d84bfddc7547a1a02f345a0b42a5d15877da4e07d8e7fd91715295b006891e6e5f438afaef45d15f7b288b0a109ee04b276eff7d64b01a8140deb304823b2f7d167c870790e5eca71d1a852483cf23d7b48d4232504f4c65d15c8c194c0e9c2aa8dc0cdcba45eaba43f7d74dc5680a76b1495d3f4761451d48b5439ecb340ce7d52bb366aa0f2aed2cacb904299307233b7732ba45e4b3cb6016fae0da236a4d8ec325e31f6d213c1f1eb0026947ee7ff4815533306f206a80855581bd3fbe9b75209231a324b34009428c12b4b346513da7509c319fd8ce702111c3efd705a3dff6da4f59051119dac11311bd077c68fdf9a36bd08638201c2eaab48869d7b5e9a5942a0f276962b6f2ea7e3ae61009046e6a8435da887930a12f9792e68632628ae72bed8811215074c5d74eb0c07df6219997d1735b84985fd3e443b72f51f8f89a62407ab498b617cc2e5bf205f4a15134d968ec2b85f58e67d226872024008c642070d9d692579311a0d49bfc85beb58b8cb4476ce2622862f919709d7f0e66617233aea83bd2f221940ad0a13bcb603617e5827d1dbb3fee5dfca0b87525fc1998842b9019ca7e3ecf1d843510bc18f5fb0a0f91daa93ecc0ed336950c16a885395cb797f376aa77cbd64ae8b7c757c6f4a1ae8b83540c65bea907e5b000ba1cea29797f90eb23975f547a2add251deb9106234bd1be240db9c8575107f439155e196b8be46d29cb6a95ae4d68c90988ef42f82514419db06f9930a268856e7ef15918c75380134687c02101988588329fc303ec63faaee06421b351203597ac112b54e0983aa40992fd3d8b2d96953cf0dd48e5ebb36640c74aec98cd0b1077f8ac74550929f2db279cf5d4a330cac39e7d3c6108d4c3d6e947accb26efdd3c7a86ad42a4bc8148bf4acd8eb210d1bb01ba7f2c68b98579a4de93d9f4815523a4552861864e9474cdcba991b5db6c18fbf9a1ad07826d9fe30600ab447146b2020323c87e8430a35c0706b0cad35f6fe326dbaef2b69ae7f187e1e4374dbf7a7f55dc085776e4c479e3b94f6dc7153ec2b15525e38bc181becb61e474354fa0b872e8e41d80b21670d128a7b1427a9b8fc5a56eebd5539214c3f20e10bc1937a52010e6779c6f8f72663d41acd2407b74143b6c24c966d8329a4975d73fff2fd7733aebe93b1f06b11c504e98221fadce7ff4bf0f726004e4efa17ef60c9351197e76cdb8177ae281aa216d4ce3f99763146c0678806701cf40c8f275760ba4950cd0dd12e52e2067dab0aa321ce6c75414ded0fca0c195273ca41d40055580d2358838bad5d0ac388867641295ae0fd48ae8d1920a251ac55d1a0c26bfb80b5023eebf379d82cfcfd0cf6cd02a2364a28decf60671b60214e8ad799e76dd3f79bbafc8388779e0f6b06b6bdd1da7e8e7700e9b22e4cfc25685c55949c062072be49f913be4e1cfc90ffc1e0adcfe3d6798d5cd552802ef11e89efb67dc2e80be758a46fd97472e217f0ba8e924f97235efe9c91def9913c0755d237383fa9c61bea8bb471278410c5f60f21b36b736d8df324c1b30dd030470490a4ba8ad1684c53769b81bad5737679b0a95d9dfe4a0f1d082f4c18112b369de2c492a0f19f108d4f977325baf963eff92d220abd244544f8bd32cc820af0779f0bd6c4507bd431adda541add750b070c5a1035530981ff1ade74e3ad7f97c67b8ba9b9f3e474c296dd69faa38c66a4d7535d9e2063096e591ff5f653038cd2bebdcb69f77ef40ddc3bc4cd6c90962ad07eecd0585a7f5c9354b248c13c04614d5caa8066f99eebe025f54296e99e0f881e8b4b2081a309f4db58a636cd81debb985e7f08f143b41c4e7c2fa294f44d1c48341a971cf156209102f720a9f1121bdff77efdcb1169b65dfbcf0381aa8ec80c686aab55d76688b27a643742961b63f9977d17df879e7d849bd4ebeae9876a470802f876f95fe81a8824e2aceaf4019741572596dabbaab309427d8d31a0e565419a20102f317af162cc8f29612c152c1297024e8f5426225058537cf95aa298b15480f38279471d91af8e6f504fedc1cc75487e5f1a18070e2391cc2b561611d4f48c2d1535f63ab9a13de795d433d4ecee891a43b26b95319958c45618a854a2c62b4fa6324df8e91e4e9173f32b0521df7dd4783cbf7d9f38f846bf0c3a2852139f4f03e05359035abff999f2efe694d5fff233b8a42e10d42007e7df15fa8efac95aac80d8ab6556578cdcf72aa2c4a1ab8186b4d9f42d836105fd35dffc11d688d4ad91885213780f8bbe06444ed19865a0ca158af61eb553c535eef454a46d0c80cc3b344afb4e56f24147d40c653c728919a432e3e7f626868caff7216c8ea3a8e398bb0b9a478a84308ddb647c411a51e5ae6fa7adf0d9c6deb019cf5f499b8e7e3f4d5d4c6a70eee5e91777ef61b8ee29e83e5369cb799bd2b62d16dde6d2e33165da634d4be830f021a412e93735a22e3b8862992f9f5576c5ab8ff7d3dcf4081112103f77110d8800d41beecbedec05426fb031ef441605a06f3e24151e82e2b945fb852ffce73409c3a3f509f4f34ea8a7e34e6427ea4f6e63b4ba9766b710358f3b311ad66e3137bfaf140361ab7cae3ed76f0c864687f9a1041235c5670c2d3dd67b1e61ff914ded050099065c3c9be66e8930bba45c8bd1898888856f8c744428dbd42cfe2dd7748a732e326ddca79fd5a1b13e85a32c412eaee310cbfc7c405d3b549a99d59aae91ecb30fc8ecca63145f85e144ff25ea85e2000a092b431cd13ba736fa6fd13d3f6b965388e6574e81754cbe2fffb6991c91a100504a08ce00a9d741523bf4f6726b5707415be6fe5b88a26c4d54dc1287af391a9506ee25a2c4e870f616d88ca291294d1c7616d14243ca11ccd791d6937106eb9e9cdef97edd2ae1abc92fd541449396c72bef56341c326012d1df88e693685c3a0ae5cc7033dc530d0b5d3f2e045e7708cca8e0619f42dac1ac5510bb3aa95914cfe4a55db8748e85972a70dff076d2740614aacef14befb04157233deb3092d1834224e6ef0996b0e8488261ae2c37ca9d41149335c624faec7bedcfc07c407db40c9439f3f4cf12bc4386059195dd7f73da07e5bfcff0e099f5d7d3f1ef67bda49b14222b2ea5dd2f2ca523fb0eb2190551c4c38740d8d0723e1e1081bc55de561411c5051eba96635863c7ecfab4617e9816aa67413181c088a2ab85ff129eed39b8746e769bbfe9876916a46f846e9f7b695fb9e9df0444bb8545680354922265e0733548e506738c3c4058ad1c05bdc3a01a34b69bdb504b7a85f6c0ebaf30610b19953e4d1ed7e606591fb8dc8b6832bd6e260dce3a27edc5490d0163066c0e74e6a84a1d638b60859edd0251ab79e92af2cd5098c2d78b88299d259f4d567e3e141e12ff3d6cc86bce0db69f3352510888b9bffc74ead253339b88d40ecdc071eacfe5555ed77a8e26f8800850c221e5a25b040da30c38d1a5ce79b6cae9542dac4aa6900bc5b5a6718680732f26a742a699c192360a1546160d522759a9c1d7fa31817d5133d5505d75b4253650f8c7c1c9dd2fa42e00959fdbfb149f29526c0c47eee4736854c087ac31eadea6b795452c2599ea4c0bd83a4c331b88d72bb3ddf3b55c4be9b2f1854f881470e0dc5d186dbe0e5de1771e6174f2dfd5f70b27a13119b90181904716b624a540626b40afa14b9ebe00a5df66abb9be7d24df95bd200be80580856972edd631b4d230b40980840598df5d113ebca85dfa31103b913f1bb96dc4dedd5cd0e643251300000d6649444154204a55895065a2df38f2b18d05c431aaa8fd6f874dc150e1eebdc7d2d9a76c4bc79f3a496a78127cbbe5f4dc9d7bd33cf0f2161842db8fda55b7e6e223ab52c305733460711eaf00e8b16b9e0ffae8e13479d209444218dcc7c19298e120df7d5b30d697def7297a3b2ce72add9ce63ffec788bc4059f9f29fa5019df292aa9ec73198476db7fb3510c2fd47d3dc79d4329b9125dbba3580939916ed8109d2d338b80233b53471ce05e9e003b7a79a63ed7ce6456acb0a7b5dfb105b3ba085b3acb57121d7dab0985cc52e8f0f2d6fa2f90474a15299f4ee39461ed041ef62647d227fc57a71c480255eb74e63d73475859be9cd0eee63dc716f8b358bffed7bca873ad22517757908e8c3d42024bb2f69c0fde9a12d577dc345a90b2f7004d342d42b462ad4c4e0be9637c08d5429cb1106131b53970269f4e949c222c2dbf389ecc7f71347b240e6c270b2e78e6a3322b187371b553648df77e6e15933f93a2e924e8cc95468930c981cc808a7b80c8fa129ac5e84a96d6e2e67a641c463465e96fc9df1752a53660e9c40117f8b76864308e35e23a0665931df93695a7c860094722d145b2cc2596834f993692e5edf48ebf8dc4135e2fffc7753c520b7cab55bdefd3a0681c776708f48b4c88ed616a980106c1db4a986e7ee32bf4f9e13fc25f3f179e0e9292940d429a16403c45dc540ea7865364e45ca60915b23411e437573e3b639b2bdc9c8bfcfba60362d1eeba4e71f7e3a5df07e444b48d75efa65253db57f1f4a5b80169b697b1e5ac43b73db8830ed438fa7e78e4da273f086d47d84aeb614ffabae07953bccaa96bd1cc6ed49a9ad15387d0f7de1bf429c05457c95f73f8184ef29f0ebcacfa6da333f4ff56b9b2c192362b9c7076fdf83f45801712c3f7207bda25d8c84cfc64edaf1e3e0d981088ee175aba6aa48652dbfc0360ac9a5188b6b4223a85be4137da4a9acb0e1bdca38f91818b2cf61fdd5664972d9ade03816a71fa255e417376595fc628922c34857857f378fe11ddbcb222e59f8ae0a654c458f6ce37185d7adca576474c2a6a7f9ba23e8bf82e2236ff5c0e668b076c0c323cbf753dce5e7641c64162b4ce90e88a00359f320af79631ed7531e1d335853ee53c2b8a2995a786d3708e9388289ed090a4f9f1b91d1735a4b798ad4c9ba61ad700fcc732d1dd4b89c09b201eaff538258032c9e7fb87d476a3009dd435fdde9df38dc3a0ab76c58b7150a4dd164e5ab4f9654036dec228e33013ba54cadd4876d11118bff8b081926970dfd57f077bccf0c1684365fd0a6d6ee4f308de3316be9aa86b35627e61a31df43bf8946ada6e448c72e04122755e44185b4832acca2a30be6a45467d26f5ce9b2b677e757ab32781a57b0346131cc318569341b82fe352760d1929a8d6dc0d3f536a593766c004b38984e3b8b9ed1422bed7a89e94d86d55648f4173194c79e83004b2458640ab3c946ec67f18a07bb8c4c83e6f549d76aeffb03c43a3e9dda5b4e4fcf9ef25e5651de9712ba74cd778046c1e71b2c31790b99b444141d9c7e5c208f95236c026736a97cf0d51874ec071082fe00f9b7631803953f69f2f610859497d7e3330e117d2c9f71761ca23a86b3f21c7517075dfa4bcf4957bc771b07337bd679e1a163a8d47219d6770d8752427064ee72103684623a8c48987ab4955b76b5e518de920b6fb19e47a50b8a8e3702bd8c31d816cb8fdd9b5efaab3f4527f0ec5443d1c859afe8e3f1ba89f9a729228c325471ff7c650a1937adeb9b1542091f6d0d935d6c1893fd95f83760f01ad7aa436a679d68efcd83eafac85879aa1089fb59c91cdc2e12752caf1d8fe74065a825a73e593744a3cdb4a3f8b9481aaf2dfad52f0aac60027a603d66452d670d6eda150754c8dc3437e68f3262e6aad011f5f32a8df7b573169fd58c2972321799e518219b21d6c0c00eafd20becf31963ed0be89d4129e28851338cd894331b7db435a2599b01944819351cebcbfc96733a5a44aca066c535cf11d566ac37c126ad9fd1c7eb0c64bd547db13a6cda05f2e4124220b3ec365a7a9a716ed5575d394fddb4b6552dabf1c313a35bbf6ed3c6b4f1b8f5789c1e1e166afc0c5d72488db1518d973c06c76ef5c97e3ab4fb0006448ac2087a9bceffb1dbc9791145196d9f4aaf9691fb5ae22683c28d6f45bc9f037e6c0fc5bd844486dfa64e7b01ef79189d814753032e5d779e94133a4afda15ba33bbd4a1a3064d8afc40a9512f4a33e04d6be8d4b980c437a53b1cfd5655720531ec891da76187f1389ae298c6ac4a05e1b44b187210957cb629e65ebc6aedbbe97567ef095d4408865f11134e348693b18860570f4eaf552c256800f35a676dbf7fc3455fee6dfa7a35ccb16759f16ac24f1d1fdbc260224a6481a529c73514cfef2a6b8487a82d75b42e7ba8a83a84095b15e18ea91013ad4435800511b87f1bc829358a3b0ac79fc381871400a6c8a1313706ddcf4a25382084c893aa204c41dad080dc89105008f58c82ca9d4de0cd7b90b9bbf449da7ea6aeee05b0fe4fd43811916a99a87736db422d8017cd90e755a211f46d32a0f60feac51c705921614853ce0c77fb7715c3ec2a8e42aa12adaec658c7e84706618819fcf3e1cce6dc8e7e83dfad37024faa3fcdca082cc9eb9a07992e71cd08cb61ef64f5cdfc2f17879747ea668396065826a800fd6ee6b4c0823596122d170ce269e237138876c3c6bad5c53c89a0d62dfc7ba4d27a6a3af21f8a1e52a540e6b77fdf957a5e55fde4f4371b1181fce39aaa9debaf57369fd16206aded12a4bbe56a1b974483cdb2c750e1e96e084043fe0f0482ff41016d1cb34633d0c800365e7555c3be2e5d0f00031864f72d324a082e299d608cbf6bfc84e588caa4f0377c00cd140c81ced87955bbf1c37cc266870fde0cd55f9a2b985ca0f9b3518ebe8515f0cbffdd7d90b397385d179c14ccf86ca19b3c3b40da0a26fea914ed5384c0da2ef2cd1f9752ed08bdffc6270b302ede3b02db0304d3a5083547596b18a48d378ef4df418161fbc33cdd358d6655b5b6a3846ba3e3b54eb443afd2e8138fe88f83827e367576fbb8a0644d0831c3be0b17d190220681e722f6097cf5ee15a4d30d4d62a0e75c81afb0efc77d39c22958999196fab07d6144b5062acced60bf636312d1cc011f56289be60c5e21e6dbe010c92106404d11b023f37d29941ac75d7902614cd46a36844ba5c9b44b1cef7d63e8110466cc220f8decfa5f7f65a07dc1d1e5bf83e3f46be5d36d2009ac3c8628d90570947ae5ad40a469fd7bc788f21aa02648da140d5025c18dafaf07a8543e33df09e4becefad41192be1fc7ba1eba0b1e4e78eb188221df3bd842ff3ab1851e78264783b7e9e8d24137fb2c18986e6267cbe813eb6482cf2626eb103ef6b8f22b4c59b8b51dd061f74ff731cb0691a993b40ee0ea3d5fd4a9a606e67620688927cdfe274df2ec005e79e6dc491e23584aef5a23c570edd6a55e769cd90b02551ae3166e12057d9c2125d02b5f0449086a08115e04f99036352da31b4e6c56f4fc76efadb340baba14daab982e46ff386ff95b10634e4186fa853308f5df5a1b474f3e7324a05a4db78df2769ca8294c1c3f3e0c7e83aba0e153881e92bff2f11e9501ce22eec8b3ade6f8a1db433508bf6dcf69db48c0ec4bee56e207b6d787543a26775845744d2ca25c515a25a9ba8b5003fcdb6df125a07e3f61524b9e388f4593a896900833e8fad7c0f0001e26d8328b81d744fa2649c8ab8a995b481ef5dd3d2e7095a279e064a678f6d916d1a17a5164de91a295de5cb9f49cb44a3b691dd9d54443651b36059e76354fc7fed77cd5b66d42e6a320e5bd42ba6411a0ee08f4e29442eaffb54aad3e4ae01f5ab9f11fadd381bc9a335a27950892cec4d6978ae96debb38b8f967b967b4665879b03d4e673e689a79ac52c90ec434d5f7ec5cd01ac2e873449d2594ae21f9bdd4b373af48650643d7fa463ac21668a31b321a6c2b597df2ceb8de71ecb9868228a5d79f4987775c88786527d2bb40ede279734a16ce8547e494374c36cea9efd9f714a54b3027f2d9cd06c3f784d8dce816c40194293e9fff1ea083d7a19075aece217dd5e446ee7f89d5f3000e3d3cd61407cdb4c954670e0f2d956419bd32b963329cc7b8010d160887d583a48d3b8b82d7e978c1f1aa59fc8295ed52dd4d991c1e24f7568aab6a0f8522db9cb74ea375e03e5a0cac877c93334de5328bc1e8b1d440af6aa048ee06edc844e77b5f4fa8becab05fda427f01a2ea88d42c40039eab26b48ec04974d11991a8b2a059b67755817c3c5759c51b5207d3c425365c2c98621ea01ea3b97ce020bdb3698c7f48ea03a25723422c5cf77b785da6362968e9da220cb3c8b2e6a9f4fa4a8eba4307e026513122d5edd0645e79d78749074971b956e995ff96e60f41cb596c337290b7dd45142dd20beb17693543a2678dde5b878504d54bae4ecd732e6470b20ff9f7d1b4021a687dd627dad74edc01e0907727794002c68d1427b2c048a7b5556b8fec3b3df2057586e7afe0bcfabb16c3c337645f707f4aae2b253586e2615e1491b9cef52c21682388a2e7b591add18cc781cb51c463199bdd239260d8510761e405b46c24f07deab88a22233e77c7481287b9c8017d8f7c2fdb3056b39a615827b2c96f40aa1ef5a4bb67cd54a0900946b4199f0917a2532a8ca38c96611d0ad43aa24c9b91955e8cb6fb5a7913a26cefb55a2ca76e1926588b4099be65bb262c24d0c50c32980efa190cf93e5fee3b057ce1388a9af9450af8ff01144f5fcca10d65710000000049454e44ae426082}}}{\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Author: Administrator}{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Version: }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Date: 2016/3/28 \dbch \f1 \'d0\'c7\'c6\'da\'d2\'bb}{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qr \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Summary: }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li1620 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1620 \rin0 \tql \tx3420 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs32 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li1620 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1620 \rin0 \tql \tx3420 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs32 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li1620 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin1620 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sect }\sectd \sbkpage \pgwsxn12242 \pghsxn15842 \marglsxn1134 \margrsxn1134 \margtsxn1440 \margbsxn1440 \guttersxn0 \headery709 \footery709 \pgbrdropt0 \sectlinegrid360 \sectdefaultcl \endnhere {\header \pard \plain \s25 \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \brdrb \brdrs \brdrw10 \brsp20 \tqr \tx9900 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1036 \langnp1036 \langfe2052 \langfenp2052 Physical Data Model order}{\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1036 \langnp1036 \langfe2052 \langfenp2052 \tab }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1036 \langnp1036 \langfe2052 \langfenp2052 Report \dbch \f1 \'b6\'a9\'b5\'a5\'c4\'a3\'d0\'cd}{\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1036 \langnp1036 \langfe2052 \langfenp2052 \par }}{\footer \pard \plain \s16 \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \brdrt \brdrs \brdrw10 \brsp20 \tqc \tx5040 \tqr \tx9900 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Sybase PowerDesigner}{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \tab }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 2016/3/2}{\fs24 \loch \af4 \hich \af4 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 5}{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \dbch \f1 \'d0\'c7\'c6\'da}{\fs24 \loch \af4 \hich \af4 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ce\'e5}{\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \tab }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Page }{\field {\*\fldinst {\fs24 \dbch \af1 \hich \af4 \loch \af4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PAGE }}{\fldrslt {\fs24 \dbch \af1 \hich \af4 \loch \af4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1024 \langnp1024 \langfe1024 \langfenp1024 3}}}{\fs24 \dbch \af1 \hich \af4 \loch \af4 \lang1024 \langnp1024 \langfe1024 \langfenp1024 }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 of }{\field \fldedit {\*\fldinst {\fs24 \dbch \af1 \hich \af4 \loch \af4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 NUMPAGES }}{\fldrslt {\fs24 \dbch \af1 \hich \af4 \loch \af4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 }{\fs24 \dbch \af1 \hich \af4 \loch \f4 \lang1024 \langnp1024 \langfe1024 \langfenp1024 3}}}{\fs24 \dbch \af1 \hich \af4 \loch \af4 \lang1024 \langnp1024 \langfe1024 \langfenp1024 }{\fs24 \dbch \af4 \hich \af0 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }}\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\b1 \fs32 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 Table of Contents}{\b1 \fs32 \dbch \af1 \hich \af4 \loch \f4 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li540 \ri-82 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin540 \rin-82 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\field \fldedit \flddirty {\*\fldinst {\fs24 \dbch \af1 \hich \af0 \loch \af0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 }{\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 TOC \'5co "1-4" \'5ch \'5cz \'5cu }}{\fldrslt {\fs24 \dbch \af1 \hich \af0 \loch \af0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 }{\b1 \fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1024 \langnp1024 \langfe1024 \langfenp1024 The 'Table of Contents' field needs to be updated!}}}{\b1 \fs24 \dbch \af1 \hich \af0 \loch \af0 \lang1024 \langnp1024 \langfe1024 \langfenp1024 }{\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sect }\sectd \sbkpage \pgwsxn12242 \pghsxn15842 \marglsxn1134 \margrsxn1134 \margtsxn1440 \margbsxn1440 \guttersxn0 \headery709 \footery709 \pgbrdropt0 \sectlinegrid360 \sectdefaultcl \endnhere \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \brdrb \brdrs \brdrw15 \brsp20 \tqr \tx9978 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b9\'dc\'c0\'ed\'c4\'a3\'d0\'cd}{\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \brdrt \brdrs \brdrw15 \brsp20 \tqc \tx5414 \tqr \tx9978 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d2\'b3\'bd\'c5}{\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 I\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9978 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9978 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_contract}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'c3\'f7\'cf\'b8}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_item_contract_item}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'cd\'d8\'d5\'b9\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_item_ref}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_category}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_item}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'b9\'ab\'cb\'be\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_company}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'84\'bb\'cd\'d8\'d5\'b9}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_coupon_ref}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'84\'bb\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_coupon}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'cd\'bb\'a7\'bb\'e1\'d4\'b1\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_member}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed\'b5\'a5\'ce\'bb\'b9\'d8\'c1\'aa\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 cd_manager_company}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_dictionary}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b2\'ce\'ca\'fd\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_dictionary_parameter}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c8\'a8\'cf\'de\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_permissions}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'c3\'bb\'a7\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_users}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'c3\'bb\'a7\'bd\'c7\'c9\'ab\'b9\'d8\'c1\'aa\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_users_roles}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_roles}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab\'c8\'a8\'cf\'de\'b9\'d8\'c1\'aa\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_roles_permissions}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'c3\'f7\'cf\'b8\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 tb_order_item}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 tb_order}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5\'d3\'c3\'bb\'a7\'b9\'d8\'c1\'aa\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_user_organization}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9978 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9978 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5\'b1\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 sys_organization}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4989 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9978 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 II\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 II.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_CONTRACT_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cb\'f9\'ca\'f4\'bf\'cd\'bb\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_MEMBER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ba\'cf\'cd\'ac\'bc\'db\'b5\'c4\'bf\'cd\'bb\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cb\'f9\'ca\'f4\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_COMPANY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ba\'cf\'cd\'ac\'bc\'db\'b5\'c4\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'ca\'d3\'c3\'b7\'b6\'ce\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SCOPE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 1-\'b2\'bf\'b7\'d6\'b2\'fa\'c6\'b7\'a3\'ac2-\'c8\'ab\'b2\'bf\'b2\'fa\'c6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ba\'cf\'cd\'ac\'bc\'db\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CONTRACT_PRICE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'f6\'b5\'b1\'ca\'ca\'d3\'c3\'b7\'b6\'ce\'a7\'ce\'aa\'c8\'ab\'b2\'bf\'b2\'fa\'c6\'b7\'ca\'b1\'ca\'ca\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 decimal(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'aa\'ca\'bc\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 BENGIN_TIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ba\'cf\'cd\'ac\'bf\'aa\'ca\'bc\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 datetime}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'e1\'ca\'f8\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 END_TIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ba\'cf\'cd\'ac\'bd\'e1\'ca\'f8\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 datetime}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c9\'f3\'ba\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IS_AUDITOR}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'ce\'b4\'c9\'f3\'ba\'cb\'a3\'ac1-\'c9\'f3\'ba\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 III\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'c3\'f7\'cf\'b8}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 III.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac\'c3\'f7\'cf\'b8\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcid}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_ITEM_CONTRACT_ITEM_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_CONTRACT_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'ba\'cf\'cd\'ac}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'d4\'d3\'a6\'b2\'fa\'c6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_ITEM_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'b1\'ba\'cf\'cd\'ac\'ca\'ca\'d3\'c3\'b7\'b6\'ce\'a7\'ce\'aa1\'b5\'c4\'ca\'b1\'ba\'f2\'a3\'ac\'c3\'bf\'d6\'d6\'b2\'fa\'c6\'b7\'d2\'aa\'c9\'e8\'b6\'a8\'b6\'d4\'d3\'a6\'b5\'c4\'ba\'cf\'cd\'ac\'bc\'db}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ba\'cf\'cd\'ac\'bc\'db}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CONTRACT_PRICE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ba\'cf\'cd\'ac\'bc\'db\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 decimal(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 IV\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'cd\'d8\'d5\'b9\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 IV.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'cd\'d8\'d5\'b9\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_ITEM_REF_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REF_TYPE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REF_NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REF_VALUE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'d4\'d3\'a6\'b2\'fa\'c6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_ITEM_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'d4\'d3\'a6\'b2\'fa\'c6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 V\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 V.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcid}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_CATEGORY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c0\'e0\'b1\'f0\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CATEGORY_NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c0\'e0\'b1\'f0\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 VI\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 VI.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'fa\'c6\'b7\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcid}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_ITEM_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_CODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c0\'e0\'b1\'f0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_CATEGORY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'b9\'e9\'ca\'f4\'b5\'c4\'c0\'e0\'b1\'f0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_DESCRIBE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(255)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_TYPE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'fa\'b2\'fa\'b5\'d8}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 YIELDLY}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'fa\'b2\'fa\'b5\'d8}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'b9\'e6\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SPEC}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'fa\'c6\'b7\'b9\'e6\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bb\'f9\'b4\'a1\'bc\'db\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 BASE_PRICE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bb\'f9\'b4\'a1\'bc\'db\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 decimal(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bb\'e1\'d4\'b1\'bc\'db\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 MEMBER_PRICE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bb\'e1\'d4\'b1\'bc\'db\'b8\'f1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DECIMAL(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bc\'c6\'bc\'db\'b7\'bd\'ca\'bd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PRICING_MANNER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bc\'c6\'bc\'db\'b7\'bd\'ca\'bd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(10)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cf\'fa\'ca\'db\'d7\'b4\'cc\'ac}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SELL_STATUS}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'cf\'c2\'bc\'dc 1-\'c9\'cf\'bc\'dc}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cf\'fa\'ca\'db\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SELL_UNIT}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cf\'fa\'ca\'db\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cf\'fa\'ca\'db\'bd\'f0\'b6\'ee}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SELL_PRICE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cf\'fa\'ca\'db\'bd\'f0\'b6\'ee}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DECIMAL(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'d7\'e9\'ba\'cf}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IS_COMBINATION}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'ce\'b4\'d7\'e9\'ba\'cf\'a3\'ac1-\'d7\'e9\'ba\'cf}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b8\'b8\'b2\'fa\'c6\'b7ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PARENT_ITEM_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'e9\'ba\'cf\'b2\'fa\'c6\'b7\'b5\'c4\'b8\'b8id}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c9\'f3\'ba\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IS_AUDIT}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'ce\'b4\'c9\'f3\'ba\'cb\'a3\'ac1-\'c9\'f3\'ba\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c2\'bc\'c8\'eb\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CREATE_DATE_TIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c2\'bc\'c8\'eb\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 datetime}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c2\'bc\'c8\'eb\'c8\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CREATE_USER_CODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c2\'bc\'c8\'eb\'c8\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 VII\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b5\'a5\'ce\'bb\'b9\'ab\'cb\'be\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 VII.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b5\'a5\'ce\'bb\'b9\'ab\'cb\'be\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_COMPANY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COMPANY_CODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COMPANY_NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(100)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'b5\'d8\'d6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COMPANY_ADDRESS}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'b5\'d8\'d6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(255)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'c1\'aa\'cf\'b5\'c8\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COMPANY_LEADER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb\'c1\'aa\'cf\'b5\'c8\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c1\'aa\'cf\'b5\'c8\'cb\'b5\'e7\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COMPANY_LEADER_TEL}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c1\'aa\'cf\'b5\'c8\'cb\'b5\'e7\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 VIII\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'a8\'84\'bb\'cd\'d8\'d5\'b9}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 VIII.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'a8\'84\'bb\'cd\'d8\'d5\'b9\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'d4\'d3\'a6\'bf\'a8\'84\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_COUPON_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'84\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REF_TYPE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REF_NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REF_VALUE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cd\'d8\'d5\'b9\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 IX\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'a8\'84\'bb\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 IX.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'a8\'84\'bb\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_COUPON_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'d6\'c0\'e0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COUPON_TYPE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'bb\'f2\'d5\'df\'84\'bb,1-\'bf\'a8\'a3\'ac2-\'84\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COUPON_NUMBER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'dc\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COUPON_PASSWORD}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'dc\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'aa\'ca\'bc\'c8\'d5\'c6\'da}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 BEGIN_TIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'d0\'d0\'a7\'bf\'aa\'ca\'bc\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DATETIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'e1\'ca\'f8\'c8\'d5\'c6\'da}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 END_TIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'d0\'d0\'a7\'bd\'e1\'ca\'f8\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DATETIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'f0\'b6\'ee}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PRICE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b9\'cc\'b6\'a8\'bd\'f0\'b6\'ee}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DECIMAL(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'ce\'ca\'fd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COUNT}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b9\'cc\'b6\'a8\'b4\'ce\'ca\'fd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'ca\'b9\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IS_USED}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'ce\'b4\'ca\'b9\'d3\'c3\'a3\'ac1-\'d2\'d1\'ca\'b9\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'d3\'d0\'d0\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IS_USEFUL}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'ce\'de\'d0\'a7\'a3\'ac1-\'d3\'d0\'d0\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'bb\'d8\'c0\'a1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IS_FEEDBACK}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'b7\'f1\'a3\'ac1-\'ca\'c7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d7\'a2}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 NOTES}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(255)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 X\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'cd\'bb\'a7\'bb\'e1\'d4\'b1\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 X.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'cd\'bb\'a7\'bb\'e1\'d4\'b1\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bb\'e1\'d4\'b1\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 MEMBER_CODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bb\'e1\'d4\'b1\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d0\'d5\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d0\'d5\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d6\'bb\'fa\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PHONE_NUMBER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d6\'bb\'fa\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c51}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SPARE_TEL}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c51}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c52}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SPARE_TEL2}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'ca\'d6\'bb\'fa\'ba\'c52}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bc\'d2\'cd\'a5\'b9\'cc\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 TEL_NUMBER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bc\'d2\'cd\'a5\'b9\'cc\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b0\'ec\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 OFFICE_TEL}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b0\'ec\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'b5\'d8\'d6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ADDRESS}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'b5\'d8\'d6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(255)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'b5\'d8\'d6\'b71}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SPARE_ADDRESS}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'b5\'d8\'d6\'b71}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(255)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'b5\'d8\'d6\'b72}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SPARE_ADDRESS2}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'b8\'d3\'c3\'b5\'d8\'d6\'b72}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(255)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'cd\'bb\'a7\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 MEMBER_TYPE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 1-\'c7\'b1\'d4\'da\'bf\'cd\'bb\'a7\'a3\'ac2-\'c6\'d5\'cd\'a8\'bf\'cd\'bb\'a7\'a3\'ac3-\'d3\'c5\'d6\'ca\'bf\'cd\'bb\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cb\'f9\'ca\'f4\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_COMPANY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cb\'f9\'ca\'f4\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cb\'f9\'ca\'f4\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_USER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cb\'f9\'ca\'f4\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XI\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed\'b5\'a5\'ce\'bb\'b9\'d8\'c1\'aa\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XI.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bf\'cd\'b7\'fe\'be\'ad\'c0\'ed\'b5\'a5\'ce\'bb\'b9\'d8\'c1\'aa\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_MANAGER_COMPANY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_COMPANY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'cd\'bb\'a7\'be\'ad\'c0\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CD_MANAGER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'cd\'bb\'a7\'be\'ad\'c0\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XII\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XII.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SYS_DICTIONARY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'d6\'b5\'e4\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DICTIONARY_CODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'d6\'b5\'e4\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'d6\'b5\'e4\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DICTIONARY_DESC}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'d6\'b5\'e4\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(255)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 AVAILABLE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XIII\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b2\'ce\'ca\'fd\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XIII.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'ca\'fd\'be\'dd\'d7\'d6\'b5\'e4\'b2\'ce\'ca\'fd\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SYS_DICTIONARY_PARAMETER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'d6\'b5\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SYS_DICTIONARY_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'d6\'b5\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cf\'d4\'ca\'be\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SHOW_VALUE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'cf\'d4\'ca\'be\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'b5\'bc\'ca\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REAL_VALUE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'b5\'bc\'ca\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c5\'c5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SORT_VALUE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c5\'c5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(3)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 AVAILABLE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'bd\'fb\'d3\'c3\'a3\'ac1-\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XIV\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'c8\'a8\'cf\'de\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XIV.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'c8\'a8\'cf\'de\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c8\'a8\'cf\'de}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PERMISSION}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c8\'a8\'cf\'de}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c8\'a8\'cf\'de\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DESCRIPTION}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c8\'a8\'cf\'de\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(100)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 AVAILABLE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'bd\'fb\'d3\'c3\'a3\'ac1-\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XV\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'d3\'c3\'bb\'a7\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XV.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'d3\'c3\'bb\'a7\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'c7\'c2\'bd\'d3\'c3\'bb\'a7\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 USERNAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'c7\'c2\'bd\'d3\'c3\'bb\'a7\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d5\'e6\'ca\'b5\'d0\'d5\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REALNAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d5\'e6\'ca\'b5\'d0\'d5\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'dc\'c2\'eb\'d1\'ce\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SALT}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'dc\'c2\'eb\'d1\'ce\'d6\'b5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'c7\'c2\'bd\'c3\'dc\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PASSWORD}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b5\'c7\'c2\'bd\'c3\'dc\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c4\'ea\'c1\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 AGE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c4\'ea\'c1\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d0\'d4\'b1\'f0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 SEX}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 1-\'c4\'d0\'a3\'ac2\'c5\'ae}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'ca\'cf\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 EMAIL}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'ca\'cf\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 QQ}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 QQ}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 QQ}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d6\'bb\'fa\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IPHONE_NUMBER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d6\'bb\'fa\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b0\'ec\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 OFFICE_TEL}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b0\'ec\'b9\'ab\'ca\'d2\'b5\'e7\'bb\'b0}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(20)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'cb\'f8\'b6\'a8}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 LOCKED}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'bd\'fb\'d3\'c3\'a3\'ac1-\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'bf\'cd\'bb\'a7\'be\'ad\'c0\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 IS_MANAGE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 1-\'be\'ad\'c0\'ed}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XVI\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'d3\'c3\'bb\'a7\'bd\'c7\'c9\'ab\'b9\'d8\'c1\'aa\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XVI.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'d3\'c3\'bb\'a7\'bd\'c7\'c9\'ab\'b9\'d8\'c1\'aa\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'c3\'bb\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 USER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'c3\'bb\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ROLE_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 AVAILABLE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'bd\'fb\'d3\'c3\'a3\'ac1-\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XVII\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bd\'c7\'c9\'ab}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XVII.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bd\'c7\'c9\'ab\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ROLE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DESCRIPTION}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'c7\'b7\'f1\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 AVAILABLE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 0-\'bd\'fb\'d3\'c3\'a3\'ac1-\'c6\'f4\'d3\'c3}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XVIII\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bd\'c7\'c9\'ab\'c8\'a8\'cf\'de\'b9\'d8\'c1\'aa\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XVIII.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'bd\'c7\'c9\'ab\'c8\'a8\'cf\'de\'b9\'d8\'c1\'aa\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ROLE_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bd\'c7\'c9\'ab}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c8\'a8\'cf\'de}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PERMISSION_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c8\'a8\'cf\'de}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XIX\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b6\'a9\'b5\'a5\'c3\'f7\'cf\'b8\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XIX.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b6\'a9\'b5\'a5\'c3\'f7\'cf\'b8\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 TB_ORDER_ITEM_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 TB_ORDER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ORDER_NO}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'b1\'e0\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_CODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'b1\'e0\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'b5\'a5\'bc\'db}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_PRICE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'b5\'a5\'bc\'db}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 decimal(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'ca\'fd\'c1\'bf}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_QTY}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'ca\'fd\'c1\'bf}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(5)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ITEM_UNIT}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cc\'c6\'b7\'b5\'a5\'ce\'bb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XX\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b6\'a9\'b5\'a5\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XX.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b6\'a9\'b5\'a5\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 TB_ORDER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 INT(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b1\'e0\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ORDER_CODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ORDER_TYPE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 1-\'bf\'a8\'a3\'ac2-\'84\'bb\'a3\'ac3-\'b3\'a3\'b9\'e6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'ba\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COUPON_NUMBER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'ba\'c5(\'b6\'a9\'b5\'a5\'c0\'e0\'d0\'cd\'ce\'aa\'bf\'a8\'ca\'b1\'bc\'c7\'c2\'bc\'bf\'a8\'ba\'c5)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'c3\'dc\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 COUPON_PASSWORD}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'bf\'a8\'c3\'dc\'c2\'eb(\'b6\'a9\'b5\'a5\'c0\'e0\'d0\'cd\'ce\'aa\'bf\'a8\'ca\'b1\'bc\'c7\'c2\'bc\'c3\'dc\'c2\'eb)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(50)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'c0\'b4\'d4\'b4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ORDER_SOURCE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 1-\'ce\'a2\'d0\'c5\'b6\'a9\'b5\'a5\'a3\'ac2-\'c9\'cc\'b3\'c7\'b6\'a9\'b5\'a5\'a3\'ac3-\'bf\'cd\'b7\'fe\'cf\'c2\'b5\'a5\'a3\'ac4-\'b2\'c9\'d5\'aa\'b6\'a9\'b5\'a5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b8\'b6\'bf\'ee\'b7\'bd\'ca\'bd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PAYMENT_MODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 1-\'d4\'a4\'b8\'b6\'bf\'ee\'a3\'ac2-\'ba\'f3\'b8\'b6\'bf\'ee\'a3\'ac3-\'c3\'e2\'b7\'d1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'d7\'b4\'cc\'ac}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ORDER_STATUS}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'d7\'b4\'cc\'ac}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'c8\'cb\'ca\'d6\'bb\'fa}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CONSIGNEE_PHONE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'c8\'cb\'ca\'d6\'bb\'fa}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'c8\'cb\'d0\'d5\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CONSIGNEE_NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'c8\'cb\'d0\'d5\'c3\'fb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'c8\'cb\'b5\'d8\'d6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CONSIGNEE_ADDRESS}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'d5\'bb\'f5\'c8\'cb\'b5\'d8\'d6\'b7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(200)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'ca\'d5\'fe\'b1\'e0\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 POSTCODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'ca\'d5\'fe\'b1\'e0\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(10)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d4\'cb\'cb\'cd\'b7\'bd\'ca\'bd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 TRANSPORT_MODE}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d4\'cb\'cb\'cd\'b7\'bd\'ca\'bd 1-\'bf\'ec\'b5\'dd\'a3\'ac2-\'d7\'d4\'cc\'e1}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(1)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b1\'b8\'d7\'a2}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 REMARK}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b1\'b8\'d7\'a2}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(300)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'d7\'dc\'bd\'f0\'b6\'ee}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 TOTAL_AMOUNT}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'d7\'dc\'bd\'f0\'b6\'ee}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 decimal(10,2)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b4\'b4\'bd\'a8\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CREATE_TIME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b4\'b4\'bd\'a8\'ca\'b1\'bc\'e4}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 datetime}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b4\'b4\'bd\'a8\'c8\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 CREATE_USER}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b6\'a9\'b5\'a5\'b4\'b4\'bd\'a8\'c8\'cb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 varchar(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XXI\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'bf\'c3\'c5\'d3\'c3\'bb\'a7\'b9\'d8\'c1\'aa\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XXI.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'bf\'c3\'c5\'d3\'c3\'bb\'a7\'b9\'d8\'c1\'aa\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ORGANIZATION_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'c3\'bb\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 USER_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d3\'c3\'bb\'a7}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s1 \fi-432 \li432 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin432 \rin0 \cbpat13 \tql \tx432 \itap0 \outlinelevel0 \ls1 \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XXII\tab }{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'bf\'c3\'c5\'b1\'ed}{\b1 \fs40 \kerning32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \s2 \fi-576 \li576 \ri0 \sb240 \lisb0 \sa60 \lisa0 \widctlpar \keepn1 \aspalpha \aspnum \adjustright \lin576 \rin0 \tql \tx576 \itap0 \outlinelevel1 \ls1 \ilvl1 \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\listtext \pard \plain \b1 \fs32 \loch \af3 \hich \af3 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \f1 XXII.1\tab }{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b1\'ed\'b2\'bf\'c3\'c5\'b1\'ed\'b5\'c4\'c0\'b8\'b5\'c4\'c7\'e5\'b5\'a5}{\b1 \fs32 \loch \af3 \hich \af3 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b4\'fa\'c2\'eb}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d7\'a2\'ca\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \qc \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'ca\'fd\'be\'dd\'c0\'e0\'d0\'cd}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrs \brdrw15 \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'d6\'f7\'bc\'fcID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 NAME}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5\'c3\'fb\'b3\'c6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(30)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 DESCRIPTION}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'b2\'bf\'c3\'c5\'c3\'e8\'ca\'f6}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 VARCHAR(100)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrnone \cltxlrtb \cellx9977 \row \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cf\'bc\'b6\'d7\'e9\'d6\'af}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 PARENT_ID}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \'c9\'cf\'bc\'b6\'d7\'e9\'d6\'af}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 int(11)}{\fs24 \loch \af0 \hich \af0 \dbch \f1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \cell }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \intbl \itap1 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \trowd \trql \trgaph0 \trleft113 \trautofit \trftsWidth1 \trftsWidthB3 \trftsWidthA3 \trpaddl108 \trpaddr108 \trpaddfl3 \trpaddft3 \trpaddfb3 \trpaddfr3 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx2494 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx4988 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrnone \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx7981 \clvertalt \clbrdrl \brdrs \brdrw15 \clbrdrr \brdrs \brdrw15 \clbrdrt \brdrnone \clbrdrb \brdrs \brdrw15 \cltxlrtb \cellx9977 \row \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \sect }\sectd \sbkpage \pgwsxn12242 \pghsxn15842 \marglsxn1134 \margrsxn1134 \margtsxn1440 \margbsxn1440 \guttersxn0 \headery709 \footery709 \pgbrdropt0 \sectlinegrid360 \sectdefaultcl \endnhere \pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs20 \loch \af0 \hich \af0 \dbch \f5 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }\pard \plain \li0 \ri0 \lisb0 \lisa0 \widctlpar \aspalpha \aspnum \adjustright \lin0 \rin0 \itap0 \fs24 \loch \af0 \hich \af0 \dbch \af1 \lang1033 \langnp1033 \langfe2052 \langfenp2052 {\fs24 \dbch \af1 \hich \af0 \loch \f0 \lang1033 \langnp1033 \langfe2052 \langfenp2052 \par }} \ No newline at end of file diff --git a/src/main/java/com/xmomen/framework/web/exceptions/ArgumentValidException.java b/src/main/java/com/xmomen/framework/web/exceptions/ArgumentValidException.java new file mode 100644 index 0000000..81af02f --- /dev/null +++ b/src/main/java/com/xmomen/framework/web/exceptions/ArgumentValidException.java @@ -0,0 +1,34 @@ +package com.xmomen.framework.web.exceptions; + +import org.springframework.validation.BindingResult; +import org.springframework.validation.ObjectError; + +import java.util.Iterator; + +/** + * Created by tanxinzheng on 17/5/14. + */ +@Deprecated +public class ArgumentValidException extends Exception{ + private final BindingResult bindingResult; + + public ArgumentValidException(BindingResult bindingResult) { + this.bindingResult = bindingResult; + } + + public BindingResult getBindingResult() { + return this.bindingResult; + } + + public String getMessage() { + StringBuilder sb = (new StringBuilder("Validation failed for argument at index ")).append(", with ").append(this.bindingResult.getErrorCount()).append(" error(s): "); + Iterator var2 = this.bindingResult.getAllErrors().iterator(); + + while(var2.hasNext()) { + ObjectError error = (ObjectError)var2.next(); + sb.append("[").append(error).append("] "); + } + + return sb.toString(); + } +} diff --git a/src/main/java/com/xmomen/framework/web/interceptor/CrossInterceptor.java b/src/main/java/com/xmomen/framework/web/interceptor/CrossInterceptor.java new file mode 100644 index 0000000..4f7a162 --- /dev/null +++ b/src/main/java/com/xmomen/framework/web/interceptor/CrossInterceptor.java @@ -0,0 +1,28 @@ +package com.xmomen.framework.web.interceptor; + +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.math.BigDecimal; + +/** + * Created by tanxinzheng on 17/5/24. + */ +public class CrossInterceptor extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) { + // CORS "pre-flight" request + response.addHeader("Access-Control-Allow-Origin", "*"); + response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); + response.addHeader("Access-Control-Allow-Headers", "X-Requested-With,Content-Type"); + response.addHeader("Access-Control-Max-Age", "1800");//30 min + } + filterChain.doFilter(request, response); + } +} diff --git a/src/main/java/com/xmomen/module/account/model/CreateUser.java b/src/main/java/com/xmomen/module/account/model/CreateUser.java new file mode 100644 index 0000000..f687add --- /dev/null +++ b/src/main/java/com/xmomen/module/account/model/CreateUser.java @@ -0,0 +1,52 @@ +package com.xmomen.module.account.model; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +/** + *

User: Zhang Kaitao + *

Date: 14-1-28 + *

Version: 1.0 + */ +public @Data class CreateUser implements Serializable { + + private String username; + private String email; + private String password; + /** + * 真实姓名 + */ + private String realname; + + /** + * 年龄 + */ + private Integer age; + /** + * 1-男,2女 + */ + private Integer sex; + + /** + * QQ + */ + private String qq; + + /** + * 手机号 + */ + private String phoneNumber; + + /** + * 办公室电话 + */ + private String officeTel; + + private Boolean locked = Boolean.FALSE; + + private Integer organizationId; + + private List userGroupIds; +} diff --git a/src/main/java/com/xmomen/module/account/model/User.java b/src/main/java/com/xmomen/module/account/model/User.java new file mode 100644 index 0000000..1059b9f --- /dev/null +++ b/src/main/java/com/xmomen/module/account/model/User.java @@ -0,0 +1,25 @@ +package com.xmomen.module.account.model; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +/** + * Created by Jeng on 2016/1/28. + */ +public @Data class User implements Serializable { + private Integer id; + private String username; + private String realName; + private String phoneNumber; + private String sex; + private Integer age; + private String qq; + private String officeTel; + private Integer locked; + private String email; + private String organization;//组织 + private Integer organizationId; + private List userGroups; +} diff --git a/src/main/java/com/xmomen/module/account/realm/UserRealm.java b/src/main/java/com/xmomen/module/account/realm/UserRealm.java new file mode 100644 index 0000000..d1af711 --- /dev/null +++ b/src/main/java/com/xmomen/module/account/realm/UserRealm.java @@ -0,0 +1,112 @@ +package com.xmomen.module.account.realm; + +import com.xmomen.module.account.service.UserService; +import com.xmomen.module.core.web.token.SysUserToken; +import com.xmomen.module.user.entity.SysUsers; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.LockedAccountException; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.apache.shiro.util.ByteSource; + +import java.util.Set; + + +/** + *

User: Zhang Kaitao + *

Date: 14-1-28 + *

Version: 1.0 + */ +public class UserRealm extends AuthorizingRealm { + + private UserService userService; + + public void setUserService(UserService userService) { + this.userService = userService; + } + + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + String username = (String)principals.getPrimaryPrincipal(); + Set roles = userService.findRoles(username); + Set realmNames = principals.getRealmNames(); + for(String realmName: realmNames) { + if(realmName.contains("UserRealm")) { + roles.add("user"); + } + } + SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); + authorizationInfo.setRoles(roles); + authorizationInfo.setStringPermissions(userService.findPermissions(username)); + return authorizationInfo; + } + + + @Override + public boolean supports(AuthenticationToken token) { + if(token instanceof SysUserToken) { + return super.supports(token); + } + return false; + } + + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { + + String username = (String)token.getPrincipal(); + + SysUsers user = userService.findByUsername(username); + + if(user == null) { + throw new UnknownAccountException();//没找到帐号 + } + + if(Boolean.TRUE.equals(user.getLocked())) { + throw new LockedAccountException(); //帐号锁定 + } + + //交给AuthenticatingRealm使用CredentialsMatcher进行密码匹配,如果觉得人家的不好可以自定义实现 + SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo( + username, //用户名 + user.getPassword(), //密码 + ByteSource.Util.bytes(user.getSalt()),//salt=salt + getName() //realm name + ); + return authenticationInfo; + } + + @Override + public void clearCachedAuthorizationInfo(PrincipalCollection principals) { + super.clearCachedAuthorizationInfo(principals); + } + + @Override + public void clearCachedAuthenticationInfo(PrincipalCollection principals) { + super.clearCachedAuthenticationInfo(principals); + } + + @Override + public void clearCache(PrincipalCollection principals) { + super.clearCache(principals); + } + + public void clearAllCachedAuthorizationInfo() { + getAuthorizationCache().clear(); + } + + public void clearAllCachedAuthenticationInfo() { + getAuthenticationCache().clear(); + } + + public void clearAllCache() { + clearAllCachedAuthenticationInfo(); + clearAllCachedAuthorizationInfo(); + } + +} diff --git a/src/main/java/com/xmomen/module/account/service/PasswordHelper.java b/src/main/java/com/xmomen/module/account/service/PasswordHelper.java new file mode 100644 index 0000000..6a65cbe --- /dev/null +++ b/src/main/java/com/xmomen/module/account/service/PasswordHelper.java @@ -0,0 +1,43 @@ +package com.xmomen.module.account.service; + +import org.apache.shiro.crypto.RandomNumberGenerator; +import org.apache.shiro.crypto.SecureRandomNumberGenerator; +import org.apache.shiro.crypto.hash.SimpleHash; +import org.apache.shiro.util.ByteSource; + +/** + *

User: Zhang Kaitao + *

Date: 14-1-28 + *

Version: 1.0 + */ +public class PasswordHelper { + + private RandomNumberGenerator randomNumberGenerator = new SecureRandomNumberGenerator(); + private String algorithmName = "md5"; + private int hashIterations = 2; + + public void setRandomNumberGenerator(RandomNumberGenerator randomNumberGenerator) { + this.randomNumberGenerator = randomNumberGenerator; + } + + public void setAlgorithmName(String algorithmName) { + this.algorithmName = algorithmName; + } + + public void setHashIterations(int hashIterations) { + this.hashIterations = hashIterations; + } + + public String getSalt(){ + return randomNumberGenerator.nextBytes().toHex(); + } + + public String encryptPassword(String password, String salt) { + return new SimpleHash( + algorithmName, + password, + ByteSource.Util.bytes(salt), + hashIterations).toHex(); + + } +} diff --git a/src/main/java/com/xmomen/module/account/service/PermissionServiceImpl.java b/src/main/java/com/xmomen/module/account/service/PermissionServiceImpl.java new file mode 100644 index 0000000..47590fc --- /dev/null +++ b/src/main/java/com/xmomen/module/account/service/PermissionServiceImpl.java @@ -0,0 +1,33 @@ +package com.xmomen.module.account.service; + +import com.xmomen.module.user.entity.SysPermissions; +import org.springframework.beans.factory.annotation.Autowired; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + *

User: Zhang Kaitao + *

Date: 14-1-28 + *

Version: 1.0 + */ +@Service +public class PermissionServiceImpl implements PermissionService { + + @Autowired + private MybatisDao mybatisDao; + + @Override + @Transactional + public SysPermissions createPermission(SysPermissions permission) { + permission = mybatisDao.saveByModel(permission); + return permission; + } + + @Override + @Transactional + public void deletePermission(Long permissionId) { + mybatisDao.deleteByPrimaryKey(SysPermissions.class, permissionId); + } +} diff --git a/src/main/java/com/xmomen/module/account/web/controller/PermissionController.java b/src/main/java/com/xmomen/module/account/web/controller/PermissionController.java new file mode 100644 index 0000000..e839a47 --- /dev/null +++ b/src/main/java/com/xmomen/module/account/web/controller/PermissionController.java @@ -0,0 +1,114 @@ +package com.xmomen.module.account.web.controller; + +import com.xmomen.module.account.service.PermissionService; +import com.xmomen.module.account.service.RoleService; +import com.xmomen.module.account.service.UserService; +import com.xmomen.module.account.web.controller.vo.CreatePermissionVo; +import com.xmomen.module.user.entity.SysPermissions; +import com.xmomen.module.user.entity.SysPermissionsExample; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.logger.Log; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.*; + +/** + * Created by Jeng on 2016/1/5. + */ +@RestController +public class PermissionController { + + @Autowired + UserService userService; + + @Autowired + PermissionService permissionService; + + @Autowired + RoleService roleService; + + @Autowired + MybatisDao mybatisDao; + + /** + * 权限权限 + * @return + */ + @RequestMapping(value = "/user/permissions", method = RequestMethod.GET) + public Map getPermission(){ + String username = (String) SecurityUtils.getSubject().getPrincipal(); + Set roles = userService.findRoles(username); + Set permissions = userService.findPermissions(username); + Map rolesMap = new HashMap(); + rolesMap.put("roles", roles); + rolesMap.put("permissions", permissions); + return rolesMap; + } + + /** + * 权限列表 + * @param limit + * @param offset + * @param keyword + * @return + */ + @RequestMapping(value = "/permission", method = RequestMethod.GET) + @Log(actionName = "查看权限列表") + public Page getPermissionList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "keyword", required = false) String keyword){ + SysPermissionsExample sysPermissionsExample = new SysPermissionsExample(); + sysPermissionsExample.createCriteria() + .andPermissionLike("%" + StringUtils.trimToEmpty(keyword) + "%"); + sysPermissionsExample.or() + .andDescriptionLike("%" + StringUtils.trimToEmpty(keyword) + "%"); + return mybatisDao.selectPageByExample(sysPermissionsExample, limit, offset); + } + + /** + * 权限资源 + * @param id + */ + @RequestMapping(value = "/permission/{id}", method = RequestMethod.GET) + @Log(actionName = "查询单个权限") + public SysPermissions getPermission(@PathVariable(value = "id") Integer id){ + return mybatisDao.selectByPrimaryKey(SysPermissions.class, id); + } + + /** + * 新增权限 + * @param createPermissionVo + * @param bindingResult + * @return + */ + @RequestMapping(value = "/permission", method = RequestMethod.POST) + @Log(actionName = "新增权限资源") + public SysPermissions createPermission(@RequestBody @Valid CreatePermissionVo createPermissionVo, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + SysPermissions sysPermissions = new SysPermissions(); + sysPermissions.setDescription(createPermissionVo.getDescription()); + sysPermissions.setPermission(createPermissionVo.getPermissionCode().toUpperCase()); + sysPermissions.setAvailable(createPermissionVo.getAvailable() != null && createPermissionVo.getAvailable() ? 1 : 0); + return permissionService.createPermission(sysPermissions); + } + + /** + * 删除权限 + * @param id + */ + @RequestMapping(value = "/permission/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除权限资源") + public void deletePermission(@PathVariable(value = "id") Long id){ + mybatisDao.deleteByPrimaryKey(SysPermissions.class, id); + } + +} diff --git a/src/main/java/com/xmomen/module/account/web/controller/UserController.java b/src/main/java/com/xmomen/module/account/web/controller/UserController.java new file mode 100644 index 0000000..d34cb4b --- /dev/null +++ b/src/main/java/com/xmomen/module/account/web/controller/UserController.java @@ -0,0 +1,147 @@ +package com.xmomen.module.account.web.controller; + +import javax.validation.Valid; + +import com.xmomen.module.account.model.CreateUser; +import com.xmomen.module.account.mapper.UserMapper; +import com.xmomen.module.account.model.User; +import com.xmomen.module.account.service.UserService; +import com.xmomen.module.account.web.controller.vo.CreateUserVo; +import com.xmomen.module.account.web.controller.vo.UpdateUserVo; +import com.xmomen.module.user.entity.SysUsers; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.logger.Log; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import com.xmomen.framework.mybatis.dao.MybatisDao; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Jeng on 2016/1/5. + */ +@RestController +public class UserController { + + @Autowired + UserService userService; + + @Autowired + UserMapper userMapper; + + @Autowired + MybatisDao mybatisDao; + + /** + * 用户列表 + * @param id + */ + @RequestMapping(value = "/user", method = RequestMethod.GET) + @Log(actionName = "查询用户列表") + public Page getUserList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) Integer id, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "organizationId",required = false) Integer organizationId){ + Map map = new HashMap(); + map.put("id", id); + map.put("keyword", keyword); + map.put("organizationId", organizationId); + return (Page) mybatisDao.selectPage(UserMapper.UserMapperNameSpace + "getUsers", map, limit, offset); + } + + /** + * 用户列表 + * @param id + */ + @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) + @Log(actionName = "查询用户") + public SysUsers getUserList(@PathVariable(value = "id") Integer id){ + return mybatisDao.selectByPrimaryKey(SysUsers.class, id); + } + + /** + * 新增用户 + * @param createUser + * @param bindingResult + * @return + */ + @RequestMapping(value = "/user", method = RequestMethod.POST) + @Log(actionName = "新增用户") + public SysUsers createUser(@RequestBody @Valid CreateUserVo createUser, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + CreateUser user = new CreateUser(); + user.setAge(createUser.getAge()); + user.setOfficeTel(createUser.getOfficeTel()); + user.setPhoneNumber(createUser.getPhoneNumber()); + user.setQq(createUser.getQq()); + user.setRealname(createUser.getRealName()); + user.setSex(createUser.getSex()); + user.setUsername(createUser.getUsername()); + user.setPassword(createUser.getPassword()); + user.setEmail(createUser.getEmail()); + user.setLocked(createUser.getLocked() != null && createUser.getLocked() == true ? true : false); + user.setOrganizationId(createUser.getOrganizationId()); + user.setUserGroupIds(createUser.getUserGroupIds()); + return userService.createUser(user); + } + + /** + * 更新用户 + * @param id + * @param updateUserVo + * @param bindingResult + * @throws ArgumentValidException + */ + @RequestMapping(value = "/user/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新用户") + public void updateUser(@PathVariable(value = "id") Integer id, + @RequestBody @Valid UpdateUserVo updateUserVo, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + userService.updateUser(updateUserVo); + } + + /** + * 删除用户 + * @param id + */ + @RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除用户") + public void deleteUser(@PathVariable(value = "id") Long id){ + mybatisDao.deleteByPrimaryKey(SysUsers.class, id); + } + + /** + * 锁定用户 + * @param id + */ + @RequestMapping(value = "/user/{id}/locked", method = RequestMethod.PUT) + @Log(actionName = "修改用户信息") + public void lockedUser(@PathVariable(value = "id") Integer id, + @RequestParam(value = "locked") Boolean locked){ + SysUsers sysUsers = new SysUsers(); + sysUsers.setLocked(locked ? 1 : 0); + sysUsers.setId(id); + mybatisDao.update(sysUsers); + } + + /** + * 重置密码 + * @param id + */ + @RequestMapping(value = "/user/{id}/resetPassword", method = RequestMethod.PUT) + @Log(actionName = "重置密码") + public void resetPassword(@PathVariable(value = "id") Integer id){ + userService.changePassword(id, "123456"); + } + +} diff --git a/src/main/java/com/xmomen/module/account/web/controller/vo/CreateUserVo.java b/src/main/java/com/xmomen/module/account/web/controller/vo/CreateUserVo.java new file mode 100644 index 0000000..86a6933 --- /dev/null +++ b/src/main/java/com/xmomen/module/account/web/controller/vo/CreateUserVo.java @@ -0,0 +1,37 @@ +package com.xmomen.module.account.web.controller.vo; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +import org.hibernate.validator.constraints.NotBlank; + +/** + * Created by Jeng on 2016/1/7. + */ +public @Data class CreateUserVo implements Serializable { + + @NotBlank + private String username; + @NotBlank + private String password; + private String email; + @NotBlank + private String realName; + @NotBlank + private String phoneNumber; + private Integer age; + private String qq; + private String officeTel; + private Boolean locked; + /** + * 1-男,2女 + */ + private Integer sex; + + private Integer organizationId; + + private List userGroupIds; + +} diff --git a/src/main/java/com/xmomen/module/account/web/controller/vo/UpdateUserVo.java b/src/main/java/com/xmomen/module/account/web/controller/vo/UpdateUserVo.java new file mode 100644 index 0000000..5ab62d9 --- /dev/null +++ b/src/main/java/com/xmomen/module/account/web/controller/vo/UpdateUserVo.java @@ -0,0 +1,39 @@ +package com.xmomen.module.account.web.controller.vo; + +import java.io.Serializable; +import java.util.List; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +import org.hibernate.validator.constraints.NotBlank; + +/** + * Created by Jeng on 2016/1/7. + */ +public @Data class UpdateUserVo implements Serializable { + + @NotNull + private Integer id; + @NotBlank + private String username; + private String email; + @NotBlank + private String realName; + @NotNull + private String phoneNumber; + private Integer age; + private String qq; + private String officeTel; + private Boolean locked; + /** + * 1-男,2女 + */ + private Integer sex; + + private Integer organizationId; + + private List userGroupIds; + +} diff --git a/src/main/java/com/xmomen/module/advice/entity/Advice.java b/src/main/java/com/xmomen/module/advice/entity/Advice.java new file mode 100644 index 0000000..af4bf06 --- /dev/null +++ b/src/main/java/com/xmomen/module/advice/entity/Advice.java @@ -0,0 +1,149 @@ +package com.xmomen.module.advice.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_advice") +public class Advice extends BaseMybatisModel { + /** + * 主键 + */ + private String id; + + /** + * 标题 + */ + private String title; + + /** + * 创建时间 + */ + private Date insertDate; + + /** + * 创建人 + */ + private Integer insertUserId; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 更新人 + */ + private Integer updateUserId; + + /** + * 内容 + */ + private String content; + + @Column(name = "id") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "title") + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + if(title == null){ + removeValidField("title"); + return; + } + addValidField("title"); + } + + @Column(name = "insert_date") + public Date getInsertDate() { + return insertDate; + } + + public void setInsertDate(Date insertDate) { + this.insertDate = insertDate; + if(insertDate == null){ + removeValidField("insertDate"); + return; + } + addValidField("insertDate"); + } + + @Column(name = "insert_user_id") + public Integer getInsertUserId() { + return insertUserId; + } + + public void setInsertUserId(Integer insertUserId) { + this.insertUserId = insertUserId; + if(insertUserId == null){ + removeValidField("insertUserId"); + return; + } + addValidField("insertUserId"); + } + + @Column(name = "update_date") + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + if(updateDate == null){ + removeValidField("updateDate"); + return; + } + addValidField("updateDate"); + } + + @Column(name = "update_user_id") + public Integer getUpdateUserId() { + return updateUserId; + } + + public void setUpdateUserId(Integer updateUserId) { + this.updateUserId = updateUserId; + if(updateUserId == null){ + removeValidField("updateUserId"); + return; + } + addValidField("updateUserId"); + } + + @Column(name = "content") + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + if(content == null){ + removeValidField("content"); + return; + } + addValidField("content"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/advice/entity/mapper/AdviceMapper.java b/src/main/java/com/xmomen/module/advice/entity/mapper/AdviceMapper.java new file mode 100644 index 0000000..c24d5a2 --- /dev/null +++ b/src/main/java/com/xmomen/module/advice/entity/mapper/AdviceMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.advice.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.advice.entity.Advice; +import com.xmomen.module.advice.entity.AdviceExample; +import org.apache.ibatis.annotations.Param; + +public interface AdviceMapper extends MybatisMapper { + int countByExample(AdviceExample example); + + int deleteByExample(AdviceExample example); + + int insertSelective(Advice record); + + int updateByExampleSelective(@Param("record") Advice record, @Param("example") AdviceExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/advice/mapper/AdviceMapperExt.xml b/src/main/java/com/xmomen/module/advice/mapper/AdviceMapperExt.xml new file mode 100644 index 0000000..78b226c --- /dev/null +++ b/src/main/java/com/xmomen/module/advice/mapper/AdviceMapperExt.xml @@ -0,0 +1,36 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/advice/model/AdviceModel.java b/src/main/java/com/xmomen/module/advice/model/AdviceModel.java new file mode 100644 index 0000000..6735443 --- /dev/null +++ b/src/main/java/com/xmomen/module/advice/model/AdviceModel.java @@ -0,0 +1,87 @@ +package com.xmomen.module.advice.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.xmomen.module.advice.entity.Advice; +import lombok.Data; +import org.hibernate.validator.constraints.*; + +import javax.validation.constraints.*; + +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelTarget; +import org.springframework.beans.BeanUtils; + +import java.lang.String; +import java.lang.Integer; +import java.util.Date; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-14 20:05:05 + */ +@ExcelTarget(value = "AdviceModel") +public +@Data +class AdviceModel implements Serializable { + + /** + * 主键 + */ + @Length(max = 32, message = "主键字符长度限制[0,32]") + private String id; + /** + * 标题 + */ + @Excel(name = "标题") + @NotBlank(message = "标题为必填项") + @Length(max = 128, message = "标题字符长度限制[0,128]") + private String title; + /** + * 创建时间 + */ + @Excel(name = "创建时间") + private Date insertDate; + /** + * 创建人 + */ + @Excel(name = "创建人") + @Range(max = 999999999, min = -999999999, message = "创建人数值范围[999999999,-999999999]") + private Integer insertUserId; + + private String insertUser; + /** + * 更新时间 + */ + @Excel(name = "更新时间") + private Date updateDate; + /** + * 更新人 + */ + @Excel(name = "更新人") + @Range(max = 999999999, min = -999999999, message = "更新人数值范围[999999999,-999999999]") + private Integer updateUserId; + + private String updateUser; + /** + * 内容 + */ + @Excel(name = "内容") + @Length(max = 65535, message = "内容字符长度限制[0,65,535]") + private String content; + + /** + * Get Advice Entity Object + * + * @return + */ + @JsonIgnore + public Advice getEntity() { + Advice advice = new Advice(); + BeanUtils.copyProperties(this, advice); + return advice; + } + + +} diff --git a/src/main/java/com/xmomen/module/advice/service/impl/AdviceServiceImpl.java b/src/main/java/com/xmomen/module/advice/service/impl/AdviceServiceImpl.java new file mode 100644 index 0000000..d03dd03 --- /dev/null +++ b/src/main/java/com/xmomen/module/advice/service/impl/AdviceServiceImpl.java @@ -0,0 +1,222 @@ +package com.xmomen.module.advice.service.impl; + +import com.xmomen.module.advice.entity.Advice; +import com.xmomen.module.advice.entity.AdviceExample; +import com.xmomen.module.advice.mapper.AdviceMapperExt; +import com.xmomen.module.advice.model.AdviceCreate; +import com.xmomen.module.advice.model.AdviceQuery; +import com.xmomen.module.advice.model.AdviceUpdate; +import com.xmomen.module.advice.model.AdviceModel; +import com.xmomen.module.advice.service.AdviceService; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.wx.util.DateUtils; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @author tanxinzheng + * @date 2017-5-14 20:05:05 + * @version 1.0.0 + */ +@Service +public class AdviceServiceImpl implements AdviceService { + + @Autowired + MybatisDao mybatisDao; + + /** + * 新增快报 + * + * @param adviceModel 新增快报对象参数 + * @return AdviceModel 快报领域对象 + */ + @Override + @Transactional + public AdviceModel createAdvice(AdviceModel adviceModel) { + Advice advice = createAdvice(adviceModel.getEntity()); + if(advice != null){ + return getOneAdviceModel(advice.getId()); + } + return null; + } + + /** + * 新增快报实体对象 + * + * @param advice 新增快报实体对象参数 + * @return Advice 快报实体对象 + */ + @Override + @Transactional + public Advice createAdvice(Advice advice) { + advice.setInsertDate(DateUtils.getNowDate()); + advice.setInsertUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + advice.setUpdateDate(mybatisDao.getSysdate()); + advice.setUpdateUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + return mybatisDao.insertByModel(advice); + } + + /** + * 批量新增快报 + * + * @param adviceModels 新增快报对象集合参数 + * @return List 快报领域对象集合 + */ + @Override + @Transactional + public List createAdvices(List adviceModels) { + List adviceModelList = null; + for (AdviceModel adviceModel : adviceModels) { + adviceModel = createAdvice(adviceModel); + if(adviceModel != null){ + if(adviceModelList == null){ + adviceModelList = new ArrayList<>(); + } + adviceModelList.add(adviceModel); + } + } + return adviceModelList; + } + + /** + * 更新快报 + * + * @param adviceModel 更新快报对象参数 + */ + @Override + @Transactional + public void updateAdvice(AdviceModel adviceModel) { + adviceModel.setUpdateDate(mybatisDao.getSysdate()); + adviceModel.setUpdateUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + mybatisDao.update(adviceModel.getEntity()); + } + + /** + * 更新快报实体对象 + * + * @param advice 新增快报实体对象参数 + * @return Advice 快报实体对象 + */ + @Override + @Transactional + public void updateAdvice(Advice advice) { + advice.setUpdateDate(mybatisDao.getSysdate()); + advice.setUpdateUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + mybatisDao.update(advice); + } + + /** + * 删除快报 + * + * @param ids 主键数组 + */ + @Override + @Transactional + public void deleteAdvice(String[] ids) { + AdviceExample adviceExample = new AdviceExample(); + adviceExample.createCriteria().andIdIn(Arrays.asList((String[]) ids)); + mybatisDao.deleteByExample(adviceExample); + } + + /** + * 删除快报 + * + * @param id 主键 + */ + @Override + @Transactional + public void deleteAdvice(String id) { + mybatisDao.deleteByPrimaryKey(Advice.class, id); + } + + /** + * 查询快报领域分页对象(带参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @param adviceQuery 查询参数 + * @return Page 快报参数对象 + */ + @Override + public Page getAdviceModelPage(int limit, int offset, AdviceQuery adviceQuery) { + return (Page) mybatisDao.selectPage(AdviceMapperExt.AdviceMapperNameSpace + "getAdviceModel", adviceQuery, limit, offset); + } + + /** + * 查询快报领域分页对象(无参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 快报领域对象 + */ + @Override + public Page getAdviceModelPage(int limit, int offset) { + return (Page) mybatisDao.selectPage(AdviceMapperExt.AdviceMapperNameSpace + "getAdviceModel", null, limit, offset); + } + + /** + * 查询快报领域集合对象(带参数条件) + * + * @param adviceQuery 查询参数对象 + * @return List 快报领域集合对象 + */ + @Override + public List getAdviceModelList(AdviceQuery adviceQuery) { + return mybatisDao.getSqlSessionTemplate().selectList(AdviceMapperExt.AdviceMapperNameSpace + "getAdviceModel", adviceQuery); + } + + /** + * 查询快报领域集合对象(无参数条件) + * + * @return List 快报领域集合对象 + */ + @Override + public List getAdviceModelList() { + return mybatisDao.getSqlSessionTemplate().selectList(AdviceMapperExt.AdviceMapperNameSpace + "getAdviceModel"); + } + + /** + * 查询快报实体对象 + * + * @param id 主键 + * @return Advice 快报实体对象 + */ + @Override + public Advice getOneAdvice(String id) { + return mybatisDao.selectByPrimaryKey(Advice.class, id); + } + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return AdviceModel 快报领域对象 + */ + @Override + public AdviceModel getOneAdviceModel(String id) { + AdviceQuery adviceQuery = new AdviceQuery(); + adviceQuery.setId(id); + return mybatisDao.getSqlSessionTemplate().selectOne(AdviceMapperExt.AdviceMapperNameSpace + "getAdviceModel", adviceQuery); + } + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * + * @param adviceQuery 快报查询参数对象 + * @return AdviceModel 快报领域对象 + */ + @Override + public AdviceModel getOneAdviceModel(AdviceQuery adviceQuery) throws TooManyResultsException { + return mybatisDao.getSqlSessionTemplate().selectOne(AdviceMapperExt.AdviceMapperNameSpace + "getAdviceModel", adviceQuery); + } +} diff --git a/src/main/java/com/xmomen/module/base/constant/AppConstants.java b/src/main/java/com/xmomen/module/base/constant/AppConstants.java new file mode 100644 index 0000000..f2bce9e --- /dev/null +++ b/src/main/java/com/xmomen/module/base/constant/AppConstants.java @@ -0,0 +1,68 @@ +package com.xmomen.module.base.constant; + +import java.io.Serializable; + +/** + * Created by Jeng on 16/5/10. + */ +public class AppConstants implements Serializable { + + /** + * 客服经理角色代码 + */ + public static final String CUSTOMER_MANAGER_PERMISSION_CODE = "customer_manager"; + + /** + * 客服组 + */ + public static final String CUSTOMER_PERMISSION_CODE = "kehuzu"; + + /** + * 后台组 + */ + public static final String HOU_TAI_CODE = "houtaibu"; + + /** + * 管理员 + */ + public static final String ADMIN = "admin"; + + /** + * 超级管理员 + */ + public static final String SUPER_ADMIN = "super_admin"; + + /** + * 物流中心 + */ + public static final String WULIUZXB = "wuliuzxb"; + + /** + * 财务组 + */ + public static final String CWU = "cwu"; + + public static final String PACKAGE_PERMISSION_CODE = "baozhuangzu"; + + public static final String PACKING_PERMISSION_CODE = "zhuangxiangzu"; + /** + * 运输 + */ + public static final String YUN_SHU_PERMISSION_CODE = "yunshubu"; + + /** + * 快递商 + */ + public static final String KUAI_DI_SHANG = "kuaidishang"; + + /** + * 用户sessionUserId键值 + */ + public static final String SESSION_USER_ID_KEY = "user_id"; + + public static final String PC_PASSWORD_SALT = "dms_pc"; + + public static final int STOCK_CHANGE_TYPE_IN = 1;//入库 + public static final int STOCK_CHANGE_TYPE_BROKEN = 2;//破损 + public static final int STOCK_CHANGE_TYPE_CANCEL = 3;//核销 +} diff --git a/src/main/java/com/xmomen/module/base/controller/CompanyController.java b/src/main/java/com/xmomen/module/base/controller/CompanyController.java new file mode 100644 index 0000000..49198c9 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/controller/CompanyController.java @@ -0,0 +1,113 @@ +package com.xmomen.module.base.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.validation.Valid; + +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.mapper.MemberMapper; +import com.xmomen.module.base.model.*; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.base.mapper.CompanyMapper; +import com.xmomen.module.base.service.CompanyService; +import com.xmomen.module.logger.Log; + +@RestController +public class CompanyController { + @Autowired + CompanyService companyService; + @Autowired + CompanyMapper companyMapper; + @Autowired + MybatisDao mybatisDao; + + /** + * 查询单位公司信息 + * + * @param id + * @return + */ + @RequestMapping(value = "/company", method = RequestMethod.GET) + @Log(actionName = "查询单位公司信息") + public Page getMemberList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) Integer id, + @RequestParam(value = "keyword", required = false) String keyword) { + Map map = new HashMap(); + map.put("id", id); + map.put("keyword", keyword); + //客服经理过滤 如果有客服组权限则不过滤 + if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE)) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + map.put("managerId", userId); + } + return (Page) mybatisDao.selectPage(CompanyMapper.CompanyMapperNameSpace + "getCompanyList", map, limit, offset); + } + + /** + * 根据ID查询客户经理信息 + * + * @param id + */ + @RequestMapping(value = "/company/queryCompanyManagerListById", method = RequestMethod.GET) + @Log(actionName = "根据ID查询客户经理信息") + public List queryCompanyManagerListById(@PathVariable(value = "id") Integer id) { + Map map = new HashMap(); + map.put("id", id); + //客服经理过滤 如果有客服组权限则不过滤 + if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE)) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + map.put("managerId", userId); + } + return mybatisDao.getSqlSessionTemplate().selectList(CompanyMapper.CompanyMapperNameSpace + "queryCompanyManagerListById", map); + } + + @RequestMapping(value = "/company", method = RequestMethod.POST) + @Log(actionName = "新增单位、公司") + public void createCompany(@RequestBody @Valid CreateCompany createCompany, BindingResult bindingResult) throws ArgumentValidException { + if (bindingResult != null && bindingResult.hasErrors()) { + throw new ArgumentValidException(bindingResult); + } + companyService.createCompany(createCompany); + } + + /** + * 修改 + * + * @param id + */ + @RequestMapping(value = "/company/{id}", method = RequestMethod.PUT) + @Log(actionName = "修改单位信息") + public void updateMember(@PathVariable(value = "id") Integer id, + @RequestBody @Valid UpdateCompany updateCompany, BindingResult bindingResult) throws ArgumentValidException { + if (bindingResult != null && bindingResult.hasErrors()) { + throw new ArgumentValidException(bindingResult); + } + companyService.updateCompany(id, updateCompany); + } + + /** + * 删除 + * + * @param id + */ + @RequestMapping(value = "/company/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除单位信息") + public void deleteMember(@PathVariable(value = "id") Integer id) { + companyService.delete(id); + } +} diff --git a/src/main/java/com/xmomen/module/base/controller/ContractController.java b/src/main/java/com/xmomen/module/base/controller/ContractController.java new file mode 100644 index 0000000..ab7781d --- /dev/null +++ b/src/main/java/com/xmomen/module/base/controller/ContractController.java @@ -0,0 +1,102 @@ +package com.xmomen.module.base.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.base.entity.CdContract; +import com.xmomen.module.base.mapper.ContractMapper; +import com.xmomen.module.base.model.ContractModel; +import com.xmomen.module.base.model.CreateContract; +import com.xmomen.module.base.model.UpdateContract; +import com.xmomen.module.base.service.ContractService; +import com.xmomen.module.logger.Log; +@RestController +public class ContractController { + @Autowired + ContractService contractService; + @Autowired + ContractMapper contractMapper; + @Autowired + MybatisDao mybatisDao; + /** + * 查询合同信息 + * @param id + * @return + */ + @RequestMapping(value = "/contract", method = RequestMethod.GET) + @Log(actionName = "查询合同信息") + public Page getMemberList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) Integer id, + @RequestParam(value = "keyword", required = false) String keyword){ + Map map = new HashMap(); + map.put("id", id); + map.put("keyword", keyword); + return (Page) mybatisDao.selectPage(ContractMapper.ContractMapperNameSpace + "getContractList", map, limit, offset); + } + @RequestMapping(value = "/contract", method = RequestMethod.POST) + @Log(actionName = "新增合同") + public void createCompany(@RequestBody @Valid CreateContract createContract, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + contractService.createContract(createContract); + } + + /** + * 合同查看 + * @return + */ + @RequestMapping(value = "/contract/{id}", method = RequestMethod.GET) + @Log(actionName = "查询合同") + public ContractModel getContractDetail(@PathVariable(value = "id") Integer id){ + //查询合同 + Map map = new HashMap(); + map.put("id", id); + List contracts = mybatisDao.getSqlSessionTemplate().selectList(ContractMapper.ContractMapperNameSpace + "getContractListAndDetail", map); + if(contracts != null && !contracts.isEmpty() && contracts.size() == 1){ + return contracts.get(0); + } + return null; + } + + /** + * 修改 + * @param id + */ + @RequestMapping(value = "/contract/{id}", method = RequestMethod.PUT) + @Log(actionName = "修改合同") + public void updateMember(@PathVariable(value = "id") Integer id, + @RequestBody @Valid UpdateContract updateContract, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + contractService.updateContract(id, updateContract); + } + + /** + * 删除 + * @param id + */ + @RequestMapping(value = "/contract/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除合同信息") + public void deleteMember(@PathVariable(value = "id") Integer id){ + contractService.delete(id); + } + +} diff --git a/src/main/java/com/xmomen/module/base/controller/CouponCategoryController.java b/src/main/java/com/xmomen/module/base/controller/CouponCategoryController.java new file mode 100644 index 0000000..c675b20 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/controller/CouponCategoryController.java @@ -0,0 +1,122 @@ +package com.xmomen.module.base.controller; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.base.entity.CdCouponCategory; +import com.xmomen.module.base.mapper.CouponCategoryMapper; +import com.xmomen.module.base.model.CreateCouponCategory; +import com.xmomen.module.base.model.ItemChildModel; +import com.xmomen.module.base.model.UpdateCouponCategory; +import com.xmomen.module.base.service.CouponCategoryService; +import com.xmomen.module.logger.Log; + +/** + * Created by Jeng on 2016/3/30. + */ +@RestController +public class CouponCategoryController { + + @Autowired + CouponCategoryService couponCategoryService; + + @Autowired + MybatisDao mybatisDao; + + /** + * 卡券类别列表 + * @param limit + * @param offset + * @param keyword + * @return + */ + @RequestMapping(value = "/couponCategory", method = RequestMethod.GET) + @Log(actionName = "查询卡券类别列表") + public Page getUserList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "categoryType", required = false) Integer categoryType){ + return couponCategoryService.getCouponCategoryList(keyword,categoryType, limit, offset); + } + + /** + * 卡券类别列表 + * @param id + */ + @RequestMapping(value = "/couponCategory/{id}", method = RequestMethod.GET) + @Log(actionName = "查询卡券类别") + public CdCouponCategory getUserList(@PathVariable(value = "id") Integer id){ + return couponCategoryService.getCouponCategory(id); + } + + /** + * 新增卡券类别 + * @param createCouponCategory + * @param bindingResult + * @return + */ + @RequestMapping(value = "/couponCategory", method = RequestMethod.POST) + @Log(actionName = "新增卡券类别") + public CdCouponCategory createCouponCategory(@RequestBody @Valid CreateCouponCategory createCouponCategory, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + return couponCategoryService.createCouponCategory(createCouponCategory); + } + + /** + * 更新卡券类别 + * @param id + * @param updateCouponCategory + * @param bindingResult + * @throws ArgumentValidException + */ + @RequestMapping(value = "/couponCategory/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新卡券类别") + public CdCouponCategory updateCouponCategory(@PathVariable(value = "id") Integer id, + @RequestBody @Valid UpdateCouponCategory updateCouponCategory, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + return couponCategoryService.updateCouponCategory(id,updateCouponCategory); + } + + /** + * 删除卡券类别类别 + * @param id + */ + @RequestMapping(value = "/couponCategory/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除卡券类别") + public void deleteCouponCategory(@PathVariable(value = "id") Long id){ + mybatisDao.deleteByPrimaryKey(CdCouponCategory.class, id); + } + /** + * 查询选择的产品 + * @param parentId + * @return + */ + @RequestMapping(value = "/getChoseItemList", method = RequestMethod.GET) + public List getChildItem(@RequestParam(value = "parentId", required = false) Integer parentId){ + List childItems = new ArrayList(); + Map map = new HashMap(); + map.put("parentId", parentId); + childItems = mybatisDao.getSqlSessionTemplate().selectList(CouponCategoryMapper.CouponCategoryMapperNameSpace + "getChoseItemList", map); + return childItems; + } +} diff --git a/src/main/java/com/xmomen/module/base/controller/CouponController.java b/src/main/java/com/xmomen/module/base/controller/CouponController.java new file mode 100644 index 0000000..d7ce35d --- /dev/null +++ b/src/main/java/com/xmomen/module/base/controller/CouponController.java @@ -0,0 +1,508 @@ +package com.xmomen.module.base.controller; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.AssertExt; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.entity.*; +import com.xmomen.module.base.mapper.CouponMapper; +import com.xmomen.module.base.model.*; +import com.xmomen.module.base.service.CouponService; +import com.xmomen.module.export.model.UploadFileVo; +import com.xmomen.module.export.util.PrintUtils; +import com.xmomen.module.logger.Log; +import com.xmomen.module.wx.util.DateUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.math.BigDecimal; +import java.text.ParseException; +import java.util.List; +import java.util.Map; + +/** + * Created by Jeng on 2016/3/30. + */ +@RestController +public class CouponController { + + @Autowired + CouponService couponService; + + @Autowired + MybatisDao mybatisDao; + + /** + * 卡券列表 + * + * @param limit + * @param offset + * @param keyword + * @return + */ + @RequestMapping(value = "/coupon", method = RequestMethod.GET) + @Log(actionName = "查询卡券列表") + public Page getCouponList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "couponNumber", required = false) String couponNumber, + @RequestParam(value = "couponType", required = false) Integer couponType, + @RequestParam(value = "couponCategoryId", required = false) Integer couponCategoryId, + @RequestParam(value = "isSend", required = false) Integer isSend, + @RequestParam(value = "cdCompanyId", required = false) Integer cdCompanyId, + @RequestParam(value = "customerMangerId", required = false) Integer customerMangerId, + @RequestParam(value = "isUseful", required = false) Integer isUseful, + @RequestParam(value = "auditDateStart", required = false) String auditDateStart, + @RequestParam(value = "auditDateEnd", required = false) String auditDateEnd, + @RequestParam(value = "isOver", required = false) Integer isOver, + @RequestParam(value = "batch", required = false) String batch, + @RequestParam(value = "keyword", required = false) String keyword) { + CouponQuery couponQuery = new CouponQuery(); + couponQuery.setKeyword(keyword); + couponQuery.setCdCompanyId(cdCompanyId); + couponQuery.setCouponCategoryId(couponCategoryId); + couponQuery.setCouponNumber(couponNumber); + couponQuery.setCouponType(couponType); + couponQuery.setCustomerMangerId(customerMangerId); + couponQuery.setIsOver(isOver); + couponQuery.setIsSend(isSend); + couponQuery.setIsUseful(isUseful); + + if (StringUtilsExt.isNotBlank(auditDateStart)) { + couponQuery.setAuditDateStart(auditDateStart.substring(0, 10)); + } + + if (StringUtilsExt.isNotBlank(auditDateEnd)) { + couponQuery.setAuditDateEnd(auditDateEnd.substring(0, 10)); + } + + if (!StringUtils.isBlank(batch)) { + couponQuery.setBatch(batch); + } + //客服经理过滤 如果有客服组权限则不过滤 + if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE)) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + couponQuery.setManagerId(userId); + } + return couponService.queryCoupon(couponQuery, limit, offset); + } + + /** + * 卡券列表 + * + * @param id + */ + @RequestMapping(value = "/coupon/{id}", method = RequestMethod.GET) + @Log(actionName = "查询卡券") + public CdCoupon getUserList(@PathVariable(value = "id") Integer id) { + return couponService.getCoupon(id); + } + + /** + * 新增卡券 + * + * @param createCoupon + * @param bindingResult + * @return + */ + @RequestMapping(value = "/coupon", method = RequestMethod.POST) + @Log(actionName = "新增卡券") + public CdCoupon createCoupon(@RequestBody @Valid CreateCoupon createCoupon, BindingResult bindingResult) throws ArgumentValidException { + if (bindingResult != null && bindingResult.hasErrors()) { + throw new ArgumentValidException(bindingResult); + } + CdCoupon cdCoupon = new CdCoupon(); + cdCoupon.setCouponType(createCoupon.getCouponType()); + cdCoupon.setCouponCategory(createCoupon.getCouponCategory()); + cdCoupon.setCouponDesc(createCoupon.getCouponDesc()); + cdCoupon.setCouponNumber(createCoupon.getCouponNumber()); + cdCoupon.setCouponPassword(createCoupon.getCouponPassword()); + cdCoupon.setBeginTime(createCoupon.getBeginTime()); + cdCoupon.setEndTime(createCoupon.getEndTime()); + cdCoupon.setCouponValue(createCoupon.getCouponValue()); + cdCoupon.setIsGift(createCoupon.getIsGift()); + cdCoupon.setIsUsed(createCoupon.getIsUsed()); + cdCoupon.setIsUseful(createCoupon.getIsUseful()); + cdCoupon.setNotes(createCoupon.getNotes()); + cdCoupon.setPaymentType(createCoupon.getPaymentType()); + cdCoupon.setUserPrice(createCoupon.getUserPrice()); + return couponService.createCoupon(cdCoupon); + } + + /** + * 更新卡券 + * + * @param id + * @param updateCoupon + * @param bindingResult + * @throws ArgumentValidException + */ + @RequestMapping(value = "/coupon/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新卡券") + public void updateCoupon(@PathVariable(value = "id") Integer id, + @RequestBody @Valid UpdateCoupon updateCoupon, BindingResult bindingResult) throws ArgumentValidException { + if (bindingResult != null && bindingResult.hasErrors()) { + throw new ArgumentValidException(bindingResult); + } + CdCoupon cdCoupon = new CdCoupon(); + cdCoupon.setId(id); + cdCoupon.setCouponCategory(updateCoupon.getCouponCategory()); + cdCoupon.setCouponType(updateCoupon.getCouponType()); + cdCoupon.setCouponDesc(updateCoupon.getCouponDesc()); + cdCoupon.setCouponNumber(updateCoupon.getCouponNumber()); + cdCoupon.setCouponPassword(updateCoupon.getCouponPassword()); + cdCoupon.setBeginTime(updateCoupon.getBeginTime()); + cdCoupon.setEndTime(updateCoupon.getEndTime()); + cdCoupon.setCouponValue(updateCoupon.getCouponValue()); + cdCoupon.setIsGift(updateCoupon.getIsGift()); + cdCoupon.setIsUsed(updateCoupon.getIsUsed()); + cdCoupon.setUserPrice(updateCoupon.getUserPrice()); + cdCoupon.setIsUseful(updateCoupon.getIsUseful()); + cdCoupon.setNotes(updateCoupon.getNotes()); + cdCoupon.setPaymentType(updateCoupon.getPaymentType()); + couponService.updateCoupon(cdCoupon); + } + + /** + * 删除卡券 + * + * @param id + */ + @RequestMapping(value = "/coupon/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除卡券") + public void deleteCoupon(@PathVariable(value = "id") Long id) { + mybatisDao.deleteByPrimaryKey(CdCoupon.class, id); + } + + /** + * @param id + */ + @RequestMapping(value = "/coupon/sendOneCoupon", method = RequestMethod.GET) + @Log(actionName = "发放单卡") + public void sendOneCoupon( + @RequestParam(value = "id") Integer id, + @RequestParam(value = "companyId") Integer companyId, + @RequestParam(value = "customerMangerId") Integer customerMangerId, + @RequestParam(value = "couponNumber") String couponNumber, + @RequestParam(value = "batch") String batch, + @RequestParam(value = "isGift") Integer isGift) { + couponService.sendOneCoupon(id, companyId, customerMangerId, couponNumber, batch, isGift); + } + + /** + * @param id + */ + @RequestMapping(value = "/coupon/sendMoreCoupon", method = RequestMethod.GET) + @Log(actionName = "批量发放卡") + public void sendMoreCoupon( + @RequestParam(value = "companyId") Integer companyId, + @RequestParam(value = "customerMangerId") Integer customerMangerId, + @RequestParam(value = "couponNumberList") String couponNumberList, + @RequestParam(value = "batch") String batch, + @RequestParam(value = "isGift") Integer isGift) { + String[] couponNumbers = couponNumberList.split(","); + for (int i = 0, length = couponNumbers.length; i < length; i++) { + String couponNumber = couponNumbers[i]; + CdCoupon coupon = new CdCoupon(); + coupon.setCouponNumber(couponNumber); +// coupon.setCouponType(1); + coupon.setIsSend(0); + coupon.setIsUseful(0); + coupon = mybatisDao.selectOneByModel(coupon); + if (coupon != null) { + couponService.sendOneCoupon(coupon.getId(), companyId, customerMangerId, coupon.getCouponNumber(), batch, isGift); + } + } + } + + /** + * 根据批次号修改 + */ + @RequestMapping(value = "/coupon/updateBatchCoupon", method = RequestMethod.GET) + @Log(actionName = "根据批次号修改") + public void updateBatchCoupon( + @RequestParam(value = "companyId") Integer companyId, + @RequestParam(value = "customerMangerId") Integer customerMangerId, + @RequestParam(value = "couponNumberList") String couponNumberList) { + String[] couponNumbers = couponNumberList.split(","); + for (int i = 0, length = couponNumbers.length; i < length; i++) { + String couponNumber = couponNumbers[i]; + CdCoupon coupon = new CdCoupon(); + coupon.setCouponNumber(couponNumber); + coupon = mybatisDao.selectOneByModel(coupon); + coupon.setCdCompanyId(companyId); + coupon.setCdUserId(customerMangerId); + mybatisDao.updateByModel(coupon); + } + } + + /** + * 批量修改卡类型 + */ + @RequestMapping(value = "/coupon/updateBatchCouponType", method = RequestMethod.GET) + @Log(actionName = "批量修改卡类型") + public void updateBatchCouponType( + @RequestParam(value = "couponCategoryId") Integer couponCategoryId, + @RequestParam(value = "couponNumberList") String couponNumberList) { + String[] couponNumbers = couponNumberList.split(","); + for (int i = 0, length = couponNumbers.length; i < length; i++) { + String couponNumber = couponNumbers[i]; + CdCoupon coupon = new CdCoupon(); + coupon.setCouponNumber(couponNumber); + coupon = mybatisDao.selectOneByModel(coupon); + coupon.setCouponCategory(couponCategoryId); + mybatisDao.updateByModel(coupon); + } + } + + /** + * @param id + * @throws ParseException + */ + @RequestMapping(value = "/coupon/activityAddress", method = RequestMethod.POST) + @Log(actionName = "活动送货地址信息") + public void activityAddress(@RequestBody CouponActivityAddressHead couponActivityAddressHead) throws ParseException { + CdActivityAddress activityAddress = new CdActivityAddress(); + activityAddress.setCouponNumber(couponActivityAddressHead.getCouponNumber()); + List activityAddressList = mybatisDao.selectByModel(activityAddress); + mybatisDao.deleteAllByModel(activityAddressList); + for (CouponActivityAddress couponActivityAddress : couponActivityAddressHead.getCouponActivityAddressList()) { + + activityAddress = new CdActivityAddress(); + activityAddress.setConsignmentAddress(couponActivityAddress.getConsignmentAddress()); + activityAddress.setConsignmentPhone(couponActivityAddress.getConsignmentPhone()); + activityAddress.setConsignmentName(couponActivityAddress.getConsignmentName()); + activityAddress.setCouponNumber(couponActivityAddressHead.getCouponNumber()); + activityAddress.setSendTime(couponActivityAddress.getSendTime()); + activityAddress.setSendCount(couponActivityAddress.getSendCount()); + mybatisDao.save(activityAddress); + + //查找客户 进行添加或者修改第三个地址 + if (StringUtilsExt.isNotBlank(couponActivityAddress.getConsignmentPhone())) { + CdMember member = new CdMember(); + member.setPhoneNumber(couponActivityAddress.getConsignmentPhone()); + List members = mybatisDao.selectByModel(member); + if (members != null && members.size() > 0) { + member = members.get(0); + if (StringUtilsExt.isNotBlank(couponActivityAddress.getConsignmentAddress())) + member.setSpareAddress2(couponActivityAddress.getConsignmentAddress()); + if (StringUtilsExt.isNotBlank(couponActivityAddress.getConsignmentName())) + member.setSpareName2(couponActivityAddress.getConsignmentName()); + member.setSpareTel2(couponActivityAddress.getConsignmentPhone()); + mybatisDao.update(member); + } + } + } + } + + /** + * 审核金额 + * + * @param id + */ + @RequestMapping(value = "/coupon/{id}/audit", method = RequestMethod.PUT) + @Log(actionName = "审核金额") + public void audit(@PathVariable(value = "id") Integer id, + @RequestParam(value = "locked") Boolean locked) { + this.couponService.auditCoupon(id, locked); + } + + /** + * 批量审核金额 + * + * @param id + */ + @RequestMapping(value = "/coupon/batchAudit", method = RequestMethod.PUT) + @Log(actionName = "批量审核金额") + public void batchAudit(@RequestParam(value = "ids") String ids, + @RequestParam(value = "locked") Boolean locked) { + String[] idchars = ids.split(","); + for (String id : idchars) { + this.couponService.auditCoupon(Integer.parseInt(id), locked); + } + } + + /** + * 退卡 + * + * @param id + */ + @RequestMapping(value = "/coupon/{id}/returnCoupon", method = RequestMethod.PUT) + @Log(actionName = "退卡") + public void returnCoupon(@PathVariable(value = "id") Integer id) { + couponService.returnCoupon(id); + } + + /** + * 完结卡 + * + * @param id + */ + @RequestMapping(value = "/coupon/{id}/overCoupon", method = RequestMethod.PUT) + @Log(actionName = "完结卡") + public void overCoupon(@PathVariable(value = "id") Integer id, + @RequestParam(value = "isOver") Integer isOver) { + CdCoupon coupon = new CdCoupon(); + coupon.setIsOver(isOver); + coupon.setId(id); + mybatisDao.update(coupon); + } + + @RequestMapping(value = "/coupon/receivedPrice", method = RequestMethod.GET) + @Log(actionName = "财务实收金额添加") + public void received( + @RequestParam(value = "couponId") Integer couponId, + @RequestParam(value = "couponNumber") String couponNumber, + @RequestParam(value = "receivedPrice", required = false) BigDecimal receivedPrice, + @RequestParam(value = "isAutoAudit", required = false) Integer isAutoAudit) { + CdCouponRefExample couponRefExample = new CdCouponRefExample(); + couponRefExample.createCriteria().andCdCouponIdEqualTo(couponId) + .andRefTypeEqualTo("RECEIVED_PRICE"); + CdCouponRef couponRef = mybatisDao.selectOneByExample(couponRefExample); + if (couponRef == null) { + couponRef = new CdCouponRef(); + couponRef.setCdCouponId(couponId); + couponRef.setCouponNumber(couponNumber); + couponRef.setRefName("财务实收金额"); + couponRef.setRefType("RECEIVED_PRICE"); + couponRef.setRefValue(receivedPrice.toString()); + mybatisDao.save(couponRef); + } + else { + couponRef.setRefValue(receivedPrice.toString()); + mybatisDao.update(couponRef); + } + if (isAutoAudit == 1) { + CdCoupon coupon = new CdCoupon(); + coupon.setIsUseful(1); + //更新卡发放状态 + CdCoupon couponDb = mybatisDao.selectByPrimaryKey(CdCoupon.class, couponId); + //如果是后付款类型并且是卡则记录激活时间 + if (couponDb.getPaymentType() == 1 && couponDb.getCouponType() == 1) { + coupon.setUsefulDate(DateUtils.getNowDate()); + } + coupon.setId(couponId); + if (coupon.getCouponValue() == null) { + coupon.setCouponValue(receivedPrice); + } + if (coupon.getCouponType() == 1) { + coupon.setUserPrice(receivedPrice); + } + mybatisDao.update(coupon); + } + } + + @RequestMapping(value = "/coupon/readCard", method = RequestMethod.GET) + @Log(actionName = "读卡") + public ReadCardVo readCard( + @RequestParam(value = "couponNo") String couponNo, + @RequestParam(value = "password", required = false) String password + ) { + CouponQuery couponQuery = new CouponQuery(); + couponQuery.setCouponNumber(couponNo); + if (StringUtilsExt.isNotEmpty(password)) { + couponQuery.setPassword(password); + } + return mybatisDao.getSqlSessionTemplate().selectOne(CouponMapper.CouponMapperNameSpace + "getCouponByCouponNo", couponQuery); + } + + @RequestMapping(value = "/coupon/cardRecharge", method = RequestMethod.GET) + @Log(actionName = "充值") + public void cardRecharge( + @RequestParam(value = "couponNo") String couponNo, + @RequestParam(value = "rechargePrice") BigDecimal rechargePrice + ) { + AssertExt.notNull("couponNo", "卡号不能为空"); + AssertExt.notNull("rechargePrice", "充值金额不能为空"); + couponService.cardRecharge(couponNo, rechargePrice); + } + + + @RequestMapping(value = "/coupon/exchangeCard", method = RequestMethod.GET) + @Log(actionName = "换卡") + public void exchangeCard( + @RequestParam(value = "oldCouponNo") String oldCouponNo, + @RequestParam(value = "oldPassword") String oldPassword, + @RequestParam(value = "newCouponNo") String newCouponNo, + @RequestParam(value = "newPassword") String newPassword + ) { + AssertExt.notNull("couponNo", "卡号不能为空"); + AssertExt.notNull("rechargePrice", "充值金额不能为空"); + couponService.exchangeCard(oldCouponNo, oldPassword, newCouponNo, newPassword); + } + + + @RequestMapping(value = "/coupon/updateBalance", method = RequestMethod.GET) + @Log(actionName = "更新余额") + public void exchangeCard( + @RequestParam(value = "couponNo") String couponNo, + @RequestParam(value = "updatePrice") BigDecimal updatePrice, + @RequestParam(value = "remark") String remark + ) { + couponService.updateBalance(couponNo, updatePrice, remark); + } + + /** + * 卡劵导入 + * + * @param request + * @param response + */ + @RequestMapping(value = "/coupon/importExcel", method = RequestMethod.POST) + public void importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setHeadRows(1); + params.setNeedSave(false); + try { + List couponImportList = ExcelImportUtil.importExcel(file.getInputStream(), CouponReportModel.class, params); + CdCouponCategory couponCategory = new CdCouponCategory(); + List cdCouponCategoryList = mybatisDao.selectByModel(couponCategory); + for (CouponReportModel couponImport : couponImportList) { + for (CdCouponCategory cdCouponCategory : cdCouponCategoryList) { + if (cdCouponCategory.getCategoryName().equals(couponImport.getCategoryName())) { + couponImport.setCouponCategoryId(cdCouponCategory.getId()); + couponService.importCoupon(couponImport); + } + } + + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + + @RequestMapping(value = "/coupon/downCouponImportTemplate") + public void downAsnImportTemplate(HttpServletRequest request, HttpServletResponse response) { + UploadFileVo uploadFile = new UploadFileVo(); + uploadFile.setRequest(request); + uploadFile.setResponse(response); + uploadFile.setExtend("xlsx"); + uploadFile.setTitleField("卡劵导入模板"); + uploadFile.setRealPath("/WEB-INF/excelFile/couponExcel.xlsx"); + PrintUtils.viewOrDownloadFile(uploadFile); + } +} diff --git a/src/main/java/com/xmomen/module/base/controller/ExpressController.java b/src/main/java/com/xmomen/module/base/controller/ExpressController.java new file mode 100644 index 0000000..1cc85fd --- /dev/null +++ b/src/main/java/com/xmomen/module/base/controller/ExpressController.java @@ -0,0 +1,214 @@ +package com.xmomen.module.base.controller; + +import java.util.HashMap; +import java.util.Map; + +import javax.validation.Valid; + +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.entity.CdExpress; +import com.xmomen.module.base.mapper.ExpressMapper; +import com.xmomen.module.base.model.ExpressTask; +import com.xmomen.module.base.service.ExpressService; +import com.xmomen.module.logger.Log; +import com.xmomen.module.order.model.OrderModel; +import com.xmomen.module.order.model.OrderQuery; + +@RestController +public class ExpressController { + @Autowired + ExpressService expressService; + @Autowired + ExpressMapper expressMapper; + @Autowired + MybatisDao mybatisDao; + + /** + * 查询快递公司信息 + * + * @param id + * @return + */ + @RequestMapping(value = "/express", method = RequestMethod.GET) + @Log(actionName = "查询快递公司信息") + public Page getExpressList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) Integer id, + @RequestParam(value = "keyword", required = false) String keyword) { + Map map = new HashMap(); + map.put("id", id); + map.put("keyword", keyword); + return (Page) mybatisDao.selectPage(ExpressMapper.ExpressMapperNameSpace + "getExpressList", map, limit, offset); + } + + @RequestMapping(value = "/express", method = RequestMethod.POST) + @Log(actionName = "新增快递、公司") + public void createExpress(@RequestBody @Valid CdExpress createExpress, BindingResult bindingResult) throws ArgumentValidException { + if (bindingResult != null && bindingResult.hasErrors()) { + throw new ArgumentValidException(bindingResult); + } + expressService.createExpress(createExpress); + } + + + /** + * 快递商查询已分配未提货订单 + * + * @param limit + * @param offset + * @param keyword + * @return + */ + @RequestMapping(value = "/express/noScanOrder", method = RequestMethod.GET) + @Log(actionName = "快递商查询已分配未提货订单") + public Page noScanOrder(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "startTime", required = false) String startTime, + @RequestParam(value = "endTime", required = false) String endTime) { + OrderQuery orderQuery = new OrderQuery(); + if (StringUtilsExt.isNotBlank(startTime) + && !"undefined".equals(startTime)) { + orderQuery.setOrderCreateTimeStart(startTime.substring(0, 10)); + } + if (StringUtilsExt.isNotBlank(endTime) && !"undefined".equals(endTime)) { + orderQuery.setOrderCreateTimeEnd(endTime.substring(0, 10)); + } + // 运输部 + if (SecurityUtils.getSubject().hasRole( + AppConstants.YUN_SHU_PERMISSION_CODE)|| SecurityUtils.getSubject().hasRole(AppConstants.KUAI_DI_SHANG)) { + String despatchExpressCode = (String) SecurityUtils.getSubject() + .getPrincipal(); + orderQuery.setDespatchExpressCode(despatchExpressCode); + } + return expressService.getOrderNoDespatchReportList(orderQuery, limit, offset); + } + + + /** + * 订单列表 + * + * @param limit + * @param offset + * @param keyword + * @return + */ + @RequestMapping(value = "/express/order", method = RequestMethod.GET) + @Log(actionName = "查询订单列表") + public Page getUserList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "orderStatus", required = false) Integer orderStatus, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "orderCreateTimeStart", required = false) String orderCreateTimeStart, + @RequestParam(value = "orderCreateTimeEnd", required = false) String orderCreateTimeEnd, + @RequestParam(value = "managerId", required = false) Integer managerId, + @RequestParam(value = "consigneeName", required = false) String consigneeName, + @RequestParam(value = "hasNoShowCancel", required = false) Boolean hasNoShowCancel) { + OrderQuery orderQuery = new OrderQuery(); + orderQuery.setKeyword(keyword); + orderQuery.setOrderStatus(orderStatus); + orderQuery.setManagerId(managerId); + orderQuery.setHasNoShowCancel(hasNoShowCancel == null ? false : hasNoShowCancel); + orderQuery.setConsigneeName(consigneeName); + if (StringUtilsExt.isNotBlank(orderCreateTimeStart)) { + orderQuery.setOrderCreateTimeStart(orderCreateTimeStart.substring(0, 10)); + } + if (StringUtilsExt.isNotBlank(orderCreateTimeEnd)) { + orderQuery.setOrderCreateTimeEnd(orderCreateTimeEnd.substring(0, 10)); + } + //运输部 + if (SecurityUtils.getSubject().hasRole(AppConstants.YUN_SHU_PERMISSION_CODE) || SecurityUtils.getSubject().hasRole(AppConstants.KUAI_DI_SHANG)) { + String despatchExpressCode = (String) SecurityUtils.getSubject().getPrincipal(); + orderQuery.setDespatchExpressCode(despatchExpressCode); + } + return expressService.getTakeDeliveryList(orderQuery, limit, offset); + } + + /** + * 修改 + * + * @param id + */ + @RequestMapping(value = "/express/{id}", method = RequestMethod.PUT) + @Log(actionName = "修改快递信息") + public void updateMember(@PathVariable(value = "id") Integer id, + @RequestBody @Valid CdExpress updateExpress, BindingResult bindingResult) throws ArgumentValidException { + if (bindingResult != null && bindingResult.hasErrors()) { + throw new ArgumentValidException(bindingResult); + } + expressService.updateExpress(id, updateExpress); + } + + /** + * 删除 + * + * @param id + */ + @RequestMapping(value = "/express/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除快递信息") + public void deleteMember(@PathVariable(value = "id") Integer id) { + expressService.delete(id); + } + + + /** + * 分配快递商 + * + * @param packingTask + * @param bindingResult + * @return + */ + @RequestMapping(value = "/express/order/bind", method = RequestMethod.PUT) + @Log(actionName = "分配快递商") + public void createPacking(@RequestBody @Valid ExpressTask expressTask, BindingResult bindingResult) throws ArgumentValidException { + if (bindingResult != null && bindingResult.hasErrors()) { + throw new ArgumentValidException(bindingResult); + } + expressService.dispatchExpress(expressTask); + } + + /** + * 解绑快递商 + * + * @param orderNoList + * @throws ArgumentValidException + */ + @RequestMapping(value = "/express/order/unbind", method = RequestMethod.PUT) + @Log(actionName = "解绑快递商") + public void createPacking(@RequestParam(value = "orderNos", required = true) String[] orderNoList) throws ArgumentValidException { + if (orderNoList != null && orderNoList.length <= 0) { + return; + } + expressService.cancelExpress(orderNoList); + } + + @RequestMapping(value = "/express/order/takeDelivery", method = RequestMethod.PUT) + @Log(actionName = "快递商提货") + /** + * + * @param boxNo 箱号 + */ + public void takeDelivery(@RequestParam(value = "boxNo", required = true) String boxNo) { + expressService.takeDelivery(boxNo); + } + + @RequestMapping(value = "/express/order/untakeDelivery", method = RequestMethod.PUT) + @Log(actionName = "快递商取消提货") + public void untakeDelivery(@RequestParam(value = "orderNo", required = true) String orderNo) { + expressService.unTakeDelivery(orderNo); + } +} diff --git a/src/main/java/com/xmomen/module/base/controller/PublicController.java b/src/main/java/com/xmomen/module/base/controller/PublicController.java new file mode 100644 index 0000000..07563c5 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/controller/PublicController.java @@ -0,0 +1,62 @@ +package com.xmomen.module.base.controller; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.entity.CdCompany; +import com.xmomen.module.base.mapper.PublicMapper; +import com.xmomen.module.base.model.CompanyCustomerManager; + +@RestController +public class PublicController { + + @Autowired + MybatisDao mybatisDao; + + @Autowired + PublicMapper publicMapper; + + @RequestMapping(value = "/companyList", method = RequestMethod.GET) + public List getCompany() { + CdCompany company = new CdCompany(); + List companys = mybatisDao.selectByModel(company); + return companys; + } + + //查询客服经理 + @RequestMapping(value = "/customerManagerList", method = RequestMethod.GET) + public List getCustomerManager( + @RequestParam(value = "userType", required = false) String userType, + @RequestParam(value = "keyword", required = false) String keyword) { + Map map = new HashMap(); + map.put("userType", userType); + if ("customer_manager".equals(userType)) { + //客服经理过滤 如果有客服组权限则不过滤 + if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.HOU_TAI_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.SUPER_ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.WULIUZXB)) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + map.put("managerId", userId); + } + } + if (StringUtils.trimToNull(keyword) != null) { + map.put("keyword", StringUtils.trimToEmpty(keyword)); + } + List customerManagerList = mybatisDao.getSqlSessionTemplate().selectList(PublicMapper.PublicMapperNameSpace + "getManagerList", map); + return customerManagerList; + } +} diff --git a/src/main/java/com/xmomen/module/base/entity/CdActivityAddress.java b/src/main/java/com/xmomen/module/base/entity/CdActivityAddress.java new file mode 100644 index 0000000..317afdf --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdActivityAddress.java @@ -0,0 +1,149 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_activity_address") +public class CdActivityAddress extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 卡号 + */ + private String couponNumber; + + /** + * + */ + private String consignmentName; + + /** + * 收货手机号 + */ + private String consignmentPhone; + + /** + * 收货地址 + */ + private String consignmentAddress; + + /** + * 赠送日期 + */ + private Date sendTime; + + /** + * 赠送份数 + */ + private Integer sendCount; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "COUPON_NUMBER") + public String getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + if(couponNumber == null){ + removeValidField("couponNumber"); + return; + } + addValidField("couponNumber"); + } + + @Column(name = "CONSIGNMENT_NAME") + public String getConsignmentName() { + return consignmentName; + } + + public void setConsignmentName(String consignmentName) { + this.consignmentName = consignmentName; + if(consignmentName == null){ + removeValidField("consignmentName"); + return; + } + addValidField("consignmentName"); + } + + @Column(name = "CONSIGNMENT_PHONE") + public String getConsignmentPhone() { + return consignmentPhone; + } + + public void setConsignmentPhone(String consignmentPhone) { + this.consignmentPhone = consignmentPhone; + if(consignmentPhone == null){ + removeValidField("consignmentPhone"); + return; + } + addValidField("consignmentPhone"); + } + + @Column(name = "CONSIGNMENT_ADDRESS") + public String getConsignmentAddress() { + return consignmentAddress; + } + + public void setConsignmentAddress(String consignmentAddress) { + this.consignmentAddress = consignmentAddress; + if(consignmentAddress == null){ + removeValidField("consignmentAddress"); + return; + } + addValidField("consignmentAddress"); + } + + @Column(name = "SEND_TIME") + public Date getSendTime() { + return sendTime; + } + + public void setSendTime(Date sendTime) { + this.sendTime = sendTime; + if(sendTime == null){ + removeValidField("sendTime"); + return; + } + addValidField("sendTime"); + } + + @Column(name = "SEND_COUNT") + public Integer getSendCount() { + return sendCount; + } + + public void setSendCount(Integer sendCount) { + this.sendCount = sendCount; + if(sendCount == null){ + removeValidField("sendCount"); + return; + } + addValidField("sendCount"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdActivityAddressExample.java b/src/main/java/com/xmomen/module/base/entity/CdActivityAddressExample.java new file mode 100644 index 0000000..9df3bde --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdActivityAddressExample.java @@ -0,0 +1,689 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +public class CdActivityAddressExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdActivityAddressExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + protected void addCriterionForJDBCDate(String condition, Date value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + addCriterion(condition, new java.sql.Date(value.getTime()), property); + } + + protected void addCriterionForJDBCDate(String condition, List values, String property) { + if (values == null || values.size() == 0) { + throw new RuntimeException("Value list for " + property + " cannot be null or empty"); + } + List dateList = new ArrayList(); + Iterator iter = values.iterator(); + while (iter.hasNext()) { + dateList.add(new java.sql.Date(iter.next().getTime())); + } + addCriterion(condition, dateList, property); + } + + protected void addCriterionForJDBCDate(String condition, Date value1, Date value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + addCriterion(condition, new java.sql.Date(value1.getTime()), new java.sql.Date(value2.getTime()), property); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCouponNumberIsNull() { + addCriterion("COUPON_NUMBER is null"); + return (Criteria) this; + } + + public Criteria andCouponNumberIsNotNull() { + addCriterion("COUPON_NUMBER is not null"); + return (Criteria) this; + } + + public Criteria andCouponNumberEqualTo(String value) { + addCriterion("COUPON_NUMBER =", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotEqualTo(String value) { + addCriterion("COUPON_NUMBER <>", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberGreaterThan(String value) { + addCriterion("COUPON_NUMBER >", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberGreaterThanOrEqualTo(String value) { + addCriterion("COUPON_NUMBER >=", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberLessThan(String value) { + addCriterion("COUPON_NUMBER <", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberLessThanOrEqualTo(String value) { + addCriterion("COUPON_NUMBER <=", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberLike(String value) { + addCriterion("COUPON_NUMBER like", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotLike(String value) { + addCriterion("COUPON_NUMBER not like", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberIn(List values) { + addCriterion("COUPON_NUMBER in", values, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotIn(List values) { + addCriterion("COUPON_NUMBER not in", values, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberBetween(String value1, String value2) { + addCriterion("COUPON_NUMBER between", value1, value2, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotBetween(String value1, String value2) { + addCriterion("COUPON_NUMBER not between", value1, value2, "couponNumber"); + return (Criteria) this; + } + + public Criteria andConsignmentNameIsNull() { + addCriterion("CONSIGNMENT_NAME is null"); + return (Criteria) this; + } + + public Criteria andConsignmentNameIsNotNull() { + addCriterion("CONSIGNMENT_NAME is not null"); + return (Criteria) this; + } + + public Criteria andConsignmentNameEqualTo(String value) { + addCriterion("CONSIGNMENT_NAME =", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameNotEqualTo(String value) { + addCriterion("CONSIGNMENT_NAME <>", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameGreaterThan(String value) { + addCriterion("CONSIGNMENT_NAME >", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameGreaterThanOrEqualTo(String value) { + addCriterion("CONSIGNMENT_NAME >=", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameLessThan(String value) { + addCriterion("CONSIGNMENT_NAME <", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameLessThanOrEqualTo(String value) { + addCriterion("CONSIGNMENT_NAME <=", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameLike(String value) { + addCriterion("CONSIGNMENT_NAME like", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameNotLike(String value) { + addCriterion("CONSIGNMENT_NAME not like", value, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameIn(List values) { + addCriterion("CONSIGNMENT_NAME in", values, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameNotIn(List values) { + addCriterion("CONSIGNMENT_NAME not in", values, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameBetween(String value1, String value2) { + addCriterion("CONSIGNMENT_NAME between", value1, value2, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentNameNotBetween(String value1, String value2) { + addCriterion("CONSIGNMENT_NAME not between", value1, value2, "consignmentName"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneIsNull() { + addCriterion("CONSIGNMENT_PHONE is null"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneIsNotNull() { + addCriterion("CONSIGNMENT_PHONE is not null"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneEqualTo(String value) { + addCriterion("CONSIGNMENT_PHONE =", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneNotEqualTo(String value) { + addCriterion("CONSIGNMENT_PHONE <>", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneGreaterThan(String value) { + addCriterion("CONSIGNMENT_PHONE >", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneGreaterThanOrEqualTo(String value) { + addCriterion("CONSIGNMENT_PHONE >=", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneLessThan(String value) { + addCriterion("CONSIGNMENT_PHONE <", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneLessThanOrEqualTo(String value) { + addCriterion("CONSIGNMENT_PHONE <=", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneLike(String value) { + addCriterion("CONSIGNMENT_PHONE like", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneNotLike(String value) { + addCriterion("CONSIGNMENT_PHONE not like", value, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneIn(List values) { + addCriterion("CONSIGNMENT_PHONE in", values, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneNotIn(List values) { + addCriterion("CONSIGNMENT_PHONE not in", values, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneBetween(String value1, String value2) { + addCriterion("CONSIGNMENT_PHONE between", value1, value2, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentPhoneNotBetween(String value1, String value2) { + addCriterion("CONSIGNMENT_PHONE not between", value1, value2, "consignmentPhone"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressIsNull() { + addCriterion("CONSIGNMENT_ADDRESS is null"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressIsNotNull() { + addCriterion("CONSIGNMENT_ADDRESS is not null"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressEqualTo(String value) { + addCriterion("CONSIGNMENT_ADDRESS =", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressNotEqualTo(String value) { + addCriterion("CONSIGNMENT_ADDRESS <>", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressGreaterThan(String value) { + addCriterion("CONSIGNMENT_ADDRESS >", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressGreaterThanOrEqualTo(String value) { + addCriterion("CONSIGNMENT_ADDRESS >=", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressLessThan(String value) { + addCriterion("CONSIGNMENT_ADDRESS <", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressLessThanOrEqualTo(String value) { + addCriterion("CONSIGNMENT_ADDRESS <=", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressLike(String value) { + addCriterion("CONSIGNMENT_ADDRESS like", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressNotLike(String value) { + addCriterion("CONSIGNMENT_ADDRESS not like", value, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressIn(List values) { + addCriterion("CONSIGNMENT_ADDRESS in", values, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressNotIn(List values) { + addCriterion("CONSIGNMENT_ADDRESS not in", values, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressBetween(String value1, String value2) { + addCriterion("CONSIGNMENT_ADDRESS between", value1, value2, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andConsignmentAddressNotBetween(String value1, String value2) { + addCriterion("CONSIGNMENT_ADDRESS not between", value1, value2, "consignmentAddress"); + return (Criteria) this; + } + + public Criteria andSendTimeIsNull() { + addCriterion("SEND_TIME is null"); + return (Criteria) this; + } + + public Criteria andSendTimeIsNotNull() { + addCriterion("SEND_TIME is not null"); + return (Criteria) this; + } + + public Criteria andSendTimeEqualTo(Date value) { + addCriterionForJDBCDate("SEND_TIME =", value, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeNotEqualTo(Date value) { + addCriterionForJDBCDate("SEND_TIME <>", value, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeGreaterThan(Date value) { + addCriterionForJDBCDate("SEND_TIME >", value, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeGreaterThanOrEqualTo(Date value) { + addCriterionForJDBCDate("SEND_TIME >=", value, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeLessThan(Date value) { + addCriterionForJDBCDate("SEND_TIME <", value, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeLessThanOrEqualTo(Date value) { + addCriterionForJDBCDate("SEND_TIME <=", value, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeIn(List values) { + addCriterionForJDBCDate("SEND_TIME in", values, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeNotIn(List values) { + addCriterionForJDBCDate("SEND_TIME not in", values, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeBetween(Date value1, Date value2) { + addCriterionForJDBCDate("SEND_TIME between", value1, value2, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendTimeNotBetween(Date value1, Date value2) { + addCriterionForJDBCDate("SEND_TIME not between", value1, value2, "sendTime"); + return (Criteria) this; + } + + public Criteria andSendCountIsNull() { + addCriterion("SEND_COUNT is null"); + return (Criteria) this; + } + + public Criteria andSendCountIsNotNull() { + addCriterion("SEND_COUNT is not null"); + return (Criteria) this; + } + + public Criteria andSendCountEqualTo(Integer value) { + addCriterion("SEND_COUNT =", value, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountNotEqualTo(Integer value) { + addCriterion("SEND_COUNT <>", value, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountGreaterThan(Integer value) { + addCriterion("SEND_COUNT >", value, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountGreaterThanOrEqualTo(Integer value) { + addCriterion("SEND_COUNT >=", value, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountLessThan(Integer value) { + addCriterion("SEND_COUNT <", value, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountLessThanOrEqualTo(Integer value) { + addCriterion("SEND_COUNT <=", value, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountIn(List values) { + addCriterion("SEND_COUNT in", values, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountNotIn(List values) { + addCriterion("SEND_COUNT not in", values, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountBetween(Integer value1, Integer value2) { + addCriterion("SEND_COUNT between", value1, value2, "sendCount"); + return (Criteria) this; + } + + public Criteria andSendCountNotBetween(Integer value1, Integer value2) { + addCriterion("SEND_COUNT not between", value1, value2, "sendCount"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdAttachmentExample.java b/src/main/java/com/xmomen/module/base/entity/CdAttachmentExample.java new file mode 100644 index 0000000..17a9bfd --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdAttachmentExample.java @@ -0,0 +1,742 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class CdAttachmentExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdAttachmentExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andBusinessIdIsNull() { + addCriterion("business_id is null"); + return (Criteria) this; + } + + public Criteria andBusinessIdIsNotNull() { + addCriterion("business_id is not null"); + return (Criteria) this; + } + + public Criteria andBusinessIdEqualTo(String value) { + addCriterion("business_id =", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdNotEqualTo(String value) { + addCriterion("business_id <>", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdGreaterThan(String value) { + addCriterion("business_id >", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdGreaterThanOrEqualTo(String value) { + addCriterion("business_id >=", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdLessThan(String value) { + addCriterion("business_id <", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdLessThanOrEqualTo(String value) { + addCriterion("business_id <=", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdLike(String value) { + addCriterion("business_id like", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdNotLike(String value) { + addCriterion("business_id not like", value, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdIn(List values) { + addCriterion("business_id in", values, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdNotIn(List values) { + addCriterion("business_id not in", values, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdBetween(String value1, String value2) { + addCriterion("business_id between", value1, value2, "businessId"); + return (Criteria) this; + } + + public Criteria andBusinessIdNotBetween(String value1, String value2) { + addCriterion("business_id not between", value1, value2, "businessId"); + return (Criteria) this; + } + + public Criteria andTypeIsNull() { + addCriterion("type is null"); + return (Criteria) this; + } + + public Criteria andTypeIsNotNull() { + addCriterion("type is not null"); + return (Criteria) this; + } + + public Criteria andTypeEqualTo(String value) { + addCriterion("type =", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotEqualTo(String value) { + addCriterion("type <>", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThan(String value) { + addCriterion("type >", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeGreaterThanOrEqualTo(String value) { + addCriterion("type >=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThan(String value) { + addCriterion("type <", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLessThanOrEqualTo(String value) { + addCriterion("type <=", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeLike(String value) { + addCriterion("type like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotLike(String value) { + addCriterion("type not like", value, "type"); + return (Criteria) this; + } + + public Criteria andTypeIn(List values) { + addCriterion("type in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotIn(List values) { + addCriterion("type not in", values, "type"); + return (Criteria) this; + } + + public Criteria andTypeBetween(String value1, String value2) { + addCriterion("type between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andTypeNotBetween(String value1, String value2) { + addCriterion("type not between", value1, value2, "type"); + return (Criteria) this; + } + + public Criteria andFileNameIsNull() { + addCriterion("file_name is null"); + return (Criteria) this; + } + + public Criteria andFileNameIsNotNull() { + addCriterion("file_name is not null"); + return (Criteria) this; + } + + public Criteria andFileNameEqualTo(String value) { + addCriterion("file_name =", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotEqualTo(String value) { + addCriterion("file_name <>", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameGreaterThan(String value) { + addCriterion("file_name >", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameGreaterThanOrEqualTo(String value) { + addCriterion("file_name >=", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameLessThan(String value) { + addCriterion("file_name <", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameLessThanOrEqualTo(String value) { + addCriterion("file_name <=", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameLike(String value) { + addCriterion("file_name like", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotLike(String value) { + addCriterion("file_name not like", value, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameIn(List values) { + addCriterion("file_name in", values, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotIn(List values) { + addCriterion("file_name not in", values, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameBetween(String value1, String value2) { + addCriterion("file_name between", value1, value2, "fileName"); + return (Criteria) this; + } + + public Criteria andFileNameNotBetween(String value1, String value2) { + addCriterion("file_name not between", value1, value2, "fileName"); + return (Criteria) this; + } + + public Criteria andFileExtendIsNull() { + addCriterion("file_extend is null"); + return (Criteria) this; + } + + public Criteria andFileExtendIsNotNull() { + addCriterion("file_extend is not null"); + return (Criteria) this; + } + + public Criteria andFileExtendEqualTo(String value) { + addCriterion("file_extend =", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendNotEqualTo(String value) { + addCriterion("file_extend <>", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendGreaterThan(String value) { + addCriterion("file_extend >", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendGreaterThanOrEqualTo(String value) { + addCriterion("file_extend >=", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendLessThan(String value) { + addCriterion("file_extend <", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendLessThanOrEqualTo(String value) { + addCriterion("file_extend <=", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendLike(String value) { + addCriterion("file_extend like", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendNotLike(String value) { + addCriterion("file_extend not like", value, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendIn(List values) { + addCriterion("file_extend in", values, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendNotIn(List values) { + addCriterion("file_extend not in", values, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendBetween(String value1, String value2) { + addCriterion("file_extend between", value1, value2, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFileExtendNotBetween(String value1, String value2) { + addCriterion("file_extend not between", value1, value2, "fileExtend"); + return (Criteria) this; + } + + public Criteria andFilePathIsNull() { + addCriterion("file_path is null"); + return (Criteria) this; + } + + public Criteria andFilePathIsNotNull() { + addCriterion("file_path is not null"); + return (Criteria) this; + } + + public Criteria andFilePathEqualTo(String value) { + addCriterion("file_path =", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotEqualTo(String value) { + addCriterion("file_path <>", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathGreaterThan(String value) { + addCriterion("file_path >", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathGreaterThanOrEqualTo(String value) { + addCriterion("file_path >=", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathLessThan(String value) { + addCriterion("file_path <", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathLessThanOrEqualTo(String value) { + addCriterion("file_path <=", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathLike(String value) { + addCriterion("file_path like", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotLike(String value) { + addCriterion("file_path not like", value, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathIn(List values) { + addCriterion("file_path in", values, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotIn(List values) { + addCriterion("file_path not in", values, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathBetween(String value1, String value2) { + addCriterion("file_path between", value1, value2, "filePath"); + return (Criteria) this; + } + + public Criteria andFilePathNotBetween(String value1, String value2) { + addCriterion("file_path not between", value1, value2, "filePath"); + return (Criteria) this; + } + + public Criteria andUploadDateIsNull() { + addCriterion("upload_date is null"); + return (Criteria) this; + } + + public Criteria andUploadDateIsNotNull() { + addCriterion("upload_date is not null"); + return (Criteria) this; + } + + public Criteria andUploadDateEqualTo(Date value) { + addCriterion("upload_date =", value, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateNotEqualTo(Date value) { + addCriterion("upload_date <>", value, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateGreaterThan(Date value) { + addCriterion("upload_date >", value, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateGreaterThanOrEqualTo(Date value) { + addCriterion("upload_date >=", value, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateLessThan(Date value) { + addCriterion("upload_date <", value, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateLessThanOrEqualTo(Date value) { + addCriterion("upload_date <=", value, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateIn(List values) { + addCriterion("upload_date in", values, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateNotIn(List values) { + addCriterion("upload_date not in", values, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateBetween(Date value1, Date value2) { + addCriterion("upload_date between", value1, value2, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadDateNotBetween(Date value1, Date value2) { + addCriterion("upload_date not between", value1, value2, "uploadDate"); + return (Criteria) this; + } + + public Criteria andUploadUserIsNull() { + addCriterion("upload_user is null"); + return (Criteria) this; + } + + public Criteria andUploadUserIsNotNull() { + addCriterion("upload_user is not null"); + return (Criteria) this; + } + + public Criteria andUploadUserEqualTo(String value) { + addCriterion("upload_user =", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserNotEqualTo(String value) { + addCriterion("upload_user <>", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserGreaterThan(String value) { + addCriterion("upload_user >", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserGreaterThanOrEqualTo(String value) { + addCriterion("upload_user >=", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserLessThan(String value) { + addCriterion("upload_user <", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserLessThanOrEqualTo(String value) { + addCriterion("upload_user <=", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserLike(String value) { + addCriterion("upload_user like", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserNotLike(String value) { + addCriterion("upload_user not like", value, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserIn(List values) { + addCriterion("upload_user in", values, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserNotIn(List values) { + addCriterion("upload_user not in", values, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserBetween(String value1, String value2) { + addCriterion("upload_user between", value1, value2, "uploadUser"); + return (Criteria) this; + } + + public Criteria andUploadUserNotBetween(String value1, String value2) { + addCriterion("upload_user not between", value1, value2, "uploadUser"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdBind.java b/src/main/java/com/xmomen/module/base/entity/CdBind.java new file mode 100644 index 0000000..9c9015a --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdBind.java @@ -0,0 +1,91 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_bind") +public class CdBind extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 如果是客户绑定则存储用户ID,如果是快递员绑定则存储快递员ID + */ + private Integer userId; + + /** + * 手机号码 + */ + private String phone; + + /** + * 微信唯一识别号 + */ + private String openId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "user_id") + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + if(userId == null){ + removeValidField("userId"); + return; + } + addValidField("userId"); + } + + @Column(name = "PHONE") + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + if(phone == null){ + removeValidField("phone"); + return; + } + addValidField("phone"); + } + + @Column(name = "OPEN_ID") + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + if(openId == null){ + removeValidField("openId"); + return; + } + addValidField("openId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdCategoryExample.java b/src/main/java/com/xmomen/module/base/entity/CdCategoryExample.java new file mode 100644 index 0000000..23803f3 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdCategoryExample.java @@ -0,0 +1,391 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class CdCategoryExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdCategoryExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCategoryNameIsNull() { + addCriterion("CATEGORY_NAME is null"); + return (Criteria) this; + } + + public Criteria andCategoryNameIsNotNull() { + addCriterion("CATEGORY_NAME is not null"); + return (Criteria) this; + } + + public Criteria andCategoryNameEqualTo(String value) { + addCriterion("CATEGORY_NAME =", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameNotEqualTo(String value) { + addCriterion("CATEGORY_NAME <>", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameGreaterThan(String value) { + addCriterion("CATEGORY_NAME >", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameGreaterThanOrEqualTo(String value) { + addCriterion("CATEGORY_NAME >=", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameLessThan(String value) { + addCriterion("CATEGORY_NAME <", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameLessThanOrEqualTo(String value) { + addCriterion("CATEGORY_NAME <=", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameLike(String value) { + addCriterion("CATEGORY_NAME like", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameNotLike(String value) { + addCriterion("CATEGORY_NAME not like", value, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameIn(List values) { + addCriterion("CATEGORY_NAME in", values, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameNotIn(List values) { + addCriterion("CATEGORY_NAME not in", values, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameBetween(String value1, String value2) { + addCriterion("CATEGORY_NAME between", value1, value2, "categoryName"); + return (Criteria) this; + } + + public Criteria andCategoryNameNotBetween(String value1, String value2) { + addCriterion("CATEGORY_NAME not between", value1, value2, "categoryName"); + return (Criteria) this; + } + + public Criteria andParentIdIsNull() { + addCriterion("PARENT_ID is null"); + return (Criteria) this; + } + + public Criteria andParentIdIsNotNull() { + addCriterion("PARENT_ID is not null"); + return (Criteria) this; + } + + public Criteria andParentIdEqualTo(Integer value) { + addCriterion("PARENT_ID =", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotEqualTo(Integer value) { + addCriterion("PARENT_ID <>", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThan(Integer value) { + addCriterion("PARENT_ID >", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdGreaterThanOrEqualTo(Integer value) { + addCriterion("PARENT_ID >=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThan(Integer value) { + addCriterion("PARENT_ID <", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdLessThanOrEqualTo(Integer value) { + addCriterion("PARENT_ID <=", value, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdIn(List values) { + addCriterion("PARENT_ID in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotIn(List values) { + addCriterion("PARENT_ID not in", values, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdBetween(Integer value1, Integer value2) { + addCriterion("PARENT_ID between", value1, value2, "parentId"); + return (Criteria) this; + } + + public Criteria andParentIdNotBetween(Integer value1, Integer value2) { + addCriterion("PARENT_ID not between", value1, value2, "parentId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdCompany.java b/src/main/java/com/xmomen/module/base/entity/CdCompany.java new file mode 100644 index 0000000..9053a02 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdCompany.java @@ -0,0 +1,129 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_company") +public class CdCompany extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 单位编号 + */ + private String companyCode; + + /** + * 单位名称 + */ + private String companyName; + + /** + * 单位地址 + */ + private String companyAddress; + + /** + * 单位联系人 + */ + private String companyLeader; + + /** + * 联系人电话 + */ + private String companyLeaderTel; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "COMPANY_CODE") + public String getCompanyCode() { + return companyCode; + } + + public void setCompanyCode(String companyCode) { + this.companyCode = companyCode; + if(companyCode == null){ + removeValidField("companyCode"); + return; + } + addValidField("companyCode"); + } + + @Column(name = "COMPANY_NAME") + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + if(companyName == null){ + removeValidField("companyName"); + return; + } + addValidField("companyName"); + } + + @Column(name = "COMPANY_ADDRESS") + public String getCompanyAddress() { + return companyAddress; + } + + public void setCompanyAddress(String companyAddress) { + this.companyAddress = companyAddress; + if(companyAddress == null){ + removeValidField("companyAddress"); + return; + } + addValidField("companyAddress"); + } + + @Column(name = "COMPANY_LEADER") + public String getCompanyLeader() { + return companyLeader; + } + + public void setCompanyLeader(String companyLeader) { + this.companyLeader = companyLeader; + if(companyLeader == null){ + removeValidField("companyLeader"); + return; + } + addValidField("companyLeader"); + } + + @Column(name = "COMPANY_LEADER_TEL") + public String getCompanyLeaderTel() { + return companyLeaderTel; + } + + public void setCompanyLeaderTel(String companyLeaderTel) { + this.companyLeaderTel = companyLeaderTel; + if(companyLeaderTel == null){ + removeValidField("companyLeaderTel"); + return; + } + addValidField("companyLeaderTel"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdContract.java b/src/main/java/com/xmomen/module/base/entity/CdContract.java new file mode 100644 index 0000000..03b865d --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdContract.java @@ -0,0 +1,226 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_contract") +public class CdContract extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 合同编号 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 合同价的客户 + */ + private Integer cdMemberId; + + /** + * 合同价的单位 + */ + private Integer cdCompanyId; + + /** + * 1-部分产品,2-全部产品 + */ + private Integer scope; + + /** + * 仅当适用范围为全部产品时适用 + */ + private BigDecimal contractPrice; + + /** + * 合同开始时间 + */ + private Date beginTime; + + /** + * 合同结束时间 + */ + private Date endTime; + + /** + * 0-未作废,1-作废 + */ + private Integer isDel; + + /** + * 0-未审核,1-审核 + */ + private Integer isAuditor; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "CONTRACT_CODE") + public String getContractCode() { + return contractCode; + } + + public void setContractCode(String contractCode) { + this.contractCode = contractCode; + if(contractCode == null){ + removeValidField("contractCode"); + return; + } + addValidField("contractCode"); + } + + @Column(name = "CONTRACT_NAME") + public String getContractName() { + return contractName; + } + + public void setContractName(String contractName) { + this.contractName = contractName; + if(contractName == null){ + removeValidField("contractName"); + return; + } + addValidField("contractName"); + } + + @Column(name = "CD_MEMBER_ID") + public Integer getCdMemberId() { + return cdMemberId; + } + + public void setCdMemberId(Integer cdMemberId) { + this.cdMemberId = cdMemberId; + if(cdMemberId == null){ + removeValidField("cdMemberId"); + return; + } + addValidField("cdMemberId"); + } + + @Column(name = "CD_COMPANY_ID") + public Integer getCdCompanyId() { + return cdCompanyId; + } + + public void setCdCompanyId(Integer cdCompanyId) { + this.cdCompanyId = cdCompanyId; + if(cdCompanyId == null){ + removeValidField("cdCompanyId"); + return; + } + addValidField("cdCompanyId"); + } + + @Column(name = "SCOPE") + public Integer getScope() { + return scope; + } + + public void setScope(Integer scope) { + this.scope = scope; + if(scope == null){ + removeValidField("scope"); + return; + } + addValidField("scope"); + } + + @Column(name = "CONTRACT_PRICE") + public BigDecimal getContractPrice() { + return contractPrice; + } + + public void setContractPrice(BigDecimal contractPrice) { + this.contractPrice = contractPrice; + if(contractPrice == null){ + removeValidField("contractPrice"); + return; + } + addValidField("contractPrice"); + } + + @Column(name = "BEGIN_TIME") + public Date getBeginTime() { + return beginTime; + } + + public void setBeginTime(Date beginTime) { + this.beginTime = beginTime; + if(beginTime == null){ + removeValidField("beginTime"); + return; + } + addValidField("beginTime"); + } + + @Column(name = "END_TIME") + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + if(endTime == null){ + removeValidField("endTime"); + return; + } + addValidField("endTime"); + } + + @Column(name = "IS_DEL") + public Integer getIsDel() { + return isDel; + } + + public void setIsDel(Integer isDel) { + this.isDel = isDel; + if(isDel == null){ + removeValidField("isDel"); + return; + } + addValidField("isDel"); + } + + @Column(name = "IS_AUDITOR") + public Integer getIsAuditor() { + return isAuditor; + } + + public void setIsAuditor(Integer isAuditor) { + this.isAuditor = isAuditor; + if(isAuditor == null){ + removeValidField("isAuditor"); + return; + } + addValidField("isAuditor"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdContractItem.java b/src/main/java/com/xmomen/module/base/entity/CdContractItem.java new file mode 100644 index 0000000..e569d8c --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdContractItem.java @@ -0,0 +1,130 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_contract_item") +public class CdContractItem extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 产品合同 + */ + private Integer cdContractId; + + /** + * 优惠方式 + */ + private Integer contractType; + + /** + * 当合同适用范围为1的时候,每种产品要设定对应的合同价 + */ + private Integer cdItemId; + + /** + * 折扣 + */ + private BigDecimal discount; + + /** + * 合同价格 + */ + private BigDecimal contractValue; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "CD_CONTRACT_ID") + public Integer getCdContractId() { + return cdContractId; + } + + public void setCdContractId(Integer cdContractId) { + this.cdContractId = cdContractId; + if(cdContractId == null){ + removeValidField("cdContractId"); + return; + } + addValidField("cdContractId"); + } + + @Column(name = "CONTRACT_TYPE") + public Integer getContractType() { + return contractType; + } + + public void setContractType(Integer contractType) { + this.contractType = contractType; + if(contractType == null){ + removeValidField("contractType"); + return; + } + addValidField("contractType"); + } + + @Column(name = "CD_ITEM_ID") + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + if(cdItemId == null){ + removeValidField("cdItemId"); + return; + } + addValidField("cdItemId"); + } + + @Column(name = "DISCOUNT") + public BigDecimal getDiscount() { + return discount; + } + + public void setDiscount(BigDecimal discount) { + this.discount = discount; + if(discount == null){ + removeValidField("discount"); + return; + } + addValidField("discount"); + } + + @Column(name = "CONTRACT_VALUE") + public BigDecimal getContractValue() { + return contractValue; + } + + public void setContractValue(BigDecimal contractValue) { + this.contractValue = contractValue; + if(contractValue == null){ + removeValidField("contractValue"); + return; + } + addValidField("contractValue"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdContractItemExample.java b/src/main/java/com/xmomen/module/base/entity/CdContractItemExample.java new file mode 100644 index 0000000..96ed42a --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdContractItemExample.java @@ -0,0 +1,562 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +public class CdContractItemExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdContractItemExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCdContractIdIsNull() { + addCriterion("CD_CONTRACT_ID is null"); + return (Criteria) this; + } + + public Criteria andCdContractIdIsNotNull() { + addCriterion("CD_CONTRACT_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdContractIdEqualTo(Integer value) { + addCriterion("CD_CONTRACT_ID =", value, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdNotEqualTo(Integer value) { + addCriterion("CD_CONTRACT_ID <>", value, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdGreaterThan(Integer value) { + addCriterion("CD_CONTRACT_ID >", value, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_CONTRACT_ID >=", value, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdLessThan(Integer value) { + addCriterion("CD_CONTRACT_ID <", value, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_CONTRACT_ID <=", value, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdIn(List values) { + addCriterion("CD_CONTRACT_ID in", values, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdNotIn(List values) { + addCriterion("CD_CONTRACT_ID not in", values, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdBetween(Integer value1, Integer value2) { + addCriterion("CD_CONTRACT_ID between", value1, value2, "cdContractId"); + return (Criteria) this; + } + + public Criteria andCdContractIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_CONTRACT_ID not between", value1, value2, "cdContractId"); + return (Criteria) this; + } + + public Criteria andContractTypeIsNull() { + addCriterion("CONTRACT_TYPE is null"); + return (Criteria) this; + } + + public Criteria andContractTypeIsNotNull() { + addCriterion("CONTRACT_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andContractTypeEqualTo(Integer value) { + addCriterion("CONTRACT_TYPE =", value, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeNotEqualTo(Integer value) { + addCriterion("CONTRACT_TYPE <>", value, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeGreaterThan(Integer value) { + addCriterion("CONTRACT_TYPE >", value, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("CONTRACT_TYPE >=", value, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeLessThan(Integer value) { + addCriterion("CONTRACT_TYPE <", value, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeLessThanOrEqualTo(Integer value) { + addCriterion("CONTRACT_TYPE <=", value, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeIn(List values) { + addCriterion("CONTRACT_TYPE in", values, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeNotIn(List values) { + addCriterion("CONTRACT_TYPE not in", values, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeBetween(Integer value1, Integer value2) { + addCriterion("CONTRACT_TYPE between", value1, value2, "contractType"); + return (Criteria) this; + } + + public Criteria andContractTypeNotBetween(Integer value1, Integer value2) { + addCriterion("CONTRACT_TYPE not between", value1, value2, "contractType"); + return (Criteria) this; + } + + public Criteria andCdItemIdIsNull() { + addCriterion("CD_ITEM_ID is null"); + return (Criteria) this; + } + + public Criteria andCdItemIdIsNotNull() { + addCriterion("CD_ITEM_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdItemIdEqualTo(Integer value) { + addCriterion("CD_ITEM_ID =", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdNotEqualTo(Integer value) { + addCriterion("CD_ITEM_ID <>", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdGreaterThan(Integer value) { + addCriterion("CD_ITEM_ID >", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_ITEM_ID >=", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdLessThan(Integer value) { + addCriterion("CD_ITEM_ID <", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_ITEM_ID <=", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdIn(List values) { + addCriterion("CD_ITEM_ID in", values, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdNotIn(List values) { + addCriterion("CD_ITEM_ID not in", values, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdBetween(Integer value1, Integer value2) { + addCriterion("CD_ITEM_ID between", value1, value2, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_ITEM_ID not between", value1, value2, "cdItemId"); + return (Criteria) this; + } + + public Criteria andDiscountIsNull() { + addCriterion("DISCOUNT is null"); + return (Criteria) this; + } + + public Criteria andDiscountIsNotNull() { + addCriterion("DISCOUNT is not null"); + return (Criteria) this; + } + + public Criteria andDiscountEqualTo(BigDecimal value) { + addCriterion("DISCOUNT =", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountNotEqualTo(BigDecimal value) { + addCriterion("DISCOUNT <>", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountGreaterThan(BigDecimal value) { + addCriterion("DISCOUNT >", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("DISCOUNT >=", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountLessThan(BigDecimal value) { + addCriterion("DISCOUNT <", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountLessThanOrEqualTo(BigDecimal value) { + addCriterion("DISCOUNT <=", value, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountIn(List values) { + addCriterion("DISCOUNT in", values, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountNotIn(List values) { + addCriterion("DISCOUNT not in", values, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("DISCOUNT between", value1, value2, "discount"); + return (Criteria) this; + } + + public Criteria andDiscountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("DISCOUNT not between", value1, value2, "discount"); + return (Criteria) this; + } + + public Criteria andContractValueIsNull() { + addCriterion("CONTRACT_VALUE is null"); + return (Criteria) this; + } + + public Criteria andContractValueIsNotNull() { + addCriterion("CONTRACT_VALUE is not null"); + return (Criteria) this; + } + + public Criteria andContractValueEqualTo(BigDecimal value) { + addCriterion("CONTRACT_VALUE =", value, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueNotEqualTo(BigDecimal value) { + addCriterion("CONTRACT_VALUE <>", value, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueGreaterThan(BigDecimal value) { + addCriterion("CONTRACT_VALUE >", value, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("CONTRACT_VALUE >=", value, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueLessThan(BigDecimal value) { + addCriterion("CONTRACT_VALUE <", value, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueLessThanOrEqualTo(BigDecimal value) { + addCriterion("CONTRACT_VALUE <=", value, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueIn(List values) { + addCriterion("CONTRACT_VALUE in", values, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueNotIn(List values) { + addCriterion("CONTRACT_VALUE not in", values, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("CONTRACT_VALUE between", value1, value2, "contractValue"); + return (Criteria) this; + } + + public Criteria andContractValueNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("CONTRACT_VALUE not between", value1, value2, "contractValue"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdCoupon.java b/src/main/java/com/xmomen/module/base/entity/CdCoupon.java new file mode 100644 index 0000000..ab31de5 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdCoupon.java @@ -0,0 +1,435 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_coupon") +public class CdCoupon extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 卡或者劵,1-卡,2-劵 + */ + private Integer couponType; + + /** + * 卡/劵类型 + */ + private Integer couponCategory; + + /** + * 卡号 + */ + private String couponNumber; + + /** + * 密码 + */ + private String couponPassword; + + /** + * 固定金额 + */ + private BigDecimal couponValue; + + /** + * 可用余额 + */ + private BigDecimal userPrice; + + /** + * 单位 + */ + private Integer cdCompanyId; + + /** + * 客服经理 + */ + private Integer cdUserId; + + /** + * 描述 + */ + private String couponDesc; + + /** + * 0-未使用,1-已使用 + */ + private Integer isUsed; + + /** + * 0-无效,1-有效 + */ + private Integer isUseful; + + /** + * 是否赠送。0-否,1-是 + */ + private Integer isGift; + + /** + * 是否发卡,0-未发,1-已发 + */ + private Integer isSend; + + /** + * 付款方式 1-预付款,2-后付款 + */ + private Integer paymentType; + + /** + * 有效开始时间 + */ + private Date beginTime; + + /** + * 有效结束时间 + */ + private Date endTime; + + /** + * + */ + private String notes; + + /** + * 0-未完结 1-完结 + */ + private Integer isOver; + + /** + * 审核时间 + */ + private Date auditDate; + + /** + * 发卡批次 + */ + private String batch; + + /** + * 卡激活时间,劵使用时间 + */ + private Date usefulDate; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "COUPON_TYPE") + public Integer getCouponType() { + return couponType; + } + + public void setCouponType(Integer couponType) { + this.couponType = couponType; + if(couponType == null){ + removeValidField("couponType"); + return; + } + addValidField("couponType"); + } + + @Column(name = "COUPON_CATEGORY") + public Integer getCouponCategory() { + return couponCategory; + } + + public void setCouponCategory(Integer couponCategory) { + this.couponCategory = couponCategory; + if(couponCategory == null){ + removeValidField("couponCategory"); + return; + } + addValidField("couponCategory"); + } + + @Column(name = "COUPON_NUMBER") + public String getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + if(couponNumber == null){ + removeValidField("couponNumber"); + return; + } + addValidField("couponNumber"); + } + + @Column(name = "COUPON_PASSWORD") + public String getCouponPassword() { + return couponPassword; + } + + public void setCouponPassword(String couponPassword) { + this.couponPassword = couponPassword; + if(couponPassword == null){ + removeValidField("couponPassword"); + return; + } + addValidField("couponPassword"); + } + + @Column(name = "COUPON_VALUE") + public BigDecimal getCouponValue() { + return couponValue; + } + + public void setCouponValue(BigDecimal couponValue) { + this.couponValue = couponValue; + if(couponValue == null){ + removeValidField("couponValue"); + return; + } + addValidField("couponValue"); + } + + @Column(name = "USER_PRICE") + public BigDecimal getUserPrice() { + return userPrice; + } + + public void setUserPrice(BigDecimal userPrice) { + this.userPrice = userPrice; + if(userPrice == null){ + removeValidField("userPrice"); + return; + } + addValidField("userPrice"); + } + + @Column(name = "CD_COMPANY_ID") + public Integer getCdCompanyId() { + return cdCompanyId; + } + + public void setCdCompanyId(Integer cdCompanyId) { + this.cdCompanyId = cdCompanyId; + if(cdCompanyId == null){ + removeValidField("cdCompanyId"); + return; + } + addValidField("cdCompanyId"); + } + + @Column(name = "CD_USER_ID") + public Integer getCdUserId() { + return cdUserId; + } + + public void setCdUserId(Integer cdUserId) { + this.cdUserId = cdUserId; + if(cdUserId == null){ + removeValidField("cdUserId"); + return; + } + addValidField("cdUserId"); + } + + @Column(name = "COUPON_DESC") + public String getCouponDesc() { + return couponDesc; + } + + public void setCouponDesc(String couponDesc) { + this.couponDesc = couponDesc; + if(couponDesc == null){ + removeValidField("couponDesc"); + return; + } + addValidField("couponDesc"); + } + + @Column(name = "IS_USED") + public Integer getIsUsed() { + return isUsed; + } + + public void setIsUsed(Integer isUsed) { + this.isUsed = isUsed; + if(isUsed == null){ + removeValidField("isUsed"); + return; + } + addValidField("isUsed"); + } + + @Column(name = "IS_USEFUL") + public Integer getIsUseful() { + return isUseful; + } + + public void setIsUseful(Integer isUseful) { + this.isUseful = isUseful; + if(isUseful == null){ + removeValidField("isUseful"); + return; + } + addValidField("isUseful"); + } + + @Column(name = "IS_GIFT") + public Integer getIsGift() { + return isGift; + } + + public void setIsGift(Integer isGift) { + this.isGift = isGift; + if(isGift == null){ + removeValidField("isGift"); + return; + } + addValidField("isGift"); + } + + @Column(name = "IS_SEND") + public Integer getIsSend() { + return isSend; + } + + public void setIsSend(Integer isSend) { + this.isSend = isSend; + if(isSend == null){ + removeValidField("isSend"); + return; + } + addValidField("isSend"); + } + + @Column(name = "PAYMENT_TYPE") + public Integer getPaymentType() { + return paymentType; + } + + public void setPaymentType(Integer paymentType) { + this.paymentType = paymentType; + if(paymentType == null){ + removeValidField("paymentType"); + return; + } + addValidField("paymentType"); + } + + @Column(name = "BEGIN_TIME") + public Date getBeginTime() { + return beginTime; + } + + public void setBeginTime(Date beginTime) { + this.beginTime = beginTime; + if(beginTime == null){ + removeValidField("beginTime"); + return; + } + addValidField("beginTime"); + } + + @Column(name = "END_TIME") + public Date getEndTime() { + return endTime; + } + + public void setEndTime(Date endTime) { + this.endTime = endTime; + if(endTime == null){ + removeValidField("endTime"); + return; + } + addValidField("endTime"); + } + + @Column(name = "NOTES") + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + if(notes == null){ + removeValidField("notes"); + return; + } + addValidField("notes"); + } + + @Column(name = "IS_OVER") + public Integer getIsOver() { + return isOver; + } + + public void setIsOver(Integer isOver) { + this.isOver = isOver; + if(isOver == null){ + removeValidField("isOver"); + return; + } + addValidField("isOver"); + } + + @Column(name = "AUDIT_DATE") + public Date getAuditDate() { + return auditDate; + } + + public void setAuditDate(Date auditDate) { + this.auditDate = auditDate; + if(auditDate == null){ + removeValidField("auditDate"); + return; + } + addValidField("auditDate"); + } + + @Column(name = "BATCH") + public String getBatch() { + return batch; + } + + public void setBatch(String batch) { + this.batch = batch; + if(batch == null){ + removeValidField("batch"); + return; + } + addValidField("batch"); + } + + @Column(name = "USEFUL_DATE") + public Date getUsefulDate() { + return usefulDate; + } + + public void setUsefulDate(Date usefulDate) { + this.usefulDate = usefulDate; + if(usefulDate == null){ + removeValidField("usefulDate"); + return; + } + addValidField("usefulDate"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdCouponCategory.java b/src/main/java/com/xmomen/module/base/entity/CdCouponCategory.java new file mode 100644 index 0000000..876b411 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdCouponCategory.java @@ -0,0 +1,72 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_coupon_category") +public class CdCouponCategory extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 类别类型(1-卡,2-劵) + */ + private Integer categoryType; + + /** + * 类别名称 + */ + private String categoryName; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "CATEGORY_TYPE") + public Integer getCategoryType() { + return categoryType; + } + + public void setCategoryType(Integer categoryType) { + this.categoryType = categoryType; + if(categoryType == null){ + removeValidField("categoryType"); + return; + } + addValidField("categoryType"); + } + + @Column(name = "CATEGORY_NAME") + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + if(categoryName == null){ + removeValidField("categoryName"); + return; + } + addValidField("categoryName"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdCouponCategoryRefExample.java b/src/main/java/com/xmomen/module/base/entity/CdCouponCategoryRefExample.java new file mode 100644 index 0000000..91aeff2 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdCouponCategoryRefExample.java @@ -0,0 +1,591 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class CdCouponCategoryRefExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdCouponCategoryRefExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdIsNull() { + addCriterion("CD_COUPON_CATEGORY_ID is null"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdIsNotNull() { + addCriterion("CD_COUPON_CATEGORY_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdEqualTo(Integer value) { + addCriterion("CD_COUPON_CATEGORY_ID =", value, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdNotEqualTo(Integer value) { + addCriterion("CD_COUPON_CATEGORY_ID <>", value, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdGreaterThan(Integer value) { + addCriterion("CD_COUPON_CATEGORY_ID >", value, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_COUPON_CATEGORY_ID >=", value, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdLessThan(Integer value) { + addCriterion("CD_COUPON_CATEGORY_ID <", value, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_COUPON_CATEGORY_ID <=", value, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdIn(List values) { + addCriterion("CD_COUPON_CATEGORY_ID in", values, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdNotIn(List values) { + addCriterion("CD_COUPON_CATEGORY_ID not in", values, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdBetween(Integer value1, Integer value2) { + addCriterion("CD_COUPON_CATEGORY_ID between", value1, value2, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCouponCategoryIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_COUPON_CATEGORY_ID not between", value1, value2, "cdCouponCategoryId"); + return (Criteria) this; + } + + public Criteria andRefTypeIsNull() { + addCriterion("REF_TYPE is null"); + return (Criteria) this; + } + + public Criteria andRefTypeIsNotNull() { + addCriterion("REF_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andRefTypeEqualTo(String value) { + addCriterion("REF_TYPE =", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeNotEqualTo(String value) { + addCriterion("REF_TYPE <>", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeGreaterThan(String value) { + addCriterion("REF_TYPE >", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeGreaterThanOrEqualTo(String value) { + addCriterion("REF_TYPE >=", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeLessThan(String value) { + addCriterion("REF_TYPE <", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeLessThanOrEqualTo(String value) { + addCriterion("REF_TYPE <=", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeLike(String value) { + addCriterion("REF_TYPE like", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeNotLike(String value) { + addCriterion("REF_TYPE not like", value, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeIn(List values) { + addCriterion("REF_TYPE in", values, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeNotIn(List values) { + addCriterion("REF_TYPE not in", values, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeBetween(String value1, String value2) { + addCriterion("REF_TYPE between", value1, value2, "refType"); + return (Criteria) this; + } + + public Criteria andRefTypeNotBetween(String value1, String value2) { + addCriterion("REF_TYPE not between", value1, value2, "refType"); + return (Criteria) this; + } + + public Criteria andRefNameIsNull() { + addCriterion("REF_NAME is null"); + return (Criteria) this; + } + + public Criteria andRefNameIsNotNull() { + addCriterion("REF_NAME is not null"); + return (Criteria) this; + } + + public Criteria andRefNameEqualTo(String value) { + addCriterion("REF_NAME =", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameNotEqualTo(String value) { + addCriterion("REF_NAME <>", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameGreaterThan(String value) { + addCriterion("REF_NAME >", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameGreaterThanOrEqualTo(String value) { + addCriterion("REF_NAME >=", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameLessThan(String value) { + addCriterion("REF_NAME <", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameLessThanOrEqualTo(String value) { + addCriterion("REF_NAME <=", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameLike(String value) { + addCriterion("REF_NAME like", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameNotLike(String value) { + addCriterion("REF_NAME not like", value, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameIn(List values) { + addCriterion("REF_NAME in", values, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameNotIn(List values) { + addCriterion("REF_NAME not in", values, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameBetween(String value1, String value2) { + addCriterion("REF_NAME between", value1, value2, "refName"); + return (Criteria) this; + } + + public Criteria andRefNameNotBetween(String value1, String value2) { + addCriterion("REF_NAME not between", value1, value2, "refName"); + return (Criteria) this; + } + + public Criteria andRefValueIsNull() { + addCriterion("REF_VALUE is null"); + return (Criteria) this; + } + + public Criteria andRefValueIsNotNull() { + addCriterion("REF_VALUE is not null"); + return (Criteria) this; + } + + public Criteria andRefValueEqualTo(String value) { + addCriterion("REF_VALUE =", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueNotEqualTo(String value) { + addCriterion("REF_VALUE <>", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueGreaterThan(String value) { + addCriterion("REF_VALUE >", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueGreaterThanOrEqualTo(String value) { + addCriterion("REF_VALUE >=", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueLessThan(String value) { + addCriterion("REF_VALUE <", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueLessThanOrEqualTo(String value) { + addCriterion("REF_VALUE <=", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueLike(String value) { + addCriterion("REF_VALUE like", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueNotLike(String value) { + addCriterion("REF_VALUE not like", value, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueIn(List values) { + addCriterion("REF_VALUE in", values, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueNotIn(List values) { + addCriterion("REF_VALUE not in", values, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueBetween(String value1, String value2) { + addCriterion("REF_VALUE between", value1, value2, "refValue"); + return (Criteria) this; + } + + public Criteria andRefValueNotBetween(String value1, String value2) { + addCriterion("REF_VALUE not between", value1, value2, "refValue"); + return (Criteria) this; + } + + public Criteria andRefCountIsNull() { + addCriterion("REF_COUNT is null"); + return (Criteria) this; + } + + public Criteria andRefCountIsNotNull() { + addCriterion("REF_COUNT is not null"); + return (Criteria) this; + } + + public Criteria andRefCountEqualTo(Integer value) { + addCriterion("REF_COUNT =", value, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountNotEqualTo(Integer value) { + addCriterion("REF_COUNT <>", value, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountGreaterThan(Integer value) { + addCriterion("REF_COUNT >", value, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountGreaterThanOrEqualTo(Integer value) { + addCriterion("REF_COUNT >=", value, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountLessThan(Integer value) { + addCriterion("REF_COUNT <", value, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountLessThanOrEqualTo(Integer value) { + addCriterion("REF_COUNT <=", value, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountIn(List values) { + addCriterion("REF_COUNT in", values, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountNotIn(List values) { + addCriterion("REF_COUNT not in", values, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountBetween(Integer value1, Integer value2) { + addCriterion("REF_COUNT between", value1, value2, "refCount"); + return (Criteria) this; + } + + public Criteria andRefCountNotBetween(Integer value1, Integer value2) { + addCriterion("REF_COUNT not between", value1, value2, "refCount"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdCouponExample.java b/src/main/java/com/xmomen/module/base/entity/CdCouponExample.java new file mode 100644 index 0000000..02fec09 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdCouponExample.java @@ -0,0 +1,1573 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class CdCouponExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdCouponExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCouponTypeIsNull() { + addCriterion("COUPON_TYPE is null"); + return (Criteria) this; + } + + public Criteria andCouponTypeIsNotNull() { + addCriterion("COUPON_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andCouponTypeEqualTo(Integer value) { + addCriterion("COUPON_TYPE =", value, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeNotEqualTo(Integer value) { + addCriterion("COUPON_TYPE <>", value, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeGreaterThan(Integer value) { + addCriterion("COUPON_TYPE >", value, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("COUPON_TYPE >=", value, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeLessThan(Integer value) { + addCriterion("COUPON_TYPE <", value, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeLessThanOrEqualTo(Integer value) { + addCriterion("COUPON_TYPE <=", value, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeIn(List values) { + addCriterion("COUPON_TYPE in", values, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeNotIn(List values) { + addCriterion("COUPON_TYPE not in", values, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeBetween(Integer value1, Integer value2) { + addCriterion("COUPON_TYPE between", value1, value2, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponTypeNotBetween(Integer value1, Integer value2) { + addCriterion("COUPON_TYPE not between", value1, value2, "couponType"); + return (Criteria) this; + } + + public Criteria andCouponCategoryIsNull() { + addCriterion("COUPON_CATEGORY is null"); + return (Criteria) this; + } + + public Criteria andCouponCategoryIsNotNull() { + addCriterion("COUPON_CATEGORY is not null"); + return (Criteria) this; + } + + public Criteria andCouponCategoryEqualTo(Integer value) { + addCriterion("COUPON_CATEGORY =", value, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryNotEqualTo(Integer value) { + addCriterion("COUPON_CATEGORY <>", value, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryGreaterThan(Integer value) { + addCriterion("COUPON_CATEGORY >", value, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryGreaterThanOrEqualTo(Integer value) { + addCriterion("COUPON_CATEGORY >=", value, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryLessThan(Integer value) { + addCriterion("COUPON_CATEGORY <", value, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryLessThanOrEqualTo(Integer value) { + addCriterion("COUPON_CATEGORY <=", value, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryIn(List values) { + addCriterion("COUPON_CATEGORY in", values, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryNotIn(List values) { + addCriterion("COUPON_CATEGORY not in", values, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryBetween(Integer value1, Integer value2) { + addCriterion("COUPON_CATEGORY between", value1, value2, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponCategoryNotBetween(Integer value1, Integer value2) { + addCriterion("COUPON_CATEGORY not between", value1, value2, "couponCategory"); + return (Criteria) this; + } + + public Criteria andCouponNumberIsNull() { + addCriterion("COUPON_NUMBER is null"); + return (Criteria) this; + } + + public Criteria andCouponNumberIsNotNull() { + addCriterion("COUPON_NUMBER is not null"); + return (Criteria) this; + } + + public Criteria andCouponNumberEqualTo(String value) { + addCriterion("COUPON_NUMBER =", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotEqualTo(String value) { + addCriterion("COUPON_NUMBER <>", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberGreaterThan(String value) { + addCriterion("COUPON_NUMBER >", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberGreaterThanOrEqualTo(String value) { + addCriterion("COUPON_NUMBER >=", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberLessThan(String value) { + addCriterion("COUPON_NUMBER <", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberLessThanOrEqualTo(String value) { + addCriterion("COUPON_NUMBER <=", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberLike(String value) { + addCriterion("COUPON_NUMBER like", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotLike(String value) { + addCriterion("COUPON_NUMBER not like", value, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberIn(List values) { + addCriterion("COUPON_NUMBER in", values, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotIn(List values) { + addCriterion("COUPON_NUMBER not in", values, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberBetween(String value1, String value2) { + addCriterion("COUPON_NUMBER between", value1, value2, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponNumberNotBetween(String value1, String value2) { + addCriterion("COUPON_NUMBER not between", value1, value2, "couponNumber"); + return (Criteria) this; + } + + public Criteria andCouponPasswordIsNull() { + addCriterion("COUPON_PASSWORD is null"); + return (Criteria) this; + } + + public Criteria andCouponPasswordIsNotNull() { + addCriterion("COUPON_PASSWORD is not null"); + return (Criteria) this; + } + + public Criteria andCouponPasswordEqualTo(String value) { + addCriterion("COUPON_PASSWORD =", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordNotEqualTo(String value) { + addCriterion("COUPON_PASSWORD <>", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordGreaterThan(String value) { + addCriterion("COUPON_PASSWORD >", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordGreaterThanOrEqualTo(String value) { + addCriterion("COUPON_PASSWORD >=", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordLessThan(String value) { + addCriterion("COUPON_PASSWORD <", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordLessThanOrEqualTo(String value) { + addCriterion("COUPON_PASSWORD <=", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordLike(String value) { + addCriterion("COUPON_PASSWORD like", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordNotLike(String value) { + addCriterion("COUPON_PASSWORD not like", value, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordIn(List values) { + addCriterion("COUPON_PASSWORD in", values, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordNotIn(List values) { + addCriterion("COUPON_PASSWORD not in", values, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordBetween(String value1, String value2) { + addCriterion("COUPON_PASSWORD between", value1, value2, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponPasswordNotBetween(String value1, String value2) { + addCriterion("COUPON_PASSWORD not between", value1, value2, "couponPassword"); + return (Criteria) this; + } + + public Criteria andCouponValueIsNull() { + addCriterion("COUPON_VALUE is null"); + return (Criteria) this; + } + + public Criteria andCouponValueIsNotNull() { + addCriterion("COUPON_VALUE is not null"); + return (Criteria) this; + } + + public Criteria andCouponValueEqualTo(BigDecimal value) { + addCriterion("COUPON_VALUE =", value, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueNotEqualTo(BigDecimal value) { + addCriterion("COUPON_VALUE <>", value, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueGreaterThan(BigDecimal value) { + addCriterion("COUPON_VALUE >", value, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("COUPON_VALUE >=", value, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueLessThan(BigDecimal value) { + addCriterion("COUPON_VALUE <", value, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueLessThanOrEqualTo(BigDecimal value) { + addCriterion("COUPON_VALUE <=", value, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueIn(List values) { + addCriterion("COUPON_VALUE in", values, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueNotIn(List values) { + addCriterion("COUPON_VALUE not in", values, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("COUPON_VALUE between", value1, value2, "couponValue"); + return (Criteria) this; + } + + public Criteria andCouponValueNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("COUPON_VALUE not between", value1, value2, "couponValue"); + return (Criteria) this; + } + + public Criteria andUserPriceIsNull() { + addCriterion("USER_PRICE is null"); + return (Criteria) this; + } + + public Criteria andUserPriceIsNotNull() { + addCriterion("USER_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andUserPriceEqualTo(BigDecimal value) { + addCriterion("USER_PRICE =", value, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceNotEqualTo(BigDecimal value) { + addCriterion("USER_PRICE <>", value, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceGreaterThan(BigDecimal value) { + addCriterion("USER_PRICE >", value, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("USER_PRICE >=", value, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceLessThan(BigDecimal value) { + addCriterion("USER_PRICE <", value, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("USER_PRICE <=", value, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceIn(List values) { + addCriterion("USER_PRICE in", values, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceNotIn(List values) { + addCriterion("USER_PRICE not in", values, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("USER_PRICE between", value1, value2, "userPrice"); + return (Criteria) this; + } + + public Criteria andUserPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("USER_PRICE not between", value1, value2, "userPrice"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdIsNull() { + addCriterion("CD_COMPANY_ID is null"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdIsNotNull() { + addCriterion("CD_COMPANY_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID =", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdNotEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID <>", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdGreaterThan(Integer value) { + addCriterion("CD_COMPANY_ID >", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID >=", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdLessThan(Integer value) { + addCriterion("CD_COMPANY_ID <", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID <=", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdIn(List values) { + addCriterion("CD_COMPANY_ID in", values, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdNotIn(List values) { + addCriterion("CD_COMPANY_ID not in", values, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdBetween(Integer value1, Integer value2) { + addCriterion("CD_COMPANY_ID between", value1, value2, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_COMPANY_ID not between", value1, value2, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdUserIdIsNull() { + addCriterion("CD_USER_ID is null"); + return (Criteria) this; + } + + public Criteria andCdUserIdIsNotNull() { + addCriterion("CD_USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdUserIdEqualTo(Integer value) { + addCriterion("CD_USER_ID =", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdNotEqualTo(Integer value) { + addCriterion("CD_USER_ID <>", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdGreaterThan(Integer value) { + addCriterion("CD_USER_ID >", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_USER_ID >=", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdLessThan(Integer value) { + addCriterion("CD_USER_ID <", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_USER_ID <=", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdIn(List values) { + addCriterion("CD_USER_ID in", values, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdNotIn(List values) { + addCriterion("CD_USER_ID not in", values, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdBetween(Integer value1, Integer value2) { + addCriterion("CD_USER_ID between", value1, value2, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_USER_ID not between", value1, value2, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCouponDescIsNull() { + addCriterion("COUPON_DESC is null"); + return (Criteria) this; + } + + public Criteria andCouponDescIsNotNull() { + addCriterion("COUPON_DESC is not null"); + return (Criteria) this; + } + + public Criteria andCouponDescEqualTo(String value) { + addCriterion("COUPON_DESC =", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescNotEqualTo(String value) { + addCriterion("COUPON_DESC <>", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescGreaterThan(String value) { + addCriterion("COUPON_DESC >", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescGreaterThanOrEqualTo(String value) { + addCriterion("COUPON_DESC >=", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescLessThan(String value) { + addCriterion("COUPON_DESC <", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescLessThanOrEqualTo(String value) { + addCriterion("COUPON_DESC <=", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescLike(String value) { + addCriterion("COUPON_DESC like", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescNotLike(String value) { + addCriterion("COUPON_DESC not like", value, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescIn(List values) { + addCriterion("COUPON_DESC in", values, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescNotIn(List values) { + addCriterion("COUPON_DESC not in", values, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescBetween(String value1, String value2) { + addCriterion("COUPON_DESC between", value1, value2, "couponDesc"); + return (Criteria) this; + } + + public Criteria andCouponDescNotBetween(String value1, String value2) { + addCriterion("COUPON_DESC not between", value1, value2, "couponDesc"); + return (Criteria) this; + } + + public Criteria andIsUsedIsNull() { + addCriterion("IS_USED is null"); + return (Criteria) this; + } + + public Criteria andIsUsedIsNotNull() { + addCriterion("IS_USED is not null"); + return (Criteria) this; + } + + public Criteria andIsUsedEqualTo(Integer value) { + addCriterion("IS_USED =", value, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedNotEqualTo(Integer value) { + addCriterion("IS_USED <>", value, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedGreaterThan(Integer value) { + addCriterion("IS_USED >", value, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_USED >=", value, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedLessThan(Integer value) { + addCriterion("IS_USED <", value, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedLessThanOrEqualTo(Integer value) { + addCriterion("IS_USED <=", value, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedIn(List values) { + addCriterion("IS_USED in", values, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedNotIn(List values) { + addCriterion("IS_USED not in", values, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedBetween(Integer value1, Integer value2) { + addCriterion("IS_USED between", value1, value2, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsedNotBetween(Integer value1, Integer value2) { + addCriterion("IS_USED not between", value1, value2, "isUsed"); + return (Criteria) this; + } + + public Criteria andIsUsefulIsNull() { + addCriterion("IS_USEFUL is null"); + return (Criteria) this; + } + + public Criteria andIsUsefulIsNotNull() { + addCriterion("IS_USEFUL is not null"); + return (Criteria) this; + } + + public Criteria andIsUsefulEqualTo(Integer value) { + addCriterion("IS_USEFUL =", value, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulNotEqualTo(Integer value) { + addCriterion("IS_USEFUL <>", value, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulGreaterThan(Integer value) { + addCriterion("IS_USEFUL >", value, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_USEFUL >=", value, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulLessThan(Integer value) { + addCriterion("IS_USEFUL <", value, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulLessThanOrEqualTo(Integer value) { + addCriterion("IS_USEFUL <=", value, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulIn(List values) { + addCriterion("IS_USEFUL in", values, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulNotIn(List values) { + addCriterion("IS_USEFUL not in", values, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulBetween(Integer value1, Integer value2) { + addCriterion("IS_USEFUL between", value1, value2, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsUsefulNotBetween(Integer value1, Integer value2) { + addCriterion("IS_USEFUL not between", value1, value2, "isUseful"); + return (Criteria) this; + } + + public Criteria andIsGiftIsNull() { + addCriterion("IS_GIFT is null"); + return (Criteria) this; + } + + public Criteria andIsGiftIsNotNull() { + addCriterion("IS_GIFT is not null"); + return (Criteria) this; + } + + public Criteria andIsGiftEqualTo(Integer value) { + addCriterion("IS_GIFT =", value, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftNotEqualTo(Integer value) { + addCriterion("IS_GIFT <>", value, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftGreaterThan(Integer value) { + addCriterion("IS_GIFT >", value, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_GIFT >=", value, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftLessThan(Integer value) { + addCriterion("IS_GIFT <", value, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftLessThanOrEqualTo(Integer value) { + addCriterion("IS_GIFT <=", value, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftIn(List values) { + addCriterion("IS_GIFT in", values, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftNotIn(List values) { + addCriterion("IS_GIFT not in", values, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftBetween(Integer value1, Integer value2) { + addCriterion("IS_GIFT between", value1, value2, "isGift"); + return (Criteria) this; + } + + public Criteria andIsGiftNotBetween(Integer value1, Integer value2) { + addCriterion("IS_GIFT not between", value1, value2, "isGift"); + return (Criteria) this; + } + + public Criteria andIsSendIsNull() { + addCriterion("IS_SEND is null"); + return (Criteria) this; + } + + public Criteria andIsSendIsNotNull() { + addCriterion("IS_SEND is not null"); + return (Criteria) this; + } + + public Criteria andIsSendEqualTo(Integer value) { + addCriterion("IS_SEND =", value, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendNotEqualTo(Integer value) { + addCriterion("IS_SEND <>", value, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendGreaterThan(Integer value) { + addCriterion("IS_SEND >", value, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_SEND >=", value, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendLessThan(Integer value) { + addCriterion("IS_SEND <", value, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendLessThanOrEqualTo(Integer value) { + addCriterion("IS_SEND <=", value, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendIn(List values) { + addCriterion("IS_SEND in", values, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendNotIn(List values) { + addCriterion("IS_SEND not in", values, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendBetween(Integer value1, Integer value2) { + addCriterion("IS_SEND between", value1, value2, "isSend"); + return (Criteria) this; + } + + public Criteria andIsSendNotBetween(Integer value1, Integer value2) { + addCriterion("IS_SEND not between", value1, value2, "isSend"); + return (Criteria) this; + } + + public Criteria andPaymentTypeIsNull() { + addCriterion("PAYMENT_TYPE is null"); + return (Criteria) this; + } + + public Criteria andPaymentTypeIsNotNull() { + addCriterion("PAYMENT_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andPaymentTypeEqualTo(Integer value) { + addCriterion("PAYMENT_TYPE =", value, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeNotEqualTo(Integer value) { + addCriterion("PAYMENT_TYPE <>", value, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeGreaterThan(Integer value) { + addCriterion("PAYMENT_TYPE >", value, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("PAYMENT_TYPE >=", value, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeLessThan(Integer value) { + addCriterion("PAYMENT_TYPE <", value, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeLessThanOrEqualTo(Integer value) { + addCriterion("PAYMENT_TYPE <=", value, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeIn(List values) { + addCriterion("PAYMENT_TYPE in", values, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeNotIn(List values) { + addCriterion("PAYMENT_TYPE not in", values, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeBetween(Integer value1, Integer value2) { + addCriterion("PAYMENT_TYPE between", value1, value2, "paymentType"); + return (Criteria) this; + } + + public Criteria andPaymentTypeNotBetween(Integer value1, Integer value2) { + addCriterion("PAYMENT_TYPE not between", value1, value2, "paymentType"); + return (Criteria) this; + } + + public Criteria andBeginTimeIsNull() { + addCriterion("BEGIN_TIME is null"); + return (Criteria) this; + } + + public Criteria andBeginTimeIsNotNull() { + addCriterion("BEGIN_TIME is not null"); + return (Criteria) this; + } + + public Criteria andBeginTimeEqualTo(Date value) { + addCriterion("BEGIN_TIME =", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeNotEqualTo(Date value) { + addCriterion("BEGIN_TIME <>", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeGreaterThan(Date value) { + addCriterion("BEGIN_TIME >", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeGreaterThanOrEqualTo(Date value) { + addCriterion("BEGIN_TIME >=", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeLessThan(Date value) { + addCriterion("BEGIN_TIME <", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeLessThanOrEqualTo(Date value) { + addCriterion("BEGIN_TIME <=", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeIn(List values) { + addCriterion("BEGIN_TIME in", values, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeNotIn(List values) { + addCriterion("BEGIN_TIME not in", values, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeBetween(Date value1, Date value2) { + addCriterion("BEGIN_TIME between", value1, value2, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeNotBetween(Date value1, Date value2) { + addCriterion("BEGIN_TIME not between", value1, value2, "beginTime"); + return (Criteria) this; + } + + public Criteria andEndTimeIsNull() { + addCriterion("END_TIME is null"); + return (Criteria) this; + } + + public Criteria andEndTimeIsNotNull() { + addCriterion("END_TIME is not null"); + return (Criteria) this; + } + + public Criteria andEndTimeEqualTo(Date value) { + addCriterion("END_TIME =", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotEqualTo(Date value) { + addCriterion("END_TIME <>", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeGreaterThan(Date value) { + addCriterion("END_TIME >", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeGreaterThanOrEqualTo(Date value) { + addCriterion("END_TIME >=", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeLessThan(Date value) { + addCriterion("END_TIME <", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeLessThanOrEqualTo(Date value) { + addCriterion("END_TIME <=", value, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeIn(List values) { + addCriterion("END_TIME in", values, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotIn(List values) { + addCriterion("END_TIME not in", values, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeBetween(Date value1, Date value2) { + addCriterion("END_TIME between", value1, value2, "endTime"); + return (Criteria) this; + } + + public Criteria andEndTimeNotBetween(Date value1, Date value2) { + addCriterion("END_TIME not between", value1, value2, "endTime"); + return (Criteria) this; + } + + public Criteria andNotesIsNull() { + addCriterion("NOTES is null"); + return (Criteria) this; + } + + public Criteria andNotesIsNotNull() { + addCriterion("NOTES is not null"); + return (Criteria) this; + } + + public Criteria andNotesEqualTo(String value) { + addCriterion("NOTES =", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesNotEqualTo(String value) { + addCriterion("NOTES <>", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesGreaterThan(String value) { + addCriterion("NOTES >", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesGreaterThanOrEqualTo(String value) { + addCriterion("NOTES >=", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesLessThan(String value) { + addCriterion("NOTES <", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesLessThanOrEqualTo(String value) { + addCriterion("NOTES <=", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesLike(String value) { + addCriterion("NOTES like", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesNotLike(String value) { + addCriterion("NOTES not like", value, "notes"); + return (Criteria) this; + } + + public Criteria andNotesIn(List values) { + addCriterion("NOTES in", values, "notes"); + return (Criteria) this; + } + + public Criteria andNotesNotIn(List values) { + addCriterion("NOTES not in", values, "notes"); + return (Criteria) this; + } + + public Criteria andNotesBetween(String value1, String value2) { + addCriterion("NOTES between", value1, value2, "notes"); + return (Criteria) this; + } + + public Criteria andNotesNotBetween(String value1, String value2) { + addCriterion("NOTES not between", value1, value2, "notes"); + return (Criteria) this; + } + + public Criteria andIsOverIsNull() { + addCriterion("IS_OVER is null"); + return (Criteria) this; + } + + public Criteria andIsOverIsNotNull() { + addCriterion("IS_OVER is not null"); + return (Criteria) this; + } + + public Criteria andIsOverEqualTo(Integer value) { + addCriterion("IS_OVER =", value, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverNotEqualTo(Integer value) { + addCriterion("IS_OVER <>", value, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverGreaterThan(Integer value) { + addCriterion("IS_OVER >", value, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_OVER >=", value, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverLessThan(Integer value) { + addCriterion("IS_OVER <", value, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverLessThanOrEqualTo(Integer value) { + addCriterion("IS_OVER <=", value, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverIn(List values) { + addCriterion("IS_OVER in", values, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverNotIn(List values) { + addCriterion("IS_OVER not in", values, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverBetween(Integer value1, Integer value2) { + addCriterion("IS_OVER between", value1, value2, "isOver"); + return (Criteria) this; + } + + public Criteria andIsOverNotBetween(Integer value1, Integer value2) { + addCriterion("IS_OVER not between", value1, value2, "isOver"); + return (Criteria) this; + } + + public Criteria andAuditDateIsNull() { + addCriterion("AUDIT_DATE is null"); + return (Criteria) this; + } + + public Criteria andAuditDateIsNotNull() { + addCriterion("AUDIT_DATE is not null"); + return (Criteria) this; + } + + public Criteria andAuditDateEqualTo(Date value) { + addCriterion("AUDIT_DATE =", value, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateNotEqualTo(Date value) { + addCriterion("AUDIT_DATE <>", value, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateGreaterThan(Date value) { + addCriterion("AUDIT_DATE >", value, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateGreaterThanOrEqualTo(Date value) { + addCriterion("AUDIT_DATE >=", value, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateLessThan(Date value) { + addCriterion("AUDIT_DATE <", value, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateLessThanOrEqualTo(Date value) { + addCriterion("AUDIT_DATE <=", value, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateIn(List values) { + addCriterion("AUDIT_DATE in", values, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateNotIn(List values) { + addCriterion("AUDIT_DATE not in", values, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateBetween(Date value1, Date value2) { + addCriterion("AUDIT_DATE between", value1, value2, "auditDate"); + return (Criteria) this; + } + + public Criteria andAuditDateNotBetween(Date value1, Date value2) { + addCriterion("AUDIT_DATE not between", value1, value2, "auditDate"); + return (Criteria) this; + } + + public Criteria andBatchIsNull() { + addCriterion("BATCH is null"); + return (Criteria) this; + } + + public Criteria andBatchIsNotNull() { + addCriterion("BATCH is not null"); + return (Criteria) this; + } + + public Criteria andBatchEqualTo(String value) { + addCriterion("BATCH =", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchNotEqualTo(String value) { + addCriterion("BATCH <>", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchGreaterThan(String value) { + addCriterion("BATCH >", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchGreaterThanOrEqualTo(String value) { + addCriterion("BATCH >=", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchLessThan(String value) { + addCriterion("BATCH <", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchLessThanOrEqualTo(String value) { + addCriterion("BATCH <=", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchLike(String value) { + addCriterion("BATCH like", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchNotLike(String value) { + addCriterion("BATCH not like", value, "batch"); + return (Criteria) this; + } + + public Criteria andBatchIn(List values) { + addCriterion("BATCH in", values, "batch"); + return (Criteria) this; + } + + public Criteria andBatchNotIn(List values) { + addCriterion("BATCH not in", values, "batch"); + return (Criteria) this; + } + + public Criteria andBatchBetween(String value1, String value2) { + addCriterion("BATCH between", value1, value2, "batch"); + return (Criteria) this; + } + + public Criteria andBatchNotBetween(String value1, String value2) { + addCriterion("BATCH not between", value1, value2, "batch"); + return (Criteria) this; + } + + public Criteria andUsefulDateIsNull() { + addCriterion("USEFUL_DATE is null"); + return (Criteria) this; + } + + public Criteria andUsefulDateIsNotNull() { + addCriterion("USEFUL_DATE is not null"); + return (Criteria) this; + } + + public Criteria andUsefulDateEqualTo(Date value) { + addCriterion("USEFUL_DATE =", value, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateNotEqualTo(Date value) { + addCriterion("USEFUL_DATE <>", value, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateGreaterThan(Date value) { + addCriterion("USEFUL_DATE >", value, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateGreaterThanOrEqualTo(Date value) { + addCriterion("USEFUL_DATE >=", value, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateLessThan(Date value) { + addCriterion("USEFUL_DATE <", value, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateLessThanOrEqualTo(Date value) { + addCriterion("USEFUL_DATE <=", value, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateIn(List values) { + addCriterion("USEFUL_DATE in", values, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateNotIn(List values) { + addCriterion("USEFUL_DATE not in", values, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateBetween(Date value1, Date value2) { + addCriterion("USEFUL_DATE between", value1, value2, "usefulDate"); + return (Criteria) this; + } + + public Criteria andUsefulDateNotBetween(Date value1, Date value2) { + addCriterion("USEFUL_DATE not between", value1, value2, "usefulDate"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdCouponRef.java b/src/main/java/com/xmomen/module/base/entity/CdCouponRef.java new file mode 100644 index 0000000..8d0e05d --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdCouponRef.java @@ -0,0 +1,129 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_coupon_ref") +public class CdCouponRef extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 卡劵 + */ + private Integer cdCouponId; + + /** + * 卡号 + */ + private String couponNumber; + + /** + * 拓展类型 + */ + private String refType; + + /** + * 拓展描述 + */ + private String refName; + + /** + * 拓展值 + */ + private String refValue; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "CD_COUPON_ID") + public Integer getCdCouponId() { + return cdCouponId; + } + + public void setCdCouponId(Integer cdCouponId) { + this.cdCouponId = cdCouponId; + if(cdCouponId == null){ + removeValidField("cdCouponId"); + return; + } + addValidField("cdCouponId"); + } + + @Column(name = "COUPON_NUMBER") + public String getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + if(couponNumber == null){ + removeValidField("couponNumber"); + return; + } + addValidField("couponNumber"); + } + + @Column(name = "REF_TYPE") + public String getRefType() { + return refType; + } + + public void setRefType(String refType) { + this.refType = refType; + if(refType == null){ + removeValidField("refType"); + return; + } + addValidField("refType"); + } + + @Column(name = "REF_NAME") + public String getRefName() { + return refName; + } + + public void setRefName(String refName) { + this.refName = refName; + if(refName == null){ + removeValidField("refName"); + return; + } + addValidField("refName"); + } + + @Column(name = "REF_VALUE") + public String getRefValue() { + return refValue; + } + + public void setRefValue(String refValue) { + this.refValue = refValue; + if(refValue == null){ + removeValidField("refValue"); + return; + } + addValidField("refValue"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdItem.java b/src/main/java/com/xmomen/module/base/entity/CdItem.java new file mode 100644 index 0000000..c1eb880 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdItem.java @@ -0,0 +1,511 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_item") +public class CdItem extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 产品编号 + */ + private String itemCode; + + /** + * 产品归属的类别 + */ + private Integer cdCategoryId; + + /** + * 产品名称 + */ + private String itemName; + + /** + * 产品描述 + */ + private String itemDescribe; + + /** + * 产品类型(1-常规商品,2-组合商品) + */ + private Integer itemType; + + /** + * 生产地 + */ + private String yieldly; + + /** + * 产品规格 + */ + private String spec; + + /** + * 基础价格 + */ + private BigDecimal basePrice; + + /** + * 会员价格 + */ + private BigDecimal memberPrice; + + /** + * 计价方式 + */ + private String pricingManner; + + /** + * 0-下架 1-上架 + */ + private Integer sellStatus; + + /** + * 销售单位 + */ + private String sellUnit; + + /** + * 销售金额 + */ + private BigDecimal sellPrice; + + /** + * 0-未审核,1-审核 + */ + private Integer isAudit; + + /** + * 录入时间 + */ + private Date createDateTime; + + /** + * 录入人 + */ + private String createUserCode; + + /** + * 采摘人 + */ + private String caizaiUser; + + /** + * 检测人 + */ + private String jianceUser; + + /** + * 农残率 + */ + private String nongCanLv; + + /** + * 营养成分 + */ + private String yiYangChenFen; + + /** + * 保质期 + */ + private Integer baoZhiQi; + + /** + * 适应人群 + */ + private String shiYiRenQun; + + /** + * 限时抢购 + */ + private Integer xianShiQiangGou; + + /** + * 新品尝鲜 + */ + private Integer xinPinChangXian; + + /** + * 热卖推荐 + */ + private Integer reMaiTuiJian; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "ITEM_CODE") + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + if(itemCode == null){ + removeValidField("itemCode"); + return; + } + addValidField("itemCode"); + } + + @Column(name = "CD_CATEGORY_ID") + public Integer getCdCategoryId() { + return cdCategoryId; + } + + public void setCdCategoryId(Integer cdCategoryId) { + this.cdCategoryId = cdCategoryId; + if(cdCategoryId == null){ + removeValidField("cdCategoryId"); + return; + } + addValidField("cdCategoryId"); + } + + @Column(name = "ITEM_NAME") + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + if(itemName == null){ + removeValidField("itemName"); + return; + } + addValidField("itemName"); + } + + @Column(name = "ITEM_DESCRIBE") + public String getItemDescribe() { + return itemDescribe; + } + + public void setItemDescribe(String itemDescribe) { + this.itemDescribe = itemDescribe; + if(itemDescribe == null){ + removeValidField("itemDescribe"); + return; + } + addValidField("itemDescribe"); + } + + @Column(name = "ITEM_TYPE") + public Integer getItemType() { + return itemType; + } + + public void setItemType(Integer itemType) { + this.itemType = itemType; + if(itemType == null){ + removeValidField("itemType"); + return; + } + addValidField("itemType"); + } + + @Column(name = "YIELDLY") + public String getYieldly() { + return yieldly; + } + + public void setYieldly(String yieldly) { + this.yieldly = yieldly; + if(yieldly == null){ + removeValidField("yieldly"); + return; + } + addValidField("yieldly"); + } + + @Column(name = "SPEC") + public String getSpec() { + return spec; + } + + public void setSpec(String spec) { + this.spec = spec; + if(spec == null){ + removeValidField("spec"); + return; + } + addValidField("spec"); + } + + @Column(name = "BASE_PRICE") + public BigDecimal getBasePrice() { + return basePrice; + } + + public void setBasePrice(BigDecimal basePrice) { + this.basePrice = basePrice; + if(basePrice == null){ + removeValidField("basePrice"); + return; + } + addValidField("basePrice"); + } + + @Column(name = "MEMBER_PRICE") + public BigDecimal getMemberPrice() { + return memberPrice; + } + + public void setMemberPrice(BigDecimal memberPrice) { + this.memberPrice = memberPrice; + if(memberPrice == null){ + removeValidField("memberPrice"); + return; + } + addValidField("memberPrice"); + } + + @Column(name = "PRICING_MANNER") + public String getPricingManner() { + return pricingManner; + } + + public void setPricingManner(String pricingManner) { + this.pricingManner = pricingManner; + if(pricingManner == null){ + removeValidField("pricingManner"); + return; + } + addValidField("pricingManner"); + } + + @Column(name = "SELL_STATUS") + public Integer getSellStatus() { + return sellStatus; + } + + public void setSellStatus(Integer sellStatus) { + this.sellStatus = sellStatus; + if(sellStatus == null){ + removeValidField("sellStatus"); + return; + } + addValidField("sellStatus"); + } + + @Column(name = "SELL_UNIT") + public String getSellUnit() { + return sellUnit; + } + + public void setSellUnit(String sellUnit) { + this.sellUnit = sellUnit; + if(sellUnit == null){ + removeValidField("sellUnit"); + return; + } + addValidField("sellUnit"); + } + + @Column(name = "SELL_PRICE") + public BigDecimal getSellPrice() { + return sellPrice; + } + + public void setSellPrice(BigDecimal sellPrice) { + this.sellPrice = sellPrice; + if(sellPrice == null){ + removeValidField("sellPrice"); + return; + } + addValidField("sellPrice"); + } + + @Column(name = "IS_AUDIT") + public Integer getIsAudit() { + return isAudit; + } + + public void setIsAudit(Integer isAudit) { + this.isAudit = isAudit; + if(isAudit == null){ + removeValidField("isAudit"); + return; + } + addValidField("isAudit"); + } + + @Column(name = "CREATE_DATE_TIME") + public Date getCreateDateTime() { + return createDateTime; + } + + public void setCreateDateTime(Date createDateTime) { + this.createDateTime = createDateTime; + if(createDateTime == null){ + removeValidField("createDateTime"); + return; + } + addValidField("createDateTime"); + } + + @Column(name = "CREATE_USER_CODE") + public String getCreateUserCode() { + return createUserCode; + } + + public void setCreateUserCode(String createUserCode) { + this.createUserCode = createUserCode; + if(createUserCode == null){ + removeValidField("createUserCode"); + return; + } + addValidField("createUserCode"); + } + + @Column(name = "CAIZAI_USER") + public String getCaizaiUser() { + return caizaiUser; + } + + public void setCaizaiUser(String caizaiUser) { + this.caizaiUser = caizaiUser; + if(caizaiUser == null){ + removeValidField("caizaiUser"); + return; + } + addValidField("caizaiUser"); + } + + @Column(name = "JIANCE_USER") + public String getJianceUser() { + return jianceUser; + } + + public void setJianceUser(String jianceUser) { + this.jianceUser = jianceUser; + if(jianceUser == null){ + removeValidField("jianceUser"); + return; + } + addValidField("jianceUser"); + } + + @Column(name = "NONG_CAN_LV") + public String getNongCanLv() { + return nongCanLv; + } + + public void setNongCanLv(String nongCanLv) { + this.nongCanLv = nongCanLv; + if(nongCanLv == null){ + removeValidField("nongCanLv"); + return; + } + addValidField("nongCanLv"); + } + + @Column(name = "YI_YANG_CHEN_FEN") + public String getYiYangChenFen() { + return yiYangChenFen; + } + + public void setYiYangChenFen(String yiYangChenFen) { + this.yiYangChenFen = yiYangChenFen; + if(yiYangChenFen == null){ + removeValidField("yiYangChenFen"); + return; + } + addValidField("yiYangChenFen"); + } + + @Column(name = "BAO_ZHI_QI") + public Integer getBaoZhiQi() { + return baoZhiQi; + } + + public void setBaoZhiQi(Integer baoZhiQi) { + this.baoZhiQi = baoZhiQi; + if(baoZhiQi == null){ + removeValidField("baoZhiQi"); + return; + } + addValidField("baoZhiQi"); + } + + @Column(name = "SHI_YI_REN_QUN") + public String getShiYiRenQun() { + return shiYiRenQun; + } + + public void setShiYiRenQun(String shiYiRenQun) { + this.shiYiRenQun = shiYiRenQun; + if(shiYiRenQun == null){ + removeValidField("shiYiRenQun"); + return; + } + addValidField("shiYiRenQun"); + } + + @Column(name = "XIAN_SHI_QIANG_GOU") + public Integer getXianShiQiangGou() { + return xianShiQiangGou; + } + + public void setXianShiQiangGou(Integer xianShiQiangGou) { + this.xianShiQiangGou = xianShiQiangGou; + if(xianShiQiangGou == null){ + removeValidField("xianShiQiangGou"); + return; + } + addValidField("xianShiQiangGou"); + } + + @Column(name = "XIN_PIN_CHANG_XIAN") + public Integer getXinPinChangXian() { + return xinPinChangXian; + } + + public void setXinPinChangXian(Integer xinPinChangXian) { + this.xinPinChangXian = xinPinChangXian; + if(xinPinChangXian == null){ + removeValidField("xinPinChangXian"); + return; + } + addValidField("xinPinChangXian"); + } + + @Column(name = "RE_MAI_TUI_JIAN") + public Integer getReMaiTuiJian() { + return reMaiTuiJian; + } + + public void setReMaiTuiJian(Integer reMaiTuiJian) { + this.reMaiTuiJian = reMaiTuiJian; + if(reMaiTuiJian == null){ + removeValidField("reMaiTuiJian"); + return; + } + addValidField("reMaiTuiJian"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdItemDetail.java b/src/main/java/com/xmomen/module/base/entity/CdItemDetail.java new file mode 100644 index 0000000..4dd44be --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdItemDetail.java @@ -0,0 +1,72 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_item_detail") +public class CdItemDetail extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 商品ID + */ + private Integer cdItemId; + + /** + * 商品的详细内容 + */ + private String itemDetailContent; + + @Column(name = "id") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "cd_item_id") + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + if(cdItemId == null){ + removeValidField("cdItemId"); + return; + } + addValidField("cdItemId"); + } + + @Column(name = "item_detail_content") + public String getItemDetailContent() { + return itemDetailContent; + } + + public void setItemDetailContent(String itemDetailContent) { + this.itemDetailContent = itemDetailContent; + if(itemDetailContent == null){ + removeValidField("itemDetailContent"); + return; + } + addValidField("itemDetailContent"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdItemExample.java b/src/main/java/com/xmomen/module/base/entity/CdItemExample.java new file mode 100644 index 0000000..bcbc64a --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdItemExample.java @@ -0,0 +1,1893 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class CdItemExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdItemExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andItemCodeIsNull() { + addCriterion("ITEM_CODE is null"); + return (Criteria) this; + } + + public Criteria andItemCodeIsNotNull() { + addCriterion("ITEM_CODE is not null"); + return (Criteria) this; + } + + public Criteria andItemCodeEqualTo(String value) { + addCriterion("ITEM_CODE =", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotEqualTo(String value) { + addCriterion("ITEM_CODE <>", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeGreaterThan(String value) { + addCriterion("ITEM_CODE >", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeGreaterThanOrEqualTo(String value) { + addCriterion("ITEM_CODE >=", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLessThan(String value) { + addCriterion("ITEM_CODE <", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLessThanOrEqualTo(String value) { + addCriterion("ITEM_CODE <=", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLike(String value) { + addCriterion("ITEM_CODE like", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotLike(String value) { + addCriterion("ITEM_CODE not like", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeIn(List values) { + addCriterion("ITEM_CODE in", values, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotIn(List values) { + addCriterion("ITEM_CODE not in", values, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeBetween(String value1, String value2) { + addCriterion("ITEM_CODE between", value1, value2, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotBetween(String value1, String value2) { + addCriterion("ITEM_CODE not between", value1, value2, "itemCode"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdIsNull() { + addCriterion("CD_CATEGORY_ID is null"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdIsNotNull() { + addCriterion("CD_CATEGORY_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID =", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdNotEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID <>", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdGreaterThan(Integer value) { + addCriterion("CD_CATEGORY_ID >", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID >=", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdLessThan(Integer value) { + addCriterion("CD_CATEGORY_ID <", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID <=", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdIn(List values) { + addCriterion("CD_CATEGORY_ID in", values, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdNotIn(List values) { + addCriterion("CD_CATEGORY_ID not in", values, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdBetween(Integer value1, Integer value2) { + addCriterion("CD_CATEGORY_ID between", value1, value2, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_CATEGORY_ID not between", value1, value2, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andItemNameIsNull() { + addCriterion("ITEM_NAME is null"); + return (Criteria) this; + } + + public Criteria andItemNameIsNotNull() { + addCriterion("ITEM_NAME is not null"); + return (Criteria) this; + } + + public Criteria andItemNameEqualTo(String value) { + addCriterion("ITEM_NAME =", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotEqualTo(String value) { + addCriterion("ITEM_NAME <>", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameGreaterThan(String value) { + addCriterion("ITEM_NAME >", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameGreaterThanOrEqualTo(String value) { + addCriterion("ITEM_NAME >=", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameLessThan(String value) { + addCriterion("ITEM_NAME <", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameLessThanOrEqualTo(String value) { + addCriterion("ITEM_NAME <=", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameLike(String value) { + addCriterion("ITEM_NAME like", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotLike(String value) { + addCriterion("ITEM_NAME not like", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameIn(List values) { + addCriterion("ITEM_NAME in", values, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotIn(List values) { + addCriterion("ITEM_NAME not in", values, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameBetween(String value1, String value2) { + addCriterion("ITEM_NAME between", value1, value2, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotBetween(String value1, String value2) { + addCriterion("ITEM_NAME not between", value1, value2, "itemName"); + return (Criteria) this; + } + + public Criteria andItemDescribeIsNull() { + addCriterion("ITEM_DESCRIBE is null"); + return (Criteria) this; + } + + public Criteria andItemDescribeIsNotNull() { + addCriterion("ITEM_DESCRIBE is not null"); + return (Criteria) this; + } + + public Criteria andItemDescribeEqualTo(String value) { + addCriterion("ITEM_DESCRIBE =", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeNotEqualTo(String value) { + addCriterion("ITEM_DESCRIBE <>", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeGreaterThan(String value) { + addCriterion("ITEM_DESCRIBE >", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeGreaterThanOrEqualTo(String value) { + addCriterion("ITEM_DESCRIBE >=", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeLessThan(String value) { + addCriterion("ITEM_DESCRIBE <", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeLessThanOrEqualTo(String value) { + addCriterion("ITEM_DESCRIBE <=", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeLike(String value) { + addCriterion("ITEM_DESCRIBE like", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeNotLike(String value) { + addCriterion("ITEM_DESCRIBE not like", value, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeIn(List values) { + addCriterion("ITEM_DESCRIBE in", values, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeNotIn(List values) { + addCriterion("ITEM_DESCRIBE not in", values, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeBetween(String value1, String value2) { + addCriterion("ITEM_DESCRIBE between", value1, value2, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemDescribeNotBetween(String value1, String value2) { + addCriterion("ITEM_DESCRIBE not between", value1, value2, "itemDescribe"); + return (Criteria) this; + } + + public Criteria andItemTypeIsNull() { + addCriterion("ITEM_TYPE is null"); + return (Criteria) this; + } + + public Criteria andItemTypeIsNotNull() { + addCriterion("ITEM_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andItemTypeEqualTo(Integer value) { + addCriterion("ITEM_TYPE =", value, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeNotEqualTo(Integer value) { + addCriterion("ITEM_TYPE <>", value, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeGreaterThan(Integer value) { + addCriterion("ITEM_TYPE >", value, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("ITEM_TYPE >=", value, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeLessThan(Integer value) { + addCriterion("ITEM_TYPE <", value, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeLessThanOrEqualTo(Integer value) { + addCriterion("ITEM_TYPE <=", value, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeIn(List values) { + addCriterion("ITEM_TYPE in", values, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeNotIn(List values) { + addCriterion("ITEM_TYPE not in", values, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeBetween(Integer value1, Integer value2) { + addCriterion("ITEM_TYPE between", value1, value2, "itemType"); + return (Criteria) this; + } + + public Criteria andItemTypeNotBetween(Integer value1, Integer value2) { + addCriterion("ITEM_TYPE not between", value1, value2, "itemType"); + return (Criteria) this; + } + + public Criteria andYieldlyIsNull() { + addCriterion("YIELDLY is null"); + return (Criteria) this; + } + + public Criteria andYieldlyIsNotNull() { + addCriterion("YIELDLY is not null"); + return (Criteria) this; + } + + public Criteria andYieldlyEqualTo(String value) { + addCriterion("YIELDLY =", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyNotEqualTo(String value) { + addCriterion("YIELDLY <>", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyGreaterThan(String value) { + addCriterion("YIELDLY >", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyGreaterThanOrEqualTo(String value) { + addCriterion("YIELDLY >=", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyLessThan(String value) { + addCriterion("YIELDLY <", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyLessThanOrEqualTo(String value) { + addCriterion("YIELDLY <=", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyLike(String value) { + addCriterion("YIELDLY like", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyNotLike(String value) { + addCriterion("YIELDLY not like", value, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyIn(List values) { + addCriterion("YIELDLY in", values, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyNotIn(List values) { + addCriterion("YIELDLY not in", values, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyBetween(String value1, String value2) { + addCriterion("YIELDLY between", value1, value2, "yieldly"); + return (Criteria) this; + } + + public Criteria andYieldlyNotBetween(String value1, String value2) { + addCriterion("YIELDLY not between", value1, value2, "yieldly"); + return (Criteria) this; + } + + public Criteria andSpecIsNull() { + addCriterion("SPEC is null"); + return (Criteria) this; + } + + public Criteria andSpecIsNotNull() { + addCriterion("SPEC is not null"); + return (Criteria) this; + } + + public Criteria andSpecEqualTo(String value) { + addCriterion("SPEC =", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecNotEqualTo(String value) { + addCriterion("SPEC <>", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecGreaterThan(String value) { + addCriterion("SPEC >", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecGreaterThanOrEqualTo(String value) { + addCriterion("SPEC >=", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecLessThan(String value) { + addCriterion("SPEC <", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecLessThanOrEqualTo(String value) { + addCriterion("SPEC <=", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecLike(String value) { + addCriterion("SPEC like", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecNotLike(String value) { + addCriterion("SPEC not like", value, "spec"); + return (Criteria) this; + } + + public Criteria andSpecIn(List values) { + addCriterion("SPEC in", values, "spec"); + return (Criteria) this; + } + + public Criteria andSpecNotIn(List values) { + addCriterion("SPEC not in", values, "spec"); + return (Criteria) this; + } + + public Criteria andSpecBetween(String value1, String value2) { + addCriterion("SPEC between", value1, value2, "spec"); + return (Criteria) this; + } + + public Criteria andSpecNotBetween(String value1, String value2) { + addCriterion("SPEC not between", value1, value2, "spec"); + return (Criteria) this; + } + + public Criteria andBasePriceIsNull() { + addCriterion("BASE_PRICE is null"); + return (Criteria) this; + } + + public Criteria andBasePriceIsNotNull() { + addCriterion("BASE_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andBasePriceEqualTo(BigDecimal value) { + addCriterion("BASE_PRICE =", value, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceNotEqualTo(BigDecimal value) { + addCriterion("BASE_PRICE <>", value, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceGreaterThan(BigDecimal value) { + addCriterion("BASE_PRICE >", value, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("BASE_PRICE >=", value, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceLessThan(BigDecimal value) { + addCriterion("BASE_PRICE <", value, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("BASE_PRICE <=", value, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceIn(List values) { + addCriterion("BASE_PRICE in", values, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceNotIn(List values) { + addCriterion("BASE_PRICE not in", values, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("BASE_PRICE between", value1, value2, "basePrice"); + return (Criteria) this; + } + + public Criteria andBasePriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("BASE_PRICE not between", value1, value2, "basePrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceIsNull() { + addCriterion("MEMBER_PRICE is null"); + return (Criteria) this; + } + + public Criteria andMemberPriceIsNotNull() { + addCriterion("MEMBER_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andMemberPriceEqualTo(BigDecimal value) { + addCriterion("MEMBER_PRICE =", value, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceNotEqualTo(BigDecimal value) { + addCriterion("MEMBER_PRICE <>", value, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceGreaterThan(BigDecimal value) { + addCriterion("MEMBER_PRICE >", value, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("MEMBER_PRICE >=", value, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceLessThan(BigDecimal value) { + addCriterion("MEMBER_PRICE <", value, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("MEMBER_PRICE <=", value, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceIn(List values) { + addCriterion("MEMBER_PRICE in", values, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceNotIn(List values) { + addCriterion("MEMBER_PRICE not in", values, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("MEMBER_PRICE between", value1, value2, "memberPrice"); + return (Criteria) this; + } + + public Criteria andMemberPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("MEMBER_PRICE not between", value1, value2, "memberPrice"); + return (Criteria) this; + } + + public Criteria andPricingMannerIsNull() { + addCriterion("PRICING_MANNER is null"); + return (Criteria) this; + } + + public Criteria andPricingMannerIsNotNull() { + addCriterion("PRICING_MANNER is not null"); + return (Criteria) this; + } + + public Criteria andPricingMannerEqualTo(String value) { + addCriterion("PRICING_MANNER =", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerNotEqualTo(String value) { + addCriterion("PRICING_MANNER <>", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerGreaterThan(String value) { + addCriterion("PRICING_MANNER >", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerGreaterThanOrEqualTo(String value) { + addCriterion("PRICING_MANNER >=", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerLessThan(String value) { + addCriterion("PRICING_MANNER <", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerLessThanOrEqualTo(String value) { + addCriterion("PRICING_MANNER <=", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerLike(String value) { + addCriterion("PRICING_MANNER like", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerNotLike(String value) { + addCriterion("PRICING_MANNER not like", value, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerIn(List values) { + addCriterion("PRICING_MANNER in", values, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerNotIn(List values) { + addCriterion("PRICING_MANNER not in", values, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerBetween(String value1, String value2) { + addCriterion("PRICING_MANNER between", value1, value2, "pricingManner"); + return (Criteria) this; + } + + public Criteria andPricingMannerNotBetween(String value1, String value2) { + addCriterion("PRICING_MANNER not between", value1, value2, "pricingManner"); + return (Criteria) this; + } + + public Criteria andSellStatusIsNull() { + addCriterion("SELL_STATUS is null"); + return (Criteria) this; + } + + public Criteria andSellStatusIsNotNull() { + addCriterion("SELL_STATUS is not null"); + return (Criteria) this; + } + + public Criteria andSellStatusEqualTo(Integer value) { + addCriterion("SELL_STATUS =", value, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusNotEqualTo(Integer value) { + addCriterion("SELL_STATUS <>", value, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusGreaterThan(Integer value) { + addCriterion("SELL_STATUS >", value, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("SELL_STATUS >=", value, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusLessThan(Integer value) { + addCriterion("SELL_STATUS <", value, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusLessThanOrEqualTo(Integer value) { + addCriterion("SELL_STATUS <=", value, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusIn(List values) { + addCriterion("SELL_STATUS in", values, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusNotIn(List values) { + addCriterion("SELL_STATUS not in", values, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusBetween(Integer value1, Integer value2) { + addCriterion("SELL_STATUS between", value1, value2, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellStatusNotBetween(Integer value1, Integer value2) { + addCriterion("SELL_STATUS not between", value1, value2, "sellStatus"); + return (Criteria) this; + } + + public Criteria andSellUnitIsNull() { + addCriterion("SELL_UNIT is null"); + return (Criteria) this; + } + + public Criteria andSellUnitIsNotNull() { + addCriterion("SELL_UNIT is not null"); + return (Criteria) this; + } + + public Criteria andSellUnitEqualTo(String value) { + addCriterion("SELL_UNIT =", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitNotEqualTo(String value) { + addCriterion("SELL_UNIT <>", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitGreaterThan(String value) { + addCriterion("SELL_UNIT >", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitGreaterThanOrEqualTo(String value) { + addCriterion("SELL_UNIT >=", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitLessThan(String value) { + addCriterion("SELL_UNIT <", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitLessThanOrEqualTo(String value) { + addCriterion("SELL_UNIT <=", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitLike(String value) { + addCriterion("SELL_UNIT like", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitNotLike(String value) { + addCriterion("SELL_UNIT not like", value, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitIn(List values) { + addCriterion("SELL_UNIT in", values, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitNotIn(List values) { + addCriterion("SELL_UNIT not in", values, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitBetween(String value1, String value2) { + addCriterion("SELL_UNIT between", value1, value2, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellUnitNotBetween(String value1, String value2) { + addCriterion("SELL_UNIT not between", value1, value2, "sellUnit"); + return (Criteria) this; + } + + public Criteria andSellPriceIsNull() { + addCriterion("SELL_PRICE is null"); + return (Criteria) this; + } + + public Criteria andSellPriceIsNotNull() { + addCriterion("SELL_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andSellPriceEqualTo(BigDecimal value) { + addCriterion("SELL_PRICE =", value, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceNotEqualTo(BigDecimal value) { + addCriterion("SELL_PRICE <>", value, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceGreaterThan(BigDecimal value) { + addCriterion("SELL_PRICE >", value, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("SELL_PRICE >=", value, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceLessThan(BigDecimal value) { + addCriterion("SELL_PRICE <", value, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("SELL_PRICE <=", value, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceIn(List values) { + addCriterion("SELL_PRICE in", values, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceNotIn(List values) { + addCriterion("SELL_PRICE not in", values, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("SELL_PRICE between", value1, value2, "sellPrice"); + return (Criteria) this; + } + + public Criteria andSellPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("SELL_PRICE not between", value1, value2, "sellPrice"); + return (Criteria) this; + } + + public Criteria andIsAuditIsNull() { + addCriterion("IS_AUDIT is null"); + return (Criteria) this; + } + + public Criteria andIsAuditIsNotNull() { + addCriterion("IS_AUDIT is not null"); + return (Criteria) this; + } + + public Criteria andIsAuditEqualTo(Integer value) { + addCriterion("IS_AUDIT =", value, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditNotEqualTo(Integer value) { + addCriterion("IS_AUDIT <>", value, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditGreaterThan(Integer value) { + addCriterion("IS_AUDIT >", value, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_AUDIT >=", value, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditLessThan(Integer value) { + addCriterion("IS_AUDIT <", value, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditLessThanOrEqualTo(Integer value) { + addCriterion("IS_AUDIT <=", value, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditIn(List values) { + addCriterion("IS_AUDIT in", values, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditNotIn(List values) { + addCriterion("IS_AUDIT not in", values, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditBetween(Integer value1, Integer value2) { + addCriterion("IS_AUDIT between", value1, value2, "isAudit"); + return (Criteria) this; + } + + public Criteria andIsAuditNotBetween(Integer value1, Integer value2) { + addCriterion("IS_AUDIT not between", value1, value2, "isAudit"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeIsNull() { + addCriterion("CREATE_DATE_TIME is null"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeIsNotNull() { + addCriterion("CREATE_DATE_TIME is not null"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeEqualTo(Date value) { + addCriterion("CREATE_DATE_TIME =", value, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeNotEqualTo(Date value) { + addCriterion("CREATE_DATE_TIME <>", value, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeGreaterThan(Date value) { + addCriterion("CREATE_DATE_TIME >", value, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("CREATE_DATE_TIME >=", value, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeLessThan(Date value) { + addCriterion("CREATE_DATE_TIME <", value, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeLessThanOrEqualTo(Date value) { + addCriterion("CREATE_DATE_TIME <=", value, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeIn(List values) { + addCriterion("CREATE_DATE_TIME in", values, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeNotIn(List values) { + addCriterion("CREATE_DATE_TIME not in", values, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeBetween(Date value1, Date value2) { + addCriterion("CREATE_DATE_TIME between", value1, value2, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateDateTimeNotBetween(Date value1, Date value2) { + addCriterion("CREATE_DATE_TIME not between", value1, value2, "createDateTime"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeIsNull() { + addCriterion("CREATE_USER_CODE is null"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeIsNotNull() { + addCriterion("CREATE_USER_CODE is not null"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeEqualTo(String value) { + addCriterion("CREATE_USER_CODE =", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeNotEqualTo(String value) { + addCriterion("CREATE_USER_CODE <>", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeGreaterThan(String value) { + addCriterion("CREATE_USER_CODE >", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeGreaterThanOrEqualTo(String value) { + addCriterion("CREATE_USER_CODE >=", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeLessThan(String value) { + addCriterion("CREATE_USER_CODE <", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeLessThanOrEqualTo(String value) { + addCriterion("CREATE_USER_CODE <=", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeLike(String value) { + addCriterion("CREATE_USER_CODE like", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeNotLike(String value) { + addCriterion("CREATE_USER_CODE not like", value, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeIn(List values) { + addCriterion("CREATE_USER_CODE in", values, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeNotIn(List values) { + addCriterion("CREATE_USER_CODE not in", values, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeBetween(String value1, String value2) { + addCriterion("CREATE_USER_CODE between", value1, value2, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCreateUserCodeNotBetween(String value1, String value2) { + addCriterion("CREATE_USER_CODE not between", value1, value2, "createUserCode"); + return (Criteria) this; + } + + public Criteria andCaizaiUserIsNull() { + addCriterion("CAIZAI_USER is null"); + return (Criteria) this; + } + + public Criteria andCaizaiUserIsNotNull() { + addCriterion("CAIZAI_USER is not null"); + return (Criteria) this; + } + + public Criteria andCaizaiUserEqualTo(String value) { + addCriterion("CAIZAI_USER =", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserNotEqualTo(String value) { + addCriterion("CAIZAI_USER <>", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserGreaterThan(String value) { + addCriterion("CAIZAI_USER >", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserGreaterThanOrEqualTo(String value) { + addCriterion("CAIZAI_USER >=", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserLessThan(String value) { + addCriterion("CAIZAI_USER <", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserLessThanOrEqualTo(String value) { + addCriterion("CAIZAI_USER <=", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserLike(String value) { + addCriterion("CAIZAI_USER like", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserNotLike(String value) { + addCriterion("CAIZAI_USER not like", value, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserIn(List values) { + addCriterion("CAIZAI_USER in", values, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserNotIn(List values) { + addCriterion("CAIZAI_USER not in", values, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserBetween(String value1, String value2) { + addCriterion("CAIZAI_USER between", value1, value2, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andCaizaiUserNotBetween(String value1, String value2) { + addCriterion("CAIZAI_USER not between", value1, value2, "caizaiUser"); + return (Criteria) this; + } + + public Criteria andJianceUserIsNull() { + addCriterion("JIANCE_USER is null"); + return (Criteria) this; + } + + public Criteria andJianceUserIsNotNull() { + addCriterion("JIANCE_USER is not null"); + return (Criteria) this; + } + + public Criteria andJianceUserEqualTo(String value) { + addCriterion("JIANCE_USER =", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserNotEqualTo(String value) { + addCriterion("JIANCE_USER <>", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserGreaterThan(String value) { + addCriterion("JIANCE_USER >", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserGreaterThanOrEqualTo(String value) { + addCriterion("JIANCE_USER >=", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserLessThan(String value) { + addCriterion("JIANCE_USER <", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserLessThanOrEqualTo(String value) { + addCriterion("JIANCE_USER <=", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserLike(String value) { + addCriterion("JIANCE_USER like", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserNotLike(String value) { + addCriterion("JIANCE_USER not like", value, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserIn(List values) { + addCriterion("JIANCE_USER in", values, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserNotIn(List values) { + addCriterion("JIANCE_USER not in", values, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserBetween(String value1, String value2) { + addCriterion("JIANCE_USER between", value1, value2, "jianceUser"); + return (Criteria) this; + } + + public Criteria andJianceUserNotBetween(String value1, String value2) { + addCriterion("JIANCE_USER not between", value1, value2, "jianceUser"); + return (Criteria) this; + } + + public Criteria andNongCanLvIsNull() { + addCriterion("NONG_CAN_LV is null"); + return (Criteria) this; + } + + public Criteria andNongCanLvIsNotNull() { + addCriterion("NONG_CAN_LV is not null"); + return (Criteria) this; + } + + public Criteria andNongCanLvEqualTo(String value) { + addCriterion("NONG_CAN_LV =", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvNotEqualTo(String value) { + addCriterion("NONG_CAN_LV <>", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvGreaterThan(String value) { + addCriterion("NONG_CAN_LV >", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvGreaterThanOrEqualTo(String value) { + addCriterion("NONG_CAN_LV >=", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvLessThan(String value) { + addCriterion("NONG_CAN_LV <", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvLessThanOrEqualTo(String value) { + addCriterion("NONG_CAN_LV <=", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvLike(String value) { + addCriterion("NONG_CAN_LV like", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvNotLike(String value) { + addCriterion("NONG_CAN_LV not like", value, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvIn(List values) { + addCriterion("NONG_CAN_LV in", values, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvNotIn(List values) { + addCriterion("NONG_CAN_LV not in", values, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvBetween(String value1, String value2) { + addCriterion("NONG_CAN_LV between", value1, value2, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andNongCanLvNotBetween(String value1, String value2) { + addCriterion("NONG_CAN_LV not between", value1, value2, "nongCanLv"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenIsNull() { + addCriterion("YI_YANG_CHEN_FEN is null"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenIsNotNull() { + addCriterion("YI_YANG_CHEN_FEN is not null"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenEqualTo(String value) { + addCriterion("YI_YANG_CHEN_FEN =", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenNotEqualTo(String value) { + addCriterion("YI_YANG_CHEN_FEN <>", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenGreaterThan(String value) { + addCriterion("YI_YANG_CHEN_FEN >", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenGreaterThanOrEqualTo(String value) { + addCriterion("YI_YANG_CHEN_FEN >=", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenLessThan(String value) { + addCriterion("YI_YANG_CHEN_FEN <", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenLessThanOrEqualTo(String value) { + addCriterion("YI_YANG_CHEN_FEN <=", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenLike(String value) { + addCriterion("YI_YANG_CHEN_FEN like", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenNotLike(String value) { + addCriterion("YI_YANG_CHEN_FEN not like", value, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenIn(List values) { + addCriterion("YI_YANG_CHEN_FEN in", values, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenNotIn(List values) { + addCriterion("YI_YANG_CHEN_FEN not in", values, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenBetween(String value1, String value2) { + addCriterion("YI_YANG_CHEN_FEN between", value1, value2, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andYiYangChenFenNotBetween(String value1, String value2) { + addCriterion("YI_YANG_CHEN_FEN not between", value1, value2, "yiYangChenFen"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiIsNull() { + addCriterion("BAO_ZHI_QI is null"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiIsNotNull() { + addCriterion("BAO_ZHI_QI is not null"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiEqualTo(Integer value) { + addCriterion("BAO_ZHI_QI =", value, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiNotEqualTo(Integer value) { + addCriterion("BAO_ZHI_QI <>", value, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiGreaterThan(Integer value) { + addCriterion("BAO_ZHI_QI >", value, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiGreaterThanOrEqualTo(Integer value) { + addCriterion("BAO_ZHI_QI >=", value, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiLessThan(Integer value) { + addCriterion("BAO_ZHI_QI <", value, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiLessThanOrEqualTo(Integer value) { + addCriterion("BAO_ZHI_QI <=", value, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiIn(List values) { + addCriterion("BAO_ZHI_QI in", values, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiNotIn(List values) { + addCriterion("BAO_ZHI_QI not in", values, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiBetween(Integer value1, Integer value2) { + addCriterion("BAO_ZHI_QI between", value1, value2, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andBaoZhiQiNotBetween(Integer value1, Integer value2) { + addCriterion("BAO_ZHI_QI not between", value1, value2, "baoZhiQi"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunIsNull() { + addCriterion("SHI_YI_REN_QUN is null"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunIsNotNull() { + addCriterion("SHI_YI_REN_QUN is not null"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunEqualTo(String value) { + addCriterion("SHI_YI_REN_QUN =", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunNotEqualTo(String value) { + addCriterion("SHI_YI_REN_QUN <>", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunGreaterThan(String value) { + addCriterion("SHI_YI_REN_QUN >", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunGreaterThanOrEqualTo(String value) { + addCriterion("SHI_YI_REN_QUN >=", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunLessThan(String value) { + addCriterion("SHI_YI_REN_QUN <", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunLessThanOrEqualTo(String value) { + addCriterion("SHI_YI_REN_QUN <=", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunLike(String value) { + addCriterion("SHI_YI_REN_QUN like", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunNotLike(String value) { + addCriterion("SHI_YI_REN_QUN not like", value, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunIn(List values) { + addCriterion("SHI_YI_REN_QUN in", values, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunNotIn(List values) { + addCriterion("SHI_YI_REN_QUN not in", values, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunBetween(String value1, String value2) { + addCriterion("SHI_YI_REN_QUN between", value1, value2, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andShiYiRenQunNotBetween(String value1, String value2) { + addCriterion("SHI_YI_REN_QUN not between", value1, value2, "shiYiRenQun"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouIsNull() { + addCriterion("XIAN_SHI_QIANG_GOU is null"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouIsNotNull() { + addCriterion("XIAN_SHI_QIANG_GOU is not null"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouEqualTo(Integer value) { + addCriterion("XIAN_SHI_QIANG_GOU =", value, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouNotEqualTo(Integer value) { + addCriterion("XIAN_SHI_QIANG_GOU <>", value, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouGreaterThan(Integer value) { + addCriterion("XIAN_SHI_QIANG_GOU >", value, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouGreaterThanOrEqualTo(Integer value) { + addCriterion("XIAN_SHI_QIANG_GOU >=", value, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouLessThan(Integer value) { + addCriterion("XIAN_SHI_QIANG_GOU <", value, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouLessThanOrEqualTo(Integer value) { + addCriterion("XIAN_SHI_QIANG_GOU <=", value, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouIn(List values) { + addCriterion("XIAN_SHI_QIANG_GOU in", values, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouNotIn(List values) { + addCriterion("XIAN_SHI_QIANG_GOU not in", values, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouBetween(Integer value1, Integer value2) { + addCriterion("XIAN_SHI_QIANG_GOU between", value1, value2, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXianShiQiangGouNotBetween(Integer value1, Integer value2) { + addCriterion("XIAN_SHI_QIANG_GOU not between", value1, value2, "xianShiQiangGou"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianIsNull() { + addCriterion("XIN_PIN_CHANG_XIAN is null"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianIsNotNull() { + addCriterion("XIN_PIN_CHANG_XIAN is not null"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianEqualTo(Integer value) { + addCriterion("XIN_PIN_CHANG_XIAN =", value, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianNotEqualTo(Integer value) { + addCriterion("XIN_PIN_CHANG_XIAN <>", value, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianGreaterThan(Integer value) { + addCriterion("XIN_PIN_CHANG_XIAN >", value, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianGreaterThanOrEqualTo(Integer value) { + addCriterion("XIN_PIN_CHANG_XIAN >=", value, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianLessThan(Integer value) { + addCriterion("XIN_PIN_CHANG_XIAN <", value, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianLessThanOrEqualTo(Integer value) { + addCriterion("XIN_PIN_CHANG_XIAN <=", value, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianIn(List values) { + addCriterion("XIN_PIN_CHANG_XIAN in", values, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianNotIn(List values) { + addCriterion("XIN_PIN_CHANG_XIAN not in", values, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianBetween(Integer value1, Integer value2) { + addCriterion("XIN_PIN_CHANG_XIAN between", value1, value2, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andXinPinChangXianNotBetween(Integer value1, Integer value2) { + addCriterion("XIN_PIN_CHANG_XIAN not between", value1, value2, "xinPinChangXian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianIsNull() { + addCriterion("RE_MAI_TUI_JIAN is null"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianIsNotNull() { + addCriterion("RE_MAI_TUI_JIAN is not null"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianEqualTo(Integer value) { + addCriterion("RE_MAI_TUI_JIAN =", value, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianNotEqualTo(Integer value) { + addCriterion("RE_MAI_TUI_JIAN <>", value, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianGreaterThan(Integer value) { + addCriterion("RE_MAI_TUI_JIAN >", value, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianGreaterThanOrEqualTo(Integer value) { + addCriterion("RE_MAI_TUI_JIAN >=", value, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianLessThan(Integer value) { + addCriterion("RE_MAI_TUI_JIAN <", value, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianLessThanOrEqualTo(Integer value) { + addCriterion("RE_MAI_TUI_JIAN <=", value, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianIn(List values) { + addCriterion("RE_MAI_TUI_JIAN in", values, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianNotIn(List values) { + addCriterion("RE_MAI_TUI_JIAN not in", values, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianBetween(Integer value1, Integer value2) { + addCriterion("RE_MAI_TUI_JIAN between", value1, value2, "reMaiTuiJian"); + return (Criteria) this; + } + + public Criteria andReMaiTuiJianNotBetween(Integer value1, Integer value2) { + addCriterion("RE_MAI_TUI_JIAN not between", value1, value2, "reMaiTuiJian"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdMember.java b/src/main/java/com/xmomen/module/base/entity/CdMember.java new file mode 100644 index 0000000..8b3e5cb --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdMember.java @@ -0,0 +1,360 @@ +package com.xmomen.module.base.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.xmomen.framework.mybatis.model.BaseMybatisModel; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_member") +public class CdMember extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 姓名 + */ + private String name; + + /** + * 密码 + */ + private String password; + + /** + * 手机号 + */ + private String phoneNumber; + + /** + * 收货地址 + */ + private String address; + + /** + * 所属单位 + */ + private Integer cdCompanyId; + + /** + * 所属客服经理 + */ + private Integer cdUserId; + + /** + * 备用收货人 + */ + private String spareName; + + /** + * 备用收货人2 + */ + private String spareName2; + + /** + * 备用手机号1 + */ + private String spareTel; + + /** + * 备用手机号2 + */ + private String spareTel2; + + /** + * 家庭固话 + */ + private String telNumber; + + /** + * 办公室电话 + */ + private String officeTel; + + /** + * 备用地址1 + */ + private String spareAddress; + + /** + * 备用地址2 + */ + private String spareAddress2; + + /** + * 说明 + */ + private String flag; + + /** + * 1-潜在客户,2-普通客户,3-优质客户 + */ + private Integer memberType; + + /** + * 邮箱 + */ + private String email; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if (id == null) { + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "NAME") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + if (name == null) { + removeValidField("name"); + return; + } + addValidField("name"); + } + + @JsonIgnore + @Column(name = "PASSWORD") + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + if (password == null) { + removeValidField("password"); + return; + } + addValidField("password"); + } + + @Column(name = "PHONE_NUMBER") + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + if (phoneNumber == null) { + removeValidField("phoneNumber"); + return; + } + addValidField("phoneNumber"); + } + + @Column(name = "ADDRESS") + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + if (address == null) { + removeValidField("address"); + return; + } + addValidField("address"); + } + + @Column(name = "CD_COMPANY_ID") + public Integer getCdCompanyId() { + return cdCompanyId; + } + + public void setCdCompanyId(Integer cdCompanyId) { + this.cdCompanyId = cdCompanyId; + if (cdCompanyId == null) { + removeValidField("cdCompanyId"); + return; + } + addValidField("cdCompanyId"); + } + + @Column(name = "CD_USER_ID") + public Integer getCdUserId() { + return cdUserId; + } + + public void setCdUserId(Integer cdUserId) { + this.cdUserId = cdUserId; + if (cdUserId == null) { + removeValidField("cdUserId"); + return; + } + addValidField("cdUserId"); + } + + @Column(name = "SPARE_NAME") + public String getSpareName() { + return spareName; + } + + public void setSpareName(String spareName) { + this.spareName = spareName; + if (spareName == null) { + removeValidField("spareName"); + return; + } + addValidField("spareName"); + } + + @Column(name = "SPARE_NAME2") + public String getSpareName2() { + return spareName2; + } + + public void setSpareName2(String spareName2) { + this.spareName2 = spareName2; + if (spareName2 == null) { + removeValidField("spareName2"); + return; + } + addValidField("spareName2"); + } + + @Column(name = "SPARE_TEL") + public String getSpareTel() { + return spareTel; + } + + public void setSpareTel(String spareTel) { + this.spareTel = spareTel; + if (spareTel == null) { + removeValidField("spareTel"); + return; + } + addValidField("spareTel"); + } + + @Column(name = "SPARE_TEL2") + public String getSpareTel2() { + return spareTel2; + } + + public void setSpareTel2(String spareTel2) { + this.spareTel2 = spareTel2; + if (spareTel2 == null) { + removeValidField("spareTel2"); + return; + } + addValidField("spareTel2"); + } + + @Column(name = "TEL_NUMBER") + public String getTelNumber() { + return telNumber; + } + + public void setTelNumber(String telNumber) { + this.telNumber = telNumber; + if (telNumber == null) { + removeValidField("telNumber"); + return; + } + addValidField("telNumber"); + } + + @Column(name = "OFFICE_TEL") + public String getOfficeTel() { + return officeTel; + } + + public void setOfficeTel(String officeTel) { + this.officeTel = officeTel; + if (officeTel == null) { + removeValidField("officeTel"); + return; + } + addValidField("officeTel"); + } + + @Column(name = "SPARE_ADDRESS") + public String getSpareAddress() { + return spareAddress; + } + + public void setSpareAddress(String spareAddress) { + this.spareAddress = spareAddress; + if (spareAddress == null) { + removeValidField("spareAddress"); + return; + } + addValidField("spareAddress"); + } + + @Column(name = "SPARE_ADDRESS2") + public String getSpareAddress2() { + return spareAddress2; + } + + public void setSpareAddress2(String spareAddress2) { + this.spareAddress2 = spareAddress2; + if (spareAddress2 == null) { + removeValidField("spareAddress2"); + return; + } + addValidField("spareAddress2"); + } + + @Column(name = "FLAG") + public String getFlag() { + return flag; + } + + public void setFlag(String flag) { + this.flag = flag; + if (flag == null) { + removeValidField("flag"); + return; + } + addValidField("flag"); + } + + @Column(name = "MEMBER_TYPE") + public Integer getMemberType() { + return memberType; + } + + public void setMemberType(Integer memberType) { + this.memberType = memberType; + if (memberType == null) { + removeValidField("memberType"); + return; + } + addValidField("memberType"); + } + + @Column(name = "email") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + if (email == null) { + removeValidField("email"); + return; + } + addValidField("email"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdMemberCouponRelation.java b/src/main/java/com/xmomen/module/base/entity/CdMemberCouponRelation.java new file mode 100644 index 0000000..aa0c21b --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdMemberCouponRelation.java @@ -0,0 +1,72 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_member_coupon_relation") +public class CdMemberCouponRelation extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 客户代码 + */ + private Integer cdMemberId; + + /** + * 卡号 + */ + private String couponNumber; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "CD_MEMBER_ID") + public Integer getCdMemberId() { + return cdMemberId; + } + + public void setCdMemberId(Integer cdMemberId) { + this.cdMemberId = cdMemberId; + if(cdMemberId == null){ + removeValidField("cdMemberId"); + return; + } + addValidField("cdMemberId"); + } + + @Column(name = "COUPON_NUMBER") + public String getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + if(couponNumber == null){ + removeValidField("couponNumber"); + return; + } + addValidField("couponNumber"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdMemberExample.java b/src/main/java/com/xmomen/module/base/entity/CdMemberExample.java new file mode 100644 index 0000000..1e8c17f --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdMemberExample.java @@ -0,0 +1,1421 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class CdMemberExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdMemberExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andNameIsNull() { + addCriterion("NAME is null"); + return (Criteria) this; + } + + public Criteria andNameIsNotNull() { + addCriterion("NAME is not null"); + return (Criteria) this; + } + + public Criteria andNameEqualTo(String value) { + addCriterion("NAME =", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotEqualTo(String value) { + addCriterion("NAME <>", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThan(String value) { + addCriterion("NAME >", value, "name"); + return (Criteria) this; + } + + public Criteria andNameGreaterThanOrEqualTo(String value) { + addCriterion("NAME >=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThan(String value) { + addCriterion("NAME <", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLessThanOrEqualTo(String value) { + addCriterion("NAME <=", value, "name"); + return (Criteria) this; + } + + public Criteria andNameLike(String value) { + addCriterion("NAME like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameNotLike(String value) { + addCriterion("NAME not like", value, "name"); + return (Criteria) this; + } + + public Criteria andNameIn(List values) { + addCriterion("NAME in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameNotIn(List values) { + addCriterion("NAME not in", values, "name"); + return (Criteria) this; + } + + public Criteria andNameBetween(String value1, String value2) { + addCriterion("NAME between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andNameNotBetween(String value1, String value2) { + addCriterion("NAME not between", value1, value2, "name"); + return (Criteria) this; + } + + public Criteria andPasswordIsNull() { + addCriterion("PASSWORD is null"); + return (Criteria) this; + } + + public Criteria andPasswordIsNotNull() { + addCriterion("PASSWORD is not null"); + return (Criteria) this; + } + + public Criteria andPasswordEqualTo(String value) { + addCriterion("PASSWORD =", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotEqualTo(String value) { + addCriterion("PASSWORD <>", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordGreaterThan(String value) { + addCriterion("PASSWORD >", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordGreaterThanOrEqualTo(String value) { + addCriterion("PASSWORD >=", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordLessThan(String value) { + addCriterion("PASSWORD <", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordLessThanOrEqualTo(String value) { + addCriterion("PASSWORD <=", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordLike(String value) { + addCriterion("PASSWORD like", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotLike(String value) { + addCriterion("PASSWORD not like", value, "password"); + return (Criteria) this; + } + + public Criteria andPasswordIn(List values) { + addCriterion("PASSWORD in", values, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotIn(List values) { + addCriterion("PASSWORD not in", values, "password"); + return (Criteria) this; + } + + public Criteria andPasswordBetween(String value1, String value2) { + addCriterion("PASSWORD between", value1, value2, "password"); + return (Criteria) this; + } + + public Criteria andPasswordNotBetween(String value1, String value2) { + addCriterion("PASSWORD not between", value1, value2, "password"); + return (Criteria) this; + } + + public Criteria andPhoneNumberIsNull() { + addCriterion("PHONE_NUMBER is null"); + return (Criteria) this; + } + + public Criteria andPhoneNumberIsNotNull() { + addCriterion("PHONE_NUMBER is not null"); + return (Criteria) this; + } + + public Criteria andPhoneNumberEqualTo(String value) { + addCriterion("PHONE_NUMBER =", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberNotEqualTo(String value) { + addCriterion("PHONE_NUMBER <>", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberGreaterThan(String value) { + addCriterion("PHONE_NUMBER >", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberGreaterThanOrEqualTo(String value) { + addCriterion("PHONE_NUMBER >=", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberLessThan(String value) { + addCriterion("PHONE_NUMBER <", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberLessThanOrEqualTo(String value) { + addCriterion("PHONE_NUMBER <=", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberLike(String value) { + addCriterion("PHONE_NUMBER like", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberNotLike(String value) { + addCriterion("PHONE_NUMBER not like", value, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberIn(List values) { + addCriterion("PHONE_NUMBER in", values, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberNotIn(List values) { + addCriterion("PHONE_NUMBER not in", values, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberBetween(String value1, String value2) { + addCriterion("PHONE_NUMBER between", value1, value2, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andPhoneNumberNotBetween(String value1, String value2) { + addCriterion("PHONE_NUMBER not between", value1, value2, "phoneNumber"); + return (Criteria) this; + } + + public Criteria andAddressIsNull() { + addCriterion("ADDRESS is null"); + return (Criteria) this; + } + + public Criteria andAddressIsNotNull() { + addCriterion("ADDRESS is not null"); + return (Criteria) this; + } + + public Criteria andAddressEqualTo(String value) { + addCriterion("ADDRESS =", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotEqualTo(String value) { + addCriterion("ADDRESS <>", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThan(String value) { + addCriterion("ADDRESS >", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressGreaterThanOrEqualTo(String value) { + addCriterion("ADDRESS >=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThan(String value) { + addCriterion("ADDRESS <", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLessThanOrEqualTo(String value) { + addCriterion("ADDRESS <=", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressLike(String value) { + addCriterion("ADDRESS like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotLike(String value) { + addCriterion("ADDRESS not like", value, "address"); + return (Criteria) this; + } + + public Criteria andAddressIn(List values) { + addCriterion("ADDRESS in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotIn(List values) { + addCriterion("ADDRESS not in", values, "address"); + return (Criteria) this; + } + + public Criteria andAddressBetween(String value1, String value2) { + addCriterion("ADDRESS between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andAddressNotBetween(String value1, String value2) { + addCriterion("ADDRESS not between", value1, value2, "address"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdIsNull() { + addCriterion("CD_COMPANY_ID is null"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdIsNotNull() { + addCriterion("CD_COMPANY_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID =", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdNotEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID <>", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdGreaterThan(Integer value) { + addCriterion("CD_COMPANY_ID >", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID >=", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdLessThan(Integer value) { + addCriterion("CD_COMPANY_ID <", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_COMPANY_ID <=", value, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdIn(List values) { + addCriterion("CD_COMPANY_ID in", values, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdNotIn(List values) { + addCriterion("CD_COMPANY_ID not in", values, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdBetween(Integer value1, Integer value2) { + addCriterion("CD_COMPANY_ID between", value1, value2, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdCompanyIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_COMPANY_ID not between", value1, value2, "cdCompanyId"); + return (Criteria) this; + } + + public Criteria andCdUserIdIsNull() { + addCriterion("CD_USER_ID is null"); + return (Criteria) this; + } + + public Criteria andCdUserIdIsNotNull() { + addCriterion("CD_USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdUserIdEqualTo(Integer value) { + addCriterion("CD_USER_ID =", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdNotEqualTo(Integer value) { + addCriterion("CD_USER_ID <>", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdGreaterThan(Integer value) { + addCriterion("CD_USER_ID >", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_USER_ID >=", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdLessThan(Integer value) { + addCriterion("CD_USER_ID <", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_USER_ID <=", value, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdIn(List values) { + addCriterion("CD_USER_ID in", values, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdNotIn(List values) { + addCriterion("CD_USER_ID not in", values, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdBetween(Integer value1, Integer value2) { + addCriterion("CD_USER_ID between", value1, value2, "cdUserId"); + return (Criteria) this; + } + + public Criteria andCdUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_USER_ID not between", value1, value2, "cdUserId"); + return (Criteria) this; + } + + public Criteria andSpareNameIsNull() { + addCriterion("SPARE_NAME is null"); + return (Criteria) this; + } + + public Criteria andSpareNameIsNotNull() { + addCriterion("SPARE_NAME is not null"); + return (Criteria) this; + } + + public Criteria andSpareNameEqualTo(String value) { + addCriterion("SPARE_NAME =", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameNotEqualTo(String value) { + addCriterion("SPARE_NAME <>", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameGreaterThan(String value) { + addCriterion("SPARE_NAME >", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameGreaterThanOrEqualTo(String value) { + addCriterion("SPARE_NAME >=", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameLessThan(String value) { + addCriterion("SPARE_NAME <", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameLessThanOrEqualTo(String value) { + addCriterion("SPARE_NAME <=", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameLike(String value) { + addCriterion("SPARE_NAME like", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameNotLike(String value) { + addCriterion("SPARE_NAME not like", value, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameIn(List values) { + addCriterion("SPARE_NAME in", values, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameNotIn(List values) { + addCriterion("SPARE_NAME not in", values, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameBetween(String value1, String value2) { + addCriterion("SPARE_NAME between", value1, value2, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareNameNotBetween(String value1, String value2) { + addCriterion("SPARE_NAME not between", value1, value2, "spareName"); + return (Criteria) this; + } + + public Criteria andSpareName2IsNull() { + addCriterion("SPARE_NAME2 is null"); + return (Criteria) this; + } + + public Criteria andSpareName2IsNotNull() { + addCriterion("SPARE_NAME2 is not null"); + return (Criteria) this; + } + + public Criteria andSpareName2EqualTo(String value) { + addCriterion("SPARE_NAME2 =", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2NotEqualTo(String value) { + addCriterion("SPARE_NAME2 <>", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2GreaterThan(String value) { + addCriterion("SPARE_NAME2 >", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2GreaterThanOrEqualTo(String value) { + addCriterion("SPARE_NAME2 >=", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2LessThan(String value) { + addCriterion("SPARE_NAME2 <", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2LessThanOrEqualTo(String value) { + addCriterion("SPARE_NAME2 <=", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2Like(String value) { + addCriterion("SPARE_NAME2 like", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2NotLike(String value) { + addCriterion("SPARE_NAME2 not like", value, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2In(List values) { + addCriterion("SPARE_NAME2 in", values, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2NotIn(List values) { + addCriterion("SPARE_NAME2 not in", values, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2Between(String value1, String value2) { + addCriterion("SPARE_NAME2 between", value1, value2, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareName2NotBetween(String value1, String value2) { + addCriterion("SPARE_NAME2 not between", value1, value2, "spareName2"); + return (Criteria) this; + } + + public Criteria andSpareTelIsNull() { + addCriterion("SPARE_TEL is null"); + return (Criteria) this; + } + + public Criteria andSpareTelIsNotNull() { + addCriterion("SPARE_TEL is not null"); + return (Criteria) this; + } + + public Criteria andSpareTelEqualTo(String value) { + addCriterion("SPARE_TEL =", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelNotEqualTo(String value) { + addCriterion("SPARE_TEL <>", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelGreaterThan(String value) { + addCriterion("SPARE_TEL >", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelGreaterThanOrEqualTo(String value) { + addCriterion("SPARE_TEL >=", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelLessThan(String value) { + addCriterion("SPARE_TEL <", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelLessThanOrEqualTo(String value) { + addCriterion("SPARE_TEL <=", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelLike(String value) { + addCriterion("SPARE_TEL like", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelNotLike(String value) { + addCriterion("SPARE_TEL not like", value, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelIn(List values) { + addCriterion("SPARE_TEL in", values, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelNotIn(List values) { + addCriterion("SPARE_TEL not in", values, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelBetween(String value1, String value2) { + addCriterion("SPARE_TEL between", value1, value2, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTelNotBetween(String value1, String value2) { + addCriterion("SPARE_TEL not between", value1, value2, "spareTel"); + return (Criteria) this; + } + + public Criteria andSpareTel2IsNull() { + addCriterion("SPARE_TEL2 is null"); + return (Criteria) this; + } + + public Criteria andSpareTel2IsNotNull() { + addCriterion("SPARE_TEL2 is not null"); + return (Criteria) this; + } + + public Criteria andSpareTel2EqualTo(String value) { + addCriterion("SPARE_TEL2 =", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2NotEqualTo(String value) { + addCriterion("SPARE_TEL2 <>", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2GreaterThan(String value) { + addCriterion("SPARE_TEL2 >", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2GreaterThanOrEqualTo(String value) { + addCriterion("SPARE_TEL2 >=", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2LessThan(String value) { + addCriterion("SPARE_TEL2 <", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2LessThanOrEqualTo(String value) { + addCriterion("SPARE_TEL2 <=", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2Like(String value) { + addCriterion("SPARE_TEL2 like", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2NotLike(String value) { + addCriterion("SPARE_TEL2 not like", value, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2In(List values) { + addCriterion("SPARE_TEL2 in", values, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2NotIn(List values) { + addCriterion("SPARE_TEL2 not in", values, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2Between(String value1, String value2) { + addCriterion("SPARE_TEL2 between", value1, value2, "spareTel2"); + return (Criteria) this; + } + + public Criteria andSpareTel2NotBetween(String value1, String value2) { + addCriterion("SPARE_TEL2 not between", value1, value2, "spareTel2"); + return (Criteria) this; + } + + public Criteria andTelNumberIsNull() { + addCriterion("TEL_NUMBER is null"); + return (Criteria) this; + } + + public Criteria andTelNumberIsNotNull() { + addCriterion("TEL_NUMBER is not null"); + return (Criteria) this; + } + + public Criteria andTelNumberEqualTo(String value) { + addCriterion("TEL_NUMBER =", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberNotEqualTo(String value) { + addCriterion("TEL_NUMBER <>", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberGreaterThan(String value) { + addCriterion("TEL_NUMBER >", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberGreaterThanOrEqualTo(String value) { + addCriterion("TEL_NUMBER >=", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberLessThan(String value) { + addCriterion("TEL_NUMBER <", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberLessThanOrEqualTo(String value) { + addCriterion("TEL_NUMBER <=", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberLike(String value) { + addCriterion("TEL_NUMBER like", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberNotLike(String value) { + addCriterion("TEL_NUMBER not like", value, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberIn(List values) { + addCriterion("TEL_NUMBER in", values, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberNotIn(List values) { + addCriterion("TEL_NUMBER not in", values, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberBetween(String value1, String value2) { + addCriterion("TEL_NUMBER between", value1, value2, "telNumber"); + return (Criteria) this; + } + + public Criteria andTelNumberNotBetween(String value1, String value2) { + addCriterion("TEL_NUMBER not between", value1, value2, "telNumber"); + return (Criteria) this; + } + + public Criteria andOfficeTelIsNull() { + addCriterion("OFFICE_TEL is null"); + return (Criteria) this; + } + + public Criteria andOfficeTelIsNotNull() { + addCriterion("OFFICE_TEL is not null"); + return (Criteria) this; + } + + public Criteria andOfficeTelEqualTo(String value) { + addCriterion("OFFICE_TEL =", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelNotEqualTo(String value) { + addCriterion("OFFICE_TEL <>", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelGreaterThan(String value) { + addCriterion("OFFICE_TEL >", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelGreaterThanOrEqualTo(String value) { + addCriterion("OFFICE_TEL >=", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelLessThan(String value) { + addCriterion("OFFICE_TEL <", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelLessThanOrEqualTo(String value) { + addCriterion("OFFICE_TEL <=", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelLike(String value) { + addCriterion("OFFICE_TEL like", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelNotLike(String value) { + addCriterion("OFFICE_TEL not like", value, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelIn(List values) { + addCriterion("OFFICE_TEL in", values, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelNotIn(List values) { + addCriterion("OFFICE_TEL not in", values, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelBetween(String value1, String value2) { + addCriterion("OFFICE_TEL between", value1, value2, "officeTel"); + return (Criteria) this; + } + + public Criteria andOfficeTelNotBetween(String value1, String value2) { + addCriterion("OFFICE_TEL not between", value1, value2, "officeTel"); + return (Criteria) this; + } + + public Criteria andSpareAddressIsNull() { + addCriterion("SPARE_ADDRESS is null"); + return (Criteria) this; + } + + public Criteria andSpareAddressIsNotNull() { + addCriterion("SPARE_ADDRESS is not null"); + return (Criteria) this; + } + + public Criteria andSpareAddressEqualTo(String value) { + addCriterion("SPARE_ADDRESS =", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressNotEqualTo(String value) { + addCriterion("SPARE_ADDRESS <>", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressGreaterThan(String value) { + addCriterion("SPARE_ADDRESS >", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressGreaterThanOrEqualTo(String value) { + addCriterion("SPARE_ADDRESS >=", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressLessThan(String value) { + addCriterion("SPARE_ADDRESS <", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressLessThanOrEqualTo(String value) { + addCriterion("SPARE_ADDRESS <=", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressLike(String value) { + addCriterion("SPARE_ADDRESS like", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressNotLike(String value) { + addCriterion("SPARE_ADDRESS not like", value, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressIn(List values) { + addCriterion("SPARE_ADDRESS in", values, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressNotIn(List values) { + addCriterion("SPARE_ADDRESS not in", values, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressBetween(String value1, String value2) { + addCriterion("SPARE_ADDRESS between", value1, value2, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddressNotBetween(String value1, String value2) { + addCriterion("SPARE_ADDRESS not between", value1, value2, "spareAddress"); + return (Criteria) this; + } + + public Criteria andSpareAddress2IsNull() { + addCriterion("SPARE_ADDRESS2 is null"); + return (Criteria) this; + } + + public Criteria andSpareAddress2IsNotNull() { + addCriterion("SPARE_ADDRESS2 is not null"); + return (Criteria) this; + } + + public Criteria andSpareAddress2EqualTo(String value) { + addCriterion("SPARE_ADDRESS2 =", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2NotEqualTo(String value) { + addCriterion("SPARE_ADDRESS2 <>", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2GreaterThan(String value) { + addCriterion("SPARE_ADDRESS2 >", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2GreaterThanOrEqualTo(String value) { + addCriterion("SPARE_ADDRESS2 >=", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2LessThan(String value) { + addCriterion("SPARE_ADDRESS2 <", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2LessThanOrEqualTo(String value) { + addCriterion("SPARE_ADDRESS2 <=", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2Like(String value) { + addCriterion("SPARE_ADDRESS2 like", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2NotLike(String value) { + addCriterion("SPARE_ADDRESS2 not like", value, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2In(List values) { + addCriterion("SPARE_ADDRESS2 in", values, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2NotIn(List values) { + addCriterion("SPARE_ADDRESS2 not in", values, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2Between(String value1, String value2) { + addCriterion("SPARE_ADDRESS2 between", value1, value2, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andSpareAddress2NotBetween(String value1, String value2) { + addCriterion("SPARE_ADDRESS2 not between", value1, value2, "spareAddress2"); + return (Criteria) this; + } + + public Criteria andFlagIsNull() { + addCriterion("FLAG is null"); + return (Criteria) this; + } + + public Criteria andFlagIsNotNull() { + addCriterion("FLAG is not null"); + return (Criteria) this; + } + + public Criteria andFlagEqualTo(String value) { + addCriterion("FLAG =", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagNotEqualTo(String value) { + addCriterion("FLAG <>", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagGreaterThan(String value) { + addCriterion("FLAG >", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagGreaterThanOrEqualTo(String value) { + addCriterion("FLAG >=", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagLessThan(String value) { + addCriterion("FLAG <", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagLessThanOrEqualTo(String value) { + addCriterion("FLAG <=", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagLike(String value) { + addCriterion("FLAG like", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagNotLike(String value) { + addCriterion("FLAG not like", value, "flag"); + return (Criteria) this; + } + + public Criteria andFlagIn(List values) { + addCriterion("FLAG in", values, "flag"); + return (Criteria) this; + } + + public Criteria andFlagNotIn(List values) { + addCriterion("FLAG not in", values, "flag"); + return (Criteria) this; + } + + public Criteria andFlagBetween(String value1, String value2) { + addCriterion("FLAG between", value1, value2, "flag"); + return (Criteria) this; + } + + public Criteria andFlagNotBetween(String value1, String value2) { + addCriterion("FLAG not between", value1, value2, "flag"); + return (Criteria) this; + } + + public Criteria andMemberTypeIsNull() { + addCriterion("MEMBER_TYPE is null"); + return (Criteria) this; + } + + public Criteria andMemberTypeIsNotNull() { + addCriterion("MEMBER_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andMemberTypeEqualTo(Integer value) { + addCriterion("MEMBER_TYPE =", value, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeNotEqualTo(Integer value) { + addCriterion("MEMBER_TYPE <>", value, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeGreaterThan(Integer value) { + addCriterion("MEMBER_TYPE >", value, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("MEMBER_TYPE >=", value, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeLessThan(Integer value) { + addCriterion("MEMBER_TYPE <", value, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeLessThanOrEqualTo(Integer value) { + addCriterion("MEMBER_TYPE <=", value, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeIn(List values) { + addCriterion("MEMBER_TYPE in", values, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeNotIn(List values) { + addCriterion("MEMBER_TYPE not in", values, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeBetween(Integer value1, Integer value2) { + addCriterion("MEMBER_TYPE between", value1, value2, "memberType"); + return (Criteria) this; + } + + public Criteria andMemberTypeNotBetween(Integer value1, Integer value2) { + addCriterion("MEMBER_TYPE not between", value1, value2, "memberType"); + return (Criteria) this; + } + + public Criteria andEmailIsNull() { + addCriterion("email is null"); + return (Criteria) this; + } + + public Criteria andEmailIsNotNull() { + addCriterion("email is not null"); + return (Criteria) this; + } + + public Criteria andEmailEqualTo(String value) { + addCriterion("email =", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotEqualTo(String value) { + addCriterion("email <>", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailGreaterThan(String value) { + addCriterion("email >", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailGreaterThanOrEqualTo(String value) { + addCriterion("email >=", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLessThan(String value) { + addCriterion("email <", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLessThanOrEqualTo(String value) { + addCriterion("email <=", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailLike(String value) { + addCriterion("email like", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotLike(String value) { + addCriterion("email not like", value, "email"); + return (Criteria) this; + } + + public Criteria andEmailIn(List values) { + addCriterion("email in", values, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotIn(List values) { + addCriterion("email not in", values, "email"); + return (Criteria) this; + } + + public Criteria andEmailBetween(String value1, String value2) { + addCriterion("email between", value1, value2, "email"); + return (Criteria) this; + } + + public Criteria andEmailNotBetween(String value1, String value2) { + addCriterion("email not between", value1, value2, "email"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdPlan.java b/src/main/java/com/xmomen/module/base/entity/CdPlan.java new file mode 100644 index 0000000..d09b302 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdPlan.java @@ -0,0 +1,245 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_plan") +public class CdPlan extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 计划名称 + */ + private String planName; + + /** + * 计划创建人 + */ + private String createUser; + + /** + * 计划创建时间 + */ + private Date createTime; + + /** + * 配送频率(1-一天,2-一周,3-一月) + */ + private Integer deliveryType; + + /** + * 配送时间(一周的星期几,一月的几号等) + */ + private String deliveryTime; + + /** + * 配送的次数 + */ + private Integer deliverCount; + + /** + * 价格 + */ + private BigDecimal price; + + /** + * 是否随机 + */ + private Integer isRandom; + + /** + * 产品归属的类别 + */ + private Integer cdCategoryId; + + /** + * 随机数 + */ + private Integer randomNum; + + /** + * 起效时间 + */ + private Date beginTime; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "PLAN_NAME") + public String getPlanName() { + return planName; + } + + public void setPlanName(String planName) { + this.planName = planName; + if(planName == null){ + removeValidField("planName"); + return; + } + addValidField("planName"); + } + + @Column(name = "CREATE_USER") + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + if(createUser == null){ + removeValidField("createUser"); + return; + } + addValidField("createUser"); + } + + @Column(name = "CREATE_TIME") + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + if(createTime == null){ + removeValidField("createTime"); + return; + } + addValidField("createTime"); + } + + @Column(name = "DELIVERY_TYPE") + public Integer getDeliveryType() { + return deliveryType; + } + + public void setDeliveryType(Integer deliveryType) { + this.deliveryType = deliveryType; + if(deliveryType == null){ + removeValidField("deliveryType"); + return; + } + addValidField("deliveryType"); + } + + @Column(name = "DELIVERY_TIME") + public String getDeliveryTime() { + return deliveryTime; + } + + public void setDeliveryTime(String deliveryTime) { + this.deliveryTime = deliveryTime; + if(deliveryTime == null){ + removeValidField("deliveryTime"); + return; + } + addValidField("deliveryTime"); + } + + @Column(name = "DELIVER_COUNT") + public Integer getDeliverCount() { + return deliverCount; + } + + public void setDeliverCount(Integer deliverCount) { + this.deliverCount = deliverCount; + if(deliverCount == null){ + removeValidField("deliverCount"); + return; + } + addValidField("deliverCount"); + } + + @Column(name = "PRICE") + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + if(price == null){ + removeValidField("price"); + return; + } + addValidField("price"); + } + + @Column(name = "IS_RANDOM") + public Integer getIsRandom() { + return isRandom; + } + + public void setIsRandom(Integer isRandom) { + this.isRandom = isRandom; + if(isRandom == null){ + removeValidField("isRandom"); + return; + } + addValidField("isRandom"); + } + + @Column(name = "CD_CATEGORY_ID") + public Integer getCdCategoryId() { + return cdCategoryId; + } + + public void setCdCategoryId(Integer cdCategoryId) { + this.cdCategoryId = cdCategoryId; + if(cdCategoryId == null){ + removeValidField("cdCategoryId"); + return; + } + addValidField("cdCategoryId"); + } + + @Column(name = "RANDOM_NUM") + public Integer getRandomNum() { + return randomNum; + } + + public void setRandomNum(Integer randomNum) { + this.randomNum = randomNum; + if(randomNum == null){ + removeValidField("randomNum"); + return; + } + addValidField("randomNum"); + } + + @Column(name = "BEGIN_TIME") + public Date getBeginTime() { + return beginTime; + } + + public void setBeginTime(Date beginTime) { + this.beginTime = beginTime; + if(beginTime == null){ + removeValidField("beginTime"); + return; + } + addValidField("beginTime"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdPlanExample.java b/src/main/java/com/xmomen/module/base/entity/CdPlanExample.java new file mode 100644 index 0000000..ac773a6 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdPlanExample.java @@ -0,0 +1,953 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class CdPlanExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdPlanExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andPlanNameIsNull() { + addCriterion("PLAN_NAME is null"); + return (Criteria) this; + } + + public Criteria andPlanNameIsNotNull() { + addCriterion("PLAN_NAME is not null"); + return (Criteria) this; + } + + public Criteria andPlanNameEqualTo(String value) { + addCriterion("PLAN_NAME =", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameNotEqualTo(String value) { + addCriterion("PLAN_NAME <>", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameGreaterThan(String value) { + addCriterion("PLAN_NAME >", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameGreaterThanOrEqualTo(String value) { + addCriterion("PLAN_NAME >=", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameLessThan(String value) { + addCriterion("PLAN_NAME <", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameLessThanOrEqualTo(String value) { + addCriterion("PLAN_NAME <=", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameLike(String value) { + addCriterion("PLAN_NAME like", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameNotLike(String value) { + addCriterion("PLAN_NAME not like", value, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameIn(List values) { + addCriterion("PLAN_NAME in", values, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameNotIn(List values) { + addCriterion("PLAN_NAME not in", values, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameBetween(String value1, String value2) { + addCriterion("PLAN_NAME between", value1, value2, "planName"); + return (Criteria) this; + } + + public Criteria andPlanNameNotBetween(String value1, String value2) { + addCriterion("PLAN_NAME not between", value1, value2, "planName"); + return (Criteria) this; + } + + public Criteria andCreateUserIsNull() { + addCriterion("CREATE_USER is null"); + return (Criteria) this; + } + + public Criteria andCreateUserIsNotNull() { + addCriterion("CREATE_USER is not null"); + return (Criteria) this; + } + + public Criteria andCreateUserEqualTo(String value) { + addCriterion("CREATE_USER =", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotEqualTo(String value) { + addCriterion("CREATE_USER <>", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserGreaterThan(String value) { + addCriterion("CREATE_USER >", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserGreaterThanOrEqualTo(String value) { + addCriterion("CREATE_USER >=", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLessThan(String value) { + addCriterion("CREATE_USER <", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLessThanOrEqualTo(String value) { + addCriterion("CREATE_USER <=", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserLike(String value) { + addCriterion("CREATE_USER like", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotLike(String value) { + addCriterion("CREATE_USER not like", value, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserIn(List values) { + addCriterion("CREATE_USER in", values, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotIn(List values) { + addCriterion("CREATE_USER not in", values, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserBetween(String value1, String value2) { + addCriterion("CREATE_USER between", value1, value2, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateUserNotBetween(String value1, String value2) { + addCriterion("CREATE_USER not between", value1, value2, "createUser"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("CREATE_TIME is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("CREATE_TIME is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("CREATE_TIME =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("CREATE_TIME <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("CREATE_TIME >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("CREATE_TIME >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("CREATE_TIME <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("CREATE_TIME <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("CREATE_TIME in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("CREATE_TIME not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("CREATE_TIME between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("CREATE_TIME not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeIsNull() { + addCriterion("DELIVERY_TYPE is null"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeIsNotNull() { + addCriterion("DELIVERY_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeEqualTo(Integer value) { + addCriterion("DELIVERY_TYPE =", value, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeNotEqualTo(Integer value) { + addCriterion("DELIVERY_TYPE <>", value, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeGreaterThan(Integer value) { + addCriterion("DELIVERY_TYPE >", value, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("DELIVERY_TYPE >=", value, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeLessThan(Integer value) { + addCriterion("DELIVERY_TYPE <", value, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeLessThanOrEqualTo(Integer value) { + addCriterion("DELIVERY_TYPE <=", value, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeIn(List values) { + addCriterion("DELIVERY_TYPE in", values, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeNotIn(List values) { + addCriterion("DELIVERY_TYPE not in", values, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeBetween(Integer value1, Integer value2) { + addCriterion("DELIVERY_TYPE between", value1, value2, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTypeNotBetween(Integer value1, Integer value2) { + addCriterion("DELIVERY_TYPE not between", value1, value2, "deliveryType"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeIsNull() { + addCriterion("DELIVERY_TIME is null"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeIsNotNull() { + addCriterion("DELIVERY_TIME is not null"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeEqualTo(String value) { + addCriterion("DELIVERY_TIME =", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeNotEqualTo(String value) { + addCriterion("DELIVERY_TIME <>", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeGreaterThan(String value) { + addCriterion("DELIVERY_TIME >", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeGreaterThanOrEqualTo(String value) { + addCriterion("DELIVERY_TIME >=", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeLessThan(String value) { + addCriterion("DELIVERY_TIME <", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeLessThanOrEqualTo(String value) { + addCriterion("DELIVERY_TIME <=", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeLike(String value) { + addCriterion("DELIVERY_TIME like", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeNotLike(String value) { + addCriterion("DELIVERY_TIME not like", value, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeIn(List values) { + addCriterion("DELIVERY_TIME in", values, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeNotIn(List values) { + addCriterion("DELIVERY_TIME not in", values, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeBetween(String value1, String value2) { + addCriterion("DELIVERY_TIME between", value1, value2, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliveryTimeNotBetween(String value1, String value2) { + addCriterion("DELIVERY_TIME not between", value1, value2, "deliveryTime"); + return (Criteria) this; + } + + public Criteria andDeliverCountIsNull() { + addCriterion("DELIVER_COUNT is null"); + return (Criteria) this; + } + + public Criteria andDeliverCountIsNotNull() { + addCriterion("DELIVER_COUNT is not null"); + return (Criteria) this; + } + + public Criteria andDeliverCountEqualTo(Integer value) { + addCriterion("DELIVER_COUNT =", value, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountNotEqualTo(Integer value) { + addCriterion("DELIVER_COUNT <>", value, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountGreaterThan(Integer value) { + addCriterion("DELIVER_COUNT >", value, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountGreaterThanOrEqualTo(Integer value) { + addCriterion("DELIVER_COUNT >=", value, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountLessThan(Integer value) { + addCriterion("DELIVER_COUNT <", value, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountLessThanOrEqualTo(Integer value) { + addCriterion("DELIVER_COUNT <=", value, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountIn(List values) { + addCriterion("DELIVER_COUNT in", values, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountNotIn(List values) { + addCriterion("DELIVER_COUNT not in", values, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountBetween(Integer value1, Integer value2) { + addCriterion("DELIVER_COUNT between", value1, value2, "deliverCount"); + return (Criteria) this; + } + + public Criteria andDeliverCountNotBetween(Integer value1, Integer value2) { + addCriterion("DELIVER_COUNT not between", value1, value2, "deliverCount"); + return (Criteria) this; + } + + public Criteria andPriceIsNull() { + addCriterion("PRICE is null"); + return (Criteria) this; + } + + public Criteria andPriceIsNotNull() { + addCriterion("PRICE is not null"); + return (Criteria) this; + } + + public Criteria andPriceEqualTo(BigDecimal value) { + addCriterion("PRICE =", value, "price"); + return (Criteria) this; + } + + public Criteria andPriceNotEqualTo(BigDecimal value) { + addCriterion("PRICE <>", value, "price"); + return (Criteria) this; + } + + public Criteria andPriceGreaterThan(BigDecimal value) { + addCriterion("PRICE >", value, "price"); + return (Criteria) this; + } + + public Criteria andPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("PRICE >=", value, "price"); + return (Criteria) this; + } + + public Criteria andPriceLessThan(BigDecimal value) { + addCriterion("PRICE <", value, "price"); + return (Criteria) this; + } + + public Criteria andPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("PRICE <=", value, "price"); + return (Criteria) this; + } + + public Criteria andPriceIn(List values) { + addCriterion("PRICE in", values, "price"); + return (Criteria) this; + } + + public Criteria andPriceNotIn(List values) { + addCriterion("PRICE not in", values, "price"); + return (Criteria) this; + } + + public Criteria andPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PRICE between", value1, value2, "price"); + return (Criteria) this; + } + + public Criteria andPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PRICE not between", value1, value2, "price"); + return (Criteria) this; + } + + public Criteria andIsRandomIsNull() { + addCriterion("IS_RANDOM is null"); + return (Criteria) this; + } + + public Criteria andIsRandomIsNotNull() { + addCriterion("IS_RANDOM is not null"); + return (Criteria) this; + } + + public Criteria andIsRandomEqualTo(Integer value) { + addCriterion("IS_RANDOM =", value, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomNotEqualTo(Integer value) { + addCriterion("IS_RANDOM <>", value, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomGreaterThan(Integer value) { + addCriterion("IS_RANDOM >", value, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_RANDOM >=", value, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomLessThan(Integer value) { + addCriterion("IS_RANDOM <", value, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomLessThanOrEqualTo(Integer value) { + addCriterion("IS_RANDOM <=", value, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomIn(List values) { + addCriterion("IS_RANDOM in", values, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomNotIn(List values) { + addCriterion("IS_RANDOM not in", values, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomBetween(Integer value1, Integer value2) { + addCriterion("IS_RANDOM between", value1, value2, "isRandom"); + return (Criteria) this; + } + + public Criteria andIsRandomNotBetween(Integer value1, Integer value2) { + addCriterion("IS_RANDOM not between", value1, value2, "isRandom"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdIsNull() { + addCriterion("CD_CATEGORY_ID is null"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdIsNotNull() { + addCriterion("CD_CATEGORY_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID =", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdNotEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID <>", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdGreaterThan(Integer value) { + addCriterion("CD_CATEGORY_ID >", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID >=", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdLessThan(Integer value) { + addCriterion("CD_CATEGORY_ID <", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_CATEGORY_ID <=", value, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdIn(List values) { + addCriterion("CD_CATEGORY_ID in", values, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdNotIn(List values) { + addCriterion("CD_CATEGORY_ID not in", values, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdBetween(Integer value1, Integer value2) { + addCriterion("CD_CATEGORY_ID between", value1, value2, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andCdCategoryIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_CATEGORY_ID not between", value1, value2, "cdCategoryId"); + return (Criteria) this; + } + + public Criteria andRandomNumIsNull() { + addCriterion("RANDOM_NUM is null"); + return (Criteria) this; + } + + public Criteria andRandomNumIsNotNull() { + addCriterion("RANDOM_NUM is not null"); + return (Criteria) this; + } + + public Criteria andRandomNumEqualTo(Integer value) { + addCriterion("RANDOM_NUM =", value, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumNotEqualTo(Integer value) { + addCriterion("RANDOM_NUM <>", value, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumGreaterThan(Integer value) { + addCriterion("RANDOM_NUM >", value, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumGreaterThanOrEqualTo(Integer value) { + addCriterion("RANDOM_NUM >=", value, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumLessThan(Integer value) { + addCriterion("RANDOM_NUM <", value, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumLessThanOrEqualTo(Integer value) { + addCriterion("RANDOM_NUM <=", value, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumIn(List values) { + addCriterion("RANDOM_NUM in", values, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumNotIn(List values) { + addCriterion("RANDOM_NUM not in", values, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumBetween(Integer value1, Integer value2) { + addCriterion("RANDOM_NUM between", value1, value2, "randomNum"); + return (Criteria) this; + } + + public Criteria andRandomNumNotBetween(Integer value1, Integer value2) { + addCriterion("RANDOM_NUM not between", value1, value2, "randomNum"); + return (Criteria) this; + } + + public Criteria andBeginTimeIsNull() { + addCriterion("BEGIN_TIME is null"); + return (Criteria) this; + } + + public Criteria andBeginTimeIsNotNull() { + addCriterion("BEGIN_TIME is not null"); + return (Criteria) this; + } + + public Criteria andBeginTimeEqualTo(Date value) { + addCriterion("BEGIN_TIME =", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeNotEqualTo(Date value) { + addCriterion("BEGIN_TIME <>", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeGreaterThan(Date value) { + addCriterion("BEGIN_TIME >", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeGreaterThanOrEqualTo(Date value) { + addCriterion("BEGIN_TIME >=", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeLessThan(Date value) { + addCriterion("BEGIN_TIME <", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeLessThanOrEqualTo(Date value) { + addCriterion("BEGIN_TIME <=", value, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeIn(List values) { + addCriterion("BEGIN_TIME in", values, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeNotIn(List values) { + addCriterion("BEGIN_TIME not in", values, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeBetween(Date value1, Date value2) { + addCriterion("BEGIN_TIME between", value1, value2, "beginTime"); + return (Criteria) this; + } + + public Criteria andBeginTimeNotBetween(Date value1, Date value2) { + addCriterion("BEGIN_TIME not between", value1, value2, "beginTime"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdPlanItem.java b/src/main/java/com/xmomen/module/base/entity/CdPlanItem.java new file mode 100644 index 0000000..94c4c25 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdPlanItem.java @@ -0,0 +1,91 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_plan_item") +public class CdPlanItem extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 计划ID + */ + private Integer cdPlanId; + + /** + * 搭配的产品 + */ + private Integer cdItemId; + + /** + * 份数 + */ + private Integer countValue; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "CD_PLAN_ID") + public Integer getCdPlanId() { + return cdPlanId; + } + + public void setCdPlanId(Integer cdPlanId) { + this.cdPlanId = cdPlanId; + if(cdPlanId == null){ + removeValidField("cdPlanId"); + return; + } + addValidField("cdPlanId"); + } + + @Column(name = "CD_ITEM_ID") + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + if(cdItemId == null){ + removeValidField("cdItemId"); + return; + } + addValidField("cdItemId"); + } + + @Column(name = "COUNT_VALUE") + public Integer getCountValue() { + return countValue; + } + + public void setCountValue(Integer countValue) { + this.countValue = countValue; + if(countValue == null){ + removeValidField("countValue"); + return; + } + addValidField("countValue"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/CdPlanItemExample.java b/src/main/java/com/xmomen/module/base/entity/CdPlanItemExample.java new file mode 100644 index 0000000..12b6a83 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/CdPlanItemExample.java @@ -0,0 +1,441 @@ +package com.xmomen.module.base.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class CdPlanItemExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public CdPlanItemExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCdPlanIdIsNull() { + addCriterion("CD_PLAN_ID is null"); + return (Criteria) this; + } + + public Criteria andCdPlanIdIsNotNull() { + addCriterion("CD_PLAN_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdPlanIdEqualTo(Integer value) { + addCriterion("CD_PLAN_ID =", value, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdNotEqualTo(Integer value) { + addCriterion("CD_PLAN_ID <>", value, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdGreaterThan(Integer value) { + addCriterion("CD_PLAN_ID >", value, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_PLAN_ID >=", value, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdLessThan(Integer value) { + addCriterion("CD_PLAN_ID <", value, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_PLAN_ID <=", value, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdIn(List values) { + addCriterion("CD_PLAN_ID in", values, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdNotIn(List values) { + addCriterion("CD_PLAN_ID not in", values, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdBetween(Integer value1, Integer value2) { + addCriterion("CD_PLAN_ID between", value1, value2, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdPlanIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_PLAN_ID not between", value1, value2, "cdPlanId"); + return (Criteria) this; + } + + public Criteria andCdItemIdIsNull() { + addCriterion("CD_ITEM_ID is null"); + return (Criteria) this; + } + + public Criteria andCdItemIdIsNotNull() { + addCriterion("CD_ITEM_ID is not null"); + return (Criteria) this; + } + + public Criteria andCdItemIdEqualTo(Integer value) { + addCriterion("CD_ITEM_ID =", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdNotEqualTo(Integer value) { + addCriterion("CD_ITEM_ID <>", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdGreaterThan(Integer value) { + addCriterion("CD_ITEM_ID >", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CD_ITEM_ID >=", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdLessThan(Integer value) { + addCriterion("CD_ITEM_ID <", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdLessThanOrEqualTo(Integer value) { + addCriterion("CD_ITEM_ID <=", value, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdIn(List values) { + addCriterion("CD_ITEM_ID in", values, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdNotIn(List values) { + addCriterion("CD_ITEM_ID not in", values, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdBetween(Integer value1, Integer value2) { + addCriterion("CD_ITEM_ID between", value1, value2, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCdItemIdNotBetween(Integer value1, Integer value2) { + addCriterion("CD_ITEM_ID not between", value1, value2, "cdItemId"); + return (Criteria) this; + } + + public Criteria andCountValueIsNull() { + addCriterion("COUNT_VALUE is null"); + return (Criteria) this; + } + + public Criteria andCountValueIsNotNull() { + addCriterion("COUNT_VALUE is not null"); + return (Criteria) this; + } + + public Criteria andCountValueEqualTo(Integer value) { + addCriterion("COUNT_VALUE =", value, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueNotEqualTo(Integer value) { + addCriterion("COUNT_VALUE <>", value, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueGreaterThan(Integer value) { + addCriterion("COUNT_VALUE >", value, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueGreaterThanOrEqualTo(Integer value) { + addCriterion("COUNT_VALUE >=", value, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueLessThan(Integer value) { + addCriterion("COUNT_VALUE <", value, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueLessThanOrEqualTo(Integer value) { + addCriterion("COUNT_VALUE <=", value, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueIn(List values) { + addCriterion("COUNT_VALUE in", values, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueNotIn(List values) { + addCriterion("COUNT_VALUE not in", values, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueBetween(Integer value1, Integer value2) { + addCriterion("COUNT_VALUE between", value1, value2, "countValue"); + return (Criteria) this; + } + + public Criteria andCountValueNotBetween(Integer value1, Integer value2) { + addCriterion("COUNT_VALUE not between", value1, value2, "countValue"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdActivityMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdActivityMapper.java new file mode 100644 index 0000000..a715a06 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdActivityMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdActivity; +import com.xmomen.module.base.entity.CdActivityExample; +import org.apache.ibatis.annotations.Param; + +public interface CdActivityMapper extends MybatisMapper { + int countByExample(CdActivityExample example); + + int deleteByExample(CdActivityExample example); + + int insertSelective(CdActivity record); + + int updateByExampleSelective(@Param("record") CdActivity record, @Param("example") CdActivityExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdBindMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdBindMapper.java new file mode 100644 index 0000000..2be1715 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdBindMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdBind; +import com.xmomen.module.base.entity.CdBindExample; +import org.apache.ibatis.annotations.Param; + +public interface CdBindMapper extends MybatisMapper { + int countByExample(CdBindExample example); + + int deleteByExample(CdBindExample example); + + int insertSelective(CdBind record); + + int updateByExampleSelective(@Param("record") CdBind record, @Param("example") CdBindExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdCategoryMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdCategoryMapper.java new file mode 100644 index 0000000..a971ec0 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdCategoryMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdCategory; +import com.xmomen.module.base.entity.CdCategoryExample; +import org.apache.ibatis.annotations.Param; + +public interface CdCategoryMapper extends MybatisMapper { + int countByExample(CdCategoryExample example); + + int deleteByExample(CdCategoryExample example); + + int insertSelective(CdCategory record); + + int updateByExampleSelective(@Param("record") CdCategory record, @Param("example") CdCategoryExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdCompanyMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdCompanyMapper.java new file mode 100644 index 0000000..ff9aad2 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdCompanyMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdCompany; +import com.xmomen.module.base.entity.CdCompanyExample; +import org.apache.ibatis.annotations.Param; + +public interface CdCompanyMapper extends MybatisMapper { + int countByExample(CdCompanyExample example); + + int deleteByExample(CdCompanyExample example); + + int insertSelective(CdCompany record); + + int updateByExampleSelective(@Param("record") CdCompany record, @Param("example") CdCompanyExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdContractItemMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdContractItemMapper.java new file mode 100644 index 0000000..f5267ee --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdContractItemMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdContractItem; +import com.xmomen.module.base.entity.CdContractItemExample; +import org.apache.ibatis.annotations.Param; + +public interface CdContractItemMapper extends MybatisMapper { + int countByExample(CdContractItemExample example); + + int deleteByExample(CdContractItemExample example); + + int insertSelective(CdContractItem record); + + int updateByExampleSelective(@Param("record") CdContractItem record, @Param("example") CdContractItemExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponCategoryRefMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponCategoryRefMapper.java new file mode 100644 index 0000000..324b139 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponCategoryRefMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdCouponCategoryRef; +import com.xmomen.module.base.entity.CdCouponCategoryRefExample; +import org.apache.ibatis.annotations.Param; + +public interface CdCouponCategoryRefMapper extends MybatisMapper { + int countByExample(CdCouponCategoryRefExample example); + + int deleteByExample(CdCouponCategoryRefExample example); + + int insertSelective(CdCouponCategoryRef record); + + int updateByExampleSelective(@Param("record") CdCouponCategoryRef record, @Param("example") CdCouponCategoryRefExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponMapper.java new file mode 100644 index 0000000..7b6e469 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdCoupon; +import com.xmomen.module.base.entity.CdCouponExample; +import org.apache.ibatis.annotations.Param; + +public interface CdCouponMapper extends MybatisMapper { + int countByExample(CdCouponExample example); + + int deleteByExample(CdCouponExample example); + + int insertSelective(CdCoupon record); + + int updateByExampleSelective(@Param("record") CdCoupon record, @Param("example") CdCouponExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponRefMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponRefMapper.java new file mode 100644 index 0000000..5b9e5ef --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdCouponRefMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdCouponRef; +import com.xmomen.module.base.entity.CdCouponRefExample; +import org.apache.ibatis.annotations.Param; + +public interface CdCouponRefMapper extends MybatisMapper { + int countByExample(CdCouponRefExample example); + + int deleteByExample(CdCouponRefExample example); + + int insertSelective(CdCouponRef record); + + int updateByExampleSelective(@Param("record") CdCouponRef record, @Param("example") CdCouponRefExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdExpressMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdExpressMapper.java new file mode 100644 index 0000000..b73a919 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdExpressMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdExpress; +import com.xmomen.module.base.entity.CdExpressExample; +import org.apache.ibatis.annotations.Param; + +public interface CdExpressMapper extends MybatisMapper { + int countByExample(CdExpressExample example); + + int deleteByExample(CdExpressExample example); + + int insertSelective(CdExpress record); + + int updateByExampleSelective(@Param("record") CdExpress record, @Param("example") CdExpressExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdExpressMemberMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdExpressMemberMapper.java new file mode 100644 index 0000000..f5ecbe2 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdExpressMemberMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdExpressMember; +import com.xmomen.module.base.entity.CdExpressMemberExample; +import org.apache.ibatis.annotations.Param; + +public interface CdExpressMemberMapper extends MybatisMapper { + int countByExample(CdExpressMemberExample example); + + int deleteByExample(CdExpressMemberExample example); + + int insertSelective(CdExpressMember record); + + int updateByExampleSelective(@Param("record") CdExpressMember record, @Param("example") CdExpressMemberExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/entity/mapper/CdPlanMapper.java b/src/main/java/com/xmomen/module/base/entity/mapper/CdPlanMapper.java new file mode 100644 index 0000000..765aafb --- /dev/null +++ b/src/main/java/com/xmomen/module/base/entity/mapper/CdPlanMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.base.entity.CdPlan; +import com.xmomen.module.base.entity.CdPlanExample; +import org.apache.ibatis.annotations.Param; + +public interface CdPlanMapper extends MybatisMapper { + int countByExample(CdPlanExample example); + + int deleteByExample(CdPlanExample example); + + int insertSelective(CdPlan record); + + int updateByExampleSelective(@Param("record") CdPlan record, @Param("example") CdPlanExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/mapper/BasePlanMapper.xml b/src/main/java/com/xmomen/module/base/mapper/BasePlanMapper.xml new file mode 100644 index 0000000..2fcf59d --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/BasePlanMapper.xml @@ -0,0 +1,42 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/mapper/CompanyMapper.xml b/src/main/java/com/xmomen/module/base/mapper/CompanyMapper.xml new file mode 100644 index 0000000..d6553a3 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/CompanyMapper.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/xmomen/module/base/mapper/ContractMapper.xml b/src/main/java/com/xmomen/module/base/mapper/ContractMapper.xml new file mode 100644 index 0000000..f472a2a --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ContractMapper.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/mapper/CouponCategoryMapper.java b/src/main/java/com/xmomen/module/base/mapper/CouponCategoryMapper.java new file mode 100644 index 0000000..9d1edc6 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/CouponCategoryMapper.java @@ -0,0 +1,11 @@ +package com.xmomen.module.base.mapper; + +/** + * Created by Jeng on 2016/3/30. + */ +public interface CouponCategoryMapper { + + public static final String CouponCategoryMapperNameSpace = "com.xmomen.module.base.mapper.CouponCategoryMapper."; + + public static final String COUPON_RELATION_ITEM_CODE = "TICKET_ITEM"; +} diff --git a/src/main/java/com/xmomen/module/base/mapper/CouponCategoryMapper.xml b/src/main/java/com/xmomen/module/base/mapper/CouponCategoryMapper.xml new file mode 100644 index 0000000..59b7182 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/CouponCategoryMapper.xml @@ -0,0 +1,27 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/mapper/CouponMapper.xml b/src/main/java/com/xmomen/module/base/mapper/CouponMapper.xml new file mode 100644 index 0000000..9024797 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/CouponMapper.xml @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + update cd_coupon + set + is_send=0 , + is_useful = 0, + useful_date = null, + batch = null, + cd_company_id = null, + cd_user_id = null, + USER_PRICE = null + where id=#{id} + + + + + + + + + diff --git a/src/main/java/com/xmomen/module/base/mapper/ExpressMapper.java b/src/main/java/com/xmomen/module/base/mapper/ExpressMapper.java new file mode 100644 index 0000000..2ef6bbe --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ExpressMapper.java @@ -0,0 +1,6 @@ +package com.xmomen.module.base.mapper; + +public interface ExpressMapper { + public static final String ExpressMapperNameSpace = "com.xmomen.module.base.mapper.ExpressMapper."; + +} diff --git a/src/main/java/com/xmomen/module/base/mapper/ExpressMapper.xml b/src/main/java/com/xmomen/module/base/mapper/ExpressMapper.xml new file mode 100644 index 0000000..063d85b --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ExpressMapper.xml @@ -0,0 +1,215 @@ + + + + + + + update + tb_order + set + Despatch_Express_Id = null + where + order_no=#{orderNo} + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/xmomen/module/base/mapper/ExpressMemberMapper.java b/src/main/java/com/xmomen/module/base/mapper/ExpressMemberMapper.java new file mode 100644 index 0000000..8914f03 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ExpressMemberMapper.java @@ -0,0 +1,6 @@ +package com.xmomen.module.base.mapper; + +public interface ExpressMemberMapper { + public static final String ExpressMemberMapperNameSpace = "com.xmomen.module.base.mapper.ExpressMemberMapper."; + +} diff --git a/src/main/java/com/xmomen/module/base/mapper/ItemCategoryMapper.java b/src/main/java/com/xmomen/module/base/mapper/ItemCategoryMapper.java new file mode 100644 index 0000000..1863260 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ItemCategoryMapper.java @@ -0,0 +1,19 @@ +package com.xmomen.module.base.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Select; + +import com.xmomen.module.base.model.ItemCategoryModel; + +/** + * Created by Jeng on 16/3/27. + */ +public interface ItemCategoryMapper { + + @Select(value = "SELECT s.ID,s.CATEGORY_NAME AS name, s.PARENT_ID,p.CATEGORY_NAME AS parent_name FROM cd_category s LEFT JOIN cd_category p ON p.ID=s.PARENT_ID where FIND_IN_SET(s.id, query_children_category(${id}))") + @ResultType(ItemCategoryModel.class) + public List getItemCategoryTree(@Param(value = "id") Integer id); +} diff --git a/src/main/java/com/xmomen/module/base/mapper/ItemDetailMapper.java b/src/main/java/com/xmomen/module/base/mapper/ItemDetailMapper.java new file mode 100644 index 0000000..57891de --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ItemDetailMapper.java @@ -0,0 +1,6 @@ +package com.xmomen.module.base.mapper; + +public interface ItemDetailMapper { + public static final String ItemDetailMapperNameSpace = "com.xmomen.module.base.mapper.ItemDetailMapper."; + +} diff --git a/src/main/java/com/xmomen/module/base/mapper/ItemDetailMapper.xml b/src/main/java/com/xmomen/module/base/mapper/ItemDetailMapper.xml new file mode 100644 index 0000000..0ede2b1 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ItemDetailMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/mapper/ItemMapper.java b/src/main/java/com/xmomen/module/base/mapper/ItemMapper.java new file mode 100644 index 0000000..86cd40c --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/ItemMapper.java @@ -0,0 +1,6 @@ +package com.xmomen.module.base.mapper; + +public interface ItemMapper { + public static final String ItemMapperNameSpace = "com.xmomen.module.base.mapper.ItemMapper."; + +} diff --git a/src/main/java/com/xmomen/module/base/mapper/MemberMapper.java b/src/main/java/com/xmomen/module/base/mapper/MemberMapper.java new file mode 100644 index 0000000..5390e17 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/MemberMapper.java @@ -0,0 +1,5 @@ +package com.xmomen.module.base.mapper; + +public interface MemberMapper { + public static final String MemberMapperNameSpace = "com.xmomen.module.base.mapper.MemberMapper."; +} diff --git a/src/main/java/com/xmomen/module/base/mapper/MemberMapper.xml b/src/main/java/com/xmomen/module/base/mapper/MemberMapper.xml new file mode 100644 index 0000000..e64516a --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/MemberMapper.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/mapper/PublicMapper.java b/src/main/java/com/xmomen/module/base/mapper/PublicMapper.java new file mode 100644 index 0000000..6377159 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/mapper/PublicMapper.java @@ -0,0 +1,13 @@ +package com.xmomen.module.base.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Select; + +import com.xmomen.module.user.entity.SysUsers; + +public interface PublicMapper { + + public static final String PublicMapperNameSpace = "com.xmomen.module.base.mapper.PublicMapper."; +} diff --git a/src/main/java/com/xmomen/module/base/model/ActivityRefModel.java b/src/main/java/com/xmomen/module/base/model/ActivityRefModel.java new file mode 100644 index 0000000..1319b89 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ActivityRefModel.java @@ -0,0 +1,51 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; + +public class ActivityRefModel implements Serializable{ + private Integer cdItemId; + private String itemName; + private String itemCode; + private String categoryName; + private Integer count; + public Integer getCount() { + return count; + } + + public void setCount(Integer count) { + this.count = count; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + } + +} diff --git a/src/main/java/com/xmomen/module/base/model/CompanyModel.java b/src/main/java/com/xmomen/module/base/model/CompanyModel.java new file mode 100644 index 0000000..55684e4 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CompanyModel.java @@ -0,0 +1,94 @@ +package com.xmomen.module.base.model; + +import java.util.List; + +public class CompanyModel { + /** + * + */ + private Integer id; + + /** + * 单位编号 + */ + private String companyCode; + + /** + * 单位名称 + */ + private String companyName; + + /** + * 单位地址 + */ + private String companyAddress; + + /** + * 单位联系人 + */ + private String companyLeader; + + /** + * 联系人电话 + */ + private String companyLeaderTel; + + List companyCustomerManagers; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getCompanyCode() { + return companyCode; + } + + public void setCompanyCode(String companyCode) { + this.companyCode = companyCode; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + public String getCompanyAddress() { + return companyAddress; + } + + public void setCompanyAddress(String companyAddress) { + this.companyAddress = companyAddress; + } + + public String getCompanyLeader() { + return companyLeader; + } + + public void setCompanyLeader(String companyLeader) { + this.companyLeader = companyLeader; + } + + public String getCompanyLeaderTel() { + return companyLeaderTel; + } + + public void setCompanyLeaderTel(String companyLeaderTel) { + this.companyLeaderTel = companyLeaderTel; + } + + public List getCompanyCustomerManagers() { + return companyCustomerManagers; + } + + public void setCompanyCustomerManagers( + List companyCustomerManagers) { + this.companyCustomerManagers = companyCustomerManagers; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/ContractItemModel.java b/src/main/java/com/xmomen/module/base/model/ContractItemModel.java new file mode 100644 index 0000000..0dfa597 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ContractItemModel.java @@ -0,0 +1,40 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; + +import lombok.Data; + +public @Data class ContractItemModel implements Serializable { + + private Integer id; + private String itemCode; + private String itemName; + private BigDecimal sellPrice; + private String categoryName; + private String contractTypeName; + private String discountText; + /** + * 1-固定价格,2-固定金额 + */ + private Integer contractType; + + /** + * 产品合同 + */ + private Integer cdContractId; + + /** + * 当合同适用范围为1的时候,每种产品要设定对应的合同价 + */ + private Integer cdItemId; + + /** + * 合同价格 + */ + private BigDecimal contractValue; + /** + * 合同折扣 + */ + private BigDecimal discount; +} diff --git a/src/main/java/com/xmomen/module/base/model/ContractModel.java b/src/main/java/com/xmomen/module/base/model/ContractModel.java new file mode 100644 index 0000000..55b4051 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ContractModel.java @@ -0,0 +1,59 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import lombok.Data; + +public @Data class ContractModel implements Serializable { + private Integer id; + /** + * 合同名称 + */ + private String contractName; + /** + * 合同编号 + */ + private String contractCode; + /** + * 合同价的客户 + */ + private Integer cdMemberId; + /** + * 单位名称 + */ + private String companyName; + /** + * 合同价的单位 + */ + private Integer cdCompanyId; + + /** + * 1-部分产品,2-全部产品 + */ + private Integer scope; + + /** + * 仅当适用范围为全部产品时适用 + */ + private BigDecimal contractPrice; + + /** + * 合同开始时间 + */ + private Date beginTime; + + /** + * 合同开始时间 + */ + private Date endTime; + + /** + * 是否作废 + */ + private int isDel; + + private List contractItemList; +} diff --git a/src/main/java/com/xmomen/module/base/model/CouponActivityAddressHead.java b/src/main/java/com/xmomen/module/base/model/CouponActivityAddressHead.java new file mode 100644 index 0000000..472e512 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CouponActivityAddressHead.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +public @Data class CouponActivityAddressHead implements Serializable{ + /** + * 卡 + */ + private String couponNumber; + + private List couponActivityAddressList; + +} diff --git a/src/main/java/com/xmomen/module/base/model/CouponModel.java b/src/main/java/com/xmomen/module/base/model/CouponModel.java new file mode 100644 index 0000000..2981c57 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CouponModel.java @@ -0,0 +1,152 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import lombok.Data; + +/** + * Created by Jeng on 2016/3/30. + */ +public @Data class CouponModel implements Serializable { + + /** + * + */ + private Integer id; + + /** + * 卡或者劵,1-卡,2-劵 + */ + private Integer couponType; + + private String couponTypeDesc; + + private Integer couponCategoryId; + + private Integer couponCategory; + + private Integer memberId; + + private String categoryName; + + /** + * 卡描述 + */ + private String couponDesc; + + /** + * 卡号 + */ + private String couponNumber; + + /** + * 可用金额/可用次数 + */ + private BigDecimal userPrice; + + /** + * 卡值:初始金额,初始次数 + */ + private BigDecimal couponValue; + + /** + * 最低赠送金额 + */ + private Integer lowestPrice; + + /** + * 密码 + */ + private String couponPassword; + + /** + * 有效开始时间 + */ + private Date beginTime; + + /** + * 有效结束时间 + */ + private Date endTime; + + /** + * 审核时间 + */ + private Date auditDate; + + /** + * 0-未使用,1-已使用 + */ + private Integer isUsed; + + private String isUsedDesc; + + /** + * 0-无效,1-有效 + */ + private Integer isUseful; + /** + * 0-无效,1-有效 + */ + private Integer isSend; + + /** + * 客服经理id + */ + private Integer managerId; + /** + * 发放单位Id + */ + private Integer companyId; + /** + * 发放单位 + */ + private String companyName; + + /** + * 发放客户经理 + */ + private String managerName; + /** + * 是否预付款 1-预付款,2-后付款 + */ + private Integer paymentType; + + private String consignmentName; + + private String consignmentPhone; + + private String consignmentAddress; + + private Date sendTime; + + private String receivedPrice; + + private String batch; + + private String isUsefulDesc; + + /** + * 0-非赠送,1-赠送 + */ + private Integer isGift; + + /** + * + */ + private String isGiftDesc; + /** + * + */ + private String notes; + /** + * 活动id + */ + private int cdActivityId; + + private List relationItemList; + +} diff --git a/src/main/java/com/xmomen/module/base/model/CouponQuery.java b/src/main/java/com/xmomen/module/base/model/CouponQuery.java new file mode 100644 index 0000000..068f962 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CouponQuery.java @@ -0,0 +1,29 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; + +/** + * Created by Jeng on 2016/3/30. + */ +public @Data +class CouponQuery implements Serializable { + + private String keyword; + private String couponNumber; + private String password; + private Integer couponType; + private Integer couponCategoryId; + private Integer categoryType; + private Integer isSend; + private Integer cdCompanyId; + private Integer customerMangerId; + private Integer isUseful; + private Integer isOver; + private Integer managerId; + private String batch; + private String auditDateStart; + private String auditDateEnd; +} diff --git a/src/main/java/com/xmomen/module/base/model/CouponRelationItem.java b/src/main/java/com/xmomen/module/base/model/CouponRelationItem.java new file mode 100644 index 0000000..c26e660 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CouponRelationItem.java @@ -0,0 +1,28 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * Created by Jeng on 2016/5/16. + */ +public class CouponRelationItem implements Serializable{ + private Integer itemId; + private BigDecimal itemNumber; + + public Integer getItemId() { + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + } + + public BigDecimal getItemNumber() { + return itemNumber; + } + + public void setItemNumber(BigDecimal itemNumber) { + this.itemNumber = itemNumber; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/CouponReportModel.java b/src/main/java/com/xmomen/module/base/model/CouponReportModel.java new file mode 100644 index 0000000..3cf7524 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CouponReportModel.java @@ -0,0 +1,119 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import org.jeecgframework.poi.excel.annotation.Excel; + +import lombok.Data; + +/** + */ +public class CouponReportModel implements Serializable { + + /** + * 卡或者劵,1-卡,2-劵 + */ + @Excel(name="卡劵",replace={"卡_1","劵_2"}) + private Integer couponType; + + @Excel(name="类型") + private String categoryName; + private Integer couponCategoryId; + /** + * 卡描述 + */ + @Excel(name="卡描述") + private String couponDesc; + + /** + * 卡号 + */ + @Excel(name="卡号") + private String couponNumber; + + /** + * 卡值:初始金额,初始次数 + */ + @Excel(name="初始金额") + private BigDecimal couponValue; + + /** + * 密码 + */ + @Excel(name="密码") + private String couponPassword; + + /** + * 是否预付款 1-预付款,2-后付款 + */ + @Excel(name="是否预付款",replace={"预付款_1","后付款_2"}) + private Integer paymentType; + + public Integer getCouponType() { + return couponType; + } + + public void setCouponType(Integer couponType) { + this.couponType = couponType; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public String getCouponDesc() { + return couponDesc; + } + + public void setCouponDesc(String couponDesc) { + this.couponDesc = couponDesc; + } + + public String getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + } + + public BigDecimal getCouponValue() { + return couponValue; + } + + public void setCouponValue(BigDecimal couponValue) { + this.couponValue = couponValue; + } + + public String getCouponPassword() { + return couponPassword; + } + + public void setCouponPassword(String couponPassword) { + this.couponPassword = couponPassword; + } + + public Integer getPaymentType() { + return paymentType; + } + + public void setPaymentType(Integer paymentType) { + this.paymentType = paymentType; + } + + public Integer getCouponCategoryId() { + return couponCategoryId; + } + + public void setCouponCategoryId(Integer couponCategoryId) { + this.couponCategoryId = couponCategoryId; + } + +} diff --git a/src/main/java/com/xmomen/module/base/model/CreateContractItem.java b/src/main/java/com/xmomen/module/base/model/CreateContractItem.java new file mode 100644 index 0000000..d685ca5 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CreateContractItem.java @@ -0,0 +1,36 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; + +import lombok.Data; + +public @Data class CreateContractItem implements Serializable{ + private Integer addType;//添加方式 + private Integer cdCategoryId; + private String itemCode; + /** + * 1-固定价格,2-固定金额 + */ + private Integer contractType; + + /** + * 产品合同 + */ + private Integer cdContractId; + + /** + * 当合同适用范围为1的时候,每种产品要设定对应的合同价 + */ + private Integer cdItemId; + + /** + * 合同折扣 + */ + private BigDecimal discount; + /** + * 合同价格 + */ + private BigDecimal contractValue; + +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/model/CreateCoupon.java b/src/main/java/com/xmomen/module/base/model/CreateCoupon.java new file mode 100644 index 0000000..6fc9493 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CreateCoupon.java @@ -0,0 +1,32 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +/** + * Created by Jeng on 2016/3/30. + */ +public @Data class CreateCoupon implements Serializable { + + @NotNull + private Integer couponType; + private String couponDesc; + @NotNull + private Integer couponCategory; + private String couponNumber; + private String couponPassword; + private Date beginTime; + private Date endTime; + private BigDecimal couponValue; + private Integer isUsed; + private Integer isUseful; + private Integer isGift; + private String notes; + private Integer paymentType; + private BigDecimal userPrice; +} diff --git a/src/main/java/com/xmomen/module/base/model/CreateCouponCategory.java b/src/main/java/com/xmomen/module/base/model/CreateCouponCategory.java new file mode 100644 index 0000000..311566a --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CreateCouponCategory.java @@ -0,0 +1,48 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.util.List; + +import javax.validation.constraints.NotNull; + +import org.hibernate.validator.constraints.NotBlank; + +/** + * Created by Jeng on 16/3/26. + */ +public class CreateCouponCategory implements Serializable { + + @NotNull + @NotBlank + private String categoryName; + @NotNull + private Integer categoryType; + + private List categoryRefs; + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public Integer getCategoryType() { + return categoryType; + } + + public void setCategoryType(Integer categoryType) { + this.categoryType = categoryType; + } + + public List getCategoryRefs() { + return categoryRefs; + } + + public void setCategoryRefs(List categoryRefs) { + this.categoryRefs = categoryRefs; + } + + +} diff --git a/src/main/java/com/xmomen/module/base/model/CreateItemDetail.java b/src/main/java/com/xmomen/module/base/model/CreateItemDetail.java new file mode 100644 index 0000000..9f5df0e --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CreateItemDetail.java @@ -0,0 +1,23 @@ +package com.xmomen.module.base.model; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import lombok.Data; + +import javax.persistence.*; + +public @Data class CreateItemDetail extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 商品ID + */ + private Integer cdItemId; + + /** + * 商品的详细内容 + */ + private String itemDetailContent; +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/model/CreateMember.java b/src/main/java/com/xmomen/module/base/model/CreateMember.java new file mode 100644 index 0000000..f4b4661 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/CreateMember.java @@ -0,0 +1,165 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.util.List; + +import javax.validation.constraints.NotNull; + +import com.xmomen.module.member.model.MemberAddressCreate; +import com.xmomen.module.member.model.MemberAddressModel; +import org.hibernate.validator.constraints.NotBlank; + +public class CreateMember implements Serializable { + /** + * 会员编号 + */ + private String memberCode; + + /** + * 姓名 + */ + @NotNull + @NotBlank + private String name; + + /** + * 手机号 + */ + @NotNull + @NotBlank + private String phoneNumber; + + /** + * 卡号 + */ + private String couponNumber; + + + /** + * 家庭固话 + */ + private String telNumber; + + /** + * 办公室电话 + */ + private String officeTel; + + /** + * 1-潜在客户,2-普通客户,3-优质客户 + */ + private Integer memberType; + + /** + * 所属单位 + */ + private Integer cdCompanyId; + + /** + * 所属客服经理 + */ + private Integer cdUserId; + + private String password; + + private String email; + + //地址集合 + List memberAddressList; + + public List getMemberAddressList() { + return memberAddressList; + } + + public void setMemberAddressList(List memberAddressList) { + this.memberAddressList = memberAddressList; + } + + public String getMemberCode() { + return memberCode; + } + + public void setMemberCode(String memberCode) { + this.memberCode = memberCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getTelNumber() { + return telNumber; + } + + public void setTelNumber(String telNumber) { + this.telNumber = telNumber; + } + + public String getOfficeTel() { + return officeTel; + } + + public void setOfficeTel(String officeTel) { + this.officeTel = officeTel; + } + + public Integer getMemberType() { + return memberType; + } + + public void setMemberType(Integer memberType) { + this.memberType = memberType; + } + + public Integer getCdCompanyId() { + return cdCompanyId; + } + + public void setCdCompanyId(Integer cdCompanyId) { + this.cdCompanyId = cdCompanyId; + } + + public Integer getCdUserId() { + return cdUserId; + } + + public void setCdUserId(Integer cdUserId) { + this.cdUserId = cdUserId; + } + + public String getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/ExpressMemberModel.java b/src/main/java/com/xmomen/module/base/model/ExpressMemberModel.java new file mode 100644 index 0000000..2eec3a9 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ExpressMemberModel.java @@ -0,0 +1,29 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; + +import lombok.Data; + +public @Data class ExpressMemberModel implements Serializable{ + /** + * 主键 + */ + private Integer id; + + /** + * 快递商id + */ + private Integer cdExpressId; + + /** + * 快递员姓名 + */ + private String memberName; + + /** + * 电话号码 + */ + private String phone; + + private String expressName; +} diff --git a/src/main/java/com/xmomen/module/base/model/ItemCategoryModel.java b/src/main/java/com/xmomen/module/base/model/ItemCategoryModel.java new file mode 100644 index 0000000..e866411 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ItemCategoryModel.java @@ -0,0 +1,55 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by Jeng on 16/3/25. + */ +public class ItemCategoryModel implements Serializable { + + private Integer id; + private String name; + private Integer parentId; + private String parentName; + private List nodes; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + public Integer getParentId() { + return parentId; + } + + public void setParentId(Integer parentId) { + this.parentId = parentId; + } + + public String getParentName() { + return parentName; + } + + public void setParentName(String parentName) { + this.parentName = parentName; + } + + public List getNodes() { + return nodes; + } + + public void setNodes(List nodes) { + this.nodes = nodes; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/ItemChildModel.java b/src/main/java/com/xmomen/module/base/model/ItemChildModel.java new file mode 100644 index 0000000..c75c3f3 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ItemChildModel.java @@ -0,0 +1,16 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; + +import lombok.Data; + +public @Data class ItemChildModel implements Serializable{ + + private Integer id; + private String itemName; + private String itemCode; + private String categoryName; + private Integer count; + private Integer sellStatus;//状态0-下架 1-上架 + +} diff --git a/src/main/java/com/xmomen/module/base/model/ItemDetailQuery.java b/src/main/java/com/xmomen/module/base/model/ItemDetailQuery.java new file mode 100644 index 0000000..a537675 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ItemDetailQuery.java @@ -0,0 +1,21 @@ +package com.xmomen.module.base.model; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import lombok.Data; + +public @Data class ItemDetailQuery extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 商品ID + */ + private Integer cdItemId; + + /** + * 商品的详细内容 + */ + private String itemDetailContent; +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/model/ItemQuery.java b/src/main/java/com/xmomen/module/base/model/ItemQuery.java new file mode 100644 index 0000000..5928c57 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ItemQuery.java @@ -0,0 +1,23 @@ +package com.xmomen.module.base.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * Created by Jeng on 2016/5/13. + */ +public @Data +class ItemQuery implements Serializable{ + + private Integer id; + private String keyword; + private Integer sellStatus; + private Integer companyId; + private Integer itemType; + private String[] itemCodes; + private String sellUnit; + private Integer[] ids; + private Integer[] excludeIds; + private Integer excludeStock; +} diff --git a/src/main/java/com/xmomen/module/base/model/MemberCouponModel.java b/src/main/java/com/xmomen/module/base/model/MemberCouponModel.java new file mode 100644 index 0000000..e78927a --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/MemberCouponModel.java @@ -0,0 +1,21 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; + +public class MemberCouponModel implements Serializable{ + private String couponNumber; + private BigDecimal userPrice; + public String getCouponNumber() { + return couponNumber; + } + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + } + public BigDecimal getUserPrice() { + return userPrice; + } + public void setUserPrice(BigDecimal userPrice) { + this.userPrice = userPrice; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/MemberModel.java b/src/main/java/com/xmomen/module/base/model/MemberModel.java new file mode 100644 index 0000000..618dcb9 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/MemberModel.java @@ -0,0 +1,249 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.util.List; + +public class MemberModel implements Serializable{ + /** + * + */ + private Integer id; + /** + * 会员编号 + */ + private String memberCode; + + /** + * 姓名 + */ + private String name; + + /** + * 手机号 + */ + private String phoneNumber; + + private String spareName; + + private String spareName2; + /** + * 备用手机号1 + */ + private String spareTel; + + /** + * 备用手机号2 + */ + private String spareTel2; + + /** + * 家庭固话 + */ + private String telNumber; + + /** + * 办公室电话 + */ + private String officeTel; + + /** + * 收货地址 + */ + private String address; + + /** + * 备用地址1 + */ + private String spareAddress; + + /** + * 备用地址2 + */ + private String spareAddress2; + + /** + * 1-潜在客户,2-普通客户,3-优质客户 + */ + private Integer memberType; + + /** + * 所属单位 + */ + private Integer cdCompanyId; + /** + * 单位 + */ + private String companyName; + /** + * 所属客服经理 + */ + private Integer cdUserId; + /** + * 所属客服经理 + */ + private String managerName; + + private List couponNumbers; + + public String getMemberCode() { + return memberCode; + } + + + public Integer getId() { + return id; + } + + + public void setId(Integer id) { + this.id = id; + } + + + public void setMemberCode(String memberCode) { + this.memberCode = memberCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public String getSpareTel() { + return spareTel; + } + + public void setSpareTel(String spareTel) { + this.spareTel = spareTel; + } + + public String getSpareTel2() { + return spareTel2; + } + + public void setSpareTel2(String spareTel2) { + this.spareTel2 = spareTel2; + } + + public String getTelNumber() { + return telNumber; + } + + public void setTelNumber(String telNumber) { + this.telNumber = telNumber; + } + + public String getOfficeTel() { + return officeTel; + } + + public void setOfficeTel(String officeTel) { + this.officeTel = officeTel; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getSpareAddress() { + return spareAddress; + } + + public void setSpareAddress(String spareAddress) { + this.spareAddress = spareAddress; + } + + public String getSpareAddress2() { + return spareAddress2; + } + + public void setSpareAddress2(String spareAddress2) { + this.spareAddress2 = spareAddress2; + } + + public Integer getMemberType() { + return memberType; + } + + public void setMemberType(Integer memberType) { + this.memberType = memberType; + } + + public Integer getCdCompanyId() { + return cdCompanyId; + } + + public void setCdCompanyId(Integer cdCompanyId) { + this.cdCompanyId = cdCompanyId; + } + + public Integer getCdUserId() { + return cdUserId; + } + + public void setCdUserId(Integer cdUserId) { + this.cdUserId = cdUserId; + } + + public String getSpareName() { + return spareName; + } + + public void setSpareName(String spareName) { + this.spareName = spareName; + } + + public String getSpareName2() { + return spareName2; + } + + public void setSpareName2(String spareName2) { + this.spareName2 = spareName2; + } + + + public String getCompanyName() { + return companyName; + } + + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + + public String getManagerName() { + return managerName; + } + + + public void setManagerName(String managerName) { + this.managerName = managerName; + } + + + public List getCouponNumbers() { + return couponNumbers; + } + + + public void setCouponNumbers(List couponNumbers) { + this.couponNumbers = couponNumbers; + } + +} diff --git a/src/main/java/com/xmomen/module/base/model/PlanItemModel.java b/src/main/java/com/xmomen/module/base/model/PlanItemModel.java new file mode 100644 index 0000000..9ec623c --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/PlanItemModel.java @@ -0,0 +1,41 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; + +public class PlanItemModel implements Serializable{ + private Integer cdItemId; + private String itemName; + private String itemCode; + private String categoryName; + private Integer count; + public Integer getCdItemId() { + return cdItemId; + } + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + } + public String getItemName() { + return itemName; + } + public void setItemName(String itemName) { + this.itemName = itemName; + } + public String getItemCode() { + return itemCode; + } + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + public String getCategoryName() { + return categoryName; + } + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + public Integer getCount() { + return count; + } + public void setCount(Integer count) { + this.count = count; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/PlanModel.java b/src/main/java/com/xmomen/module/base/model/PlanModel.java new file mode 100644 index 0000000..cc1bc33 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/PlanModel.java @@ -0,0 +1,72 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import lombok.Data; + +public @Data class PlanModel implements Serializable{ + /** + * 主键 + */ + private Integer id; + + /** + * 计划名称 + */ + private String planName; + + /** + * 计划创建人 + */ + private String createUser; + + /** + * 计划创建时间 + */ + private Date createTime; + + /** + * 配送频率 + */ + private Integer deliveryType; + + /** + * 配送时间(一周的星期几) + */ + private String deliveryTime; + + /** + * 配送的次数 + */ + private Integer deliverCount; + + /** + * 价格 + */ + private BigDecimal price; + + /** + * 是否随机 + */ + private Integer isRandom; + + /** + * 产品归属的类别 + */ + private Integer cdCategoryId; + + private String categoryName; + + /** + * 随机数 + */ + private Integer randomNum; + + private Date beginTime; + + private List planItems; + +} diff --git a/src/main/java/com/xmomen/module/base/model/ReadCardVo.java b/src/main/java/com/xmomen/module/base/model/ReadCardVo.java new file mode 100644 index 0000000..354749c --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/ReadCardVo.java @@ -0,0 +1,43 @@ +package com.xmomen.module.base.model; + +import java.math.BigDecimal; + +public class ReadCardVo { + private String couponNo; + private BigDecimal couponPrice; + private String userName; + private String phoneNumber; + private String couponPassword; + public String getCouponNo() { + return couponNo; + } + public void setCouponNo(String couponNo) { + this.couponNo = couponNo; + } + public BigDecimal getCouponPrice() { + return couponPrice; + } + public void setCouponPrice(BigDecimal couponPrice) { + this.couponPrice = couponPrice; + } + public String getUserName() { + return userName; + } + public void setUserName(String userName) { + this.userName = userName; + } + public String getPhoneNumber() { + return phoneNumber; + } + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + public String getCouponPassword() { + return couponPassword; + } + public void setCouponPassword(String couponPassword) { + this.couponPassword = couponPassword; + } + + +} diff --git a/src/main/java/com/xmomen/module/base/model/UpdateActivity.java b/src/main/java/com/xmomen/module/base/model/UpdateActivity.java new file mode 100644 index 0000000..acb4211 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/UpdateActivity.java @@ -0,0 +1,129 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +public class UpdateActivity implements Serializable { + /** + * 活动名称 + */ + private String activityName; + + /** + * 活动开始时间 + */ + private Date activityBeginTime; + + /** + * 活动结束时间 + */ + private Date activityEndTime; + + /** + * 活动介绍 + */ + private String activityDescribe; + + /** + * 参与活动的卡类型 + */ + private Integer activityType; + + /** + * 活动下单时间 + */ + private Integer activityDay; + + /** + * 是否启用(0-不启用,1-启用) + */ + private Integer available; + + private BigDecimal lowestPrice; + + private Integer couponCategory; + + private List activityRefList; + + public String getActivityName() { + return activityName; + } + + public void setActivityName(String activityName) { + this.activityName = activityName; + } + + public Date getActivityBeginTime() { + return activityBeginTime; + } + + public void setActivityBeginTime(Date activityBeginTime) { + this.activityBeginTime = activityBeginTime; + } + + public Date getActivityEndTime() { + return activityEndTime; + } + + public void setActivityEndTime(Date activityEndTime) { + this.activityEndTime = activityEndTime; + } + + public String getActivityDescribe() { + return activityDescribe; + } + + public void setActivityDescribe(String activityDescribe) { + this.activityDescribe = activityDescribe; + } + + public Integer getActivityType() { + return activityType; + } + + public void setActivityType(Integer activityType) { + this.activityType = activityType; + } + + public Integer getActivityDay() { + return activityDay; + } + + public void setActivityDay(Integer activityDay) { + this.activityDay = activityDay; + } + + public Integer getAvailable() { + return available; + } + + public void setAvailable(Integer available) { + this.available = available; + } + + public BigDecimal getLowestPrice() { + return lowestPrice; + } + + public void setLowestPrice(BigDecimal lowestPrice) { + this.lowestPrice = lowestPrice; + } + + public Integer getCouponCategory() { + return couponCategory; + } + + public void setCouponCategory(Integer couponCategory) { + this.couponCategory = couponCategory; + } + + public List getActivityRefList() { + return activityRefList; + } + + public void setActivityRefList(List activityRefList) { + this.activityRefList = activityRefList; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/UpdateContract.java b/src/main/java/com/xmomen/module/base/model/UpdateContract.java new file mode 100644 index 0000000..f48ba89 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/UpdateContract.java @@ -0,0 +1,58 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import lombok.Data; + +public @Data class UpdateContract implements Serializable { + /** + * 合同名称 + */ + private String contractName; + /** + * 合同编号 + */ + private String contractCode; + /** + * 合同价的客户 + */ + private Integer cdMemberId; + + /** + * 合同价的单位 + */ + private Integer cdCompanyId; + + /** + * 1-部分产品,2-全部产品 + */ + private Integer scope; + + /** + * 仅当适用范围为全部产品时适用 + */ + private BigDecimal contractPrice; + + /** + * 合同开始时间 + */ + private Date beginTime; + + /** + * 合同结束时间 + */ + private Date endTime; + + /** + * 0-未审核,1-审核 + */ + private Integer isAuditor; + /** + * 合同明细 + */ + private List contractItemList; + +} diff --git a/src/main/java/com/xmomen/module/base/model/UpdateCoupon.java b/src/main/java/com/xmomen/module/base/model/UpdateCoupon.java new file mode 100644 index 0000000..bbe7365 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/UpdateCoupon.java @@ -0,0 +1,33 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +/** + * Created by Jeng on 2016/3/30. + */ +public @Data class UpdateCoupon implements Serializable { + + @NotNull + private Integer id; + @NotNull + private Integer couponType; + private Integer couponCategory; + private String couponDesc; + private String couponNumber; + private String couponPassword; + private Date beginTime; + private Date endTime; + private BigDecimal couponValue; + private BigDecimal userPrice; + private Integer isUsed; + private Integer isUseful; + private Integer isGift; + private String notes; + private Integer paymentType; +} diff --git a/src/main/java/com/xmomen/module/base/model/UpdateItem.java b/src/main/java/com/xmomen/module/base/model/UpdateItem.java new file mode 100644 index 0000000..3ed2042 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/UpdateItem.java @@ -0,0 +1,342 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +public class UpdateItem implements Serializable { + /** + * 产品编号 + */ + private String itemCode; + + /** + * 产品归属的类别 + */ + private Integer cdCategoryId; + + /** + * 产品名称 + */ + private String itemName; + + /** + * 产品描述 + */ + private String itemDescribe; + + /** + * 产品类型 + */ + private Integer itemType; + + /** + * 生产地 + */ + private String yieldly; + + /** + * 产品规格 + */ + private String spec; + + /** + * 基础价格 + */ + private BigDecimal basePrice; + + /** + * 会员价格 + */ + private BigDecimal memberPrice; + + /** + * 计价方式 + */ + private String pricingManner; + + /** + * 0-下架 1-上架 + */ + private Integer sellStatus; + + /** + * 销售单位 + */ + private String sellUnit; + + /** + * 销售金额 + */ + private BigDecimal sellPrice; + + /** + * 0-未审核,1-审核 + */ + private Integer isAudit; + + /** + * 录入时间 + */ + private Date createDateTime; + + /** + * 录入人 + */ + private String createUserCode; + /** + * 采摘人 + */ + private String caizaiUser; + + /** + * 检测人 + */ + private String jianceUser; + + /** + * 农残率 + */ + private String nongCanLv; + + /** + * 营养成分 + */ + private String yiYangChenFen; + + /** + * 保质期 + */ + private Integer baoZhiQi; + + /** + * 适应人群 + */ + private String shiYiRenQun; + + /** + * 限时抢购 + */ + private Integer xianShiQiangGou; + + /** + * 新品尝鲜 + */ + private Integer xinPinChangXian; + + /** + * 热卖推荐 + */ + private Integer reMaiTuiJian; + + private List childItems; + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public Integer getCdCategoryId() { + return cdCategoryId; + } + + public void setCdCategoryId(Integer cdCategoryId) { + this.cdCategoryId = cdCategoryId; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getItemDescribe() { + return itemDescribe; + } + + public void setItemDescribe(String itemDescribe) { + this.itemDescribe = itemDescribe; + } + + public Integer getItemType() { + return itemType; + } + + public void setItemType(Integer itemType) { + this.itemType = itemType; + } + + public String getYieldly() { + return yieldly; + } + + public void setYieldly(String yieldly) { + this.yieldly = yieldly; + } + + public String getSpec() { + return spec; + } + + public void setSpec(String spec) { + this.spec = spec; + } + + public BigDecimal getBasePrice() { + return basePrice; + } + + public void setBasePrice(BigDecimal basePrice) { + this.basePrice = basePrice; + } + + public BigDecimal getMemberPrice() { + return memberPrice; + } + + public void setMemberPrice(BigDecimal memberPrice) { + this.memberPrice = memberPrice; + } + + public String getPricingManner() { + return pricingManner; + } + + public void setPricingManner(String pricingManner) { + this.pricingManner = pricingManner; + } + + public Integer getSellStatus() { + return sellStatus; + } + + public void setSellStatus(Integer sellStatus) { + this.sellStatus = sellStatus; + } + + public String getSellUnit() { + return sellUnit; + } + + public void setSellUnit(String sellUnit) { + this.sellUnit = sellUnit; + } + + public BigDecimal getSellPrice() { + return sellPrice; + } + + public void setSellPrice(BigDecimal sellPrice) { + this.sellPrice = sellPrice; + } + + public Integer getIsAudit() { + return isAudit; + } + + public void setIsAudit(Integer isAudit) { + this.isAudit = isAudit; + } + + public Date getCreateDateTime() { + return createDateTime; + } + + public void setCreateDateTime(Date createDateTime) { + this.createDateTime = createDateTime; + } + + public String getCreateUserCode() { + return createUserCode; + } + + public void setCreateUserCode(String createUserCode) { + this.createUserCode = createUserCode; + } + + public List getChildItems() { + return childItems; + } + + public void setChildItems(List childItems) { + this.childItems = childItems; + } + + public String getCaizaiUser() { + return caizaiUser; + } + + public void setCaizaiUser(String caizaiUser) { + this.caizaiUser = caizaiUser; + } + + public String getJianceUser() { + return jianceUser; + } + + public void setJianceUser(String jianceUser) { + this.jianceUser = jianceUser; + } + + public String getNongCanLv() { + return nongCanLv; + } + + public void setNongCanLv(String nongCanLv) { + this.nongCanLv = nongCanLv; + } + + public String getYiYangChenFen() { + return yiYangChenFen; + } + + public void setYiYangChenFen(String yiYangChenFen) { + this.yiYangChenFen = yiYangChenFen; + } + + public Integer getBaoZhiQi() { + return baoZhiQi; + } + + public void setBaoZhiQi(Integer baoZhiQi) { + this.baoZhiQi = baoZhiQi; + } + + public String getShiYiRenQun() { + return shiYiRenQun; + } + + public void setShiYiRenQun(String shiYiRenQun) { + this.shiYiRenQun = shiYiRenQun; + } + + public Integer getXianShiQiangGou() { + return xianShiQiangGou; + } + + public void setXianShiQiangGou(Integer xianShiQiangGou) { + this.xianShiQiangGou = xianShiQiangGou; + } + + public Integer getXinPinChangXian() { + return xinPinChangXian; + } + + public void setXinPinChangXian(Integer xinPinChangXian) { + this.xinPinChangXian = xinPinChangXian; + } + + public Integer getReMaiTuiJian() { + return reMaiTuiJian; + } + + public void setReMaiTuiJian(Integer reMaiTuiJian) { + this.reMaiTuiJian = reMaiTuiJian; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/UpdateItemDetail.java b/src/main/java/com/xmomen/module/base/model/UpdateItemDetail.java new file mode 100644 index 0000000..d58a3fc --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/UpdateItemDetail.java @@ -0,0 +1,21 @@ +package com.xmomen.module.base.model; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import lombok.Data; + +public @Data class UpdateItemDetail extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 商品ID + */ + private Integer cdItemId; + + /** + * 商品的详细内容 + */ + private String itemDetailContent; +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/base/model/UpdateMember.java b/src/main/java/com/xmomen/module/base/model/UpdateMember.java new file mode 100644 index 0000000..93d5809 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/UpdateMember.java @@ -0,0 +1,131 @@ +package com.xmomen.module.base.model; + +import com.xmomen.module.member.model.MemberAddressCreate; +import com.xmomen.module.member.model.MemberAddressUpdate; +import org.hibernate.validator.constraints.NotBlank; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +public class UpdateMember implements Serializable { + /** + * 会员编号 + */ + private String memberCode; + + /** + * 姓名 + */ + @NotNull + @NotBlank + private String name; + + /** + * 手机号 + */ + @NotNull + @NotBlank + private String phoneNumber; + + /** + * 家庭固话 + */ + private String telNumber; + + /** + * 办公室电话 + */ + private String officeTel; + + /** + * 1-潜在客户,2-普通客户,3-优质客户 + */ + private Integer memberType; + + /** + * 所属单位 + */ + private Integer cdCompanyId; + + /** + * 所属客服经理 + */ + private Integer cdUserId; + + //地址集合 + List memberAddressList; + + public String getMemberCode() { + return memberCode; + } + + public void setMemberCode(String memberCode) { + this.memberCode = memberCode; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + + public String getTelNumber() { + return telNumber; + } + + public void setTelNumber(String telNumber) { + this.telNumber = telNumber; + } + + public String getOfficeTel() { + return officeTel; + } + + public void setOfficeTel(String officeTel) { + this.officeTel = officeTel; + } + + public Integer getMemberType() { + return memberType; + } + + public void setMemberType(Integer memberType) { + this.memberType = memberType; + } + + public Integer getCdCompanyId() { + return cdCompanyId; + } + + public void setCdCompanyId(Integer cdCompanyId) { + this.cdCompanyId = cdCompanyId; + } + + public Integer getCdUserId() { + return cdUserId; + } + + public void setCdUserId(Integer cdUserId) { + this.cdUserId = cdUserId; + } + + public List getMemberAddressList() { + return memberAddressList; + } + + public void setMemberAddressList(List memberAddressList) { + this.memberAddressList = memberAddressList; + } +} diff --git a/src/main/java/com/xmomen/module/base/model/UpdatePlan.java b/src/main/java/com/xmomen/module/base/model/UpdatePlan.java new file mode 100644 index 0000000..1f21280 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/model/UpdatePlan.java @@ -0,0 +1,78 @@ +package com.xmomen.module.base.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +import org.hibernate.validator.constraints.NotBlank; + +public @Data class UpdatePlan implements Serializable { + /** + * 主键 + */ + private Integer id; + + /** + * 计划名称 + */ + @NotBlank + private String planName; + + /** + * 计划创建人 + */ + private String createUser; + + /** + * 计划创建时间 + */ + private Date createTime; + + /** + * 配送频率 + */ + @NotNull + private Integer deliveryType; + + /** + * 配送时间(一周的星期几) + */ + + private String deliveryTime; + + /** + * 配送的次数 + */ + @NotNull + private Integer deliverCount; + + /** + * 价格 + */ + @NotNull + private BigDecimal price; + + /** + * 是否随机 + */ + private Integer isRandom; + + /** + * 产品归属的类别 + */ + private Integer cdCategoryId; + + /** + * 随机数 + */ + private Integer randomNum; + + private Date beginTime; + + private List planItems; +} diff --git a/src/main/java/com/xmomen/module/base/service/ActivityService.java b/src/main/java/com/xmomen/module/base/service/ActivityService.java new file mode 100644 index 0000000..f2c3d15 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/ActivityService.java @@ -0,0 +1,13 @@ +package com.xmomen.module.base.service; + +import com.xmomen.module.base.model.CreateActivity; +import com.xmomen.module.base.model.UpdateActivity; + + +public interface ActivityService { + public void createActivity(CreateActivity createActivity); + + public void updateActivity(Integer id,UpdateActivity updateActivity); + + public void delete(Integer id); +} diff --git a/src/main/java/com/xmomen/module/base/service/BasePlanService.java b/src/main/java/com/xmomen/module/base/service/BasePlanService.java new file mode 100644 index 0000000..dfe5722 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/BasePlanService.java @@ -0,0 +1,19 @@ +package com.xmomen.module.base.service; + +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.base.entity.CdPlan; +import com.xmomen.module.base.model.CreatePlan; +import com.xmomen.module.base.model.PlanModel; +import com.xmomen.module.base.model.UpdatePlan; + +public interface BasePlanService { + public Page getPlanList(String keyword,Integer limit, Integer offset); + + public CdPlan getPlan(Integer id); + + public CdPlan createPlan(CreatePlan createPlan); + + public CdPlan updatePlan(Integer id,UpdatePlan updatePlan); + + public void delete(Integer id); +} diff --git a/src/main/java/com/xmomen/module/base/service/CouponService.java b/src/main/java/com/xmomen/module/base/service/CouponService.java new file mode 100644 index 0000000..46a4f52 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/CouponService.java @@ -0,0 +1,448 @@ +package com.xmomen.module.base.service; + +import java.math.BigDecimal; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.AssertExt; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.entity.CdCoupon; +import com.xmomen.module.base.entity.CdCouponExample; +import com.xmomen.module.base.entity.CdCouponRef; +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.entity.CdMemberCouponRelation; +import com.xmomen.module.base.mapper.CouponMapper; +import com.xmomen.module.base.model.CouponModel; +import com.xmomen.module.base.model.CouponQuery; +import com.xmomen.module.base.model.CouponReportModel; +import com.xmomen.module.base.model.ReadCardVo; +import com.xmomen.module.order.entity.TbTradeRecord; +import com.xmomen.module.pick.entity.TbExchangeCardLog; +import com.xmomen.module.pick.entity.TbRechargeLog; +import com.xmomen.module.system.entity.SysUserOrganization; +import com.xmomen.module.wx.module.coupon.model.CouponQueryModel; +import com.xmomen.module.wx.module.coupon.model.WxCouponModel; +import com.xmomen.module.wx.util.DateUtils; + +/** + * Created by Jeng on 2016/3/30. + */ +@Service +public class CouponService { + private static Logger logger = LoggerFactory.getLogger(CouponService.class); + + @Autowired + MybatisDao mybatisDao; + + @Autowired + ItemService itemService; + + /** + * 查询卡券信息 + * + * @param couponQuery + * @param limit + * @param offset + * @return + */ + public Page queryCoupon(CouponQuery couponQuery, Integer limit, Integer offset) { + return (Page) mybatisDao.selectPage(CouponMapper.CouponMapperNameSpace + "getCouponList", couponQuery, limit, offset); + } + + /** + * 查询卡券信息 + * + * @param couponQuery + * @param limit + * @param offset + * @return + */ + public Page queryCouponActivity(CouponQuery couponQuery, Integer limit, Integer offset) { + return (Page) mybatisDao.selectPage(CouponMapper.CouponMapperNameSpace + "getCouponActivityList", couponQuery, limit, offset); + } + + public CouponModel queryOneCoupon(CouponQuery couponQuery) { + return mybatisDao.getSqlSessionTemplate().selectOne(CouponMapper.CouponMapperNameSpace + "getCouponList", couponQuery); + } + + @Transactional + public CdCoupon createCoupon(CdCoupon cdCoupon) { + return mybatisDao.saveByModel(cdCoupon); + } + + @Transactional + public void updateCoupon(CdCoupon cdCoupon) { + mybatisDao.update(cdCoupon); + } + + public CdCoupon getCoupon(Integer id) { + return mybatisDao.selectByPrimaryKey(CdCoupon.class, id); + } + + public Page getCouponList(String keyword, Integer limit, Integer offset) { + CdCouponExample cdCouponExample = new CdCouponExample(); + cdCouponExample.createCriteria().andCouponNumberLike("%" + StringUtils.trimToEmpty(keyword) + "%"); + return mybatisDao.selectPageByExample(cdCouponExample, limit, offset); + } + + @Transactional + public Boolean bindMember(String couponNumber, Integer memberId, String password) throws Exception { + CouponQuery couponQuery = new CouponQuery(); + couponQuery.setCouponNumber(couponNumber); + List existingBindCards = mybatisDao.getSqlSessionTemplate().selectList(CouponMapper.CouponMapperNameSpace + "getCouponByCouponNo", couponQuery); + if (CollectionUtils.isEmpty(existingBindCards)) { + throw new BusinessException("该卡不存在!"); + } + for (ReadCardVo readCardVo : existingBindCards) { + String userName = readCardVo.getUserName(); + if (!StringUtils.isEmpty(userName)) { + throw new BusinessException("该卡已经被绑定了!"); + } + } + + CdCoupon query = new CdCoupon(); + query.setCouponNumber(couponNumber); + CdCoupon coupon = mybatisDao.selectOneByModel(query); + String prePassword = coupon.getCouponPassword(); + if (!StringUtils.isEmpty(prePassword)) { + if (!prePassword.equals(password)) { + throw new BusinessException("密码错误!"); + } + } + + CdMemberCouponRelation relation = new CdMemberCouponRelation(); + relation.setCdMemberId(memberId); + relation.setCouponNumber(couponNumber); + mybatisDao.save(relation); + return Boolean.TRUE; + } + + @Transactional + public void sendOneCoupon(Integer id, Integer companyId, Integer customerMangerId, String couponNumber, String batch, Integer isGift) { + //更新卡发放状态 + CdCoupon coupon = mybatisDao.selectByPrimaryKey(CdCoupon.class, id); + //如果是后付款类型则发卡就激活 + if (coupon.getPaymentType() == 2) { + coupon.setIsUseful(1); + //如果是卡则记录激活时间 + if (coupon.getCouponType() == 1) { + coupon.setUsefulDate(DateUtils.getNowDate()); + } + } + coupon.setIsSend(1); + coupon.setId(id); + //是否赠送 + coupon.setIsGift(isGift == null ? 0 : isGift); + coupon.setBatch(batch); + coupon.setCdCompanyId(companyId); + coupon.setCdUserId(customerMangerId); + mybatisDao.updateByModel(coupon); + } + + /** + * 退卡 + * + * @param id + */ + @Transactional + public void returnCoupon(Integer id) { + //更新卡券为未发送 + mybatisDao.getSqlSessionTemplate().update(CouponMapper.CouponMapperNameSpace + "updateReturnCoupon", id); + } + + /** + * 卡充值 + * + * @param couponNo + * @param rechargePrice + */ + @Transactional + public void cardRecharge(String couponNo, BigDecimal rechargePrice) { + CdCoupon coupon = new CdCoupon(); + coupon.setCouponNumber(couponNo); + coupon = mybatisDao.selectOneByModel(coupon); + AssertExt.notNull(coupon, "卡号不存在!"); + BigDecimal userPrice = coupon.getUserPrice() == null ? BigDecimal.ZERO : coupon.getUserPrice(); + coupon.setUserPrice(userPrice.add(rechargePrice)); + mybatisDao.update(coupon); + + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + SysUserOrganization userOrganization = new SysUserOrganization(); + userOrganization.setUserId(userId); + userOrganization = mybatisDao.selectOneByModel(userOrganization); + TbRechargeLog rechargeLog = new TbRechargeLog(); + rechargeLog.setCouponNo(couponNo); + rechargeLog.setRechargeDate(mybatisDao.getSysdate()); + rechargeLog.setRechargePlace(userOrganization.getOrganizationId()); + rechargeLog.setRechargePrice(rechargePrice); + rechargeLog.setRechargeUser(userId); + mybatisDao.save(rechargeLog); + + //添加交易记录 + TbTradeRecord tradeRecord = new TbTradeRecord(); + tradeRecord.setAmount(rechargePrice); + tradeRecord.setCreateTime(mybatisDao.getSysdate()); + tradeRecord.setTradeNo(couponNo); + tradeRecord.setTradeType("recharge"); + tradeRecord.setRecordUser(userId); + tradeRecord.setRemark("卡充值记录"); + mybatisDao.save(tradeRecord); + } + + /** + * 卡充值 + * + * @param couponNo + * @param rechargePrice + */ + @Transactional + public void cardWxRecharge(String couponNo, BigDecimal rechargePrice, Integer userId) { + CdCoupon coupon = new CdCoupon(); + coupon.setCouponNumber(couponNo); + coupon = mybatisDao.selectOneByModel(coupon); + AssertExt.notNull(coupon, "卡号不存在!"); + BigDecimal userPrice = coupon.getUserPrice() == null ? BigDecimal.ZERO : coupon.getUserPrice(); + coupon.setUserPrice(userPrice.add(rechargePrice)); + mybatisDao.update(coupon); + + + /*SysUserOrganization userOrganization = new SysUserOrganization(); + userOrganization.setUserId(userId); + userOrganization = mybatisDao.selectOneByModel(userOrganization);*/ + TbRechargeLog rechargeLog = new TbRechargeLog(); + rechargeLog.setCouponNo(couponNo); + rechargeLog.setRechargeDate(mybatisDao.getSysdate()); + // 微信用户没有组织,设为默认值0 + rechargeLog.setRechargePlace(0); + rechargeLog.setRechargePrice(rechargePrice); + // userId 是微信端的memberId(cd_member) + rechargeLog.setRechargeUser(userId); + mybatisDao.save(rechargeLog); + + //添加交易记录 + TbTradeRecord tradeRecord = new TbTradeRecord(); + tradeRecord.setAmount(rechargePrice); + tradeRecord.setCreateTime(mybatisDao.getSysdate()); + tradeRecord.setTradeNo(couponNo); + tradeRecord.setTradeType("recharge"); + tradeRecord.setRecordUser(userId); + tradeRecord.setRemark("卡充值记录"); + mybatisDao.save(tradeRecord); + } + + /** + * 换卡 + * + * @param oldCouponNo + * @param oldPassword + * @param newCouponNo + * @param newPassword + */ + @Transactional + public void exchangeCard(String oldCouponNo, String oldPassword, String newCouponNo, String newPassword) { + CdCoupon oldCoupon = new CdCoupon(); + oldCoupon.setCouponNumber(oldCouponNo); + oldCoupon.setCouponPassword(oldPassword); + oldCoupon = mybatisDao.selectOneByModel(oldCoupon); + AssertExt.notNull(oldCoupon, "老卡卡号错误或者密码错误!"); + CdCoupon newCoupon = new CdCoupon(); + newCoupon.setCouponNumber(newCouponNo); + newCoupon.setCouponPassword(newPassword); + newCoupon = mybatisDao.selectOneByModel(newCoupon); + AssertExt.notNull(oldCoupon, "新卡卡号错误或者密码错误!"); + if (1 == newCoupon.getIsSend()) { + AssertExt.notNull(newCoupon, "新卡已经发卡不能再次换卡!"); + } + //老卡作废 + oldCoupon.setIsUsed(3); + mybatisDao.update(oldCoupon); + //将老卡的所有关系转移给新卡 + //转移余额 + BigDecimal userPrice = newCoupon.getUserPrice() == null ? BigDecimal.ZERO : newCoupon.getUserPrice(); + newCoupon.setUserPrice(userPrice.add(oldCoupon.getUserPrice())); + newCoupon.setIsSend(1); + newCoupon.setIsUsed(1); + newCoupon.setIsOver(1); + newCoupon.setIsUseful(1); + mybatisDao.update(newCoupon); + //卡客户关系 + CdMemberCouponRelation memberCouponRelation = new CdMemberCouponRelation(); + memberCouponRelation.setCouponNumber(oldCoupon.getCouponNumber()); + memberCouponRelation = mybatisDao.selectOneByModel(memberCouponRelation); + memberCouponRelation.setCouponNumber(newCoupon.getCouponNumber()); + mybatisDao.update(memberCouponRelation); + //卡劵的发放单位和客户经理 + CdCouponRef couponRef = new CdCouponRef(); + couponRef.setCouponNumber(oldCoupon.getCouponNumber()); + List couponRefs = mybatisDao.selectByModel(couponRef); + for (CdCouponRef couponRefdb : couponRefs) { + couponRefdb.setCdCouponId(newCoupon.getId()); + couponRefdb.setCouponNumber(newCoupon.getCouponNumber()); + mybatisDao.update(couponRefdb); + } + //记录换卡记录 + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + SysUserOrganization userOrganization = new SysUserOrganization(); + userOrganization.setUserId(userId); + userOrganization = mybatisDao.selectOneByModel(userOrganization); + TbExchangeCardLog exchangeCardLog = new TbExchangeCardLog(); + exchangeCardLog.setNewCouponId(newCoupon.getId()); + exchangeCardLog.setNewCouponNo(newCouponNo); + exchangeCardLog.setOldCouponId(oldCoupon.getId()); + exchangeCardLog.setOldCouponNo(oldCouponNo); + exchangeCardLog.setRechargePlace(userOrganization.getOrganizationId()); + exchangeCardLog.setRechargeUser(userId); + mybatisDao.save(exchangeCardLog); + } + + /** + * 手工调整金额 + * + * @param couponNo + * @param updatePrice + * @param remark + */ + @Transactional + public void updateBalance(String couponNo, BigDecimal updatePrice, String remark) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + + CdCoupon coupon = new CdCoupon(); + coupon.setCouponNumber(couponNo); + coupon = mybatisDao.selectOneByModel(coupon); + AssertExt.notNull(coupon, "卡号" + couponNo + "不存在,调整失败!"); + + BigDecimal userPrice = coupon.getUserPrice(); + if (userPrice == null) { + userPrice = BigDecimal.ZERO; + } + userPrice = userPrice.add(updatePrice); + coupon.setUserPrice(userPrice); + mybatisDao.update(coupon); + + //添加交易记录 + TbTradeRecord tradeRecord = new TbTradeRecord(); + tradeRecord.setAmount(updatePrice); + tradeRecord.setCreateTime(mybatisDao.getSysdate()); + tradeRecord.setTradeNo(couponNo); + tradeRecord.setTradeType("adjustment"); + tradeRecord.setRecordUser(userId); + tradeRecord.setRemark(remark); + mybatisDao.save(tradeRecord); + } + + + /** + * 导入卡劵 + * + * @param couponReport + */ + @Transactional + public void importCoupon(CouponReportModel couponReport) { + // TODO Auto-generated method stub + CdCoupon coupon = new CdCoupon(); + coupon.setCouponCategory(1); + coupon.setCouponDesc(couponReport.getCouponDesc()); + coupon.setCouponNumber(couponReport.getCouponNumber()); + coupon.setCouponPassword(couponReport.getCouponPassword()); + coupon.setCouponType(couponReport.getCouponType()); + coupon.setCouponValue(couponReport.getCouponValue()); + coupon.setPaymentType(couponReport.getPaymentType()); + coupon.setCouponCategory(couponReport.getCouponCategoryId()); + try { + mybatisDao.save(coupon); + } catch (Exception e) { + logger.error("卡劵已经存在!卡劵号:" + coupon.getCouponNumber()); + } + } + + @Transactional + public void auditCoupon(Integer id, boolean locked) { + //db的卡 + CdCoupon cdCouponDb = mybatisDao.selectByPrimaryKey(CdCoupon.class, id); + CdCoupon coupon = new CdCoupon(); + coupon.setAuditDate(DateUtils.getNowDate()); + coupon.setIsUseful(locked ? 1 : 0); + //如果是预付款类型则审核就激活 + if (locked && cdCouponDb.getPaymentType() == 1 && cdCouponDb.getCouponType() == 1) { + //激活时间 + coupon.setUsefulDate(DateUtils.getNowDate()); + } + coupon.setId(id); + mybatisDao.update(coupon); + } + + public CouponModel getCouponModel(String couponNumber) { + return mybatisDao.getSqlSessionTemplate().selectOne(CouponMapper.CouponMapperNameSpace + "getCouponItemsByByCouponNo", couponNumber); + } + + public List getMyCouponList(CouponQueryModel queryModel) { + return mybatisDao.getSqlSessionTemplate().selectList(CouponMapper.CouponMapperNameSpace + "getMyCouponList", queryModel); + } + + public Boolean validate(String couponNo, String password) { + CdCoupon couponQuery = new CdCoupon(); + couponQuery.setCouponNumber(couponNo); + CdCoupon coupon = mybatisDao.selectOneByModel(couponQuery); + if (coupon == null) return false; + String prePassword = coupon.getCouponPassword(); + if (StringUtils.isEmpty(prePassword) && StringUtils.isEmpty(password)) { + return true; + } + else { + if (password == null) password = ""; + if (password.equals(prePassword)) return true; + return false; + } + } + + public Boolean resetPasword(String couponNumber, String password, String newPassWord, Integer memberId) throws Exception { + CouponQuery couponQuery = new CouponQuery(); + couponQuery.setCouponNumber(couponNumber); + List existingBindCards = mybatisDao.getSqlSessionTemplate().selectList(CouponMapper.CouponMapperNameSpace + "getCouponByCouponNo", couponQuery); + if (CollectionUtils.isEmpty(existingBindCards)) { + throw new BusinessException("该卡不存在!"); + } + CdMember cdMember = mybatisDao.selectByPrimaryKey(CdMember.class, memberId); + if (cdMember == null) { + throw new BusinessException("当前用户不存在!"); + } + boolean belongTo = false; + for (ReadCardVo readCardVo : existingBindCards) { + String userName = readCardVo.getUserName(); + if (cdMember.getName().equals(userName)) { + belongTo = true; + } + } + if (!belongTo) { + throw new BusinessException("该卡未被激活或者不属于当前用户!"); + } + CdCoupon query = new CdCoupon(); + query.setCouponNumber(couponNumber); + CdCoupon coupon = mybatisDao.selectOneByModel(query); + String prePassword = coupon.getCouponPassword(); + if (StringUtils.isEmpty(prePassword) && StringUtils.isEmpty(password)) { + coupon.setCouponPassword(newPassWord); + } + else if (!StringUtils.isEmpty(prePassword)) { + if (prePassword.equals(password)) { + coupon.setCouponPassword(newPassWord); + } + else { + throw new BusinessException("密码不正确!"); + } + } + mybatisDao.update(coupon); + return Boolean.TRUE; + } +} diff --git a/src/main/java/com/xmomen/module/base/service/ItemService.java b/src/main/java/com/xmomen/module/base/service/ItemService.java new file mode 100644 index 0000000..144e224 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/ItemService.java @@ -0,0 +1,25 @@ +package com.xmomen.module.base.service; + +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.base.model.CreateItem; +import com.xmomen.module.base.model.ItemModel; +import com.xmomen.module.base.model.ItemQuery; +import com.xmomen.module.base.model.UpdateItem; + +import java.util.List; + +public interface ItemService { + + public List queryItemList(ItemQuery itemQuery); + + public Page queryItemList(ItemQuery itemQuery, Integer offset, Integer limit); + + public void createItem(CreateItem createItem); + + public void updateItem(Integer id, UpdateItem updateItem); + + public void delete(Integer id); + + public void defaultImage(String resourceId); + +} diff --git a/src/main/java/com/xmomen/module/base/service/MemberService.java b/src/main/java/com/xmomen/module/base/service/MemberService.java new file mode 100644 index 0000000..aae9ee2 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/MemberService.java @@ -0,0 +1,42 @@ +package com.xmomen.module.base.service; + +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.model.CreateMember; +import com.xmomen.module.base.model.MemberModel; +import com.xmomen.module.base.model.UpdateMember; +import com.xmomen.module.member.model.MemberAddressModel; + +public interface MemberService { + public CdMember createMember(CreateMember createMember); + + public void updateMember(Integer id, UpdateMember updateMember); + + public void delete(Integer id); + + public CdMember bindMember(String mobile, String name, String openId, Integer memberId) throws Exception; + + public void updateMobile(Integer id, String mobile); + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return MemberModel 客户对象 + */ + public CdMember getOneMemberModel(String id); + + public CdMember findMember(CdMember query); + + public boolean updatePassword(Integer id, String newPassword, String oldPassword); + /** + * openId绑定用户 + * + * @param openId + * @return + */ + public CdMember bindMember(String openId); + + public CdMember updateMember(CdMember updateMember); + + public boolean resetPassword(Integer id, String newPassword); +} diff --git a/src/main/java/com/xmomen/module/base/service/impl/ContractServiceImpl.java b/src/main/java/com/xmomen/module/base/service/impl/ContractServiceImpl.java new file mode 100644 index 0000000..275e52f --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/impl/ContractServiceImpl.java @@ -0,0 +1,80 @@ +package com.xmomen.module.base.service.impl; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.base.entity.CdContract; +import com.xmomen.module.base.entity.CdContractItem; +import com.xmomen.module.base.entity.CdItem; +import com.xmomen.module.base.model.CreateContract; +import com.xmomen.module.base.model.CreateContractItem; +import com.xmomen.module.base.model.UpdateContract; +import com.xmomen.module.base.service.ContractService; +@Service +public class ContractServiceImpl implements ContractService { + @Autowired + MybatisDao mybatisDao; + @Override + @Transactional + public void createContract(CreateContract createContract) { + CdContract contract = new CdContract(); + contract.setBeginTime(createContract.getBeginTime()); + contract.setEndTime(createContract.getEndTime()); + contract.setCdCompanyId(createContract.getCdCompanyId()); + contract.setContractCode(createContract.getContractCode()); + contract.setContractName(createContract.getContractName()); + contract.setCdMemberId(createContract.getCdMemberId()); + contract.setIsAuditor(1); + contract.setIsDel(0); + contract = mybatisDao.saveByModel(contract); + //保存合同明细 + for(CreateContractItem createContractItem : createContract.getContractItemList()){ + CdContractItem contractItem = new CdContractItem(); + contractItem.setCdItemId(createContractItem.getCdItemId()); + contractItem.setCdContractId(contract.getId()); + contractItem.setContractType(createContractItem.getContractType()); + contractItem.setDiscount(createContractItem.getDiscount()); + contractItem.setContractValue(createContractItem.getContractValue()); + mybatisDao.save(contractItem); + } + } + @Transactional + public void updateContract(Integer id, UpdateContract updateContract) { + CdContract contract = new CdContract(); + contract.setId(id); + contract.setBeginTime(updateContract.getBeginTime()); + contract.setEndTime(updateContract.getEndTime()); + contract.setCdCompanyId(updateContract.getCdCompanyId()); + contract.setContractCode(updateContract.getContractCode()); + contract.setContractName(updateContract.getContractName()); + contract.setCdMemberId(updateContract.getCdMemberId()); + mybatisDao.update(contract); + + CdContractItem contractItemdb = new CdContractItem(); + contractItemdb.setCdContractId(id); + List contractItemdbs = mybatisDao.selectByModel(contractItemdb); + mybatisDao.deleteAllByModel(contractItemdbs); + //保存合同明细 + for(CreateContractItem createContractItem : updateContract.getContractItemList()){ + CdContractItem contractItem = new CdContractItem(); + contractItem.setCdItemId(createContractItem.getCdItemId()); + contractItem.setCdContractId(contract.getId()); + contractItem.setContractType(createContractItem.getContractType()); + contractItem.setDiscount(createContractItem.getDiscount()); + contractItem.setContractValue(createContractItem.getContractValue()); + mybatisDao.save(contractItem); + } + + } + @Transactional + public void delete(Integer id) { + CdContract contract = mybatisDao.selectByPrimaryKey(CdContract.class, id); + contract.setIsDel(1); + mybatisDao.update(contract); + } + +} diff --git a/src/main/java/com/xmomen/module/base/service/impl/CouponCategoryServiceImpl.java b/src/main/java/com/xmomen/module/base/service/impl/CouponCategoryServiceImpl.java new file mode 100644 index 0000000..3097327 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/impl/CouponCategoryServiceImpl.java @@ -0,0 +1,88 @@ +package com.xmomen.module.base.service.impl; + +import com.xmomen.module.base.mapper.CouponCategoryMapper; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.base.entity.CdCouponCategory; +import com.xmomen.module.base.entity.CdCouponCategoryExample; +import com.xmomen.module.base.entity.CdCouponCategoryExample.Criteria; +import com.xmomen.module.base.entity.CdCouponCategoryRef; +import com.xmomen.module.base.entity.CdCouponCategoryRefExample; +import com.xmomen.module.base.model.CouponCategoryRefModel; +import com.xmomen.module.base.model.CreateCouponCategory; +import com.xmomen.module.base.model.UpdateCouponCategory; +import com.xmomen.module.base.service.CouponCategoryService; +@Service +public class CouponCategoryServiceImpl implements CouponCategoryService { + @Autowired + MybatisDao mybatisDao; + + public Page getCouponCategoryList(String keyword,Integer categoryType, Integer limit, Integer offset){ + CdCouponCategoryExample cdCouponCategoryExample = new CdCouponCategoryExample(); + Criteria couponCategoryCriteria = cdCouponCategoryExample.createCriteria().andCategoryNameLike("%" + StringUtils.trimToEmpty(keyword) + "%"); + if(categoryType != null){ + couponCategoryCriteria.andCategoryTypeEqualTo(categoryType); + } + + return mybatisDao.selectPageByExample(cdCouponCategoryExample, limit, offset); + } + + public CdCouponCategory getCouponCategory(Integer id){ + return mybatisDao.selectByPrimaryKey(CdCouponCategory.class, id); + } + + @Override + @Transactional + public CdCouponCategory createCouponCategory(CreateCouponCategory createCouponCategory) { + CdCouponCategory category = new CdCouponCategory(); + category.setCategoryName(createCouponCategory.getCategoryName()); + category.setCategoryType(createCouponCategory.getCategoryType()); + category = mybatisDao.saveByModel(category); + if(createCouponCategory.getCategoryRefs() != null){ + for(CouponCategoryRefModel categoryRefVo : createCouponCategory.getCategoryRefs()){ + CdCouponCategoryRef categoryRef = new CdCouponCategoryRef(); + categoryRef.setCdCouponCategoryId(category.getId()); + categoryRef.setRefType(CouponCategoryMapper.COUPON_RELATION_ITEM_CODE); + categoryRef.setRefValue(categoryRefVo.getCdItemId()+""); + categoryRef.setRefName("消费劵固定产品"); + categoryRef.setRefCount(categoryRefVo.getCount()); + mybatisDao.save(categoryRef); + } + } + return category; + } + @Transactional + public CdCouponCategory updateCouponCategory(Integer id, UpdateCouponCategory updateCouponCategory) { + CdCouponCategory category = new CdCouponCategory(); + category.setId(id); + category.setCategoryName(updateCouponCategory.getCategoryName()); + category.setCategoryType(updateCouponCategory.getCategoryType()); + category = mybatisDao.updateByModel(category); + if(updateCouponCategory.getCategoryRefs() != null){ + //先删除再添加 + CdCouponCategoryRefExample categoryRefExample = new CdCouponCategoryRefExample(); + categoryRefExample.createCriteria().andCdCouponCategoryIdEqualTo(id); + mybatisDao.deleteByExample(categoryRefExample); + for(CouponCategoryRefModel categoryRefVo : updateCouponCategory.getCategoryRefs()){ + CdCouponCategoryRef categoryRef = new CdCouponCategoryRef(); + categoryRef.setCdCouponCategoryId(category.getId()); + categoryRef.setRefType(CouponCategoryMapper.COUPON_RELATION_ITEM_CODE); + categoryRef.setRefValue(categoryRefVo.getCdItemId()+""); + categoryRef.setRefName("消费劵固定产品"); + categoryRef.setRefCount(categoryRefVo.getCount()); + mybatisDao.save(categoryRef); + } + } + return mybatisDao.updateByModel(category); + } + @Transactional + public void delete(Integer id) { + mybatisDao.deleteByPrimaryKey(CdCouponCategory.class, id); + } + +} diff --git a/src/main/java/com/xmomen/module/base/service/impl/ExpressMemberServiceImpl.java b/src/main/java/com/xmomen/module/base/service/impl/ExpressMemberServiceImpl.java new file mode 100644 index 0000000..4583b06 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/impl/ExpressMemberServiceImpl.java @@ -0,0 +1,36 @@ +package com.xmomen.module.base.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.base.entity.CdExpress; +import com.xmomen.module.base.entity.CdExpressMember; +import com.xmomen.module.base.model.ExpressTask; +import com.xmomen.module.base.service.ExpressMemberService; +import com.xmomen.module.base.service.ExpressService; +import com.xmomen.module.order.entity.TbOrder; + +@Service +public class ExpressMemberServiceImpl implements ExpressMemberService { + @Autowired + MybatisDao mybatisDao; + @Override + @Transactional + public void createExpressMember(CdExpressMember createExpress) { + mybatisDao.save(createExpress); + } + + @Transactional + public void updateExpressMember(Integer id, CdExpressMember updateExpress) { + updateExpress.setId(id); + mybatisDao.update(updateExpress); + } + + @Transactional + public void delete(Integer id) { + mybatisDao.deleteByPrimaryKey(CdExpress.class, id); + } + +} diff --git a/src/main/java/com/xmomen/module/base/service/impl/ItemDetailServiceImpl.java b/src/main/java/com/xmomen/module/base/service/impl/ItemDetailServiceImpl.java new file mode 100644 index 0000000..beaafbc --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/impl/ItemDetailServiceImpl.java @@ -0,0 +1,56 @@ +package com.xmomen.module.base.service.impl; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.base.entity.CdItemDetail; +import com.xmomen.module.base.mapper.ItemDetailMapper; +import com.xmomen.module.base.model.CreateItemDetail; +import com.xmomen.module.base.model.ItemDetailModel; +import com.xmomen.module.base.model.ItemDetailQuery; +import com.xmomen.module.base.model.UpdateItemDetail; +import com.xmomen.module.base.service.ItemDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class ItemDetailServiceImpl implements ItemDetailService { + @Autowired + MybatisDao mybatisDao; + + @Override + public List queryItemDetailList(ItemDetailQuery itemQuery) { + return mybatisDao.getSqlSessionTemplate().selectList(ItemDetailMapper.ItemDetailMapperNameSpace + "getItemDetailList", itemQuery); + } + + @Override + public Page queryItemDetailList(ItemDetailQuery itemQuery, Integer offset, Integer limit) { + return (Page) mybatisDao.selectPage(ItemDetailMapper.ItemDetailMapperNameSpace + "getItemDetailList", itemQuery, limit, offset); + } + + @Override + @Transactional + public void createItemDetail(CreateItemDetail createItemDetail) { + CdItemDetail itemDetail = new CdItemDetail(); + itemDetail.setItemDetailContent(createItemDetail.getItemDetailContent()); + itemDetail.setCdItemId(createItemDetail.getCdItemId()); + mybatisDao.save(itemDetail); + } + + @Transactional + public void updateItemDetail(Integer id, UpdateItemDetail updateItemDetail) { + CdItemDetail itemDetail = new CdItemDetail(); + itemDetail.setId(id); + itemDetail.setCdItemId(updateItemDetail.getCdItemId()); + itemDetail.setItemDetailContent(updateItemDetail.getItemDetailContent()); + mybatisDao.update(itemDetail); + } + + @Transactional + public void delete(Integer id) { + mybatisDao.deleteByPrimaryKey(CdItemDetail.class, id); + } + +} diff --git a/src/main/java/com/xmomen/module/base/service/impl/MemberServiceImpl.java b/src/main/java/com/xmomen/module/base/service/impl/MemberServiceImpl.java new file mode 100644 index 0000000..e15c921 --- /dev/null +++ b/src/main/java/com/xmomen/module/base/service/impl/MemberServiceImpl.java @@ -0,0 +1,333 @@ +package com.xmomen.module.base.service.impl; + +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.account.service.PasswordHelper; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.entity.CdActivityAddress; +import com.xmomen.module.base.entity.CdBind; +import com.xmomen.module.base.entity.CdBindExample; +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.entity.CdMemberCouponRelation; +import com.xmomen.module.base.entity.CdMemberCouponRelationExample; +import com.xmomen.module.base.model.CreateMember; +import com.xmomen.module.base.model.UpdateMember; +import com.xmomen.module.base.service.CouponService; +import com.xmomen.module.base.service.MemberService; +import com.xmomen.module.member.entity.MemberAddress; +import com.xmomen.module.member.entity.MemberAddressExample; +import com.xmomen.module.member.model.MemberAddressCreate; +import com.xmomen.module.member.model.MemberAddressUpdate; +import com.xmomen.module.wx.module.cart.service.CartService; + +//@Service +public class MemberServiceImpl implements MemberService { + @Autowired + MybatisDao mybatisDao; + + @Autowired + CouponService couponService; + + @Autowired + PasswordHelper passwordHelper; + + @Autowired + CartService cartService; + + public CdMember getOneMemberModel(String id) { + return this.mybatisDao.selectByPrimaryKey(CdMember.class, id); + } + + @Override + @Transactional + public CdMember createMember(CreateMember createMember) { + + CdMember member = new CdMember(); + member.setPhoneNumber(createMember.getPhoneNumber()); + member = mybatisDao.selectOneByModel(member); + if (member == null) { + member = new CdMember(); + member.setMemberType(createMember.getMemberType()); + member.setName(createMember.getName()); + member.setPhoneNumber(createMember.getPhoneNumber()); + member.setTelNumber(createMember.getTelNumber()); + member.setOfficeTel(createMember.getOfficeTel()); + member.setCdCompanyId(createMember.getCdCompanyId()); + member.setCdUserId(createMember.getCdUserId()); + //加密密码 + String newPassword = ""; + if(!StringUtils.isEmpty(createMember.getPassword())) { + newPassword = passwordHelper.encryptPassword(createMember.getPassword(), AppConstants.PC_PASSWORD_SALT); + } + member.setPassword(newPassword); + member.setEmail(createMember.getEmail()); + member = mybatisDao.insertByModel(member); + //保存收货地址 + for (MemberAddressCreate memberAddressCreate : createMember.getMemberAddressList()) { + MemberAddress memberAddress = new MemberAddress(); + memberAddress.setCdMemberId(member.getId()); + memberAddress.setAddress(memberAddressCreate.getAddress()); + memberAddress.setFullAddress(memberAddressCreate.getAddress()); + memberAddress.setMobile(memberAddressCreate.getMobile()); + memberAddress.setName(memberAddressCreate.getName()); + mybatisDao.insertByModel(memberAddress); + } + } + //存在场合 + else { + member.setMemberType(createMember.getMemberType()); + member.setName(createMember.getName()); + member.setPhoneNumber(createMember.getPhoneNumber()); + member.setTelNumber(createMember.getTelNumber()); + member.setOfficeTel(createMember.getOfficeTel()); + member.setCdCompanyId(createMember.getCdCompanyId()); + member.setCdUserId(createMember.getCdUserId()); + member = mybatisDao.updateByModel(member); + //保存收货地址 + for (MemberAddressCreate memberAddressCreate : createMember.getMemberAddressList()) { + MemberAddress memberAddress = new MemberAddress(); + memberAddress.setCdMemberId(member.getId()); + memberAddress.setAddress(memberAddressCreate.getAddress()); + memberAddress.setFullAddress(memberAddressCreate.getAddress()); + memberAddress.setMobile(memberAddressCreate.getMobile()); + memberAddress.setName(memberAddressCreate.getName()); + mybatisDao.insertByModel(memberAddress); + } + } + if (!StringUtils.isBlank(createMember.getCouponNumber())) { + CdMemberCouponRelation cdMemberCouponRelation = new CdMemberCouponRelation(); + cdMemberCouponRelation.setCdMemberId(member.getId()); + cdMemberCouponRelation.setCouponNumber(createMember.getCouponNumber()); + mybatisDao.insert(cdMemberCouponRelation); + //查看卡是否有送礼品地址 如果有填充到第3个地址里面 + CdActivityAddress couponActivityAddress = new CdActivityAddress(); + couponActivityAddress.setCouponNumber(createMember.getCouponNumber()); + List couponAddressList = mybatisDao.selectByModel(couponActivityAddress); + if (couponAddressList.size() > 0) { + couponActivityAddress = couponAddressList.get(0); + member.setSpareAddress2(couponActivityAddress.getConsignmentAddress()); + member.setSpareName2(couponActivityAddress.getConsignmentName()); + member.setSpareTel2(couponActivityAddress.getConsignmentPhone()); + mybatisDao.update(member); + } + } + return member; + } + + @Transactional + public void updateMember(Integer id, UpdateMember updateMember) { + CdMember member = new CdMember(); + member.setId(id); + member.setMemberType(updateMember.getMemberType()); + member.setName(updateMember.getName()); + member.setPhoneNumber(updateMember.getPhoneNumber()); + member.setTelNumber(updateMember.getTelNumber()); + member.setOfficeTel(updateMember.getOfficeTel()); + member.setCdCompanyId(updateMember.getCdCompanyId()); + member.setCdUserId(updateMember.getCdUserId()); + mybatisDao.update(member); + //保存收货地址 + for (MemberAddressUpdate memberAddressUpdate : updateMember.getMemberAddressList()) { + MemberAddress memberAddress = new MemberAddress(); + if (StringUtils.isNotEmpty(memberAddressUpdate.getId())) { + memberAddress.setId(memberAddressUpdate.getId()); + memberAddress.setCdMemberId(id); + memberAddress.setAddress(memberAddressUpdate.getAddress()); + memberAddress.setFullAddress(memberAddressUpdate.getAddress()); + memberAddress.setMobile(memberAddressUpdate.getMobile()); + memberAddress.setName(memberAddressUpdate.getName()); + mybatisDao.update(memberAddress); + } + else { + memberAddress.setCdMemberId(id); + memberAddress.setFullAddress(memberAddressUpdate.getAddress()); + memberAddress.setMobile(memberAddressUpdate.getMobile()); + memberAddress.setAddress(memberAddressUpdate.getAddress()); + memberAddress.setName(memberAddressUpdate.getName()); + mybatisDao.insert(memberAddress); + } + } + } + + @Transactional + public void delete(Integer id) { + //删除卡与客户的绑定关系 + CdMemberCouponRelationExample tbOrderItemExample = new CdMemberCouponRelationExample(); + tbOrderItemExample.createCriteria().andCdMemberIdEqualTo(id); + mybatisDao.deleteByExample(tbOrderItemExample); + mybatisDao.deleteByPrimaryKey(CdMember.class, id); + //删除收货地址 + MemberAddressExample memberAddressExample = new MemberAddressExample(); + memberAddressExample.createCriteria().andCdMemberIdEqualTo(id); + mybatisDao.deleteByExample(memberAddressExample); + } + + /** + * 绑定 + * + * @param openId + */ + @Transactional + public CdMember bindMember(String openId) { + CdMember member = new CdMember(); + member.setMemberType(1); + member = mybatisDao.insertByModel(member); + //新增绑定关系 + CdBind bind = new CdBind(); + bind.setUserId(member.getId()); + bind.setOpenId(openId); + this.mybatisDao.save(bind); + + return member; + } + + /** + * 绑定 + * + * @param mobile + * @param name + * @param memberId + */ + @Transactional + public CdMember bindMember(String mobile, String name, String openId, Integer memberId) throws Exception { + //手机号是否在member表存在 不存在则新增 + CdMember member = new CdMember(); + member.setPhoneNumber(mobile); + List members = mybatisDao.selectByModel(member); + //手机号不存在场合 + if (members.size() == 0) { + //更新member + CdMember cdMember = new CdMember(); + cdMember.setId(memberId); + cdMember.setName(name); + cdMember.setPhoneNumber(mobile); + member = mybatisDao.updateByModel(cdMember); + + //更新cdBind + CdBindExample cdBindExample = new CdBindExample(); + cdBindExample.createCriteria().andUserIdEqualTo(memberId); + CdBind cdBind = new CdBind(); + //手机号 + cdBind.setPhone(mobile); + mybatisDao.updateOneByExampleSelective(cdBind, cdBindExample); + } + //手机号存在场合 + else { + member = members.get(0); + member.setName(name); + //替换购物车数据 + cartService.copyCartInfo(String.valueOf(memberId), String.valueOf(member.getId())); + + try { + //删除新的member + mybatisDao.deleteByPrimaryKey(CdMember.class, memberId); + } catch (Exception e) { + + } + + CdBind bindDb = new CdBind(); + bindDb.setUserId(member.getId()); + bindDb.setPhone(mobile); + List cdBinds = mybatisDao.selectByModel(bindDb); + if (cdBinds.size() == 0) { + //新增绑定关系 + CdBind bind = new CdBind(); + bind.setUserId(member.getId()); + bind.setPhone(mobile); + bind.setOpenId(openId); + mybatisDao.save(bind); + } + } + + return member; + } + + /** + * 更新手机号码 + * + * @param id 主键 + * @param mobile 新手机号码 + */ + @Transactional + public void updateMobile(Integer id, String mobile) { + CdMember memberDb = this.mybatisDao.selectByPrimaryKey(CdMember.class, id); + //新手机号码和原来一样 直接返回 + if (memberDb.getPhoneNumber().equals(mobile)) { + return; + } + //判断新手机是否存在 存在则不能修改 + CdMember member = new CdMember(); + member.setPhoneNumber(mobile); + List members = mybatisDao.selectByModel(member); + if (members.size() > 0) { + throw new IllegalArgumentException("新手机号已经绑定其他账号!"); + } + //更新bind表的手机号 + CdBind bind = new CdBind(); + bind.setUserId(id); + List cdBinds = mybatisDao.selectByModel(bind); + //更新手机号 + if (cdBinds.size() > 0) { + bind = cdBinds.get(0); + bind.setPhone(mobile); + mybatisDao.updateByModel(bind); + } + else { + throw new IllegalArgumentException("新手机号已经绑定其他账号!"); + } + //更新用户表的手机号 + member.setId(id); + this.mybatisDao.updateByModel(member); + } + + @Override + public CdMember findMember(CdMember member) { + List members = mybatisDao.selectByModel(member); + if (members.size() == 0) { + return null; + } + else { + return members.get(0); + } + } + + @Override + public boolean updatePassword(Integer id, String newPassword, String oldPassword) { + CdMember cdMember = mybatisDao.selectByPrimaryKey(CdMember.class, id); + String newEncryptPassword = passwordHelper.encryptPassword(newPassword, AppConstants.PC_PASSWORD_SALT); + String oldEncryptPassword = passwordHelper.encryptPassword(oldPassword, AppConstants.PC_PASSWORD_SALT); + if(cdMember != null) { + if(StringUtils.isEmpty(cdMember.getPassword()) || cdMember.getPassword().equals(oldEncryptPassword)) { + cdMember.setPassword(newEncryptPassword); + mybatisDao.update(cdMember); + return true; + } + } + return false; + } + + @Override + public CdMember updateMember(CdMember updateMember) { + if(updateMember != null) { + mybatisDao.update(updateMember); + } + return updateMember; + } + + @Override + public boolean resetPassword(Integer id, String newPassword) { + CdMember cdMember = mybatisDao.selectByPrimaryKey(CdMember.class, id); + String newEncryptPassword = passwordHelper.encryptPassword(newPassword, AppConstants.PC_PASSWORD_SALT); + if(cdMember != null) { + cdMember.setPassword(newEncryptPassword); + mybatisDao.update(cdMember); + return true; + } + return false; + } +} diff --git a/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/BeforehandPackageRecord.java b/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/BeforehandPackageRecord.java new file mode 100644 index 0000000..4c122e5 --- /dev/null +++ b/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/BeforehandPackageRecord.java @@ -0,0 +1,149 @@ +package com.xmomen.module.beforehandpackagerecord.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_beforehand_package_record") +public class BeforehandPackageRecord extends BaseMybatisModel { + /** + * + */ + private String id; + + /** + * 包装商品 + */ + private Integer cdItemId; + + /** + * 包装商品数 + */ + private Integer packageNum; + + /** + * 创建时间 + */ + private Date insertDate; + + /** + * 创建人 + */ + private Integer insertUserId; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 更新人 + */ + private Integer updateUserId; + + @Column(name = "id") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "cd_item_id") + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + if(cdItemId == null){ + removeValidField("cdItemId"); + return; + } + addValidField("cdItemId"); + } + + @Column(name = "package_num") + public Integer getPackageNum() { + return packageNum; + } + + public void setPackageNum(Integer packageNum) { + this.packageNum = packageNum; + if(packageNum == null){ + removeValidField("packageNum"); + return; + } + addValidField("packageNum"); + } + + @Column(name = "insert_date") + public Date getInsertDate() { + return insertDate; + } + + public void setInsertDate(Date insertDate) { + this.insertDate = insertDate; + if(insertDate == null){ + removeValidField("insertDate"); + return; + } + addValidField("insertDate"); + } + + @Column(name = "insert_user_id") + public Integer getInsertUserId() { + return insertUserId; + } + + public void setInsertUserId(Integer insertUserId) { + this.insertUserId = insertUserId; + if(insertUserId == null){ + removeValidField("insertUserId"); + return; + } + addValidField("insertUserId"); + } + + @Column(name = "update_date") + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + if(updateDate == null){ + removeValidField("updateDate"); + return; + } + addValidField("updateDate"); + } + + @Column(name = "update_user_id") + public Integer getUpdateUserId() { + return updateUserId; + } + + public void setUpdateUserId(Integer updateUserId) { + this.updateUserId = updateUserId; + if(updateUserId == null){ + removeValidField("updateUserId"); + return; + } + addValidField("updateUserId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/mapper/BeforehandPackageRecordMapper.java b/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/mapper/BeforehandPackageRecordMapper.java new file mode 100644 index 0000000..e1ba5bc --- /dev/null +++ b/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/mapper/BeforehandPackageRecordMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.beforehandpackagerecord.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.beforehandpackagerecord.entity.BeforehandPackageRecord; +import com.xmomen.module.beforehandpackagerecord.entity.BeforehandPackageRecordExample; +import org.apache.ibatis.annotations.Param; + +public interface BeforehandPackageRecordMapper extends MybatisMapper { + int countByExample(BeforehandPackageRecordExample example); + + int deleteByExample(BeforehandPackageRecordExample example); + + int insertSelective(BeforehandPackageRecord record); + + int updateByExampleSelective(@Param("record") BeforehandPackageRecord record, @Param("example") BeforehandPackageRecordExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/mapper/BeforehandPackageRecordMapper.xml b/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/mapper/BeforehandPackageRecordMapper.xml new file mode 100644 index 0000000..beab32c --- /dev/null +++ b/src/main/java/com/xmomen/module/beforehandpackagerecord/entity/mapper/BeforehandPackageRecordMapper.xml @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, cd_item_id, package_num, insert_date, insert_user_id, update_date, update_user_id + + + + delete from cd_beforehand_package_record + + + + + + + SELECT replace(UUID(),'-','') + + insert into cd_beforehand_package_record + + id, + + cd_item_id, + + + package_num, + + + insert_date, + + + insert_user_id, + + + update_date, + + + update_user_id, + + + + #{id,jdbcType=VARCHAR}, + + #{cdItemId,jdbcType=INTEGER}, + + + #{packageNum,jdbcType=INTEGER}, + + + #{insertDate,jdbcType=TIMESTAMP}, + + + #{insertUserId,jdbcType=INTEGER}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + #{updateUserId,jdbcType=INTEGER}, + + + + + + update cd_beforehand_package_record + + + id = #{record.id,jdbcType=VARCHAR}, + + + cd_item_id = #{record.cdItemId,jdbcType=INTEGER}, + + + package_num = #{record.packageNum,jdbcType=INTEGER}, + + + insert_date = #{record.insertDate,jdbcType=TIMESTAMP}, + + + insert_user_id = #{record.insertUserId,jdbcType=INTEGER}, + + + update_date = #{record.updateDate,jdbcType=TIMESTAMP}, + + + update_user_id = #{record.updateUserId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/beforehandpackagerecord/mapper/BeforehandPackageRecordMapperExt.java b/src/main/java/com/xmomen/module/beforehandpackagerecord/mapper/BeforehandPackageRecordMapperExt.java new file mode 100644 index 0000000..03a9a2d --- /dev/null +++ b/src/main/java/com/xmomen/module/beforehandpackagerecord/mapper/BeforehandPackageRecordMapperExt.java @@ -0,0 +1,12 @@ +package com.xmomen.module.beforehandpackagerecord.mapper; + +/** + * @author tanxinzheng + * @date 2017-5-18 23:36:38 + * @version 1.0.0 + */ +public interface BeforehandPackageRecordMapperExt { + + public static final String BeforehandPackageRecordMapperNameSpace = "com.xmomen.module.beforehandpackagerecord.mapper.BeforehandPackageRecordMapperExt."; + +} diff --git a/src/main/java/com/xmomen/module/beforehandpackagerecord/model/BeforehandPackageRecordQuery.java b/src/main/java/com/xmomen/module/beforehandpackagerecord/model/BeforehandPackageRecordQuery.java new file mode 100644 index 0000000..a8abfc8 --- /dev/null +++ b/src/main/java/com/xmomen/module/beforehandpackagerecord/model/BeforehandPackageRecordQuery.java @@ -0,0 +1,30 @@ +package com.xmomen.module.beforehandpackagerecord.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-18 23:36:38 + */ +public +@Data +class BeforehandPackageRecordQuery implements Serializable { + /** + * 主键 + */ + private String id; + /** + * 包含主键集 + */ + private String[] ids; + /** + * 排除主键集 + */ + private String[] excludeIds; + + private Integer insertUserId; + +} diff --git a/src/main/java/com/xmomen/module/beforehandpackagerecord/model/BeforehandPackageRecordUpdate.java b/src/main/java/com/xmomen/module/beforehandpackagerecord/model/BeforehandPackageRecordUpdate.java new file mode 100644 index 0000000..330fb0e --- /dev/null +++ b/src/main/java/com/xmomen/module/beforehandpackagerecord/model/BeforehandPackageRecordUpdate.java @@ -0,0 +1,40 @@ +package com.xmomen.module.beforehandpackagerecord.model; + +import lombok.Data; +import com.xmomen.module.beforehandpackagerecord.entity.BeforehandPackageRecord; +import org.springframework.beans.BeanUtils; + + import java.lang.String; + import java.lang.Integer; + import java.util.Date; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @date 2017-5-18 23:36:38 + * @version 1.0.0 + */ +public @Data class BeforehandPackageRecordUpdate implements Serializable { + + /** */ + private String id; + /** 包装商品 */ + private Integer cdItemId; + /** 包装商品数 */ + private Integer packageNum; + /** 创建时间 */ + private Date insertDate; + /** 创建人 */ + private Integer insertUserId; + /** 更新时间 */ + private Date updateDate; + /** 更新人 */ + private Integer updateUserId; + + + public BeforehandPackageRecord getEntity(){ + BeforehandPackageRecord beforehandPackageRecord = new BeforehandPackageRecord(); + BeanUtils.copyProperties(this, beforehandPackageRecord); + return beforehandPackageRecord; + } +} diff --git a/src/main/java/com/xmomen/module/common/SysConstant.java b/src/main/java/com/xmomen/module/common/SysConstant.java new file mode 100644 index 0000000..4a04f69 --- /dev/null +++ b/src/main/java/com/xmomen/module/common/SysConstant.java @@ -0,0 +1,10 @@ +package com.xmomen.module.common; + +/** + * 系统常量 + * @author Administrator + * + */ +public class SysConstant { + +} diff --git a/src/main/java/com/xmomen/module/core/web/authenticator/MultiLoginAuthenticator.java b/src/main/java/com/xmomen/module/core/web/authenticator/MultiLoginAuthenticator.java new file mode 100644 index 0000000..c1bb2ef --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/authenticator/MultiLoginAuthenticator.java @@ -0,0 +1,49 @@ +package com.xmomen.module.core.web.authenticator; + +import java.util.Collection; + +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.pam.ModularRealmAuthenticator; +import org.apache.shiro.realm.Realm; + +import com.xmomen.module.core.web.token.MemberUserToken; +import com.xmomen.module.core.web.token.SysUserToken; + +public class MultiLoginAuthenticator extends ModularRealmAuthenticator { + + + @Override + protected AuthenticationInfo doAuthenticate(AuthenticationToken authenticationToken) + throws AuthenticationException { + assertRealmsConfigured(); + //根据不同类型的token找对应的的Realm + String realmKey = ""; + if(authenticationToken instanceof MemberUserToken) { + realmKey = ((MemberUserToken)authenticationToken).getRealmKey(); + } else if(authenticationToken instanceof SysUserToken) { + realmKey = ((SysUserToken)authenticationToken).getRealmKey(); + } + if(StringUtils.isEmpty(realmKey)) { + // 抛异常还是支持multiple Realms + // return doMultiRealmAuthentication(realms, authenticationToken); + throw new AuthenticationException("不支持token:" + authenticationToken.getClass().getName()); + } else { + Realm realm = lookupRealm(realmKey); + return doSingleRealmAuthentication(realm, authenticationToken); + } + } + + protected Realm lookupRealm(String realmName) throws AuthenticationException { + Collection realms = getRealms(); + for(Realm realm: realms) { + // 不是很严格,但是根据是否名字包含就足够 + if(realm.getName().indexOf(realmName) > -1) { + return realm; + } + } + throw new AuthenticationException("找不到对应的的Realm:" + realmName); + } +} diff --git a/src/main/java/com/xmomen/module/core/web/controller/AccountController.java b/src/main/java/com/xmomen/module/core/web/controller/AccountController.java new file mode 100644 index 0000000..3259aa3 --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/controller/AccountController.java @@ -0,0 +1,54 @@ +package com.xmomen.module.core.web.controller; + +import java.util.Set; + +import com.xmomen.module.account.service.UserService; +import com.xmomen.module.core.web.controller.dto.AccountSettingDto; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.subject.Subject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +/** + * Created by Jeng on 2016/1/5. + */ +@RestController +public class AccountController { + + @Autowired + UserService userService; + + /** + * 用户设置 + * @return + */ + @RequestMapping(value = "/account/setting", method = RequestMethod.GET) + public AccountSettingDto accountSetting(){ + AccountSettingDto accountSettingDto = new AccountSettingDto(); + Subject subject = SecurityUtils.getSubject(); + if(subject == null){ + return null; + } + String username = subject.getPrincipal().toString(); + accountSettingDto.setUsername(username); + Set roles = userService.findRoles(username); + return accountSettingDto; + } + + /** + * 用户修改密码 + * @return + */ + @RequestMapping(value = "/account/resetPassword", method = RequestMethod.POST) + public void resetPassword(@RequestParam(value = "current_password") String currentPassword, + @RequestParam(value = "password") String password){ + Subject subject = SecurityUtils.getSubject(); + String username = subject.getPrincipal().toString(); + userService.changePassword(username, currentPassword, password); + } + + +} diff --git a/src/main/java/com/xmomen/module/core/web/controller/CoreController.java b/src/main/java/com/xmomen/module/core/web/controller/CoreController.java new file mode 100644 index 0000000..8cec06f --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/controller/CoreController.java @@ -0,0 +1,84 @@ +package com.xmomen.module.core.web.controller; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +import com.xmomen.module.account.model.CreateUser; +import com.xmomen.module.account.service.UserService; +import com.xmomen.module.user.entity.SysUsers; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.apache.shiro.web.util.WebUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestMapping; + +import com.xmomen.module.core.web.controller.dto.RegisterDto; + +/** + * Created by Jeng on 2016/1/5. + */ +@Controller +public class CoreController { + + private static Logger logger = LoggerFactory.getLogger(CoreController.class); + + @RequestMapping(value = "/") + public String index(){ + return "redirect:/index.html"; + } + + @RequestMapping(value = "/login") + public String login(HttpServletRequest request, Model model){ + if(SecurityUtils.getSubject().isAuthenticated()){ + return "redirect:/"; + } + String exceptionClassName = (String)request.getAttribute("shiroLoginFailure"); + String error = null; + if(UnknownAccountException.class.getName().equals(exceptionClassName)) { + error = "用户名/密码错误"; + } else if(IncorrectCredentialsException.class.getName().equals(exceptionClassName)) { + error = "用户名/密码错误"; + } else if(exceptionClassName != null) { + error = "其他错误:" + exceptionClassName; + } + model.addAttribute("error", error); + return "login"; + } + + @Autowired + UserService userService; + + @RequestMapping(value = "/register") + public String register(@ModelAttribute @Valid RegisterDto registerDto, + BindingResult bindingResult, + HttpServletRequest request, + Model model) { + if (!WebUtils.toHttp(request).getMethod().equalsIgnoreCase("POST")){ + return "register"; + } + if(!bindingResult.hasErrors()){ + CreateUser user = new CreateUser(); + user.setUsername(registerDto.getUsername()); + user.setPassword(registerDto.getPassword()); + SysUsers sysUsers = userService.createUser(user); + if(sysUsers.getId() != null && sysUsers.getId() > 0 ){ + return "login"; + }else{ + logger.error("注册成功后返回的主键为空(或主键等于或小于0)"); + model.addAttribute("error", "注册用户失败"); + return "register"; + } + }else{ + model.addAttribute("error", bindingResult.getFieldError().getDefaultMessage()); + return "register"; + } + } + +} diff --git a/src/main/java/com/xmomen/module/core/web/controller/dto/RegisterDto.java b/src/main/java/com/xmomen/module/core/web/controller/dto/RegisterDto.java new file mode 100644 index 0000000..49db7ca --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/controller/dto/RegisterDto.java @@ -0,0 +1,43 @@ +package com.xmomen.module.core.web.controller.dto; + +import org.hibernate.validator.constraints.Email; +import org.hibernate.validator.constraints.NotBlank; + +import java.io.Serializable; + +/** + * Created by Jeng on 2016/1/6. + */ +public class RegisterDto implements Serializable { + + @NotBlank + private String username; + @Email + private String email; + @NotBlank + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/com/xmomen/module/core/web/exception/DefaultExceptionHandler.java b/src/main/java/com/xmomen/module/core/web/exception/DefaultExceptionHandler.java new file mode 100644 index 0000000..ad6f1d9 --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/exception/DefaultExceptionHandler.java @@ -0,0 +1,45 @@ +package com.xmomen.module.core.web.exception; + +import org.apache.shiro.authz.UnauthorizedException; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.context.request.NativeWebRequest; +import org.springframework.web.servlet.ModelAndView; + +/** + *

User: Zhang Kaitao + *

Date: 14-2-12 + *

Version: 1.0 + */ +@ControllerAdvice +public class DefaultExceptionHandler { + /** + * 没有权限 异常 + *

+ * 后续根据不同的需求定制即可 + */ + @ExceptionHandler({UnauthorizedException.class}) + @ResponseStatus(HttpStatus.UNAUTHORIZED) + public ModelAndView processUnauthenticatedException(NativeWebRequest request, UnauthorizedException e) { + ModelAndView mv = new ModelAndView(); + mv.addObject("exception", e); + mv.setViewName("unauthorized"); + return mv; + } + + /** + * 没有权限 异常 + *

+ * 后续根据不同的需求定制即可 + */ + @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) + public ModelAndView internalServerError500Exception(NativeWebRequest request, UnauthorizedException e) { + ModelAndView mv = new ModelAndView(); + mv.addObject("exception", e); + mv.setViewName("unauthorized"); + return mv; + } + +} diff --git a/src/main/java/com/xmomen/module/core/web/exception/GlobalMappingExceptionResolver.java b/src/main/java/com/xmomen/module/core/web/exception/GlobalMappingExceptionResolver.java new file mode 100644 index 0000000..2ac5c1f --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/exception/GlobalMappingExceptionResolver.java @@ -0,0 +1,53 @@ +package com.xmomen.module.core.web.exception; + +import com.alibaba.fastjson.JSONObject; +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.web.rest.RestError; +import com.xmomen.module.core.web.WebCommonUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Created by Jeng on 2016/1/11. + */ +public class GlobalMappingExceptionResolver extends SimpleMappingExceptionResolver { + + @Override + protected ModelAndView doResolveException(HttpServletRequest request, + HttpServletResponse response, Object handler, Exception ex) { + if (!WebCommonUtils.isJSON(request)) {// 不是ajax请求 + return super.doResolveException(request, response, handler, ex); + } + ModelAndView mv = new ModelAndView(); + //设置ContentType + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + //避免乱码 + response.setCharacterEncoding("UTF-8"); + RestError restError = new RestError(ex, request); + //设置状态码 + int status = HttpStatus.INTERNAL_SERVER_ERROR.value(); + String message = ""; + if(ex instanceof IllegalArgumentException || ex instanceof BusinessException){ + status = HttpStatus.BAD_REQUEST.value(); + message = ex.getMessage(); + }else{ + message = "系统异常,请联系管理员"; + } + response.setStatus(status); + restError.setStatus(status); + restError.setMessage(message); + try { + response.getWriter().write(JSONObject.toJSONString(restError)); + } catch (IOException e) { + e.printStackTrace(); + } + logger.error(ex.getMessage(), ex); + return mv; + } +} diff --git a/src/main/java/com/xmomen/module/core/web/filter/FormAuthenticationFilterExt.java b/src/main/java/com/xmomen/module/core/web/filter/FormAuthenticationFilterExt.java new file mode 100644 index 0000000..7f1559c --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/filter/FormAuthenticationFilterExt.java @@ -0,0 +1,169 @@ +package com.xmomen.module.core.web.filter; + +import com.alibaba.fastjson.JSONObject; +import com.xmomen.module.account.service.UserService; +import com.xmomen.module.core.web.WebCommonUtils; +import com.xmomen.module.core.web.token.SysUserToken; +import com.xmomen.module.user.entity.SysUsers; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.session.Session; +import org.apache.shiro.session.mgt.eis.SessionDAO; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; +import org.apache.shiro.web.util.WebUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; + +import javax.servlet.ServletOutputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Jeng on 2016/1/7. + */ +public class FormAuthenticationFilterExt extends FormAuthenticationFilter { + + @Autowired + UserService userService; + + private static Logger logger = LoggerFactory.getLogger(FormAuthenticationFilterExt.class); + + private void initUserContext(String username, Subject subject){ + SysUsers sysUsers = userService.findByUsername(username); + subject.getSession().setAttribute("user_id", sysUsers.getId()); + } + + private void buildJSONMessage(String message, ServletRequest request, ServletResponse response){ + try { + Map map = new HashMap(); + map.put("code", HttpStatus.UNAUTHORIZED.value()); + map.put("message", message); + map.put("timestamp", new Date()); + HttpServletResponse httpServletResponse = WebUtils.toHttp(response); + httpServletResponse.setCharacterEncoding("UTF-8"); + httpServletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + ServletOutputStream servletOutputStream = httpServletResponse.getOutputStream(); + servletOutputStream.print(JSONObject.toJSONString(map)); + servletOutputStream.flush(); + servletOutputStream.close(); + } catch (IOException e) { + logger.error(e.getMessage(), e.getCause()); + e.printStackTrace(); + } + } + + @Override + protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { + if (isLoginRequest(request, response)) { + if (isLoginSubmission(request, response)) { + if (logger.isTraceEnabled()) { + logger.trace("Login submission detected. Attempting to execute login."); + } + return executeLogin(request, response); + } else { + if (logger.isTraceEnabled()) { + logger.trace("Login page view."); + } + if (!WebCommonUtils.isJSON(request)) {// 不是ajax请求 + //allow them to see the login page ;) + return true; + } else { + buildJSONMessage("Requires authentication", request, response); + } + return false; + } + } else { + if (logger.isTraceEnabled()) { + logger.trace("Attempting to access a path which requires authentication. Forwarding to the " + + "Authentication url [" + getLoginUrl() + "]"); + } + if (!WebCommonUtils.isJSON(request)) {// 不是ajax请求 + saveRequestAndRedirectToLogin(request, response); + } else { + buildJSONMessage("Requires authentication", request, response); + } + return false; + } + } + + /** + * 登录成功处理(兼容自动识别异步请求,json请求及页面请求) + * @param token + * @param subject + * @param request + * @param response + * @return + * @throws Exception + */ + @Override + protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, + ServletRequest request, ServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + String username = (String) subject.getPrincipal(); + initUserContext(username, subject); + if (!WebCommonUtils.isJSON(request)) {// 不是ajax请求 + issueSuccessRedirect(request, response); + } else { + httpServletResponse.setCharacterEncoding("UTF-8"); + PrintWriter out = httpServletResponse.getWriter(); + out.println("{success:true,message:'登入成功'}"); + out.flush(); + out.close(); + } + return false; + } + + /** + * 登录失败处理(兼容自动识别异步请求,json请求及页面请求) + * @param token + * @param e + * @param request + * @param response + * @return + */ + @Override + protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, + ServletRequest request, ServletResponse response) { + if (!WebCommonUtils.isJSON(request)) {// 不是ajax请求 + setFailureAttribute(request, e); + return true; + } + try { + response.setCharacterEncoding("UTF-8"); + PrintWriter out = response.getWriter(); + String message = e.getClass().getSimpleName(); + if ("IncorrectCredentialsException".equals(message)) { + out.println("{success:false,message:'密码错误'}"); + } else if ("UnknownAccountException".equals(message)) { + out.println("{success:false,message:'账号不存在'}"); + } else if ("LockedAccountException".equals(message)) { + out.println("{success:false,message:'账号被锁定'}"); + } else { + out.println("{success:false,message:'未知错误'}"); + } + out.flush(); + out.close(); + } catch (IOException e1) { + logger.error(e1.getMessage(), e1.getCause()); + // TODO Auto-generated catch block + e1.printStackTrace(); + } + return false; + } + + @Override + protected AuthenticationToken createToken(String username, String password, boolean rememberMe, String host) { + return new SysUserToken(username, password, rememberMe, host); + } +} diff --git a/src/main/java/com/xmomen/module/core/web/mgt/WebSecurityManagerExt.java b/src/main/java/com/xmomen/module/core/web/mgt/WebSecurityManagerExt.java new file mode 100644 index 0000000..77fe423 --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/mgt/WebSecurityManagerExt.java @@ -0,0 +1,55 @@ +package com.xmomen.module.core.web.mgt; + +import com.xmomen.module.account.service.UserService; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.service.MemberService; +import com.xmomen.module.user.entity.SysUsers; + +import org.apache.shiro.authc.Authenticator; +import org.apache.shiro.authc.pam.ModularRealmAuthenticator; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.subject.SubjectContext; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * Created by tanxinzheng on 16/7/3. + */ +public class WebSecurityManagerExt extends DefaultWebSecurityManager { + + @Autowired + UserService userService; + + @Autowired + MemberService memberService; + + protected Subject doCreateSubject(SubjectContext context) { + Subject subject = this.getSubjectFactory().createSubject(context); + String username = (String) subject.getPrincipal(); + if(username != null){ + //后端用户数据源 + SysUsers sysUsers = userService.findByUsername(username); + if(sysUsers !=null && sysUsers.getId() != null){ + subject.getSession().setAttribute(AppConstants.SESSION_USER_ID_KEY, sysUsers.getId()); + } else { + CdMember memberQuery = new CdMember(); + memberQuery.setPhoneNumber(username); + //前端用户数据源 + CdMember member = memberService.findMember(memberQuery); + if(member != null && member.getId() != null) { + subject.getSession().setAttribute(AppConstants.SESSION_USER_ID_KEY, member.getId()); + } + } + } + return subject; + } + + @Override + public void setAuthenticator(Authenticator authenticator) throws IllegalArgumentException { + super.setAuthenticator(authenticator); + if (authenticator instanceof ModularRealmAuthenticator) { + ((ModularRealmAuthenticator) authenticator).setRealms(getRealms()); + } + } +} diff --git a/src/main/java/com/xmomen/module/core/web/token/MemberUserToken.java b/src/main/java/com/xmomen/module/core/web/token/MemberUserToken.java new file mode 100644 index 0000000..e527133 --- /dev/null +++ b/src/main/java/com/xmomen/module/core/web/token/MemberUserToken.java @@ -0,0 +1,19 @@ +package com.xmomen.module.core.web.token; + +import org.apache.shiro.authc.UsernamePasswordToken; + +public class MemberUserToken extends UsernamePasswordToken { + + private static final long serialVersionUID = 1L; + + private final String realmKey = "MemberRealm"; + + public MemberUserToken(final String username, final String password, + final boolean rememberMe, final String host) { + super(username, password != null ? password.toCharArray() : null, rememberMe, host); + } + + public String getRealmKey() { + return this.realmKey; + } +} diff --git a/src/main/java/com/xmomen/module/export/model/UploadFileVo.java b/src/main/java/com/xmomen/module/export/model/UploadFileVo.java new file mode 100644 index 0000000..e6d473a --- /dev/null +++ b/src/main/java/com/xmomen/module/export/model/UploadFileVo.java @@ -0,0 +1,203 @@ +package com.xmomen.module.export.model; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.web.multipart.MultipartHttpServletRequest; + + +/** + * 上传下载模型类 + * + * @author 张代浩 + * + */ +public class UploadFileVo { + private String byteField = "attachmentcontent";// 二进制文件内容保存到数据库的对应实体类字段 + private String titleField = "attachmenttitle";// 文件名(标题)保存到数据库的对应实体类字段 + private String basePath = "upload";// 文件保存目录根路径 + private String realPath = "realpath";// 文件保存在硬盘的全路径对应实体字段 + private String extend = "extend";// 扩展名 + private boolean view = false;// 是否是预览 + private boolean rename =true;// 是否重命名 + private String swfpath;// 转换SWF + private String cusPath;// 文件物理路径自定义子目录 + private byte[] content;// 预览或下载时传入的文件二进制内容 + private Object object;// 文件对应实体对象 + private String fileKey;// 上传文件ID + private MultipartHttpServletRequest multipartRequest; + private HttpServletRequest request; + private HttpServletResponse response; + + /** + * @param response + * the response to set + */ + public void setResponse(HttpServletResponse response) { + this.response = response; + } + + public UploadFileVo(HttpServletRequest request, Object object) { + this.multipartRequest = (MultipartHttpServletRequest) request; + this.object = object; + } + + public UploadFileVo(HttpServletRequest request) { + this.multipartRequest = (MultipartHttpServletRequest) request; + + } + + public UploadFileVo(HttpServletRequest request, HttpServletResponse response) { + this.request = request; + this.response = response; + } + + public UploadFileVo() { + + } + + public String getSwfpath() { + return swfpath; + } + + public void setSwfpath(String swfpath) { + this.swfpath = swfpath; + } + + /** + * @return the realPath + */ + public String getRealPath() { + return realPath; + } + + /** + * @param realPath + * the realPath to set + */ + public void setRealPath(String realPath) { + this.realPath = realPath; + } + + /** + * @return the response + */ + public HttpServletResponse getResponse() { + return response; + } + + /** + * @return the request + */ + public HttpServletRequest getRequest() { + return request; + } + + /** + * @param request + * the request to set + */ + public void setRequest(HttpServletRequest request) { + this.request = request; + } + + /** + * @return the multipartRequest + */ + public MultipartHttpServletRequest getMultipartRequest() { + return multipartRequest; + } + + public String get(String name) { + return getMultipartRequest().getParameter(name); + + } + + /** + * @param multipartRequest + * the multipartRequest to set + */ + public void setMultipartRequest(MultipartHttpServletRequest multipartRequest) { + this.multipartRequest = multipartRequest; + } + + public Object getObject() { + return object; + } + + public String getBasePath() { + return basePath; + } + + public void setBasePath(String basePath) { + this.basePath = basePath; + } + + public void setObject(Object object) { + this.object = object; + } + + public String getByteField() { + return byteField; + } + + public void setByteField(String byteField) { + this.byteField = byteField; + } + + public String getTitleField() { + return titleField; + } + + public void setTitleField(String titleField) { + this.titleField = titleField; + } + + public String getCusPath() { + return cusPath; + } + + public void setCusPath(String cusPath) { + this.cusPath = cusPath; + } + + public String getExtend() { + return extend; + } + + public void setExtend(String extend) { + this.extend = extend; + } + + public boolean isView() { + return view; + } + + public void setView(boolean view) { + this.view = view; + } + + public byte[] getContent() { + return content; + } + + public void setContent(byte[] content) { + this.content = content; + } + + public String getFileKey() { + return fileKey; + } + + public void setFileKey(String fileKey) { + this.fileKey = fileKey; + } + public boolean isRename() { + return rename; + } + + public void setRename(boolean rename) { + this.rename = rename; + } + +} diff --git a/src/main/java/com/xmomen/module/export/service/ExportService.java b/src/main/java/com/xmomen/module/export/service/ExportService.java new file mode 100644 index 0000000..768d652 --- /dev/null +++ b/src/main/java/com/xmomen/module/export/service/ExportService.java @@ -0,0 +1,113 @@ +package com.xmomen.module.export.service; + +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.xmomen.module.base.service.ExpressService; +import com.xmomen.module.order.model.OrderModel; +import com.xmomen.module.order.model.OrderQuery; +import com.xmomen.module.order.model.PurchaseModel; +import com.xmomen.module.order.service.PurchaseService; + + +@Service +public class ExportService { + @Autowired + PurchaseService purchaseService; + @Autowired + ExpressService expressService; + /** + * 采购单导出 + * @param templatePath + * @return + */ + public XSSFWorkbook exportPurchaseExcel(String templatePath){ + XSSFWorkbook workbook = new XSSFWorkbook(); + ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); + try { + workbook = new XSSFWorkbook(new FileInputStream(templatePath)); + XSSFSheet sheet = workbook.getSheet("Sheet1"); + Map param = new HashMap(); + param.put("purchaseStatus", 0); + List purchaseModels = purchaseService.getPurchaseList(param); + for(int i=0,size=purchaseModels.size();i takeDeliverys = expressService.getTakeDeliveryList(query); + for(int i=0,size=takeDeliverys.size();i getUserList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "jobId", required = false) Integer jobId, + @RequestParam(value = "upc", required = false) String upc){ + Map param = new HashMap(); + param.put("keyword", keyword); + param.put("jobId", jobId); + param.put("upc",upc); + return (Page) mybatisDao.selectPage(JobOperationLogMapper.JobOperationLogMapperNameSpace + "getJobOperationLogList", param, limit, offset); + } + + /** + * 删除包装操作记录 + * @param id + */ + @RequestMapping(value = "/jobOperationLog/{id}", method = RequestMethod.DELETE) + @Log(actionName = "包装操作记录") + public void deletePlan(@PathVariable(value = "id") Integer id){ + this.jobOperationLogService.delete(id); + } +} diff --git a/src/main/java/com/xmomen/module/job/entity/TbJobOperationLog.java b/src/main/java/com/xmomen/module/job/entity/TbJobOperationLog.java new file mode 100644 index 0000000..4f82d05 --- /dev/null +++ b/src/main/java/com/xmomen/module/job/entity/TbJobOperationLog.java @@ -0,0 +1,130 @@ +package com.xmomen.module.job.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_job_operation_log") +public class TbJobOperationLog extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 工作ID + */ + private Integer jobId; + + /** + * 操作人 + */ + private Integer jobUser; + + /** + * 操作时间 + */ + private Date jobTime; + + /** + * 操作的条码 + */ + private String barCode; + + /** + * 操作的商品条码 + */ + private String itemCode; + + @Column(name = "id") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "job_id") + public Integer getJobId() { + return jobId; + } + + public void setJobId(Integer jobId) { + this.jobId = jobId; + if(jobId == null){ + removeValidField("jobId"); + return; + } + addValidField("jobId"); + } + + @Column(name = "job_user") + public Integer getJobUser() { + return jobUser; + } + + public void setJobUser(Integer jobUser) { + this.jobUser = jobUser; + if(jobUser == null){ + removeValidField("jobUser"); + return; + } + addValidField("jobUser"); + } + + @Column(name = "job_time") + public Date getJobTime() { + return jobTime; + } + + public void setJobTime(Date jobTime) { + this.jobTime = jobTime; + if(jobTime == null){ + removeValidField("jobTime"); + return; + } + addValidField("jobTime"); + } + + @Column(name = "bar_code") + public String getBarCode() { + return barCode; + } + + public void setBarCode(String barCode) { + this.barCode = barCode; + if(barCode == null){ + removeValidField("barCode"); + return; + } + addValidField("barCode"); + } + + @Column(name = "item_code") + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + if(itemCode == null){ + removeValidField("itemCode"); + return; + } + addValidField("itemCode"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/job/mapper/JobOperationLogMapper.java b/src/main/java/com/xmomen/module/job/mapper/JobOperationLogMapper.java new file mode 100644 index 0000000..385bd67 --- /dev/null +++ b/src/main/java/com/xmomen/module/job/mapper/JobOperationLogMapper.java @@ -0,0 +1,6 @@ +package com.xmomen.module.job.mapper; + +public interface JobOperationLogMapper { + public static final String JobOperationLogMapperNameSpace = "com.xmomen.module.job.mapper.JobOperationLogMapper."; + +} diff --git a/src/main/java/com/xmomen/module/job/mapper/PackageTaskMapper.java b/src/main/java/com/xmomen/module/job/mapper/PackageTaskMapper.java new file mode 100644 index 0000000..4678188 --- /dev/null +++ b/src/main/java/com/xmomen/module/job/mapper/PackageTaskMapper.java @@ -0,0 +1,6 @@ +package com.xmomen.module.job.mapper; + +public interface PackageTaskMapper { + public static final String PackageTaskMapperNameSpace = "com.xmomen.module.job.mapper.PackageTaskMapper."; + +} diff --git a/src/main/java/com/xmomen/module/job/mapper/PackageTaskMapper.xml b/src/main/java/com/xmomen/module/job/mapper/PackageTaskMapper.xml new file mode 100644 index 0000000..af9310b --- /dev/null +++ b/src/main/java/com/xmomen/module/job/mapper/PackageTaskMapper.xml @@ -0,0 +1,74 @@ + + + + + + + + update + tb_job + set + job_status = 0 ,job_begin_time = null ,finish_time = null + where + id=#{id} + + + + update + tb_job + set + job_status = 1,finish_time = null + where + id=#{id} + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/job/model/CreatePackageTask.java b/src/main/java/com/xmomen/module/job/model/CreatePackageTask.java new file mode 100644 index 0000000..6d41d1d --- /dev/null +++ b/src/main/java/com/xmomen/module/job/model/CreatePackageTask.java @@ -0,0 +1,152 @@ +package com.xmomen.module.job.model; + +import java.io.Serializable; +import java.util.Date; + +public class CreatePackageTask implements Serializable{ + + /** + * 采购编号 + */ + private String purchaseCode; + + /** + * 采购明细ID + */ + private Integer purchaseId; + + /** + * 1-包装任务,2-装箱任务 + */ + private Integer jobType; + + /** + * 0-未开始,1-包装中,2-包装完成 + */ + private Integer jobStatus; + + /** + * + */ + private Integer jobUser; + + /** + * 任务创建时间 + */ + private Date jobCreateTime; + + /** + * 包装的产品 + */ + private Integer cdItemId; + + /** + * 需要包装的份数 + */ + private Integer countValue; + + /** + * 包装完成的份数 + */ + private Integer finishValue; + + /** + * + */ + private Date finishTime; + + /** + * 任务创建人 + */ + private Integer jobCreateUser; + + public String getPurchaseCode() { + return purchaseCode; + } + + public void setPurchaseCode(String purchaseCode) { + this.purchaseCode = purchaseCode; + } + + public Integer getPurchaseId() { + return purchaseId; + } + + public void setPurchaseId(Integer purchaseId) { + this.purchaseId = purchaseId; + } + + public Integer getJobType() { + return jobType; + } + + public void setJobType(Integer jobType) { + this.jobType = jobType; + } + + public Integer getJobStatus() { + return jobStatus; + } + + public void setJobStatus(Integer jobStatus) { + this.jobStatus = jobStatus; + } + + public Integer getJobUser() { + return jobUser; + } + + public void setJobUser(Integer jobUser) { + this.jobUser = jobUser; + } + + public Date getJobCreateTime() { + return jobCreateTime; + } + + public void setJobCreateTime(Date jobCreateTime) { + this.jobCreateTime = jobCreateTime; + } + + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + } + + public Integer getCountValue() { + return countValue; + } + + public void setCountValue(Integer countValue) { + this.countValue = countValue; + } + + public Integer getFinishValue() { + return finishValue; + } + + public void setFinishValue(Integer finishValue) { + this.finishValue = finishValue; + } + + public Date getFinishTime() { + return finishTime; + } + + public void setFinishTime(Date finishTime) { + this.finishTime = finishTime; + } + + public Integer getJobCreateUser() { + return jobCreateUser; + } + + public void setJobCreateUser(Integer jobCreateUser) { + this.jobCreateUser = jobCreateUser; + } + + +} diff --git a/src/main/java/com/xmomen/module/job/model/JobOperationLogModel.java b/src/main/java/com/xmomen/module/job/model/JobOperationLogModel.java new file mode 100644 index 0000000..4fb48a4 --- /dev/null +++ b/src/main/java/com/xmomen/module/job/model/JobOperationLogModel.java @@ -0,0 +1,42 @@ +package com.xmomen.module.job.model; + +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; + +public @Data class JobOperationLogModel implements Serializable{ + private Integer id; + /** + * 操作的条码 + */ + private String barCode; + /** + * 操作的商品条码 + */ + private String itemCode; + + private String itemName; + + /** + * 采摘人 + */ + private String caizaiUser; + + /** + * 检测人 + */ + private String jianceUser; + + + /** + * 农残率 + */ + private String nongCanLv; + + + /** + * 生产地 + */ + private String yieldly; +} diff --git a/src/main/java/com/xmomen/module/job/model/PackageTaskModel.java b/src/main/java/com/xmomen/module/job/model/PackageTaskModel.java new file mode 100644 index 0000000..77a06ae --- /dev/null +++ b/src/main/java/com/xmomen/module/job/model/PackageTaskModel.java @@ -0,0 +1,291 @@ +package com.xmomen.module.job.model; + +import java.io.Serializable; +import java.util.Date; + +public class PackageTaskModel implements Serializable { + /** + * + */ + private Integer id; + + /** + * 采购编号 + */ + private String purchaseCode; + + /** + * 采购明细ID + */ + private Integer purchaseId; + + /** + * 1-包装任务,2-装箱任务 + */ + private Integer jobType; + + /** + * 0-未开始,1-包装中,2-包装完成 + */ + private Integer jobStatus; + + /** + * + */ + private Integer jobUser; + + /** + * 任务创建时间 + */ + private Date jobCreateTime; + + + /** + * 任务开始时间 + */ + private Date jobBeginTime; + + + /** + * 包装的产品 + */ + private Integer cdItemId; + + /** + * 销售单位 + */ + private String sellUnit; + + /** + * 需要包装的份数 + */ + private Integer countValue; + + /** + * 包装完成的份数 + */ + private Integer finishValue; + + private Integer noFinishValue; + /** + * + */ + private Date finishTime; + + /** + * 任务创建人 + */ + private Integer jobCreateUser; + + private String itemCode; + + private String itemName; + + private String jobUserName; + + private String spec; + + /** + * 采摘人 + */ + private String caizaiUser; + + /** + * 检测人 + */ + private String jianceUser; + + /** + * 农残率 + */ + private String nongCanLv; + + /** + * 生产地 + */ + private String yieldly; + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getJobUserName() { + return jobUserName; + } + + public void setJobUserName(String jobUserName) { + this.jobUserName = jobUserName; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getPurchaseCode() { + return purchaseCode; + } + + public void setPurchaseCode(String purchaseCode) { + this.purchaseCode = purchaseCode; + } + + public Integer getPurchaseId() { + return purchaseId; + } + + public void setPurchaseId(Integer purchaseId) { + this.purchaseId = purchaseId; + } + + public Integer getJobType() { + return jobType; + } + + public void setJobType(Integer jobType) { + this.jobType = jobType; + } + + public Integer getJobStatus() { + return jobStatus; + } + + public void setJobStatus(Integer jobStatus) { + this.jobStatus = jobStatus; + } + + public Integer getJobUser() { + return jobUser; + } + + public void setJobUser(Integer jobUser) { + this.jobUser = jobUser; + } + + public Date getJobCreateTime() { + return jobCreateTime; + } + + public void setJobCreateTime(Date jobCreateTime) { + this.jobCreateTime = jobCreateTime; + } + + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + } + + public Integer getCountValue() { + return countValue; + } + + public void setCountValue(Integer countValue) { + this.countValue = countValue; + } + + public Integer getFinishValue() { + return finishValue; + } + + public void setFinishValue(Integer finishValue) { + this.finishValue = finishValue; + } + + public Date getFinishTime() { + return finishTime; + } + + public void setFinishTime(Date finishTime) { + this.finishTime = finishTime; + } + + public Integer getJobCreateUser() { + return jobCreateUser; + } + + public void setJobCreateUser(Integer jobCreateUser) { + this.jobCreateUser = jobCreateUser; + } + + public Date getJobBeginTime() { + return jobBeginTime; + } + + public void setJobBeginTime(Date jobBeginTime) { + this.jobBeginTime = jobBeginTime; + } + + public Integer getNoFinishValue() { + return noFinishValue; + } + + public void setNoFinishValue(Integer noFinishValue) { + this.noFinishValue = noFinishValue; + } + + public String getSpec() { + return spec; + } + + public void setSpec(String spec) { + this.spec = spec; + } + + public String getCaizaiUser() { + return caizaiUser; + } + + public void setCaizaiUser(String caizaiUser) { + this.caizaiUser = caizaiUser; + } + + public String getJianceUser() { + return jianceUser; + } + + public void setJianceUser(String jianceUser) { + this.jianceUser = jianceUser; + } + + public String getSellUnit() { + return sellUnit; + } + + public void setSellUnit(String sellUnit) { + this.sellUnit = sellUnit; + } + + public String getNongCanLv() { + return nongCanLv; + } + + public void setNongCanLv(String nongCanLv) { + this.nongCanLv = nongCanLv; + } + + public String getYieldly() { + return yieldly; + } + + public void setYieldly(String yieldly) { + this.yieldly = yieldly; + } +} diff --git a/src/main/java/com/xmomen/module/job/model/UpdateJobOperationLog.java b/src/main/java/com/xmomen/module/job/model/UpdateJobOperationLog.java new file mode 100644 index 0000000..ac38bb9 --- /dev/null +++ b/src/main/java/com/xmomen/module/job/model/UpdateJobOperationLog.java @@ -0,0 +1,18 @@ +package com.xmomen.module.job.model; + +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; + +public @Data class UpdateJobOperationLog implements Serializable{ + /** + * 操作的条码 + */ + private String barCode; + /** + * 操作的商品条码 + */ + private String itemCode; + +} diff --git a/src/main/java/com/xmomen/module/job/model/UpdatePackageTask.java b/src/main/java/com/xmomen/module/job/model/UpdatePackageTask.java new file mode 100644 index 0000000..0fa2e13 --- /dev/null +++ b/src/main/java/com/xmomen/module/job/model/UpdatePackageTask.java @@ -0,0 +1,151 @@ +package com.xmomen.module.job.model; + +import java.io.Serializable; +import java.util.Date; + +public class UpdatePackageTask implements Serializable{ + /** + * 采购编号 + */ + private String purchaseCode; + + /** + * 采购明细ID + */ + private Integer purchaseId; + + /** + * 1-包装任务,2-装箱任务 + */ + private Integer jobType; + + /** + * 0-未开始,1-包装中,2-包装完成 + */ + private Integer jobStatus; + + /** + * + */ + private Integer jobUser; + + /** + * 任务创建时间 + */ + private Date jobCreateTime; + + /** + * 包装的产品 + */ + private Integer cdItemId; + + /** + * 需要包装的份数 + */ + private Integer countValue; + + /** + * 包装完成的份数 + */ + private Integer finishValue; + + /** + * + */ + private Date finishTime; + + /** + * 任务创建人 + */ + private Integer jobCreateUser; + + public String getPurchaseCode() { + return purchaseCode; + } + + public void setPurchaseCode(String purchaseCode) { + this.purchaseCode = purchaseCode; + } + + public Integer getPurchaseId() { + return purchaseId; + } + + public void setPurchaseId(Integer purchaseId) { + this.purchaseId = purchaseId; + } + + public Integer getJobType() { + return jobType; + } + + public void setJobType(Integer jobType) { + this.jobType = jobType; + } + + public Integer getJobStatus() { + return jobStatus; + } + + public void setJobStatus(Integer jobStatus) { + this.jobStatus = jobStatus; + } + + public Integer getJobUser() { + return jobUser; + } + + public void setJobUser(Integer jobUser) { + this.jobUser = jobUser; + } + + public Date getJobCreateTime() { + return jobCreateTime; + } + + public void setJobCreateTime(Date jobCreateTime) { + this.jobCreateTime = jobCreateTime; + } + + public Integer getCdItemId() { + return cdItemId; + } + + public void setCdItemId(Integer cdItemId) { + this.cdItemId = cdItemId; + } + + public Integer getCountValue() { + return countValue; + } + + public void setCountValue(Integer countValue) { + this.countValue = countValue; + } + + public Integer getFinishValue() { + return finishValue; + } + + public void setFinishValue(Integer finishValue) { + this.finishValue = finishValue; + } + + public Date getFinishTime() { + return finishTime; + } + + public void setFinishTime(Date finishTime) { + this.finishTime = finishTime; + } + + public Integer getJobCreateUser() { + return jobCreateUser; + } + + public void setJobCreateUser(Integer jobCreateUser) { + this.jobCreateUser = jobCreateUser; + } + + +} diff --git a/src/main/java/com/xmomen/module/job/service/impl/PackageTaskServiceImpl.java b/src/main/java/com/xmomen/module/job/service/impl/PackageTaskServiceImpl.java new file mode 100644 index 0000000..85e0c24 --- /dev/null +++ b/src/main/java/com/xmomen/module/job/service/impl/PackageTaskServiceImpl.java @@ -0,0 +1,91 @@ +package com.xmomen.module.job.service.impl; + +import java.util.Date; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.utils.DateUtils; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.model.UpdateItem; +import com.xmomen.module.job.entity.TbJob; +import com.xmomen.module.job.entity.TbJobOperationLog; +import com.xmomen.module.job.model.CreatePackageTask; +import com.xmomen.module.job.service.PackageTaskService; +import com.xmomen.module.order.entity.TbPurchase; + +@Service +public class PackageTaskServiceImpl implements PackageTaskService { + + @Autowired + MybatisDao mybatisDao; + @Override + public void createPackageTask(CreatePackageTask createPackageTask) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY);//登陆用户 + TbJob packageTask = new TbJob(); + packageTask.setCdItemId(createPackageTask.getCdItemId()); + packageTask.setCountValue(createPackageTask.getCountValue()); + packageTask.setJobCreateUser(userId); + packageTask.setJobType(1); + packageTask.setJobStatus(0); + packageTask.setJobCreateTime(mybatisDao.getSysdate()); + packageTask.setJobUser(createPackageTask.getJobUser()); + packageTask.setPurchaseCode(createPackageTask.getPurchaseCode()); + packageTask.setPurchaseId(createPackageTask.getPurchaseId()); + mybatisDao.save(packageTask); + //更新采购单的明细分配数量 + TbPurchase purchase = mybatisDao.selectByPrimaryKey(TbPurchase.class, createPackageTask.getPurchaseId()); + int distributeValue = purchase.getDistributeValue(); + distributeValue = distributeValue + createPackageTask.getCountValue(); + purchase.setDistributeValue(distributeValue); + mybatisDao.update(purchase); + } + + @Override + public void packageWorking(Integer id, String barCodes) { + String[] barCodeList = barCodes.split(","); + TbJob packageTask = mybatisDao.selectByPrimaryKey(TbJob.class, id); + for(String barCode : barCodeList){ + Date currentTime = mybatisDao.getSysdate(); + Integer finishValue = packageTask.getFinishValue(); + Integer countValue = packageTask.getCountValue(); + Integer currentFinishValue = finishValue + 1; + if(packageTask.getJobBeginTime() == null){ + packageTask.setJobBeginTime(currentTime); + packageTask.setJobStatus(1); + + } + if(countValue.intValue() == currentFinishValue.intValue()){ + packageTask.setFinishTime(currentTime); + packageTask.setJobStatus(2); + } + packageTask.setFinishValue(currentFinishValue); + mybatisDao.update(packageTask); + //添加操作记录 + TbJobOperationLog jobOperationLog = new TbJobOperationLog(); + jobOperationLog.setBarCode(barCode); + jobOperationLog.setItemCode(StringUtils.substring(barCode,0,7)); + jobOperationLog.setJobId(packageTask.getId()); + jobOperationLog.setJobTime(currentTime); + jobOperationLog.setJobUser(packageTask.getJobUser()); + mybatisDao.save(jobOperationLog); + //更新包装数 + } + } + + @Override + public void updatePackageTask(Integer id, UpdateItem updatePackageTask) { + // TODO Auto-generated method stub + + } + + @Override + public void delete(Integer id) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/com/xmomen/module/logger/Log.java b/src/main/java/com/xmomen/module/logger/Log.java new file mode 100644 index 0000000..a69ba8e --- /dev/null +++ b/src/main/java/com/xmomen/module/logger/Log.java @@ -0,0 +1,15 @@ +package com.xmomen.module.logger; + +import java.lang.annotation.*; + +/** + * Created by Jeng on 16/3/20. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD}) +@Documented +public @interface Log { + + /** 要执行的具体操作比如:【添加商品】 **/ + public String actionName() default ""; +} diff --git a/src/main/java/com/xmomen/module/member/controller/MemberAddressController.java b/src/main/java/com/xmomen/module/member/controller/MemberAddressController.java new file mode 100644 index 0000000..0cc6d86 --- /dev/null +++ b/src/main/java/com/xmomen/module/member/controller/MemberAddressController.java @@ -0,0 +1,132 @@ +package com.xmomen.module.member.controller; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.logger.Log; +import com.xmomen.module.member.model.MemberAddressQuery; +import com.xmomen.module.member.model.MemberAddressModel; +import com.xmomen.module.member.service.MemberAddressService; + +import org.apache.commons.io.IOUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.validation.Valid; +import java.io.Serializable; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-3-29 0:27:52 + */ +@RestController +@RequestMapping(value = "/memberAddress") +public class MemberAddressController { + + @Autowired + MemberAddressService memberAddressService; + + /** + * 客户地址列表 + * + * @param limit 每页结果数 + * @param offset 页码 + * @param id 主键 + * @param ids 主键数组 + * @param excludeIds 不包含主键数组 + * @return Page 客户地址领域分页对象 + */ + @RequestMapping(method = RequestMethod.GET) + @Log(actionName = "查询客户地址列表") + public Page getMemberAddressList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) String id, + @RequestParam(value = "ids", required = false) String[] ids, + @RequestParam(value = "cdMemberId", required = false) String cdMemberId, + @RequestParam(value = "excludeIds", required = false) String[] excludeIds) { + MemberAddressQuery memberAddressQuery = new MemberAddressQuery(); + memberAddressQuery.setId(id); + memberAddressQuery.setExcludeIds(excludeIds); + memberAddressQuery.setIds(ids); + memberAddressQuery.setCdMemberId(cdMemberId); + return memberAddressService.getMemberAddressModelPage(limit, offset, memberAddressQuery); + } + + /** + * 查询单个客户地址 + * + * @param id 主键 + * @return MemberAddressModel 客户地址领域对象 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @Log(actionName = "查询客户地址") + public MemberAddressModel getMemberAddressById(@PathVariable(value = "id") String id) { + return memberAddressService.getOneMemberAddressModel(id); + } + + /** + * 新增客户地址 + * + * @param memberAddressModel 新增对象参数 + * @return MemberAddressModel 客户地址领域对象 + */ + @RequestMapping(method = RequestMethod.POST) + @Log(actionName = "新增客户地址") + public MemberAddressModel createMemberAddress(@RequestBody @Valid MemberAddressModel memberAddressModel) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + memberAddressModel.setCdMemberId(userId); + return memberAddressService.createMemberAddress(memberAddressModel); + } + + /** + * 更新客户地址 + * + * @param id 主键 + * @param memberAddressModel 更新对象参数 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新客户地址") + public void updateMemberAddress(@PathVariable(value = "id") String id, + @RequestBody @Valid MemberAddressModel memberAddressModel) { + memberAddressService.updateMemberAddress(memberAddressModel); + } + + /** + * 删除客户地址 + * + * @param id 主键 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除单个客户地址") + public void deleteMemberAddress(@PathVariable(value = "id") String id) { + memberAddressService.deleteMemberAddress(id); + } + + /** + * 删除客户地址 + * + * @param ids 主键 + */ + @RequestMapping(method = RequestMethod.DELETE) + @Log(actionName = "批量删除客户地址") + public void deleteMemberAddresss(@RequestParam(value = "ids") String[] ids) { + memberAddressService.deleteMemberAddress(ids); + } + + +} diff --git a/src/main/java/com/xmomen/module/member/entity/MemberAddress.java b/src/main/java/com/xmomen/module/member/entity/MemberAddress.java new file mode 100644 index 0000000..26934c4 --- /dev/null +++ b/src/main/java/com/xmomen/module/member/entity/MemberAddress.java @@ -0,0 +1,205 @@ +package com.xmomen.module.member.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_member_address") +public class MemberAddress extends BaseMybatisModel { + /** + * + */ + private String id; + + /** + * 客户ID + */ + private Integer cdMemberId; + + /** + * + */ + private Integer province; + + /** + * 城市 + */ + private Integer city; + + /** + * 区域 + */ + private Integer area; + + /** + * 详细地址 + */ + private String address; + + /** + * 完整地址 + */ + private String fullAddress; + + /** + * + */ + private String name; + + /** + * + */ + private String mobile; + + /** + * 是否默认地址 + */ + private Boolean isDefault; + + @Column(name = "id") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "cd_member_id") + public Integer getCdMemberId() { + return cdMemberId; + } + + public void setCdMemberId(Integer cdMemberId) { + this.cdMemberId = cdMemberId; + if(cdMemberId == null){ + removeValidField("cdMemberId"); + return; + } + addValidField("cdMemberId"); + } + + @Column(name = "province") + public Integer getProvince() { + return province; + } + + public void setProvince(Integer province) { + this.province = province; + if(province == null){ + removeValidField("province"); + return; + } + addValidField("province"); + } + + @Column(name = "city") + public Integer getCity() { + return city; + } + + public void setCity(Integer city) { + this.city = city; + if(city == null){ + removeValidField("city"); + return; + } + addValidField("city"); + } + + @Column(name = "area") + public Integer getArea() { + return area; + } + + public void setArea(Integer area) { + this.area = area; + if(area == null){ + removeValidField("area"); + return; + } + addValidField("area"); + } + + @Column(name = "address") + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + if(address == null){ + removeValidField("address"); + return; + } + addValidField("address"); + } + + @Column(name = "full_address") + public String getFullAddress() { + return fullAddress; + } + + public void setFullAddress(String fullAddress) { + this.fullAddress = fullAddress; + if(fullAddress == null){ + removeValidField("fullAddress"); + return; + } + addValidField("fullAddress"); + } + + @Column(name = "name") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + if(name == null){ + removeValidField("name"); + return; + } + addValidField("name"); + } + + @Column(name = "mobile") + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + if(mobile == null){ + removeValidField("mobile"); + return; + } + addValidField("mobile"); + } + + @Column(name = "is_default") + public Boolean getIsDefault() { + return isDefault; + } + + public void setIsDefault(Boolean isDefault) { + this.isDefault = isDefault; + if(isDefault == null){ + removeValidField("isDefault"); + return; + } + addValidField("isDefault"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/member/mapper/MemberAddressMapperExt.java b/src/main/java/com/xmomen/module/member/mapper/MemberAddressMapperExt.java new file mode 100644 index 0000000..9c4a5cc --- /dev/null +++ b/src/main/java/com/xmomen/module/member/mapper/MemberAddressMapperExt.java @@ -0,0 +1,12 @@ +package com.xmomen.module.member.mapper; + +/** + * @author tanxinzheng + * @date 2017-4-10 23:05:39 + * @version 1.0.0 + */ +public interface MemberAddressMapperExt { + + public static final String MemberAddressMapperNameSpace = "com.xmomen.module.member.mapper.MemberAddressMapperExt."; + +} diff --git a/src/main/java/com/xmomen/module/member/model/MemberAddressQuery.java b/src/main/java/com/xmomen/module/member/model/MemberAddressQuery.java new file mode 100644 index 0000000..826ee74 --- /dev/null +++ b/src/main/java/com/xmomen/module/member/model/MemberAddressQuery.java @@ -0,0 +1,30 @@ +package com.xmomen.module.member.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-3-29 0:27:52 + */ +public +@Data +class MemberAddressQuery implements Serializable { + /** + * 主键 + */ + private String id; + /** + * 包含主键集 + */ + private String[] ids; + /** + * 排除主键集 + */ + private String[] excludeIds; + + private String cdMemberId; + +} diff --git a/src/main/java/com/xmomen/module/member/model/MemberAddressUpdate.java b/src/main/java/com/xmomen/module/member/model/MemberAddressUpdate.java new file mode 100644 index 0000000..f9f6e17 --- /dev/null +++ b/src/main/java/com/xmomen/module/member/model/MemberAddressUpdate.java @@ -0,0 +1,46 @@ +package com.xmomen.module.member.model; + +import lombok.Data; +import com.xmomen.module.member.entity.MemberAddress; +import org.springframework.beans.BeanUtils; + + import java.lang.Boolean; + import java.lang.String; + import java.lang.Integer; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @date 2017-4-10 23:05:39 + * @version 1.0.0 + */ +public @Data class MemberAddressUpdate implements Serializable { + + /** */ + private String id; + /** 客户ID */ + private Integer cdMemberId; + /** */ + private Integer province; + /** 城市 */ + private Integer city; + /** 区域 */ + private Integer area; + /** 详细地址 */ + private String address; + /** 完整地址 */ + private String fullAddress; + /** */ + private String name; + /** */ + private String mobile; + /** 是否默认地址 */ + private Boolean isDefault; + + + public MemberAddress getEntity(){ + MemberAddress memberAddress = new MemberAddress(); + BeanUtils.copyProperties(this, memberAddress); + return memberAddress; + } +} diff --git a/src/main/java/com/xmomen/module/member/service/impl/MemberAddressServiceImpl.java b/src/main/java/com/xmomen/module/member/service/impl/MemberAddressServiceImpl.java new file mode 100644 index 0000000..b9c8149 --- /dev/null +++ b/src/main/java/com/xmomen/module/member/service/impl/MemberAddressServiceImpl.java @@ -0,0 +1,231 @@ +package com.xmomen.module.member.service.impl; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.member.entity.MemberAddress; +import com.xmomen.module.member.entity.MemberAddressExample; +import com.xmomen.module.member.mapper.MemberAddressMapperExt; +import com.xmomen.module.member.model.MemberAddressModel; +import com.xmomen.module.member.model.MemberAddressQuery; +import com.xmomen.module.member.service.MemberAddressService; +import org.apache.commons.lang.StringUtils; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-3-29 0:27:52 + */ +@Service +public class MemberAddressServiceImpl implements MemberAddressService { + + @Autowired + MybatisDao mybatisDao; + + /** + * 新增客户地址 + * + * @param memberAddressModel 新增客户地址对象参数 + * @return MemberAddressModel 客户地址领域对象 + */ + @Override + @Transactional + public MemberAddressModel createMemberAddress(MemberAddressModel memberAddressModel) { + MemberAddress memberAddress = createMemberAddress(memberAddressModel.getEntity()); + if (memberAddress != null) { + return getOneMemberAddressModel(memberAddress.getId()); + } + return null; + } + + /** + * 新增客户地址实体对象 + * + * @param memberAddress 新增客户地址实体对象参数 + * @return MemberAddress 客户地址实体对象 + */ + @Override + @Transactional + public MemberAddress createMemberAddress(MemberAddress memberAddress) { + if (StringUtils.trimToNull(memberAddress.getId()) == null) { + memberAddress.setId(StringUtilsExt.getUUID(32)); + } + return mybatisDao.insertByModel(memberAddress); + } + + /** + * 批量新增客户地址 + * + * @param memberAddressModels 新增客户地址对象集合参数 + * @return List 客户地址领域对象集合 + */ + @Override + @Transactional + public List createMemberAddresss(List memberAddressModels) { + List memberAddressModelList = null; + for (MemberAddressModel memberAddressModel : memberAddressModels) { + memberAddressModel = createMemberAddress(memberAddressModel); + if (memberAddressModel != null) { + if (memberAddressModelList == null) { + memberAddressModelList = new ArrayList<>(); + } + memberAddressModelList.add(memberAddressModel); + } + } + return memberAddressModelList; + } + + /** + * 更新客户地址 + * + * @param memberAddressModel 更新客户地址对象参数 + */ + @Override + @Transactional + public void updateMemberAddress(MemberAddressModel memberAddressModel) { + mybatisDao.update(memberAddressModel.getEntity()); + } + + /** + * 更新客户地址实体对象 + * + * @param memberAddress 新增客户地址实体对象参数 + * @return MemberAddress 客户地址实体对象 + */ + @Override + @Transactional + public void updateMemberAddress(MemberAddress memberAddress) { + mybatisDao.update(memberAddress); + } + + /** + * 删除客户地址 + * + * @param ids 主键数组 + */ + @Override + @Transactional + public void deleteMemberAddress(String[] ids) { + MemberAddressExample memberAddressExample = new MemberAddressExample(); + memberAddressExample.createCriteria().andIdIn(Arrays.asList((String[]) ids)); + mybatisDao.deleteByExample(memberAddressExample); + } + + /** + * 删除客户地址 + * + * @param id 主键 + */ + @Override + @Transactional + public void deleteMemberAddress(String id) { + mybatisDao.deleteByPrimaryKey(MemberAddress.class, id); + } + + /** + * 查询客户地址领域分页对象(带参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @param memberAddressQuery 查询参数 + * @return Page 客户地址参数对象 + */ + @Override + public Page getMemberAddressModelPage(int limit, int offset, MemberAddressQuery memberAddressQuery) { + return (Page) mybatisDao.selectPage(MemberAddressMapperExt.MemberAddressMapperNameSpace + "getMemberAddressModel", memberAddressQuery, limit, offset); + } + + /** + * 查询客户地址领域分页对象(无参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 客户地址领域对象 + */ + @Override + public Page getMemberAddressModelPage(int limit, int offset) { + return (Page) mybatisDao.selectPage(MemberAddressMapperExt.MemberAddressMapperNameSpace + "getMemberAddressModel", null, limit, offset); + } + + /** + * 查询客户地址领域集合对象(带参数条件) + * + * @param memberAddressQuery 查询参数对象 + * @return List 客户地址领域集合对象 + */ + @Override + public List getMemberAddressModelList(MemberAddressQuery memberAddressQuery) { + return mybatisDao.getSqlSessionTemplate().selectList(MemberAddressMapperExt.MemberAddressMapperNameSpace + "getMemberAddressModel", memberAddressQuery); + } + + /** + * 查询客户地址领域集合对象(无参数条件) + * + * @return List 客户地址领域集合对象 + */ + @Override + public List getMemberAddressModelList() { + return mybatisDao.getSqlSessionTemplate().selectList(MemberAddressMapperExt.MemberAddressMapperNameSpace + "getMemberAddressModel"); + } + + /** + * 查询客户地址实体对象 + * + * @param id 主键 + * @return MemberAddress 客户地址实体对象 + */ + @Override + public MemberAddress getOneMemberAddress(String id) { + return mybatisDao.selectByPrimaryKey(MemberAddress.class, id); + } + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return MemberAddressModel 客户地址领域对象 + */ + @Override + public MemberAddressModel getOneMemberAddressModel(String id) { + MemberAddressQuery memberAddressQuery = new MemberAddressQuery(); + memberAddressQuery.setId(id); + return mybatisDao.getSqlSessionTemplate().selectOne(MemberAddressMapperExt.MemberAddressMapperNameSpace + "getMemberAddressModel", memberAddressQuery); + } + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * + * @param memberAddressQuery 客户地址查询参数对象 + * @return MemberAddressModel 客户地址领域对象 + */ + @Override + public MemberAddressModel getOneMemberAddressModel(MemberAddressQuery memberAddressQuery) throws TooManyResultsException { + return mybatisDao.getSqlSessionTemplate().selectOne(MemberAddressMapperExt.MemberAddressMapperNameSpace + "getMemberAddressModel", memberAddressQuery); + } + + /** + * 设置默认收货地址 + * + * @param addressId 收货地址 + */ + public void defaultAddress(String addressId) { + MemberAddress memberAddress = this.getOneMemberAddress(addressId); + //将收货地址全部更新为非默认 + mybatisDao.getSqlSessionTemplate().update(MemberAddressMapperExt.MemberAddressMapperNameSpace + "updateAddressByMemberId", memberAddress.getCdMemberId()); + memberAddress.setIsDefault(true); + this.mybatisDao.updateByModel(memberAddress); + } + + @Override + public List getMemberAddressModels(MemberAddressQuery memberAddressQuery) { + return mybatisDao.getSqlSessionTemplate().selectList(MemberAddressMapperExt.MemberAddressMapperNameSpace + "getMemberAddressModel", memberAddressQuery); + } +} diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrder.java b/src/main/java/com/xmomen/module/order/entity/TbOrder.java new file mode 100644 index 0000000..1536fe4 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrder.java @@ -0,0 +1,701 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_order") +public class TbOrder extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 订单编号 + */ + private String orderNo; + + /** + * 1-卡,2-劵,3-常规,4-活动 + */ + private Integer orderType; + + /** + * 1-微信订单,2-商城订单,3-客服下单,4-采摘订单 + */ + private Integer orderSource; + + /** + * 付款方式 + */ + private Integer paymentMode; + + /** + * 附加付款方式 + */ + private Integer otherPaymentMode; + + /** + * 客户代码 + */ + private String memberCode; + + /** + * 订单状态 + */ + private String orderStatus; + + /** + * 交易状态:0-待支付,1-已支付 + */ + private Integer payStatus; + + /** + * 收货人手机 + */ + private String consigneePhone; + + /** + * 收货人姓名 + */ + private String consigneeName; + + /** + * 收货人地址 + */ + private String consigneeAddress; + + /** + * 邮政编码 + */ + private String postcode; + + /** + * 运送方式 1-快递,2-自提 + */ + private Integer transportMode; + + /** + * 订单备注 + */ + private String remark; + + /** + * 折扣金额 + */ + private BigDecimal discountPrice; + + /** + * 订单总金额 + */ + private BigDecimal totalAmount; + + /** + * 订单创建时间 + */ + private Date createTime; + + /** + * 预约时间 + */ + private Date appointmentTime; + + /** + * 订单创建人ID + */ + private Integer createUserId; + + /** + * 发运快递 + */ + private Integer despatchExpressId; + + /** + * 快递员ID + */ + private Integer expressMemberId; + + /** + * 单位ID + */ + private Integer companyId; + + /** + * 客户经理ID + */ + private Integer managerId; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 装箱总箱数 + */ + private Integer totalBoxNum; + + /** + * 快递商提货扫描箱数 + */ + private Integer expressScanBoxNum; + + /** + * 0无下架商品,1有下架商品 + */ + private Integer xiajia; + + /** + * 是否二次配送订单 + */ + private Integer isTwoSend; + + /** + * 二次配送审核时间 + */ + private Date twoSendAuditDate; + + /** + * 二次配送审核人 + */ + private Integer twoSendAuditUserId; + + /** + * 出库时间 + */ + private Date outDate; + + /** + * 确认收货时间 + */ + private Date shouHuoDate; + + /** + * 是否拒绝收货(0-不 1-是) + */ + private Integer isReject; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 更新人 + */ + private Integer updateUserId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "ORDER_NO") + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + if(orderNo == null){ + removeValidField("orderNo"); + return; + } + addValidField("orderNo"); + } + + @Column(name = "ORDER_TYPE") + public Integer getOrderType() { + return orderType; + } + + public void setOrderType(Integer orderType) { + this.orderType = orderType; + if(orderType == null){ + removeValidField("orderType"); + return; + } + addValidField("orderType"); + } + + @Column(name = "ORDER_SOURCE") + public Integer getOrderSource() { + return orderSource; + } + + public void setOrderSource(Integer orderSource) { + this.orderSource = orderSource; + if(orderSource == null){ + removeValidField("orderSource"); + return; + } + addValidField("orderSource"); + } + + @Column(name = "PAYMENT_MODE") + public Integer getPaymentMode() { + return paymentMode; + } + + public void setPaymentMode(Integer paymentMode) { + this.paymentMode = paymentMode; + if(paymentMode == null){ + removeValidField("paymentMode"); + return; + } + addValidField("paymentMode"); + } + + @Column(name = "OTHER_PAYMENT_MODE") + public Integer getOtherPaymentMode() { + return otherPaymentMode; + } + + public void setOtherPaymentMode(Integer otherPaymentMode) { + this.otherPaymentMode = otherPaymentMode; + if(otherPaymentMode == null){ + removeValidField("otherPaymentMode"); + return; + } + addValidField("otherPaymentMode"); + } + + @Column(name = "MEMBER_CODE") + public String getMemberCode() { + return memberCode; + } + + public void setMemberCode(String memberCode) { + this.memberCode = memberCode; + if(memberCode == null){ + removeValidField("memberCode"); + return; + } + addValidField("memberCode"); + } + + @Column(name = "ORDER_STATUS") + public String getOrderStatus() { + return orderStatus; + } + + public void setOrderStatus(String orderStatus) { + this.orderStatus = orderStatus; + if(orderStatus == null){ + removeValidField("orderStatus"); + return; + } + addValidField("orderStatus"); + } + + @Column(name = "PAY_STATUS") + public Integer getPayStatus() { + return payStatus; + } + + public void setPayStatus(Integer payStatus) { + this.payStatus = payStatus; + if(payStatus == null){ + removeValidField("payStatus"); + return; + } + addValidField("payStatus"); + } + + @Column(name = "CONSIGNEE_PHONE") + public String getConsigneePhone() { + return consigneePhone; + } + + public void setConsigneePhone(String consigneePhone) { + this.consigneePhone = consigneePhone; + if(consigneePhone == null){ + removeValidField("consigneePhone"); + return; + } + addValidField("consigneePhone"); + } + + @Column(name = "CONSIGNEE_NAME") + public String getConsigneeName() { + return consigneeName; + } + + public void setConsigneeName(String consigneeName) { + this.consigneeName = consigneeName; + if(consigneeName == null){ + removeValidField("consigneeName"); + return; + } + addValidField("consigneeName"); + } + + @Column(name = "CONSIGNEE_ADDRESS") + public String getConsigneeAddress() { + return consigneeAddress; + } + + public void setConsigneeAddress(String consigneeAddress) { + this.consigneeAddress = consigneeAddress; + if(consigneeAddress == null){ + removeValidField("consigneeAddress"); + return; + } + addValidField("consigneeAddress"); + } + + @Column(name = "POSTCODE") + public String getPostcode() { + return postcode; + } + + public void setPostcode(String postcode) { + this.postcode = postcode; + if(postcode == null){ + removeValidField("postcode"); + return; + } + addValidField("postcode"); + } + + @Column(name = "TRANSPORT_MODE") + public Integer getTransportMode() { + return transportMode; + } + + public void setTransportMode(Integer transportMode) { + this.transportMode = transportMode; + if(transportMode == null){ + removeValidField("transportMode"); + return; + } + addValidField("transportMode"); + } + + @Column(name = "REMARK") + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + if(remark == null){ + removeValidField("remark"); + return; + } + addValidField("remark"); + } + + @Column(name = "DISCOUNT_PRICE") + public BigDecimal getDiscountPrice() { + return discountPrice; + } + + public void setDiscountPrice(BigDecimal discountPrice) { + this.discountPrice = discountPrice; + if(discountPrice == null){ + removeValidField("discountPrice"); + return; + } + addValidField("discountPrice"); + } + + @Column(name = "TOTAL_AMOUNT") + public BigDecimal getTotalAmount() { + return totalAmount; + } + + public void setTotalAmount(BigDecimal totalAmount) { + this.totalAmount = totalAmount; + if(totalAmount == null){ + removeValidField("totalAmount"); + return; + } + addValidField("totalAmount"); + } + + @Column(name = "CREATE_TIME") + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + if(createTime == null){ + removeValidField("createTime"); + return; + } + addValidField("createTime"); + } + + @Column(name = "APPOINTMENT_TIME") + public Date getAppointmentTime() { + return appointmentTime; + } + + public void setAppointmentTime(Date appointmentTime) { + this.appointmentTime = appointmentTime; + if(appointmentTime == null){ + removeValidField("appointmentTime"); + return; + } + addValidField("appointmentTime"); + } + + @Column(name = "CREATE_USER_ID") + public Integer getCreateUserId() { + return createUserId; + } + + public void setCreateUserId(Integer createUserId) { + this.createUserId = createUserId; + if(createUserId == null){ + removeValidField("createUserId"); + return; + } + addValidField("createUserId"); + } + + @Column(name = "DESPATCH_EXPRESS_ID") + public Integer getDespatchExpressId() { + return despatchExpressId; + } + + public void setDespatchExpressId(Integer despatchExpressId) { + this.despatchExpressId = despatchExpressId; + if(despatchExpressId == null){ + removeValidField("despatchExpressId"); + return; + } + addValidField("despatchExpressId"); + } + + @Column(name = "EXPRESS_MEMBER_ID") + public Integer getExpressMemberId() { + return expressMemberId; + } + + public void setExpressMemberId(Integer expressMemberId) { + this.expressMemberId = expressMemberId; + if(expressMemberId == null){ + removeValidField("expressMemberId"); + return; + } + addValidField("expressMemberId"); + } + + @Column(name = "COMPANY_ID") + public Integer getCompanyId() { + return companyId; + } + + public void setCompanyId(Integer companyId) { + this.companyId = companyId; + if(companyId == null){ + removeValidField("companyId"); + return; + } + addValidField("companyId"); + } + + @Column(name = "MANAGER_ID") + public Integer getManagerId() { + return managerId; + } + + public void setManagerId(Integer managerId) { + this.managerId = managerId; + if(managerId == null){ + removeValidField("managerId"); + return; + } + addValidField("managerId"); + } + + @Column(name = "BATCH_NO") + public String getBatchNo() { + return batchNo; + } + + public void setBatchNo(String batchNo) { + this.batchNo = batchNo; + if(batchNo == null){ + removeValidField("batchNo"); + return; + } + addValidField("batchNo"); + } + + @Column(name = "TOTAL_BOX_NUM") + public Integer getTotalBoxNum() { + return totalBoxNum; + } + + public void setTotalBoxNum(Integer totalBoxNum) { + this.totalBoxNum = totalBoxNum; + if(totalBoxNum == null){ + removeValidField("totalBoxNum"); + return; + } + addValidField("totalBoxNum"); + } + + @Column(name = "EXPRESS_SCAN_BOX_NUM") + public Integer getExpressScanBoxNum() { + return expressScanBoxNum; + } + + public void setExpressScanBoxNum(Integer expressScanBoxNum) { + this.expressScanBoxNum = expressScanBoxNum; + if(expressScanBoxNum == null){ + removeValidField("expressScanBoxNum"); + return; + } + addValidField("expressScanBoxNum"); + } + + @Column(name = "XIAJIA") + public Integer getXiajia() { + return xiajia; + } + + public void setXiajia(Integer xiajia) { + this.xiajia = xiajia; + if(xiajia == null){ + removeValidField("xiajia"); + return; + } + addValidField("xiajia"); + } + + @Column(name = "IS_TWO_SEND") + public Integer getIsTwoSend() { + return isTwoSend; + } + + public void setIsTwoSend(Integer isTwoSend) { + this.isTwoSend = isTwoSend; + if(isTwoSend == null){ + removeValidField("isTwoSend"); + return; + } + addValidField("isTwoSend"); + } + + @Column(name = "TWO_SEND_AUDIT_DATE") + public Date getTwoSendAuditDate() { + return twoSendAuditDate; + } + + public void setTwoSendAuditDate(Date twoSendAuditDate) { + this.twoSendAuditDate = twoSendAuditDate; + if(twoSendAuditDate == null){ + removeValidField("twoSendAuditDate"); + return; + } + addValidField("twoSendAuditDate"); + } + + @Column(name = "TWO_SEND_AUDIT_USER_ID") + public Integer getTwoSendAuditUserId() { + return twoSendAuditUserId; + } + + public void setTwoSendAuditUserId(Integer twoSendAuditUserId) { + this.twoSendAuditUserId = twoSendAuditUserId; + if(twoSendAuditUserId == null){ + removeValidField("twoSendAuditUserId"); + return; + } + addValidField("twoSendAuditUserId"); + } + + @Column(name = "OUT_DATE") + public Date getOutDate() { + return outDate; + } + + public void setOutDate(Date outDate) { + this.outDate = outDate; + if(outDate == null){ + removeValidField("outDate"); + return; + } + addValidField("outDate"); + } + + @Column(name = "SHOU_HUO_DATE") + public Date getShouHuoDate() { + return shouHuoDate; + } + + public void setShouHuoDate(Date shouHuoDate) { + this.shouHuoDate = shouHuoDate; + if(shouHuoDate == null){ + removeValidField("shouHuoDate"); + return; + } + addValidField("shouHuoDate"); + } + + @Column(name = "IS_REJECT") + public Integer getIsReject() { + return isReject; + } + + public void setIsReject(Integer isReject) { + this.isReject = isReject; + if(isReject == null){ + removeValidField("isReject"); + return; + } + addValidField("isReject"); + } + + @Column(name = "UPDATE_DATE") + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + if(updateDate == null){ + removeValidField("updateDate"); + return; + } + addValidField("updateDate"); + } + + @Column(name = "UPDATE_USER_ID") + public Integer getUpdateUserId() { + return updateUserId; + } + + public void setUpdateUserId(Integer updateUserId) { + this.updateUserId = updateUserId; + if(updateUserId == null){ + removeValidField("updateUserId"); + return; + } + addValidField("updateUserId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrderExample.java b/src/main/java/com/xmomen/module/order/entity/TbOrderExample.java new file mode 100644 index 0000000..3bf4ad2 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrderExample.java @@ -0,0 +1,2453 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TbOrderExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbOrderExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOrderNoIsNull() { + addCriterion("ORDER_NO is null"); + return (Criteria) this; + } + + public Criteria andOrderNoIsNotNull() { + addCriterion("ORDER_NO is not null"); + return (Criteria) this; + } + + public Criteria andOrderNoEqualTo(String value) { + addCriterion("ORDER_NO =", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotEqualTo(String value) { + addCriterion("ORDER_NO <>", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoGreaterThan(String value) { + addCriterion("ORDER_NO >", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoGreaterThanOrEqualTo(String value) { + addCriterion("ORDER_NO >=", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLessThan(String value) { + addCriterion("ORDER_NO <", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLessThanOrEqualTo(String value) { + addCriterion("ORDER_NO <=", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLike(String value) { + addCriterion("ORDER_NO like", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotLike(String value) { + addCriterion("ORDER_NO not like", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoIn(List values) { + addCriterion("ORDER_NO in", values, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotIn(List values) { + addCriterion("ORDER_NO not in", values, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoBetween(String value1, String value2) { + addCriterion("ORDER_NO between", value1, value2, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotBetween(String value1, String value2) { + addCriterion("ORDER_NO not between", value1, value2, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderTypeIsNull() { + addCriterion("ORDER_TYPE is null"); + return (Criteria) this; + } + + public Criteria andOrderTypeIsNotNull() { + addCriterion("ORDER_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andOrderTypeEqualTo(Integer value) { + addCriterion("ORDER_TYPE =", value, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeNotEqualTo(Integer value) { + addCriterion("ORDER_TYPE <>", value, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeGreaterThan(Integer value) { + addCriterion("ORDER_TYPE >", value, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("ORDER_TYPE >=", value, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeLessThan(Integer value) { + addCriterion("ORDER_TYPE <", value, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeLessThanOrEqualTo(Integer value) { + addCriterion("ORDER_TYPE <=", value, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeIn(List values) { + addCriterion("ORDER_TYPE in", values, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeNotIn(List values) { + addCriterion("ORDER_TYPE not in", values, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeBetween(Integer value1, Integer value2) { + addCriterion("ORDER_TYPE between", value1, value2, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderTypeNotBetween(Integer value1, Integer value2) { + addCriterion("ORDER_TYPE not between", value1, value2, "orderType"); + return (Criteria) this; + } + + public Criteria andOrderSourceIsNull() { + addCriterion("ORDER_SOURCE is null"); + return (Criteria) this; + } + + public Criteria andOrderSourceIsNotNull() { + addCriterion("ORDER_SOURCE is not null"); + return (Criteria) this; + } + + public Criteria andOrderSourceEqualTo(Integer value) { + addCriterion("ORDER_SOURCE =", value, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceNotEqualTo(Integer value) { + addCriterion("ORDER_SOURCE <>", value, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceGreaterThan(Integer value) { + addCriterion("ORDER_SOURCE >", value, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceGreaterThanOrEqualTo(Integer value) { + addCriterion("ORDER_SOURCE >=", value, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceLessThan(Integer value) { + addCriterion("ORDER_SOURCE <", value, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceLessThanOrEqualTo(Integer value) { + addCriterion("ORDER_SOURCE <=", value, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceIn(List values) { + addCriterion("ORDER_SOURCE in", values, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceNotIn(List values) { + addCriterion("ORDER_SOURCE not in", values, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceBetween(Integer value1, Integer value2) { + addCriterion("ORDER_SOURCE between", value1, value2, "orderSource"); + return (Criteria) this; + } + + public Criteria andOrderSourceNotBetween(Integer value1, Integer value2) { + addCriterion("ORDER_SOURCE not between", value1, value2, "orderSource"); + return (Criteria) this; + } + + public Criteria andPaymentModeIsNull() { + addCriterion("PAYMENT_MODE is null"); + return (Criteria) this; + } + + public Criteria andPaymentModeIsNotNull() { + addCriterion("PAYMENT_MODE is not null"); + return (Criteria) this; + } + + public Criteria andPaymentModeEqualTo(Integer value) { + addCriterion("PAYMENT_MODE =", value, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeNotEqualTo(Integer value) { + addCriterion("PAYMENT_MODE <>", value, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeGreaterThan(Integer value) { + addCriterion("PAYMENT_MODE >", value, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeGreaterThanOrEqualTo(Integer value) { + addCriterion("PAYMENT_MODE >=", value, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeLessThan(Integer value) { + addCriterion("PAYMENT_MODE <", value, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeLessThanOrEqualTo(Integer value) { + addCriterion("PAYMENT_MODE <=", value, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeIn(List values) { + addCriterion("PAYMENT_MODE in", values, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeNotIn(List values) { + addCriterion("PAYMENT_MODE not in", values, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeBetween(Integer value1, Integer value2) { + addCriterion("PAYMENT_MODE between", value1, value2, "paymentMode"); + return (Criteria) this; + } + + public Criteria andPaymentModeNotBetween(Integer value1, Integer value2) { + addCriterion("PAYMENT_MODE not between", value1, value2, "paymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeIsNull() { + addCriterion("OTHER_PAYMENT_MODE is null"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeIsNotNull() { + addCriterion("OTHER_PAYMENT_MODE is not null"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeEqualTo(Integer value) { + addCriterion("OTHER_PAYMENT_MODE =", value, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeNotEqualTo(Integer value) { + addCriterion("OTHER_PAYMENT_MODE <>", value, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeGreaterThan(Integer value) { + addCriterion("OTHER_PAYMENT_MODE >", value, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeGreaterThanOrEqualTo(Integer value) { + addCriterion("OTHER_PAYMENT_MODE >=", value, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeLessThan(Integer value) { + addCriterion("OTHER_PAYMENT_MODE <", value, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeLessThanOrEqualTo(Integer value) { + addCriterion("OTHER_PAYMENT_MODE <=", value, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeIn(List values) { + addCriterion("OTHER_PAYMENT_MODE in", values, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeNotIn(List values) { + addCriterion("OTHER_PAYMENT_MODE not in", values, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeBetween(Integer value1, Integer value2) { + addCriterion("OTHER_PAYMENT_MODE between", value1, value2, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andOtherPaymentModeNotBetween(Integer value1, Integer value2) { + addCriterion("OTHER_PAYMENT_MODE not between", value1, value2, "otherPaymentMode"); + return (Criteria) this; + } + + public Criteria andMemberCodeIsNull() { + addCriterion("MEMBER_CODE is null"); + return (Criteria) this; + } + + public Criteria andMemberCodeIsNotNull() { + addCriterion("MEMBER_CODE is not null"); + return (Criteria) this; + } + + public Criteria andMemberCodeEqualTo(String value) { + addCriterion("MEMBER_CODE =", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeNotEqualTo(String value) { + addCriterion("MEMBER_CODE <>", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeGreaterThan(String value) { + addCriterion("MEMBER_CODE >", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeGreaterThanOrEqualTo(String value) { + addCriterion("MEMBER_CODE >=", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeLessThan(String value) { + addCriterion("MEMBER_CODE <", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeLessThanOrEqualTo(String value) { + addCriterion("MEMBER_CODE <=", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeLike(String value) { + addCriterion("MEMBER_CODE like", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeNotLike(String value) { + addCriterion("MEMBER_CODE not like", value, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeIn(List values) { + addCriterion("MEMBER_CODE in", values, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeNotIn(List values) { + addCriterion("MEMBER_CODE not in", values, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeBetween(String value1, String value2) { + addCriterion("MEMBER_CODE between", value1, value2, "memberCode"); + return (Criteria) this; + } + + public Criteria andMemberCodeNotBetween(String value1, String value2) { + addCriterion("MEMBER_CODE not between", value1, value2, "memberCode"); + return (Criteria) this; + } + + public Criteria andOrderStatusIsNull() { + addCriterion("ORDER_STATUS is null"); + return (Criteria) this; + } + + public Criteria andOrderStatusIsNotNull() { + addCriterion("ORDER_STATUS is not null"); + return (Criteria) this; + } + + public Criteria andOrderStatusEqualTo(String value) { + addCriterion("ORDER_STATUS =", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusNotEqualTo(String value) { + addCriterion("ORDER_STATUS <>", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusGreaterThan(String value) { + addCriterion("ORDER_STATUS >", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusGreaterThanOrEqualTo(String value) { + addCriterion("ORDER_STATUS >=", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusLessThan(String value) { + addCriterion("ORDER_STATUS <", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusLessThanOrEqualTo(String value) { + addCriterion("ORDER_STATUS <=", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusLike(String value) { + addCriterion("ORDER_STATUS like", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusNotLike(String value) { + addCriterion("ORDER_STATUS not like", value, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusIn(List values) { + addCriterion("ORDER_STATUS in", values, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusNotIn(List values) { + addCriterion("ORDER_STATUS not in", values, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusBetween(String value1, String value2) { + addCriterion("ORDER_STATUS between", value1, value2, "orderStatus"); + return (Criteria) this; + } + + public Criteria andOrderStatusNotBetween(String value1, String value2) { + addCriterion("ORDER_STATUS not between", value1, value2, "orderStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusIsNull() { + addCriterion("PAY_STATUS is null"); + return (Criteria) this; + } + + public Criteria andPayStatusIsNotNull() { + addCriterion("PAY_STATUS is not null"); + return (Criteria) this; + } + + public Criteria andPayStatusEqualTo(Integer value) { + addCriterion("PAY_STATUS =", value, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusNotEqualTo(Integer value) { + addCriterion("PAY_STATUS <>", value, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusGreaterThan(Integer value) { + addCriterion("PAY_STATUS >", value, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("PAY_STATUS >=", value, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusLessThan(Integer value) { + addCriterion("PAY_STATUS <", value, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusLessThanOrEqualTo(Integer value) { + addCriterion("PAY_STATUS <=", value, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusIn(List values) { + addCriterion("PAY_STATUS in", values, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusNotIn(List values) { + addCriterion("PAY_STATUS not in", values, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusBetween(Integer value1, Integer value2) { + addCriterion("PAY_STATUS between", value1, value2, "payStatus"); + return (Criteria) this; + } + + public Criteria andPayStatusNotBetween(Integer value1, Integer value2) { + addCriterion("PAY_STATUS not between", value1, value2, "payStatus"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneIsNull() { + addCriterion("CONSIGNEE_PHONE is null"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneIsNotNull() { + addCriterion("CONSIGNEE_PHONE is not null"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneEqualTo(String value) { + addCriterion("CONSIGNEE_PHONE =", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneNotEqualTo(String value) { + addCriterion("CONSIGNEE_PHONE <>", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneGreaterThan(String value) { + addCriterion("CONSIGNEE_PHONE >", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneGreaterThanOrEqualTo(String value) { + addCriterion("CONSIGNEE_PHONE >=", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneLessThan(String value) { + addCriterion("CONSIGNEE_PHONE <", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneLessThanOrEqualTo(String value) { + addCriterion("CONSIGNEE_PHONE <=", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneLike(String value) { + addCriterion("CONSIGNEE_PHONE like", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneNotLike(String value) { + addCriterion("CONSIGNEE_PHONE not like", value, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneIn(List values) { + addCriterion("CONSIGNEE_PHONE in", values, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneNotIn(List values) { + addCriterion("CONSIGNEE_PHONE not in", values, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneBetween(String value1, String value2) { + addCriterion("CONSIGNEE_PHONE between", value1, value2, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneePhoneNotBetween(String value1, String value2) { + addCriterion("CONSIGNEE_PHONE not between", value1, value2, "consigneePhone"); + return (Criteria) this; + } + + public Criteria andConsigneeNameIsNull() { + addCriterion("CONSIGNEE_NAME is null"); + return (Criteria) this; + } + + public Criteria andConsigneeNameIsNotNull() { + addCriterion("CONSIGNEE_NAME is not null"); + return (Criteria) this; + } + + public Criteria andConsigneeNameEqualTo(String value) { + addCriterion("CONSIGNEE_NAME =", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameNotEqualTo(String value) { + addCriterion("CONSIGNEE_NAME <>", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameGreaterThan(String value) { + addCriterion("CONSIGNEE_NAME >", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameGreaterThanOrEqualTo(String value) { + addCriterion("CONSIGNEE_NAME >=", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameLessThan(String value) { + addCriterion("CONSIGNEE_NAME <", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameLessThanOrEqualTo(String value) { + addCriterion("CONSIGNEE_NAME <=", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameLike(String value) { + addCriterion("CONSIGNEE_NAME like", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameNotLike(String value) { + addCriterion("CONSIGNEE_NAME not like", value, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameIn(List values) { + addCriterion("CONSIGNEE_NAME in", values, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameNotIn(List values) { + addCriterion("CONSIGNEE_NAME not in", values, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameBetween(String value1, String value2) { + addCriterion("CONSIGNEE_NAME between", value1, value2, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeNameNotBetween(String value1, String value2) { + addCriterion("CONSIGNEE_NAME not between", value1, value2, "consigneeName"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressIsNull() { + addCriterion("CONSIGNEE_ADDRESS is null"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressIsNotNull() { + addCriterion("CONSIGNEE_ADDRESS is not null"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressEqualTo(String value) { + addCriterion("CONSIGNEE_ADDRESS =", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressNotEqualTo(String value) { + addCriterion("CONSIGNEE_ADDRESS <>", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressGreaterThan(String value) { + addCriterion("CONSIGNEE_ADDRESS >", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressGreaterThanOrEqualTo(String value) { + addCriterion("CONSIGNEE_ADDRESS >=", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressLessThan(String value) { + addCriterion("CONSIGNEE_ADDRESS <", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressLessThanOrEqualTo(String value) { + addCriterion("CONSIGNEE_ADDRESS <=", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressLike(String value) { + addCriterion("CONSIGNEE_ADDRESS like", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressNotLike(String value) { + addCriterion("CONSIGNEE_ADDRESS not like", value, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressIn(List values) { + addCriterion("CONSIGNEE_ADDRESS in", values, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressNotIn(List values) { + addCriterion("CONSIGNEE_ADDRESS not in", values, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressBetween(String value1, String value2) { + addCriterion("CONSIGNEE_ADDRESS between", value1, value2, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andConsigneeAddressNotBetween(String value1, String value2) { + addCriterion("CONSIGNEE_ADDRESS not between", value1, value2, "consigneeAddress"); + return (Criteria) this; + } + + public Criteria andPostcodeIsNull() { + addCriterion("POSTCODE is null"); + return (Criteria) this; + } + + public Criteria andPostcodeIsNotNull() { + addCriterion("POSTCODE is not null"); + return (Criteria) this; + } + + public Criteria andPostcodeEqualTo(String value) { + addCriterion("POSTCODE =", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeNotEqualTo(String value) { + addCriterion("POSTCODE <>", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeGreaterThan(String value) { + addCriterion("POSTCODE >", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeGreaterThanOrEqualTo(String value) { + addCriterion("POSTCODE >=", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeLessThan(String value) { + addCriterion("POSTCODE <", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeLessThanOrEqualTo(String value) { + addCriterion("POSTCODE <=", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeLike(String value) { + addCriterion("POSTCODE like", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeNotLike(String value) { + addCriterion("POSTCODE not like", value, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeIn(List values) { + addCriterion("POSTCODE in", values, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeNotIn(List values) { + addCriterion("POSTCODE not in", values, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeBetween(String value1, String value2) { + addCriterion("POSTCODE between", value1, value2, "postcode"); + return (Criteria) this; + } + + public Criteria andPostcodeNotBetween(String value1, String value2) { + addCriterion("POSTCODE not between", value1, value2, "postcode"); + return (Criteria) this; + } + + public Criteria andTransportModeIsNull() { + addCriterion("TRANSPORT_MODE is null"); + return (Criteria) this; + } + + public Criteria andTransportModeIsNotNull() { + addCriterion("TRANSPORT_MODE is not null"); + return (Criteria) this; + } + + public Criteria andTransportModeEqualTo(Integer value) { + addCriterion("TRANSPORT_MODE =", value, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeNotEqualTo(Integer value) { + addCriterion("TRANSPORT_MODE <>", value, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeGreaterThan(Integer value) { + addCriterion("TRANSPORT_MODE >", value, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeGreaterThanOrEqualTo(Integer value) { + addCriterion("TRANSPORT_MODE >=", value, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeLessThan(Integer value) { + addCriterion("TRANSPORT_MODE <", value, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeLessThanOrEqualTo(Integer value) { + addCriterion("TRANSPORT_MODE <=", value, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeIn(List values) { + addCriterion("TRANSPORT_MODE in", values, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeNotIn(List values) { + addCriterion("TRANSPORT_MODE not in", values, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeBetween(Integer value1, Integer value2) { + addCriterion("TRANSPORT_MODE between", value1, value2, "transportMode"); + return (Criteria) this; + } + + public Criteria andTransportModeNotBetween(Integer value1, Integer value2) { + addCriterion("TRANSPORT_MODE not between", value1, value2, "transportMode"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("REMARK is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("REMARK is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("REMARK =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("REMARK <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("REMARK >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("REMARK >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("REMARK <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("REMARK <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("REMARK like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("REMARK not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("REMARK in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("REMARK not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("REMARK between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("REMARK not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andDiscountPriceIsNull() { + addCriterion("DISCOUNT_PRICE is null"); + return (Criteria) this; + } + + public Criteria andDiscountPriceIsNotNull() { + addCriterion("DISCOUNT_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andDiscountPriceEqualTo(BigDecimal value) { + addCriterion("DISCOUNT_PRICE =", value, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceNotEqualTo(BigDecimal value) { + addCriterion("DISCOUNT_PRICE <>", value, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceGreaterThan(BigDecimal value) { + addCriterion("DISCOUNT_PRICE >", value, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("DISCOUNT_PRICE >=", value, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceLessThan(BigDecimal value) { + addCriterion("DISCOUNT_PRICE <", value, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("DISCOUNT_PRICE <=", value, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceIn(List values) { + addCriterion("DISCOUNT_PRICE in", values, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceNotIn(List values) { + addCriterion("DISCOUNT_PRICE not in", values, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("DISCOUNT_PRICE between", value1, value2, "discountPrice"); + return (Criteria) this; + } + + public Criteria andDiscountPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("DISCOUNT_PRICE not between", value1, value2, "discountPrice"); + return (Criteria) this; + } + + public Criteria andTotalAmountIsNull() { + addCriterion("TOTAL_AMOUNT is null"); + return (Criteria) this; + } + + public Criteria andTotalAmountIsNotNull() { + addCriterion("TOTAL_AMOUNT is not null"); + return (Criteria) this; + } + + public Criteria andTotalAmountEqualTo(BigDecimal value) { + addCriterion("TOTAL_AMOUNT =", value, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountNotEqualTo(BigDecimal value) { + addCriterion("TOTAL_AMOUNT <>", value, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountGreaterThan(BigDecimal value) { + addCriterion("TOTAL_AMOUNT >", value, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("TOTAL_AMOUNT >=", value, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountLessThan(BigDecimal value) { + addCriterion("TOTAL_AMOUNT <", value, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("TOTAL_AMOUNT <=", value, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountIn(List values) { + addCriterion("TOTAL_AMOUNT in", values, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountNotIn(List values) { + addCriterion("TOTAL_AMOUNT not in", values, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("TOTAL_AMOUNT between", value1, value2, "totalAmount"); + return (Criteria) this; + } + + public Criteria andTotalAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("TOTAL_AMOUNT not between", value1, value2, "totalAmount"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("CREATE_TIME is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("CREATE_TIME is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("CREATE_TIME =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("CREATE_TIME <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("CREATE_TIME >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("CREATE_TIME >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("CREATE_TIME <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("CREATE_TIME <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("CREATE_TIME in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("CREATE_TIME not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("CREATE_TIME between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("CREATE_TIME not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeIsNull() { + addCriterion("APPOINTMENT_TIME is null"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeIsNotNull() { + addCriterion("APPOINTMENT_TIME is not null"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeEqualTo(Date value) { + addCriterion("APPOINTMENT_TIME =", value, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeNotEqualTo(Date value) { + addCriterion("APPOINTMENT_TIME <>", value, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeGreaterThan(Date value) { + addCriterion("APPOINTMENT_TIME >", value, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeGreaterThanOrEqualTo(Date value) { + addCriterion("APPOINTMENT_TIME >=", value, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeLessThan(Date value) { + addCriterion("APPOINTMENT_TIME <", value, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeLessThanOrEqualTo(Date value) { + addCriterion("APPOINTMENT_TIME <=", value, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeIn(List values) { + addCriterion("APPOINTMENT_TIME in", values, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeNotIn(List values) { + addCriterion("APPOINTMENT_TIME not in", values, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeBetween(Date value1, Date value2) { + addCriterion("APPOINTMENT_TIME between", value1, value2, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andAppointmentTimeNotBetween(Date value1, Date value2) { + addCriterion("APPOINTMENT_TIME not between", value1, value2, "appointmentTime"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIsNull() { + addCriterion("CREATE_USER_ID is null"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIsNotNull() { + addCriterion("CREATE_USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andCreateUserIdEqualTo(Integer value) { + addCriterion("CREATE_USER_ID =", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotEqualTo(Integer value) { + addCriterion("CREATE_USER_ID <>", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdGreaterThan(Integer value) { + addCriterion("CREATE_USER_ID >", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CREATE_USER_ID >=", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdLessThan(Integer value) { + addCriterion("CREATE_USER_ID <", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdLessThanOrEqualTo(Integer value) { + addCriterion("CREATE_USER_ID <=", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIn(List values) { + addCriterion("CREATE_USER_ID in", values, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotIn(List values) { + addCriterion("CREATE_USER_ID not in", values, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdBetween(Integer value1, Integer value2) { + addCriterion("CREATE_USER_ID between", value1, value2, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("CREATE_USER_ID not between", value1, value2, "createUserId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdIsNull() { + addCriterion("DESPATCH_EXPRESS_ID is null"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdIsNotNull() { + addCriterion("DESPATCH_EXPRESS_ID is not null"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdEqualTo(Integer value) { + addCriterion("DESPATCH_EXPRESS_ID =", value, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdNotEqualTo(Integer value) { + addCriterion("DESPATCH_EXPRESS_ID <>", value, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdGreaterThan(Integer value) { + addCriterion("DESPATCH_EXPRESS_ID >", value, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdGreaterThanOrEqualTo(Integer value) { + addCriterion("DESPATCH_EXPRESS_ID >=", value, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdLessThan(Integer value) { + addCriterion("DESPATCH_EXPRESS_ID <", value, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdLessThanOrEqualTo(Integer value) { + addCriterion("DESPATCH_EXPRESS_ID <=", value, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdIn(List values) { + addCriterion("DESPATCH_EXPRESS_ID in", values, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdNotIn(List values) { + addCriterion("DESPATCH_EXPRESS_ID not in", values, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdBetween(Integer value1, Integer value2) { + addCriterion("DESPATCH_EXPRESS_ID between", value1, value2, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andDespatchExpressIdNotBetween(Integer value1, Integer value2) { + addCriterion("DESPATCH_EXPRESS_ID not between", value1, value2, "despatchExpressId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdIsNull() { + addCriterion("EXPRESS_MEMBER_ID is null"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdIsNotNull() { + addCriterion("EXPRESS_MEMBER_ID is not null"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdEqualTo(Integer value) { + addCriterion("EXPRESS_MEMBER_ID =", value, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdNotEqualTo(Integer value) { + addCriterion("EXPRESS_MEMBER_ID <>", value, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdGreaterThan(Integer value) { + addCriterion("EXPRESS_MEMBER_ID >", value, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdGreaterThanOrEqualTo(Integer value) { + addCriterion("EXPRESS_MEMBER_ID >=", value, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdLessThan(Integer value) { + addCriterion("EXPRESS_MEMBER_ID <", value, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdLessThanOrEqualTo(Integer value) { + addCriterion("EXPRESS_MEMBER_ID <=", value, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdIn(List values) { + addCriterion("EXPRESS_MEMBER_ID in", values, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdNotIn(List values) { + addCriterion("EXPRESS_MEMBER_ID not in", values, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdBetween(Integer value1, Integer value2) { + addCriterion("EXPRESS_MEMBER_ID between", value1, value2, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andExpressMemberIdNotBetween(Integer value1, Integer value2) { + addCriterion("EXPRESS_MEMBER_ID not between", value1, value2, "expressMemberId"); + return (Criteria) this; + } + + public Criteria andCompanyIdIsNull() { + addCriterion("COMPANY_ID is null"); + return (Criteria) this; + } + + public Criteria andCompanyIdIsNotNull() { + addCriterion("COMPANY_ID is not null"); + return (Criteria) this; + } + + public Criteria andCompanyIdEqualTo(Integer value) { + addCriterion("COMPANY_ID =", value, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdNotEqualTo(Integer value) { + addCriterion("COMPANY_ID <>", value, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdGreaterThan(Integer value) { + addCriterion("COMPANY_ID >", value, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdGreaterThanOrEqualTo(Integer value) { + addCriterion("COMPANY_ID >=", value, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdLessThan(Integer value) { + addCriterion("COMPANY_ID <", value, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdLessThanOrEqualTo(Integer value) { + addCriterion("COMPANY_ID <=", value, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdIn(List values) { + addCriterion("COMPANY_ID in", values, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdNotIn(List values) { + addCriterion("COMPANY_ID not in", values, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdBetween(Integer value1, Integer value2) { + addCriterion("COMPANY_ID between", value1, value2, "companyId"); + return (Criteria) this; + } + + public Criteria andCompanyIdNotBetween(Integer value1, Integer value2) { + addCriterion("COMPANY_ID not between", value1, value2, "companyId"); + return (Criteria) this; + } + + public Criteria andManagerIdIsNull() { + addCriterion("MANAGER_ID is null"); + return (Criteria) this; + } + + public Criteria andManagerIdIsNotNull() { + addCriterion("MANAGER_ID is not null"); + return (Criteria) this; + } + + public Criteria andManagerIdEqualTo(Integer value) { + addCriterion("MANAGER_ID =", value, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdNotEqualTo(Integer value) { + addCriterion("MANAGER_ID <>", value, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdGreaterThan(Integer value) { + addCriterion("MANAGER_ID >", value, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdGreaterThanOrEqualTo(Integer value) { + addCriterion("MANAGER_ID >=", value, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdLessThan(Integer value) { + addCriterion("MANAGER_ID <", value, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdLessThanOrEqualTo(Integer value) { + addCriterion("MANAGER_ID <=", value, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdIn(List values) { + addCriterion("MANAGER_ID in", values, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdNotIn(List values) { + addCriterion("MANAGER_ID not in", values, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdBetween(Integer value1, Integer value2) { + addCriterion("MANAGER_ID between", value1, value2, "managerId"); + return (Criteria) this; + } + + public Criteria andManagerIdNotBetween(Integer value1, Integer value2) { + addCriterion("MANAGER_ID not between", value1, value2, "managerId"); + return (Criteria) this; + } + + public Criteria andBatchNoIsNull() { + addCriterion("BATCH_NO is null"); + return (Criteria) this; + } + + public Criteria andBatchNoIsNotNull() { + addCriterion("BATCH_NO is not null"); + return (Criteria) this; + } + + public Criteria andBatchNoEqualTo(String value) { + addCriterion("BATCH_NO =", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoNotEqualTo(String value) { + addCriterion("BATCH_NO <>", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoGreaterThan(String value) { + addCriterion("BATCH_NO >", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoGreaterThanOrEqualTo(String value) { + addCriterion("BATCH_NO >=", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoLessThan(String value) { + addCriterion("BATCH_NO <", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoLessThanOrEqualTo(String value) { + addCriterion("BATCH_NO <=", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoLike(String value) { + addCriterion("BATCH_NO like", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoNotLike(String value) { + addCriterion("BATCH_NO not like", value, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoIn(List values) { + addCriterion("BATCH_NO in", values, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoNotIn(List values) { + addCriterion("BATCH_NO not in", values, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoBetween(String value1, String value2) { + addCriterion("BATCH_NO between", value1, value2, "batchNo"); + return (Criteria) this; + } + + public Criteria andBatchNoNotBetween(String value1, String value2) { + addCriterion("BATCH_NO not between", value1, value2, "batchNo"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumIsNull() { + addCriterion("TOTAL_BOX_NUM is null"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumIsNotNull() { + addCriterion("TOTAL_BOX_NUM is not null"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumEqualTo(Integer value) { + addCriterion("TOTAL_BOX_NUM =", value, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumNotEqualTo(Integer value) { + addCriterion("TOTAL_BOX_NUM <>", value, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumGreaterThan(Integer value) { + addCriterion("TOTAL_BOX_NUM >", value, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumGreaterThanOrEqualTo(Integer value) { + addCriterion("TOTAL_BOX_NUM >=", value, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumLessThan(Integer value) { + addCriterion("TOTAL_BOX_NUM <", value, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumLessThanOrEqualTo(Integer value) { + addCriterion("TOTAL_BOX_NUM <=", value, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumIn(List values) { + addCriterion("TOTAL_BOX_NUM in", values, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumNotIn(List values) { + addCriterion("TOTAL_BOX_NUM not in", values, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumBetween(Integer value1, Integer value2) { + addCriterion("TOTAL_BOX_NUM between", value1, value2, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andTotalBoxNumNotBetween(Integer value1, Integer value2) { + addCriterion("TOTAL_BOX_NUM not between", value1, value2, "totalBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumIsNull() { + addCriterion("EXPRESS_SCAN_BOX_NUM is null"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumIsNotNull() { + addCriterion("EXPRESS_SCAN_BOX_NUM is not null"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumEqualTo(Integer value) { + addCriterion("EXPRESS_SCAN_BOX_NUM =", value, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumNotEqualTo(Integer value) { + addCriterion("EXPRESS_SCAN_BOX_NUM <>", value, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumGreaterThan(Integer value) { + addCriterion("EXPRESS_SCAN_BOX_NUM >", value, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumGreaterThanOrEqualTo(Integer value) { + addCriterion("EXPRESS_SCAN_BOX_NUM >=", value, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumLessThan(Integer value) { + addCriterion("EXPRESS_SCAN_BOX_NUM <", value, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumLessThanOrEqualTo(Integer value) { + addCriterion("EXPRESS_SCAN_BOX_NUM <=", value, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumIn(List values) { + addCriterion("EXPRESS_SCAN_BOX_NUM in", values, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumNotIn(List values) { + addCriterion("EXPRESS_SCAN_BOX_NUM not in", values, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumBetween(Integer value1, Integer value2) { + addCriterion("EXPRESS_SCAN_BOX_NUM between", value1, value2, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andExpressScanBoxNumNotBetween(Integer value1, Integer value2) { + addCriterion("EXPRESS_SCAN_BOX_NUM not between", value1, value2, "expressScanBoxNum"); + return (Criteria) this; + } + + public Criteria andXiajiaIsNull() { + addCriterion("XIAJIA is null"); + return (Criteria) this; + } + + public Criteria andXiajiaIsNotNull() { + addCriterion("XIAJIA is not null"); + return (Criteria) this; + } + + public Criteria andXiajiaEqualTo(Integer value) { + addCriterion("XIAJIA =", value, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaNotEqualTo(Integer value) { + addCriterion("XIAJIA <>", value, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaGreaterThan(Integer value) { + addCriterion("XIAJIA >", value, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaGreaterThanOrEqualTo(Integer value) { + addCriterion("XIAJIA >=", value, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaLessThan(Integer value) { + addCriterion("XIAJIA <", value, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaLessThanOrEqualTo(Integer value) { + addCriterion("XIAJIA <=", value, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaIn(List values) { + addCriterion("XIAJIA in", values, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaNotIn(List values) { + addCriterion("XIAJIA not in", values, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaBetween(Integer value1, Integer value2) { + addCriterion("XIAJIA between", value1, value2, "xiajia"); + return (Criteria) this; + } + + public Criteria andXiajiaNotBetween(Integer value1, Integer value2) { + addCriterion("XIAJIA not between", value1, value2, "xiajia"); + return (Criteria) this; + } + + public Criteria andIsTwoSendIsNull() { + addCriterion("IS_TWO_SEND is null"); + return (Criteria) this; + } + + public Criteria andIsTwoSendIsNotNull() { + addCriterion("IS_TWO_SEND is not null"); + return (Criteria) this; + } + + public Criteria andIsTwoSendEqualTo(Integer value) { + addCriterion("IS_TWO_SEND =", value, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendNotEqualTo(Integer value) { + addCriterion("IS_TWO_SEND <>", value, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendGreaterThan(Integer value) { + addCriterion("IS_TWO_SEND >", value, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_TWO_SEND >=", value, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendLessThan(Integer value) { + addCriterion("IS_TWO_SEND <", value, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendLessThanOrEqualTo(Integer value) { + addCriterion("IS_TWO_SEND <=", value, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendIn(List values) { + addCriterion("IS_TWO_SEND in", values, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendNotIn(List values) { + addCriterion("IS_TWO_SEND not in", values, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendBetween(Integer value1, Integer value2) { + addCriterion("IS_TWO_SEND between", value1, value2, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andIsTwoSendNotBetween(Integer value1, Integer value2) { + addCriterion("IS_TWO_SEND not between", value1, value2, "isTwoSend"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateIsNull() { + addCriterion("TWO_SEND_AUDIT_DATE is null"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateIsNotNull() { + addCriterion("TWO_SEND_AUDIT_DATE is not null"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateEqualTo(Date value) { + addCriterion("TWO_SEND_AUDIT_DATE =", value, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateNotEqualTo(Date value) { + addCriterion("TWO_SEND_AUDIT_DATE <>", value, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateGreaterThan(Date value) { + addCriterion("TWO_SEND_AUDIT_DATE >", value, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateGreaterThanOrEqualTo(Date value) { + addCriterion("TWO_SEND_AUDIT_DATE >=", value, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateLessThan(Date value) { + addCriterion("TWO_SEND_AUDIT_DATE <", value, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateLessThanOrEqualTo(Date value) { + addCriterion("TWO_SEND_AUDIT_DATE <=", value, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateIn(List values) { + addCriterion("TWO_SEND_AUDIT_DATE in", values, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateNotIn(List values) { + addCriterion("TWO_SEND_AUDIT_DATE not in", values, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateBetween(Date value1, Date value2) { + addCriterion("TWO_SEND_AUDIT_DATE between", value1, value2, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditDateNotBetween(Date value1, Date value2) { + addCriterion("TWO_SEND_AUDIT_DATE not between", value1, value2, "twoSendAuditDate"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdIsNull() { + addCriterion("TWO_SEND_AUDIT_USER_ID is null"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdIsNotNull() { + addCriterion("TWO_SEND_AUDIT_USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdEqualTo(Integer value) { + addCriterion("TWO_SEND_AUDIT_USER_ID =", value, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdNotEqualTo(Integer value) { + addCriterion("TWO_SEND_AUDIT_USER_ID <>", value, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdGreaterThan(Integer value) { + addCriterion("TWO_SEND_AUDIT_USER_ID >", value, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("TWO_SEND_AUDIT_USER_ID >=", value, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdLessThan(Integer value) { + addCriterion("TWO_SEND_AUDIT_USER_ID <", value, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdLessThanOrEqualTo(Integer value) { + addCriterion("TWO_SEND_AUDIT_USER_ID <=", value, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdIn(List values) { + addCriterion("TWO_SEND_AUDIT_USER_ID in", values, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdNotIn(List values) { + addCriterion("TWO_SEND_AUDIT_USER_ID not in", values, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdBetween(Integer value1, Integer value2) { + addCriterion("TWO_SEND_AUDIT_USER_ID between", value1, value2, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andTwoSendAuditUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("TWO_SEND_AUDIT_USER_ID not between", value1, value2, "twoSendAuditUserId"); + return (Criteria) this; + } + + public Criteria andOutDateIsNull() { + addCriterion("OUT_DATE is null"); + return (Criteria) this; + } + + public Criteria andOutDateIsNotNull() { + addCriterion("OUT_DATE is not null"); + return (Criteria) this; + } + + public Criteria andOutDateEqualTo(Date value) { + addCriterion("OUT_DATE =", value, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateNotEqualTo(Date value) { + addCriterion("OUT_DATE <>", value, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateGreaterThan(Date value) { + addCriterion("OUT_DATE >", value, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateGreaterThanOrEqualTo(Date value) { + addCriterion("OUT_DATE >=", value, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateLessThan(Date value) { + addCriterion("OUT_DATE <", value, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateLessThanOrEqualTo(Date value) { + addCriterion("OUT_DATE <=", value, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateIn(List values) { + addCriterion("OUT_DATE in", values, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateNotIn(List values) { + addCriterion("OUT_DATE not in", values, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateBetween(Date value1, Date value2) { + addCriterion("OUT_DATE between", value1, value2, "outDate"); + return (Criteria) this; + } + + public Criteria andOutDateNotBetween(Date value1, Date value2) { + addCriterion("OUT_DATE not between", value1, value2, "outDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateIsNull() { + addCriterion("SHOU_HUO_DATE is null"); + return (Criteria) this; + } + + public Criteria andShouHuoDateIsNotNull() { + addCriterion("SHOU_HUO_DATE is not null"); + return (Criteria) this; + } + + public Criteria andShouHuoDateEqualTo(Date value) { + addCriterion("SHOU_HUO_DATE =", value, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateNotEqualTo(Date value) { + addCriterion("SHOU_HUO_DATE <>", value, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateGreaterThan(Date value) { + addCriterion("SHOU_HUO_DATE >", value, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateGreaterThanOrEqualTo(Date value) { + addCriterion("SHOU_HUO_DATE >=", value, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateLessThan(Date value) { + addCriterion("SHOU_HUO_DATE <", value, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateLessThanOrEqualTo(Date value) { + addCriterion("SHOU_HUO_DATE <=", value, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateIn(List values) { + addCriterion("SHOU_HUO_DATE in", values, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateNotIn(List values) { + addCriterion("SHOU_HUO_DATE not in", values, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateBetween(Date value1, Date value2) { + addCriterion("SHOU_HUO_DATE between", value1, value2, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andShouHuoDateNotBetween(Date value1, Date value2) { + addCriterion("SHOU_HUO_DATE not between", value1, value2, "shouHuoDate"); + return (Criteria) this; + } + + public Criteria andIsRejectIsNull() { + addCriterion("IS_REJECT is null"); + return (Criteria) this; + } + + public Criteria andIsRejectIsNotNull() { + addCriterion("IS_REJECT is not null"); + return (Criteria) this; + } + + public Criteria andIsRejectEqualTo(Integer value) { + addCriterion("IS_REJECT =", value, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectNotEqualTo(Integer value) { + addCriterion("IS_REJECT <>", value, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectGreaterThan(Integer value) { + addCriterion("IS_REJECT >", value, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectGreaterThanOrEqualTo(Integer value) { + addCriterion("IS_REJECT >=", value, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectLessThan(Integer value) { + addCriterion("IS_REJECT <", value, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectLessThanOrEqualTo(Integer value) { + addCriterion("IS_REJECT <=", value, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectIn(List values) { + addCriterion("IS_REJECT in", values, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectNotIn(List values) { + addCriterion("IS_REJECT not in", values, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectBetween(Integer value1, Integer value2) { + addCriterion("IS_REJECT between", value1, value2, "isReject"); + return (Criteria) this; + } + + public Criteria andIsRejectNotBetween(Integer value1, Integer value2) { + addCriterion("IS_REJECT not between", value1, value2, "isReject"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNull() { + addCriterion("UPDATE_DATE is null"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNotNull() { + addCriterion("UPDATE_DATE is not null"); + return (Criteria) this; + } + + public Criteria andUpdateDateEqualTo(Date value) { + addCriterion("UPDATE_DATE =", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotEqualTo(Date value) { + addCriterion("UPDATE_DATE <>", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThan(Date value) { + addCriterion("UPDATE_DATE >", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThanOrEqualTo(Date value) { + addCriterion("UPDATE_DATE >=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThan(Date value) { + addCriterion("UPDATE_DATE <", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThanOrEqualTo(Date value) { + addCriterion("UPDATE_DATE <=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateIn(List values) { + addCriterion("UPDATE_DATE in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotIn(List values) { + addCriterion("UPDATE_DATE not in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateBetween(Date value1, Date value2) { + addCriterion("UPDATE_DATE between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotBetween(Date value1, Date value2) { + addCriterion("UPDATE_DATE not between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNull() { + addCriterion("UPDATE_USER_ID is null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNotNull() { + addCriterion("UPDATE_USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID =", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID <>", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThan(Integer value) { + addCriterion("UPDATE_USER_ID >", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID >=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThan(Integer value) { + addCriterion("UPDATE_USER_ID <", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThanOrEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID <=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIn(List values) { + addCriterion("UPDATE_USER_ID in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotIn(List values) { + addCriterion("UPDATE_USER_ID not in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdBetween(Integer value1, Integer value2) { + addCriterion("UPDATE_USER_ID between", value1, value2, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("UPDATE_USER_ID not between", value1, value2, "updateUserId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrderItem.java b/src/main/java/com/xmomen/module/order/entity/TbOrderItem.java new file mode 100644 index 0000000..f309900 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrderItem.java @@ -0,0 +1,245 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_order_item") +public class TbOrderItem extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 订单编号 + */ + private String orderNo; + + /** + * + */ + private Integer itemId; + + /** + * 商品编码 + */ + private String itemCode; + + /** + * 商品名称 + */ + private String itemName; + + /** + * 商品单价 + */ + private BigDecimal itemPrice; + + /** + * 商品数量 + */ + private BigDecimal itemQty; + + /** + * 商品单位 + */ + private String itemUnit; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 创建人 + */ + private Integer createUserId; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 更新人 + */ + private Integer updateUserId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "ORDER_NO") + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + if(orderNo == null){ + removeValidField("orderNo"); + return; + } + addValidField("orderNo"); + } + + @Column(name = "ITEM_ID") + public Integer getItemId() { + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + if(itemId == null){ + removeValidField("itemId"); + return; + } + addValidField("itemId"); + } + + @Column(name = "ITEM_CODE") + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + if(itemCode == null){ + removeValidField("itemCode"); + return; + } + addValidField("itemCode"); + } + + @Column(name = "ITEM_NAME") + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + if(itemName == null){ + removeValidField("itemName"); + return; + } + addValidField("itemName"); + } + + @Column(name = "ITEM_PRICE") + public BigDecimal getItemPrice() { + return itemPrice; + } + + public void setItemPrice(BigDecimal itemPrice) { + this.itemPrice = itemPrice; + if(itemPrice == null){ + removeValidField("itemPrice"); + return; + } + addValidField("itemPrice"); + } + + @Column(name = "ITEM_QTY") + public BigDecimal getItemQty() { + return itemQty; + } + + public void setItemQty(BigDecimal itemQty) { + this.itemQty = itemQty; + if(itemQty == null){ + removeValidField("itemQty"); + return; + } + addValidField("itemQty"); + } + + @Column(name = "ITEM_UNIT") + public String getItemUnit() { + return itemUnit; + } + + public void setItemUnit(String itemUnit) { + this.itemUnit = itemUnit; + if(itemUnit == null){ + removeValidField("itemUnit"); + return; + } + addValidField("itemUnit"); + } + + @Column(name = "CREATE_DATE") + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + if(createDate == null){ + removeValidField("createDate"); + return; + } + addValidField("createDate"); + } + + @Column(name = "CREATE_USER_ID") + public Integer getCreateUserId() { + return createUserId; + } + + public void setCreateUserId(Integer createUserId) { + this.createUserId = createUserId; + if(createUserId == null){ + removeValidField("createUserId"); + return; + } + addValidField("createUserId"); + } + + @Column(name = "UPDATE_DATE") + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + if(updateDate == null){ + removeValidField("updateDate"); + return; + } + addValidField("updateDate"); + } + + @Column(name = "UPDATE_USER_ID") + public Integer getUpdateUserId() { + return updateUserId; + } + + public void setUpdateUserId(Integer updateUserId) { + this.updateUserId = updateUserId; + if(updateUserId == null){ + removeValidField("updateUserId"); + return; + } + addValidField("updateUserId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrderItemExample.java b/src/main/java/com/xmomen/module/order/entity/TbOrderItemExample.java new file mode 100644 index 0000000..68a1963 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrderItemExample.java @@ -0,0 +1,963 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TbOrderItemExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbOrderItemExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOrderNoIsNull() { + addCriterion("ORDER_NO is null"); + return (Criteria) this; + } + + public Criteria andOrderNoIsNotNull() { + addCriterion("ORDER_NO is not null"); + return (Criteria) this; + } + + public Criteria andOrderNoEqualTo(String value) { + addCriterion("ORDER_NO =", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotEqualTo(String value) { + addCriterion("ORDER_NO <>", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoGreaterThan(String value) { + addCriterion("ORDER_NO >", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoGreaterThanOrEqualTo(String value) { + addCriterion("ORDER_NO >=", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLessThan(String value) { + addCriterion("ORDER_NO <", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLessThanOrEqualTo(String value) { + addCriterion("ORDER_NO <=", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLike(String value) { + addCriterion("ORDER_NO like", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotLike(String value) { + addCriterion("ORDER_NO not like", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoIn(List values) { + addCriterion("ORDER_NO in", values, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotIn(List values) { + addCriterion("ORDER_NO not in", values, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoBetween(String value1, String value2) { + addCriterion("ORDER_NO between", value1, value2, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotBetween(String value1, String value2) { + addCriterion("ORDER_NO not between", value1, value2, "orderNo"); + return (Criteria) this; + } + + public Criteria andItemIdIsNull() { + addCriterion("ITEM_ID is null"); + return (Criteria) this; + } + + public Criteria andItemIdIsNotNull() { + addCriterion("ITEM_ID is not null"); + return (Criteria) this; + } + + public Criteria andItemIdEqualTo(Integer value) { + addCriterion("ITEM_ID =", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdNotEqualTo(Integer value) { + addCriterion("ITEM_ID <>", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdGreaterThan(Integer value) { + addCriterion("ITEM_ID >", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ITEM_ID >=", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdLessThan(Integer value) { + addCriterion("ITEM_ID <", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdLessThanOrEqualTo(Integer value) { + addCriterion("ITEM_ID <=", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdIn(List values) { + addCriterion("ITEM_ID in", values, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdNotIn(List values) { + addCriterion("ITEM_ID not in", values, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdBetween(Integer value1, Integer value2) { + addCriterion("ITEM_ID between", value1, value2, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdNotBetween(Integer value1, Integer value2) { + addCriterion("ITEM_ID not between", value1, value2, "itemId"); + return (Criteria) this; + } + + public Criteria andItemCodeIsNull() { + addCriterion("ITEM_CODE is null"); + return (Criteria) this; + } + + public Criteria andItemCodeIsNotNull() { + addCriterion("ITEM_CODE is not null"); + return (Criteria) this; + } + + public Criteria andItemCodeEqualTo(String value) { + addCriterion("ITEM_CODE =", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotEqualTo(String value) { + addCriterion("ITEM_CODE <>", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeGreaterThan(String value) { + addCriterion("ITEM_CODE >", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeGreaterThanOrEqualTo(String value) { + addCriterion("ITEM_CODE >=", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLessThan(String value) { + addCriterion("ITEM_CODE <", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLessThanOrEqualTo(String value) { + addCriterion("ITEM_CODE <=", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLike(String value) { + addCriterion("ITEM_CODE like", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotLike(String value) { + addCriterion("ITEM_CODE not like", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeIn(List values) { + addCriterion("ITEM_CODE in", values, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotIn(List values) { + addCriterion("ITEM_CODE not in", values, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeBetween(String value1, String value2) { + addCriterion("ITEM_CODE between", value1, value2, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotBetween(String value1, String value2) { + addCriterion("ITEM_CODE not between", value1, value2, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemNameIsNull() { + addCriterion("ITEM_NAME is null"); + return (Criteria) this; + } + + public Criteria andItemNameIsNotNull() { + addCriterion("ITEM_NAME is not null"); + return (Criteria) this; + } + + public Criteria andItemNameEqualTo(String value) { + addCriterion("ITEM_NAME =", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotEqualTo(String value) { + addCriterion("ITEM_NAME <>", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameGreaterThan(String value) { + addCriterion("ITEM_NAME >", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameGreaterThanOrEqualTo(String value) { + addCriterion("ITEM_NAME >=", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameLessThan(String value) { + addCriterion("ITEM_NAME <", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameLessThanOrEqualTo(String value) { + addCriterion("ITEM_NAME <=", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameLike(String value) { + addCriterion("ITEM_NAME like", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotLike(String value) { + addCriterion("ITEM_NAME not like", value, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameIn(List values) { + addCriterion("ITEM_NAME in", values, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotIn(List values) { + addCriterion("ITEM_NAME not in", values, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameBetween(String value1, String value2) { + addCriterion("ITEM_NAME between", value1, value2, "itemName"); + return (Criteria) this; + } + + public Criteria andItemNameNotBetween(String value1, String value2) { + addCriterion("ITEM_NAME not between", value1, value2, "itemName"); + return (Criteria) this; + } + + public Criteria andItemPriceIsNull() { + addCriterion("ITEM_PRICE is null"); + return (Criteria) this; + } + + public Criteria andItemPriceIsNotNull() { + addCriterion("ITEM_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andItemPriceEqualTo(BigDecimal value) { + addCriterion("ITEM_PRICE =", value, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceNotEqualTo(BigDecimal value) { + addCriterion("ITEM_PRICE <>", value, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceGreaterThan(BigDecimal value) { + addCriterion("ITEM_PRICE >", value, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("ITEM_PRICE >=", value, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceLessThan(BigDecimal value) { + addCriterion("ITEM_PRICE <", value, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("ITEM_PRICE <=", value, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceIn(List values) { + addCriterion("ITEM_PRICE in", values, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceNotIn(List values) { + addCriterion("ITEM_PRICE not in", values, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("ITEM_PRICE between", value1, value2, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("ITEM_PRICE not between", value1, value2, "itemPrice"); + return (Criteria) this; + } + + public Criteria andItemQtyIsNull() { + addCriterion("ITEM_QTY is null"); + return (Criteria) this; + } + + public Criteria andItemQtyIsNotNull() { + addCriterion("ITEM_QTY is not null"); + return (Criteria) this; + } + + public Criteria andItemQtyEqualTo(BigDecimal value) { + addCriterion("ITEM_QTY =", value, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyNotEqualTo(BigDecimal value) { + addCriterion("ITEM_QTY <>", value, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyGreaterThan(BigDecimal value) { + addCriterion("ITEM_QTY >", value, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("ITEM_QTY >=", value, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyLessThan(BigDecimal value) { + addCriterion("ITEM_QTY <", value, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyLessThanOrEqualTo(BigDecimal value) { + addCriterion("ITEM_QTY <=", value, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyIn(List values) { + addCriterion("ITEM_QTY in", values, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyNotIn(List values) { + addCriterion("ITEM_QTY not in", values, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("ITEM_QTY between", value1, value2, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemQtyNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("ITEM_QTY not between", value1, value2, "itemQty"); + return (Criteria) this; + } + + public Criteria andItemUnitIsNull() { + addCriterion("ITEM_UNIT is null"); + return (Criteria) this; + } + + public Criteria andItemUnitIsNotNull() { + addCriterion("ITEM_UNIT is not null"); + return (Criteria) this; + } + + public Criteria andItemUnitEqualTo(String value) { + addCriterion("ITEM_UNIT =", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitNotEqualTo(String value) { + addCriterion("ITEM_UNIT <>", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitGreaterThan(String value) { + addCriterion("ITEM_UNIT >", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitGreaterThanOrEqualTo(String value) { + addCriterion("ITEM_UNIT >=", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitLessThan(String value) { + addCriterion("ITEM_UNIT <", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitLessThanOrEqualTo(String value) { + addCriterion("ITEM_UNIT <=", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitLike(String value) { + addCriterion("ITEM_UNIT like", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitNotLike(String value) { + addCriterion("ITEM_UNIT not like", value, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitIn(List values) { + addCriterion("ITEM_UNIT in", values, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitNotIn(List values) { + addCriterion("ITEM_UNIT not in", values, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitBetween(String value1, String value2) { + addCriterion("ITEM_UNIT between", value1, value2, "itemUnit"); + return (Criteria) this; + } + + public Criteria andItemUnitNotBetween(String value1, String value2) { + addCriterion("ITEM_UNIT not between", value1, value2, "itemUnit"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNull() { + addCriterion("CREATE_DATE is null"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNotNull() { + addCriterion("CREATE_DATE is not null"); + return (Criteria) this; + } + + public Criteria andCreateDateEqualTo(Date value) { + addCriterion("CREATE_DATE =", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotEqualTo(Date value) { + addCriterion("CREATE_DATE <>", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThan(Date value) { + addCriterion("CREATE_DATE >", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThanOrEqualTo(Date value) { + addCriterion("CREATE_DATE >=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThan(Date value) { + addCriterion("CREATE_DATE <", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThanOrEqualTo(Date value) { + addCriterion("CREATE_DATE <=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateIn(List values) { + addCriterion("CREATE_DATE in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotIn(List values) { + addCriterion("CREATE_DATE not in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateBetween(Date value1, Date value2) { + addCriterion("CREATE_DATE between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotBetween(Date value1, Date value2) { + addCriterion("CREATE_DATE not between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIsNull() { + addCriterion("CREATE_USER_ID is null"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIsNotNull() { + addCriterion("CREATE_USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andCreateUserIdEqualTo(Integer value) { + addCriterion("CREATE_USER_ID =", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotEqualTo(Integer value) { + addCriterion("CREATE_USER_ID <>", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdGreaterThan(Integer value) { + addCriterion("CREATE_USER_ID >", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("CREATE_USER_ID >=", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdLessThan(Integer value) { + addCriterion("CREATE_USER_ID <", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdLessThanOrEqualTo(Integer value) { + addCriterion("CREATE_USER_ID <=", value, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdIn(List values) { + addCriterion("CREATE_USER_ID in", values, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotIn(List values) { + addCriterion("CREATE_USER_ID not in", values, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdBetween(Integer value1, Integer value2) { + addCriterion("CREATE_USER_ID between", value1, value2, "createUserId"); + return (Criteria) this; + } + + public Criteria andCreateUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("CREATE_USER_ID not between", value1, value2, "createUserId"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNull() { + addCriterion("UPDATE_DATE is null"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNotNull() { + addCriterion("UPDATE_DATE is not null"); + return (Criteria) this; + } + + public Criteria andUpdateDateEqualTo(Date value) { + addCriterion("UPDATE_DATE =", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotEqualTo(Date value) { + addCriterion("UPDATE_DATE <>", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThan(Date value) { + addCriterion("UPDATE_DATE >", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThanOrEqualTo(Date value) { + addCriterion("UPDATE_DATE >=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThan(Date value) { + addCriterion("UPDATE_DATE <", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThanOrEqualTo(Date value) { + addCriterion("UPDATE_DATE <=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateIn(List values) { + addCriterion("UPDATE_DATE in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotIn(List values) { + addCriterion("UPDATE_DATE not in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateBetween(Date value1, Date value2) { + addCriterion("UPDATE_DATE between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotBetween(Date value1, Date value2) { + addCriterion("UPDATE_DATE not between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNull() { + addCriterion("UPDATE_USER_ID is null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNotNull() { + addCriterion("UPDATE_USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID =", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID <>", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThan(Integer value) { + addCriterion("UPDATE_USER_ID >", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID >=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThan(Integer value) { + addCriterion("UPDATE_USER_ID <", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThanOrEqualTo(Integer value) { + addCriterion("UPDATE_USER_ID <=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIn(List values) { + addCriterion("UPDATE_USER_ID in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotIn(List values) { + addCriterion("UPDATE_USER_ID not in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdBetween(Integer value1, Integer value2) { + addCriterion("UPDATE_USER_ID between", value1, value2, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("UPDATE_USER_ID not between", value1, value2, "updateUserId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrderRef.java b/src/main/java/com/xmomen/module/order/entity/TbOrderRef.java new file mode 100644 index 0000000..fd073eb --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrderRef.java @@ -0,0 +1,91 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_order_ref") +public class TbOrderRef extends BaseMybatisModel { + /** + * 物理主键 + */ + private Integer id; + + /** + * 扩展类型 + */ + private String refType; + + /** + * 扩展值 + */ + private String refValue; + + /** + * 订单编号 + */ + private String orderNo; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "REF_TYPE") + public String getRefType() { + return refType; + } + + public void setRefType(String refType) { + this.refType = refType; + if(refType == null){ + removeValidField("refType"); + return; + } + addValidField("refType"); + } + + @Column(name = "REF_VALUE") + public String getRefValue() { + return refValue; + } + + public void setRefValue(String refValue) { + this.refValue = refValue; + if(refValue == null){ + removeValidField("refValue"); + return; + } + addValidField("refValue"); + } + + @Column(name = "ORDER_NO") + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + if(orderNo == null){ + removeValidField("orderNo"); + return; + } + addValidField("orderNo"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrderRelation.java b/src/main/java/com/xmomen/module/order/entity/TbOrderRelation.java new file mode 100644 index 0000000..ea5765b --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrderRelation.java @@ -0,0 +1,91 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_order_relation") +public class TbOrderRelation extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 扩展类型 + */ + private String refType; + + /** + * 扩展值 + */ + private String refValue; + + /** + * 订单编号 + */ + private String orderNo; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "REF_TYPE") + public String getRefType() { + return refType; + } + + public void setRefType(String refType) { + this.refType = refType; + if(refType == null){ + removeValidField("refType"); + return; + } + addValidField("refType"); + } + + @Column(name = "REF_VALUE") + public String getRefValue() { + return refValue; + } + + public void setRefValue(String refValue) { + this.refValue = refValue; + if(refValue == null){ + removeValidField("refValue"); + return; + } + addValidField("refValue"); + } + + @Column(name = "ORDER_NO") + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + if(orderNo == null){ + removeValidField("orderNo"); + return; + } + addValidField("orderNo"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrderSendLog.java b/src/main/java/com/xmomen/module/order/entity/TbOrderSendLog.java new file mode 100644 index 0000000..4c3950d --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrderSendLog.java @@ -0,0 +1,130 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_order_send_log") +public class TbOrderSendLog extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 订单ID + */ + private Integer orderId; + + /** + * 订单编号 + */ + private String orderNo; + + /** + * 原快递员ID + */ + private Integer oldExpressMemberId; + + /** + * 新快递员 + */ + private Integer newExpressMemberId; + + /** + * 插入时间 + */ + private Date insertDate; + + @Column(name = "id") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "order_id") + public Integer getOrderId() { + return orderId; + } + + public void setOrderId(Integer orderId) { + this.orderId = orderId; + if(orderId == null){ + removeValidField("orderId"); + return; + } + addValidField("orderId"); + } + + @Column(name = "order_no") + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + if(orderNo == null){ + removeValidField("orderNo"); + return; + } + addValidField("orderNo"); + } + + @Column(name = "old_express_member_id") + public Integer getOldExpressMemberId() { + return oldExpressMemberId; + } + + public void setOldExpressMemberId(Integer oldExpressMemberId) { + this.oldExpressMemberId = oldExpressMemberId; + if(oldExpressMemberId == null){ + removeValidField("oldExpressMemberId"); + return; + } + addValidField("oldExpressMemberId"); + } + + @Column(name = "new_express_member_id") + public Integer getNewExpressMemberId() { + return newExpressMemberId; + } + + public void setNewExpressMemberId(Integer newExpressMemberId) { + this.newExpressMemberId = newExpressMemberId; + if(newExpressMemberId == null){ + removeValidField("newExpressMemberId"); + return; + } + addValidField("newExpressMemberId"); + } + + @Column(name = "insert_date") + public Date getInsertDate() { + return insertDate; + } + + public void setInsertDate(Date insertDate) { + this.insertDate = insertDate; + if(insertDate == null){ + removeValidField("insertDate"); + return; + } + addValidField("insertDate"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbOrderSendLogExample.java b/src/main/java/com/xmomen/module/order/entity/TbOrderSendLogExample.java new file mode 100644 index 0000000..10efd31 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbOrderSendLogExample.java @@ -0,0 +1,572 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TbOrderSendLogExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbOrderSendLogExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOrderIdIsNull() { + addCriterion("order_id is null"); + return (Criteria) this; + } + + public Criteria andOrderIdIsNotNull() { + addCriterion("order_id is not null"); + return (Criteria) this; + } + + public Criteria andOrderIdEqualTo(Integer value) { + addCriterion("order_id =", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotEqualTo(Integer value) { + addCriterion("order_id <>", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdGreaterThan(Integer value) { + addCriterion("order_id >", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdGreaterThanOrEqualTo(Integer value) { + addCriterion("order_id >=", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdLessThan(Integer value) { + addCriterion("order_id <", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdLessThanOrEqualTo(Integer value) { + addCriterion("order_id <=", value, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdIn(List values) { + addCriterion("order_id in", values, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotIn(List values) { + addCriterion("order_id not in", values, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdBetween(Integer value1, Integer value2) { + addCriterion("order_id between", value1, value2, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderIdNotBetween(Integer value1, Integer value2) { + addCriterion("order_id not between", value1, value2, "orderId"); + return (Criteria) this; + } + + public Criteria andOrderNoIsNull() { + addCriterion("order_no is null"); + return (Criteria) this; + } + + public Criteria andOrderNoIsNotNull() { + addCriterion("order_no is not null"); + return (Criteria) this; + } + + public Criteria andOrderNoEqualTo(String value) { + addCriterion("order_no =", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotEqualTo(String value) { + addCriterion("order_no <>", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoGreaterThan(String value) { + addCriterion("order_no >", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoGreaterThanOrEqualTo(String value) { + addCriterion("order_no >=", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLessThan(String value) { + addCriterion("order_no <", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLessThanOrEqualTo(String value) { + addCriterion("order_no <=", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoLike(String value) { + addCriterion("order_no like", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotLike(String value) { + addCriterion("order_no not like", value, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoIn(List values) { + addCriterion("order_no in", values, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotIn(List values) { + addCriterion("order_no not in", values, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoBetween(String value1, String value2) { + addCriterion("order_no between", value1, value2, "orderNo"); + return (Criteria) this; + } + + public Criteria andOrderNoNotBetween(String value1, String value2) { + addCriterion("order_no not between", value1, value2, "orderNo"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdIsNull() { + addCriterion("old_express_member_id is null"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdIsNotNull() { + addCriterion("old_express_member_id is not null"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdEqualTo(Integer value) { + addCriterion("old_express_member_id =", value, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdNotEqualTo(Integer value) { + addCriterion("old_express_member_id <>", value, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdGreaterThan(Integer value) { + addCriterion("old_express_member_id >", value, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdGreaterThanOrEqualTo(Integer value) { + addCriterion("old_express_member_id >=", value, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdLessThan(Integer value) { + addCriterion("old_express_member_id <", value, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdLessThanOrEqualTo(Integer value) { + addCriterion("old_express_member_id <=", value, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdIn(List values) { + addCriterion("old_express_member_id in", values, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdNotIn(List values) { + addCriterion("old_express_member_id not in", values, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdBetween(Integer value1, Integer value2) { + addCriterion("old_express_member_id between", value1, value2, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andOldExpressMemberIdNotBetween(Integer value1, Integer value2) { + addCriterion("old_express_member_id not between", value1, value2, "oldExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdIsNull() { + addCriterion("new_express_member_id is null"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdIsNotNull() { + addCriterion("new_express_member_id is not null"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdEqualTo(Integer value) { + addCriterion("new_express_member_id =", value, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdNotEqualTo(Integer value) { + addCriterion("new_express_member_id <>", value, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdGreaterThan(Integer value) { + addCriterion("new_express_member_id >", value, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdGreaterThanOrEqualTo(Integer value) { + addCriterion("new_express_member_id >=", value, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdLessThan(Integer value) { + addCriterion("new_express_member_id <", value, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdLessThanOrEqualTo(Integer value) { + addCriterion("new_express_member_id <=", value, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdIn(List values) { + addCriterion("new_express_member_id in", values, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdNotIn(List values) { + addCriterion("new_express_member_id not in", values, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdBetween(Integer value1, Integer value2) { + addCriterion("new_express_member_id between", value1, value2, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andNewExpressMemberIdNotBetween(Integer value1, Integer value2) { + addCriterion("new_express_member_id not between", value1, value2, "newExpressMemberId"); + return (Criteria) this; + } + + public Criteria andInsertDateIsNull() { + addCriterion("insert_date is null"); + return (Criteria) this; + } + + public Criteria andInsertDateIsNotNull() { + addCriterion("insert_date is not null"); + return (Criteria) this; + } + + public Criteria andInsertDateEqualTo(Date value) { + addCriterion("insert_date =", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotEqualTo(Date value) { + addCriterion("insert_date <>", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateGreaterThan(Date value) { + addCriterion("insert_date >", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateGreaterThanOrEqualTo(Date value) { + addCriterion("insert_date >=", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateLessThan(Date value) { + addCriterion("insert_date <", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateLessThanOrEqualTo(Date value) { + addCriterion("insert_date <=", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateIn(List values) { + addCriterion("insert_date in", values, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotIn(List values) { + addCriterion("insert_date not in", values, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateBetween(Date value1, Date value2) { + addCriterion("insert_date between", value1, value2, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotBetween(Date value1, Date value2) { + addCriterion("insert_date not between", value1, value2, "insertDate"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbPacking.java b/src/main/java/com/xmomen/module/order/entity/TbPacking.java new file mode 100644 index 0000000..86fb1a4 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbPacking.java @@ -0,0 +1,92 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_packing") +public class TbPacking extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 装箱码 + */ + private String packingNo; + + /** + * 装箱时间 + */ + private Date packingTime; + + /** + * 装箱库内状态:0-在库,1-出库 + */ + private Integer packingStatus; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "PACKING_NO") + public String getPackingNo() { + return packingNo; + } + + public void setPackingNo(String packingNo) { + this.packingNo = packingNo; + if(packingNo == null){ + removeValidField("packingNo"); + return; + } + addValidField("packingNo"); + } + + @Column(name = "PACKING_TIME") + public Date getPackingTime() { + return packingTime; + } + + public void setPackingTime(Date packingTime) { + this.packingTime = packingTime; + if(packingTime == null){ + removeValidField("packingTime"); + return; + } + addValidField("packingTime"); + } + + @Column(name = "PACKING_STATUS") + public Integer getPackingStatus() { + return packingStatus; + } + + public void setPackingStatus(Integer packingStatus) { + this.packingStatus = packingStatus; + if(packingStatus == null){ + removeValidField("packingStatus"); + return; + } + addValidField("packingStatus"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbPackingRecord.java b/src/main/java/com/xmomen/module/order/entity/TbPackingRecord.java new file mode 100644 index 0000000..7311d54 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbPackingRecord.java @@ -0,0 +1,111 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_packing_record") +public class TbPackingRecord extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 商品条码 + */ + private String upc; + + /** + * 订单商品ID + */ + private Integer orderItemId; + + /** + * 扫描时间 + */ + private Date scanTime; + + /** + * 装箱ID + */ + private Integer packingId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "UPC") + public String getUpc() { + return upc; + } + + public void setUpc(String upc) { + this.upc = upc; + if(upc == null){ + removeValidField("upc"); + return; + } + addValidField("upc"); + } + + @Column(name = "ORDER_ITEM_ID") + public Integer getOrderItemId() { + return orderItemId; + } + + public void setOrderItemId(Integer orderItemId) { + this.orderItemId = orderItemId; + if(orderItemId == null){ + removeValidField("orderItemId"); + return; + } + addValidField("orderItemId"); + } + + @Column(name = "SCAN_TIME") + public Date getScanTime() { + return scanTime; + } + + public void setScanTime(Date scanTime) { + this.scanTime = scanTime; + if(scanTime == null){ + removeValidField("scanTime"); + return; + } + addValidField("scanTime"); + } + + @Column(name = "PACKING_ID") + public Integer getPackingId() { + return packingId; + } + + public void setPackingId(Integer packingId) { + this.packingId = packingId; + if(packingId == null){ + removeValidField("packingId"); + return; + } + addValidField("packingId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbPurchase.java b/src/main/java/com/xmomen/module/order/entity/TbPurchase.java new file mode 100644 index 0000000..b439f49 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbPurchase.java @@ -0,0 +1,226 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_purchase") +public class TbPurchase extends BaseMybatisModel { + /** + * 主键ID + */ + private Integer id; + + /** + * 采购单编号 + */ + private String purchaseCode; + + /** + * 产品代码 + */ + private String itemCode; + + /** + * 采购总数量 + */ + private BigDecimal total; + + /** + * 创建时间 + */ + private Date createDate; + + /** + * 采购人员ID + */ + private Integer buyerId; + + /** + * 采购总重量 + */ + private BigDecimal totalWeight; + + /** + * 分配数量 + */ + private Integer distributeValue; + + /** + * 已包装数 + */ + private Integer packageValue; + + /** + * 已装箱数 + */ + private Integer packingValue; + + /** + * 采购状态:0-待采购,1-已采购 + */ + private Integer purchaseStatus; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "PURCHASE_CODE") + public String getPurchaseCode() { + return purchaseCode; + } + + public void setPurchaseCode(String purchaseCode) { + this.purchaseCode = purchaseCode; + if(purchaseCode == null){ + removeValidField("purchaseCode"); + return; + } + addValidField("purchaseCode"); + } + + @Column(name = "ITEM_CODE") + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + if(itemCode == null){ + removeValidField("itemCode"); + return; + } + addValidField("itemCode"); + } + + @Column(name = "TOTAL") + public BigDecimal getTotal() { + return total; + } + + public void setTotal(BigDecimal total) { + this.total = total; + if(total == null){ + removeValidField("total"); + return; + } + addValidField("total"); + } + + @Column(name = "CREATE_DATE") + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + if(createDate == null){ + removeValidField("createDate"); + return; + } + addValidField("createDate"); + } + + @Column(name = "BUYER_ID") + public Integer getBuyerId() { + return buyerId; + } + + public void setBuyerId(Integer buyerId) { + this.buyerId = buyerId; + if(buyerId == null){ + removeValidField("buyerId"); + return; + } + addValidField("buyerId"); + } + + @Column(name = "TOTAL_WEIGHT") + public BigDecimal getTotalWeight() { + return totalWeight; + } + + public void setTotalWeight(BigDecimal totalWeight) { + this.totalWeight = totalWeight; + if(totalWeight == null){ + removeValidField("totalWeight"); + return; + } + addValidField("totalWeight"); + } + + @Column(name = "DISTRIBUTE_VALUE") + public Integer getDistributeValue() { + return distributeValue; + } + + public void setDistributeValue(Integer distributeValue) { + this.distributeValue = distributeValue; + if(distributeValue == null){ + removeValidField("distributeValue"); + return; + } + addValidField("distributeValue"); + } + + @Column(name = "PACKAGE_VALUE") + public Integer getPackageValue() { + return packageValue; + } + + public void setPackageValue(Integer packageValue) { + this.packageValue = packageValue; + if(packageValue == null){ + removeValidField("packageValue"); + return; + } + addValidField("packageValue"); + } + + @Column(name = "PACKING_VALUE") + public Integer getPackingValue() { + return packingValue; + } + + public void setPackingValue(Integer packingValue) { + this.packingValue = packingValue; + if(packingValue == null){ + removeValidField("packingValue"); + return; + } + addValidField("packingValue"); + } + + @Column(name = "PURCHASE_STATUS") + public Integer getPurchaseStatus() { + return purchaseStatus; + } + + public void setPurchaseStatus(Integer purchaseStatus) { + this.purchaseStatus = purchaseStatus; + if(purchaseStatus == null){ + removeValidField("purchaseStatus"); + return; + } + addValidField("purchaseStatus"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbPurchaseExample.java b/src/main/java/com/xmomen/module/order/entity/TbPurchaseExample.java new file mode 100644 index 0000000..4f15d2a --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbPurchaseExample.java @@ -0,0 +1,883 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TbPurchaseExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbPurchaseExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeIsNull() { + addCriterion("PURCHASE_CODE is null"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeIsNotNull() { + addCriterion("PURCHASE_CODE is not null"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeEqualTo(String value) { + addCriterion("PURCHASE_CODE =", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeNotEqualTo(String value) { + addCriterion("PURCHASE_CODE <>", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeGreaterThan(String value) { + addCriterion("PURCHASE_CODE >", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeGreaterThanOrEqualTo(String value) { + addCriterion("PURCHASE_CODE >=", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeLessThan(String value) { + addCriterion("PURCHASE_CODE <", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeLessThanOrEqualTo(String value) { + addCriterion("PURCHASE_CODE <=", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeLike(String value) { + addCriterion("PURCHASE_CODE like", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeNotLike(String value) { + addCriterion("PURCHASE_CODE not like", value, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeIn(List values) { + addCriterion("PURCHASE_CODE in", values, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeNotIn(List values) { + addCriterion("PURCHASE_CODE not in", values, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeBetween(String value1, String value2) { + addCriterion("PURCHASE_CODE between", value1, value2, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andPurchaseCodeNotBetween(String value1, String value2) { + addCriterion("PURCHASE_CODE not between", value1, value2, "purchaseCode"); + return (Criteria) this; + } + + public Criteria andItemCodeIsNull() { + addCriterion("ITEM_CODE is null"); + return (Criteria) this; + } + + public Criteria andItemCodeIsNotNull() { + addCriterion("ITEM_CODE is not null"); + return (Criteria) this; + } + + public Criteria andItemCodeEqualTo(String value) { + addCriterion("ITEM_CODE =", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotEqualTo(String value) { + addCriterion("ITEM_CODE <>", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeGreaterThan(String value) { + addCriterion("ITEM_CODE >", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeGreaterThanOrEqualTo(String value) { + addCriterion("ITEM_CODE >=", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLessThan(String value) { + addCriterion("ITEM_CODE <", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLessThanOrEqualTo(String value) { + addCriterion("ITEM_CODE <=", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeLike(String value) { + addCriterion("ITEM_CODE like", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotLike(String value) { + addCriterion("ITEM_CODE not like", value, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeIn(List values) { + addCriterion("ITEM_CODE in", values, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotIn(List values) { + addCriterion("ITEM_CODE not in", values, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeBetween(String value1, String value2) { + addCriterion("ITEM_CODE between", value1, value2, "itemCode"); + return (Criteria) this; + } + + public Criteria andItemCodeNotBetween(String value1, String value2) { + addCriterion("ITEM_CODE not between", value1, value2, "itemCode"); + return (Criteria) this; + } + + public Criteria andTotalIsNull() { + addCriterion("TOTAL is null"); + return (Criteria) this; + } + + public Criteria andTotalIsNotNull() { + addCriterion("TOTAL is not null"); + return (Criteria) this; + } + + public Criteria andTotalEqualTo(BigDecimal value) { + addCriterion("TOTAL =", value, "total"); + return (Criteria) this; + } + + public Criteria andTotalNotEqualTo(BigDecimal value) { + addCriterion("TOTAL <>", value, "total"); + return (Criteria) this; + } + + public Criteria andTotalGreaterThan(BigDecimal value) { + addCriterion("TOTAL >", value, "total"); + return (Criteria) this; + } + + public Criteria andTotalGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("TOTAL >=", value, "total"); + return (Criteria) this; + } + + public Criteria andTotalLessThan(BigDecimal value) { + addCriterion("TOTAL <", value, "total"); + return (Criteria) this; + } + + public Criteria andTotalLessThanOrEqualTo(BigDecimal value) { + addCriterion("TOTAL <=", value, "total"); + return (Criteria) this; + } + + public Criteria andTotalIn(List values) { + addCriterion("TOTAL in", values, "total"); + return (Criteria) this; + } + + public Criteria andTotalNotIn(List values) { + addCriterion("TOTAL not in", values, "total"); + return (Criteria) this; + } + + public Criteria andTotalBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("TOTAL between", value1, value2, "total"); + return (Criteria) this; + } + + public Criteria andTotalNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("TOTAL not between", value1, value2, "total"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNull() { + addCriterion("CREATE_DATE is null"); + return (Criteria) this; + } + + public Criteria andCreateDateIsNotNull() { + addCriterion("CREATE_DATE is not null"); + return (Criteria) this; + } + + public Criteria andCreateDateEqualTo(Date value) { + addCriterion("CREATE_DATE =", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotEqualTo(Date value) { + addCriterion("CREATE_DATE <>", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThan(Date value) { + addCriterion("CREATE_DATE >", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateGreaterThanOrEqualTo(Date value) { + addCriterion("CREATE_DATE >=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThan(Date value) { + addCriterion("CREATE_DATE <", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateLessThanOrEqualTo(Date value) { + addCriterion("CREATE_DATE <=", value, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateIn(List values) { + addCriterion("CREATE_DATE in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotIn(List values) { + addCriterion("CREATE_DATE not in", values, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateBetween(Date value1, Date value2) { + addCriterion("CREATE_DATE between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andCreateDateNotBetween(Date value1, Date value2) { + addCriterion("CREATE_DATE not between", value1, value2, "createDate"); + return (Criteria) this; + } + + public Criteria andBuyerIdIsNull() { + addCriterion("BUYER_ID is null"); + return (Criteria) this; + } + + public Criteria andBuyerIdIsNotNull() { + addCriterion("BUYER_ID is not null"); + return (Criteria) this; + } + + public Criteria andBuyerIdEqualTo(Integer value) { + addCriterion("BUYER_ID =", value, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdNotEqualTo(Integer value) { + addCriterion("BUYER_ID <>", value, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdGreaterThan(Integer value) { + addCriterion("BUYER_ID >", value, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdGreaterThanOrEqualTo(Integer value) { + addCriterion("BUYER_ID >=", value, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdLessThan(Integer value) { + addCriterion("BUYER_ID <", value, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdLessThanOrEqualTo(Integer value) { + addCriterion("BUYER_ID <=", value, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdIn(List values) { + addCriterion("BUYER_ID in", values, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdNotIn(List values) { + addCriterion("BUYER_ID not in", values, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdBetween(Integer value1, Integer value2) { + addCriterion("BUYER_ID between", value1, value2, "buyerId"); + return (Criteria) this; + } + + public Criteria andBuyerIdNotBetween(Integer value1, Integer value2) { + addCriterion("BUYER_ID not between", value1, value2, "buyerId"); + return (Criteria) this; + } + + public Criteria andTotalWeightIsNull() { + addCriterion("TOTAL_WEIGHT is null"); + return (Criteria) this; + } + + public Criteria andTotalWeightIsNotNull() { + addCriterion("TOTAL_WEIGHT is not null"); + return (Criteria) this; + } + + public Criteria andTotalWeightEqualTo(BigDecimal value) { + addCriterion("TOTAL_WEIGHT =", value, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightNotEqualTo(BigDecimal value) { + addCriterion("TOTAL_WEIGHT <>", value, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightGreaterThan(BigDecimal value) { + addCriterion("TOTAL_WEIGHT >", value, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("TOTAL_WEIGHT >=", value, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightLessThan(BigDecimal value) { + addCriterion("TOTAL_WEIGHT <", value, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightLessThanOrEqualTo(BigDecimal value) { + addCriterion("TOTAL_WEIGHT <=", value, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightIn(List values) { + addCriterion("TOTAL_WEIGHT in", values, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightNotIn(List values) { + addCriterion("TOTAL_WEIGHT not in", values, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("TOTAL_WEIGHT between", value1, value2, "totalWeight"); + return (Criteria) this; + } + + public Criteria andTotalWeightNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("TOTAL_WEIGHT not between", value1, value2, "totalWeight"); + return (Criteria) this; + } + + public Criteria andDistributeValueIsNull() { + addCriterion("DISTRIBUTE_VALUE is null"); + return (Criteria) this; + } + + public Criteria andDistributeValueIsNotNull() { + addCriterion("DISTRIBUTE_VALUE is not null"); + return (Criteria) this; + } + + public Criteria andDistributeValueEqualTo(Integer value) { + addCriterion("DISTRIBUTE_VALUE =", value, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueNotEqualTo(Integer value) { + addCriterion("DISTRIBUTE_VALUE <>", value, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueGreaterThan(Integer value) { + addCriterion("DISTRIBUTE_VALUE >", value, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueGreaterThanOrEqualTo(Integer value) { + addCriterion("DISTRIBUTE_VALUE >=", value, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueLessThan(Integer value) { + addCriterion("DISTRIBUTE_VALUE <", value, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueLessThanOrEqualTo(Integer value) { + addCriterion("DISTRIBUTE_VALUE <=", value, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueIn(List values) { + addCriterion("DISTRIBUTE_VALUE in", values, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueNotIn(List values) { + addCriterion("DISTRIBUTE_VALUE not in", values, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueBetween(Integer value1, Integer value2) { + addCriterion("DISTRIBUTE_VALUE between", value1, value2, "distributeValue"); + return (Criteria) this; + } + + public Criteria andDistributeValueNotBetween(Integer value1, Integer value2) { + addCriterion("DISTRIBUTE_VALUE not between", value1, value2, "distributeValue"); + return (Criteria) this; + } + + public Criteria andPackageValueIsNull() { + addCriterion("PACKAGE_VALUE is null"); + return (Criteria) this; + } + + public Criteria andPackageValueIsNotNull() { + addCriterion("PACKAGE_VALUE is not null"); + return (Criteria) this; + } + + public Criteria andPackageValueEqualTo(Integer value) { + addCriterion("PACKAGE_VALUE =", value, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueNotEqualTo(Integer value) { + addCriterion("PACKAGE_VALUE <>", value, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueGreaterThan(Integer value) { + addCriterion("PACKAGE_VALUE >", value, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueGreaterThanOrEqualTo(Integer value) { + addCriterion("PACKAGE_VALUE >=", value, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueLessThan(Integer value) { + addCriterion("PACKAGE_VALUE <", value, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueLessThanOrEqualTo(Integer value) { + addCriterion("PACKAGE_VALUE <=", value, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueIn(List values) { + addCriterion("PACKAGE_VALUE in", values, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueNotIn(List values) { + addCriterion("PACKAGE_VALUE not in", values, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueBetween(Integer value1, Integer value2) { + addCriterion("PACKAGE_VALUE between", value1, value2, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackageValueNotBetween(Integer value1, Integer value2) { + addCriterion("PACKAGE_VALUE not between", value1, value2, "packageValue"); + return (Criteria) this; + } + + public Criteria andPackingValueIsNull() { + addCriterion("PACKING_VALUE is null"); + return (Criteria) this; + } + + public Criteria andPackingValueIsNotNull() { + addCriterion("PACKING_VALUE is not null"); + return (Criteria) this; + } + + public Criteria andPackingValueEqualTo(Integer value) { + addCriterion("PACKING_VALUE =", value, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueNotEqualTo(Integer value) { + addCriterion("PACKING_VALUE <>", value, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueGreaterThan(Integer value) { + addCriterion("PACKING_VALUE >", value, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueGreaterThanOrEqualTo(Integer value) { + addCriterion("PACKING_VALUE >=", value, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueLessThan(Integer value) { + addCriterion("PACKING_VALUE <", value, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueLessThanOrEqualTo(Integer value) { + addCriterion("PACKING_VALUE <=", value, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueIn(List values) { + addCriterion("PACKING_VALUE in", values, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueNotIn(List values) { + addCriterion("PACKING_VALUE not in", values, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueBetween(Integer value1, Integer value2) { + addCriterion("PACKING_VALUE between", value1, value2, "packingValue"); + return (Criteria) this; + } + + public Criteria andPackingValueNotBetween(Integer value1, Integer value2) { + addCriterion("PACKING_VALUE not between", value1, value2, "packingValue"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusIsNull() { + addCriterion("PURCHASE_STATUS is null"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusIsNotNull() { + addCriterion("PURCHASE_STATUS is not null"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusEqualTo(Integer value) { + addCriterion("PURCHASE_STATUS =", value, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusNotEqualTo(Integer value) { + addCriterion("PURCHASE_STATUS <>", value, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusGreaterThan(Integer value) { + addCriterion("PURCHASE_STATUS >", value, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("PURCHASE_STATUS >=", value, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusLessThan(Integer value) { + addCriterion("PURCHASE_STATUS <", value, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusLessThanOrEqualTo(Integer value) { + addCriterion("PURCHASE_STATUS <=", value, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusIn(List values) { + addCriterion("PURCHASE_STATUS in", values, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusNotIn(List values) { + addCriterion("PURCHASE_STATUS not in", values, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusBetween(Integer value1, Integer value2) { + addCriterion("PURCHASE_STATUS between", value1, value2, "purchaseStatus"); + return (Criteria) this; + } + + public Criteria andPurchaseStatusNotBetween(Integer value1, Integer value2) { + addCriterion("PURCHASE_STATUS not between", value1, value2, "purchaseStatus"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbReturnOrder.java b/src/main/java/com/xmomen/module/order/entity/TbReturnOrder.java new file mode 100644 index 0000000..f66b7ca --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbReturnOrder.java @@ -0,0 +1,245 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_return_order") +public class TbReturnOrder extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 订单编号 + */ + private String orderNo; + + /** + * 退货时间 + */ + private Date returnTime; + + /** + * 订单退货状态(10-申请退货,11-退货中,14-退货运输中,15-退货完成) + */ + private Integer returnStatus; + + /** + * 审核状态(0-不同意,1-同意) + */ + private Integer auditStatus; + + /** + * 审核时间 + */ + private Date auditDate; + + /** + * 审核人 + */ + private Integer auditUserId; + + /** + * 拿货时间 + */ + private Date takeGoodsDate; + + /** + * 拿货人 + */ + private Integer takeGoodsUserId; + + /** + * 拿货人手机号 + */ + private String takeGoodsPhone; + + /** + * 退款金额 + */ + private BigDecimal returnTotalAmount; + + /** + * 0-正常退货,1-超时退货, + */ + private Integer isNormal; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "ORDER_NO") + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + if(orderNo == null){ + removeValidField("orderNo"); + return; + } + addValidField("orderNo"); + } + + @Column(name = "RETURN_TIME") + public Date getReturnTime() { + return returnTime; + } + + public void setReturnTime(Date returnTime) { + this.returnTime = returnTime; + if(returnTime == null){ + removeValidField("returnTime"); + return; + } + addValidField("returnTime"); + } + + @Column(name = "RETURN_STATUS") + public Integer getReturnStatus() { + return returnStatus; + } + + public void setReturnStatus(Integer returnStatus) { + this.returnStatus = returnStatus; + if(returnStatus == null){ + removeValidField("returnStatus"); + return; + } + addValidField("returnStatus"); + } + + @Column(name = "AUDIT_STATUS") + public Integer getAuditStatus() { + return auditStatus; + } + + public void setAuditStatus(Integer auditStatus) { + this.auditStatus = auditStatus; + if(auditStatus == null){ + removeValidField("auditStatus"); + return; + } + addValidField("auditStatus"); + } + + @Column(name = "AUDIT_DATE") + public Date getAuditDate() { + return auditDate; + } + + public void setAuditDate(Date auditDate) { + this.auditDate = auditDate; + if(auditDate == null){ + removeValidField("auditDate"); + return; + } + addValidField("auditDate"); + } + + @Column(name = "AUDIT_USER_ID") + public Integer getAuditUserId() { + return auditUserId; + } + + public void setAuditUserId(Integer auditUserId) { + this.auditUserId = auditUserId; + if(auditUserId == null){ + removeValidField("auditUserId"); + return; + } + addValidField("auditUserId"); + } + + @Column(name = "TAKE_GOODS_DATE") + public Date getTakeGoodsDate() { + return takeGoodsDate; + } + + public void setTakeGoodsDate(Date takeGoodsDate) { + this.takeGoodsDate = takeGoodsDate; + if(takeGoodsDate == null){ + removeValidField("takeGoodsDate"); + return; + } + addValidField("takeGoodsDate"); + } + + @Column(name = "TAKE_GOODS_USER_ID") + public Integer getTakeGoodsUserId() { + return takeGoodsUserId; + } + + public void setTakeGoodsUserId(Integer takeGoodsUserId) { + this.takeGoodsUserId = takeGoodsUserId; + if(takeGoodsUserId == null){ + removeValidField("takeGoodsUserId"); + return; + } + addValidField("takeGoodsUserId"); + } + + @Column(name = "TAKE_GOODS_PHONE") + public String getTakeGoodsPhone() { + return takeGoodsPhone; + } + + public void setTakeGoodsPhone(String takeGoodsPhone) { + this.takeGoodsPhone = takeGoodsPhone; + if(takeGoodsPhone == null){ + removeValidField("takeGoodsPhone"); + return; + } + addValidField("takeGoodsPhone"); + } + + @Column(name = "RETURN_TOTAL_AMOUNT") + public BigDecimal getReturnTotalAmount() { + return returnTotalAmount; + } + + public void setReturnTotalAmount(BigDecimal returnTotalAmount) { + this.returnTotalAmount = returnTotalAmount; + if(returnTotalAmount == null){ + removeValidField("returnTotalAmount"); + return; + } + addValidField("returnTotalAmount"); + } + + @Column(name = "IS_NORMAL") + public Integer getIsNormal() { + return isNormal; + } + + public void setIsNormal(Integer isNormal) { + this.isNormal = isNormal; + if(isNormal == null){ + removeValidField("isNormal"); + return; + } + addValidField("isNormal"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/TbTradeRecordExample.java b/src/main/java/com/xmomen/module/order/entity/TbTradeRecordExample.java new file mode 100644 index 0000000..38c0df7 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/TbTradeRecordExample.java @@ -0,0 +1,653 @@ +package com.xmomen.module.order.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TbTradeRecordExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbTradeRecordExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andAmountIsNull() { + addCriterion("AMOUNT is null"); + return (Criteria) this; + } + + public Criteria andAmountIsNotNull() { + addCriterion("AMOUNT is not null"); + return (Criteria) this; + } + + public Criteria andAmountEqualTo(BigDecimal value) { + addCriterion("AMOUNT =", value, "amount"); + return (Criteria) this; + } + + public Criteria andAmountNotEqualTo(BigDecimal value) { + addCriterion("AMOUNT <>", value, "amount"); + return (Criteria) this; + } + + public Criteria andAmountGreaterThan(BigDecimal value) { + addCriterion("AMOUNT >", value, "amount"); + return (Criteria) this; + } + + public Criteria andAmountGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("AMOUNT >=", value, "amount"); + return (Criteria) this; + } + + public Criteria andAmountLessThan(BigDecimal value) { + addCriterion("AMOUNT <", value, "amount"); + return (Criteria) this; + } + + public Criteria andAmountLessThanOrEqualTo(BigDecimal value) { + addCriterion("AMOUNT <=", value, "amount"); + return (Criteria) this; + } + + public Criteria andAmountIn(List values) { + addCriterion("AMOUNT in", values, "amount"); + return (Criteria) this; + } + + public Criteria andAmountNotIn(List values) { + addCriterion("AMOUNT not in", values, "amount"); + return (Criteria) this; + } + + public Criteria andAmountBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("AMOUNT between", value1, value2, "amount"); + return (Criteria) this; + } + + public Criteria andAmountNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("AMOUNT not between", value1, value2, "amount"); + return (Criteria) this; + } + + public Criteria andTradeNoIsNull() { + addCriterion("TRADE_NO is null"); + return (Criteria) this; + } + + public Criteria andTradeNoIsNotNull() { + addCriterion("TRADE_NO is not null"); + return (Criteria) this; + } + + public Criteria andTradeNoEqualTo(String value) { + addCriterion("TRADE_NO =", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoNotEqualTo(String value) { + addCriterion("TRADE_NO <>", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoGreaterThan(String value) { + addCriterion("TRADE_NO >", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoGreaterThanOrEqualTo(String value) { + addCriterion("TRADE_NO >=", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoLessThan(String value) { + addCriterion("TRADE_NO <", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoLessThanOrEqualTo(String value) { + addCriterion("TRADE_NO <=", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoLike(String value) { + addCriterion("TRADE_NO like", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoNotLike(String value) { + addCriterion("TRADE_NO not like", value, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoIn(List values) { + addCriterion("TRADE_NO in", values, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoNotIn(List values) { + addCriterion("TRADE_NO not in", values, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoBetween(String value1, String value2) { + addCriterion("TRADE_NO between", value1, value2, "tradeNo"); + return (Criteria) this; + } + + public Criteria andTradeNoNotBetween(String value1, String value2) { + addCriterion("TRADE_NO not between", value1, value2, "tradeNo"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNull() { + addCriterion("CREATE_TIME is null"); + return (Criteria) this; + } + + public Criteria andCreateTimeIsNotNull() { + addCriterion("CREATE_TIME is not null"); + return (Criteria) this; + } + + public Criteria andCreateTimeEqualTo(Date value) { + addCriterion("CREATE_TIME =", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotEqualTo(Date value) { + addCriterion("CREATE_TIME <>", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThan(Date value) { + addCriterion("CREATE_TIME >", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeGreaterThanOrEqualTo(Date value) { + addCriterion("CREATE_TIME >=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThan(Date value) { + addCriterion("CREATE_TIME <", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeLessThanOrEqualTo(Date value) { + addCriterion("CREATE_TIME <=", value, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeIn(List values) { + addCriterion("CREATE_TIME in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotIn(List values) { + addCriterion("CREATE_TIME not in", values, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeBetween(Date value1, Date value2) { + addCriterion("CREATE_TIME between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andCreateTimeNotBetween(Date value1, Date value2) { + addCriterion("CREATE_TIME not between", value1, value2, "createTime"); + return (Criteria) this; + } + + public Criteria andTradeTypeIsNull() { + addCriterion("TRADE_TYPE is null"); + return (Criteria) this; + } + + public Criteria andTradeTypeIsNotNull() { + addCriterion("TRADE_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andTradeTypeEqualTo(String value) { + addCriterion("TRADE_TYPE =", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeNotEqualTo(String value) { + addCriterion("TRADE_TYPE <>", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeGreaterThan(String value) { + addCriterion("TRADE_TYPE >", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeGreaterThanOrEqualTo(String value) { + addCriterion("TRADE_TYPE >=", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeLessThan(String value) { + addCriterion("TRADE_TYPE <", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeLessThanOrEqualTo(String value) { + addCriterion("TRADE_TYPE <=", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeLike(String value) { + addCriterion("TRADE_TYPE like", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeNotLike(String value) { + addCriterion("TRADE_TYPE not like", value, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeIn(List values) { + addCriterion("TRADE_TYPE in", values, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeNotIn(List values) { + addCriterion("TRADE_TYPE not in", values, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeBetween(String value1, String value2) { + addCriterion("TRADE_TYPE between", value1, value2, "tradeType"); + return (Criteria) this; + } + + public Criteria andTradeTypeNotBetween(String value1, String value2) { + addCriterion("TRADE_TYPE not between", value1, value2, "tradeType"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("REMARK is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("REMARK is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("REMARK =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("REMARK <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("REMARK >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("REMARK >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("REMARK <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("REMARK <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("REMARK like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("REMARK not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("REMARK in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("REMARK not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("REMARK between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("REMARK not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRecordUserIsNull() { + addCriterion("RECORD_USER is null"); + return (Criteria) this; + } + + public Criteria andRecordUserIsNotNull() { + addCriterion("RECORD_USER is not null"); + return (Criteria) this; + } + + public Criteria andRecordUserEqualTo(Integer value) { + addCriterion("RECORD_USER =", value, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserNotEqualTo(Integer value) { + addCriterion("RECORD_USER <>", value, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserGreaterThan(Integer value) { + addCriterion("RECORD_USER >", value, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserGreaterThanOrEqualTo(Integer value) { + addCriterion("RECORD_USER >=", value, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserLessThan(Integer value) { + addCriterion("RECORD_USER <", value, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserLessThanOrEqualTo(Integer value) { + addCriterion("RECORD_USER <=", value, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserIn(List values) { + addCriterion("RECORD_USER in", values, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserNotIn(List values) { + addCriterion("RECORD_USER not in", values, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserBetween(Integer value1, Integer value2) { + addCriterion("RECORD_USER between", value1, value2, "recordUser"); + return (Criteria) this; + } + + public Criteria andRecordUserNotBetween(Integer value1, Integer value2) { + addCriterion("RECORD_USER not between", value1, value2, "recordUser"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/mapper/TbOrderItemMapper.java b/src/main/java/com/xmomen/module/order/entity/mapper/TbOrderItemMapper.java new file mode 100644 index 0000000..203e664 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/mapper/TbOrderItemMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.order.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.order.entity.TbOrderItem; +import com.xmomen.module.order.entity.TbOrderItemExample; +import org.apache.ibatis.annotations.Param; + +public interface TbOrderItemMapper extends MybatisMapper { + int countByExample(TbOrderItemExample example); + + int deleteByExample(TbOrderItemExample example); + + int insertSelective(TbOrderItem record); + + int updateByExampleSelective(@Param("record") TbOrderItem record, @Param("example") TbOrderItemExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/mapper/TbOrderSendLogMapper.java b/src/main/java/com/xmomen/module/order/entity/mapper/TbOrderSendLogMapper.java new file mode 100644 index 0000000..c1799ff --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/mapper/TbOrderSendLogMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.order.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.order.entity.TbOrderSendLog; +import com.xmomen.module.order.entity.TbOrderSendLogExample; +import org.apache.ibatis.annotations.Param; + +public interface TbOrderSendLogMapper extends MybatisMapper { + int countByExample(TbOrderSendLogExample example); + + int deleteByExample(TbOrderSendLogExample example); + + int insertSelective(TbOrderSendLog record); + + int updateByExampleSelective(@Param("record") TbOrderSendLog record, @Param("example") TbOrderSendLogExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/entity/mapper/TbTradeRecordMapper.java b/src/main/java/com/xmomen/module/order/entity/mapper/TbTradeRecordMapper.java new file mode 100644 index 0000000..222a74d --- /dev/null +++ b/src/main/java/com/xmomen/module/order/entity/mapper/TbTradeRecordMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.order.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.order.entity.TbTradeRecord; +import com.xmomen.module.order.entity.TbTradeRecordExample; +import org.apache.ibatis.annotations.Param; + +public interface TbTradeRecordMapper extends MybatisMapper { + int countByExample(TbTradeRecordExample example); + + int deleteByExample(TbTradeRecordExample example); + + int insertSelective(TbTradeRecord record); + + int updateByExampleSelective(@Param("record") TbTradeRecord record, @Param("example") TbTradeRecordExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/mapper/OrderMapper.xml b/src/main/java/com/xmomen/module/order/mapper/OrderMapper.xml new file mode 100644 index 0000000..f57842f --- /dev/null +++ b/src/main/java/com/xmomen/module/order/mapper/OrderMapper.xml @@ -0,0 +1,748 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/com/xmomen/module/order/mapper/TradeRecordMapper.xml b/src/main/java/com/xmomen/module/order/mapper/TradeRecordMapper.xml new file mode 100644 index 0000000..bbeed16 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/mapper/TradeRecordMapper.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/order/model/CreateOrder.java b/src/main/java/com/xmomen/module/order/model/CreateOrder.java new file mode 100644 index 0000000..3da98ad --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/CreateOrder.java @@ -0,0 +1,329 @@ +package com.xmomen.module.order.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import javax.validation.constraints.NotNull; + +import lombok.Data; +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.NotEmpty; + +/** + * Created by Jeng on 16/4/5. + */ +public +@Data +class CreateOrder implements Serializable { + + /** + * 1-卡,2-劵,3-常规 + */ + @NotNull + private Integer orderType; + + /** + * 批量下单数 + */ + private Integer batchNumber; + + /** + * 订单编号 + */ + private String orderNo; + + private String batchNo; + + /** + * 1-微信订单,2-商城订单,3-客服下单,4-采摘订单 + */ + private Integer orderSource; + + /** + * 客户名称 + */ + private String name; + + /** + * 客户代码 + */ + private String memberCode; + + /** + * 客户联系方式 + */ + private String phone; + + /** + * 付款方式 + */ + @NotNull + private Integer paymentMode; + + /** + * 附加付款方式 + */ + private Integer otherPaymentMode; + + /** + * 支付关系编号(卡号/券号) + */ + private String paymentRelationNo; + + /** + * 收货人手机 + */ + @NotNull + @NotBlank + private String consigneePhone; + + /** + * 收货人姓名 + */ + @NotNull + @NotBlank + private String consigneeName; + + /** + * 收货人地址 + */ + @NotNull + @NotBlank + private String consigneeAddress; + + /** + * 订单备注 + */ + private String remark; + + /** + * 折扣 + */ + private Double discount; + + /** + * 是否显示金额 + */ + private Integer isShowAmount; + + /** + * 操作人 + */ + private Integer createUserId; + + /** + * 单位 + */ + private Integer companyId; + + /** + * 客户经理 + */ + private Integer managerId; + + private Date appointmentTime; + /** + * 折扣金额 + */ + private BigDecimal discountPrice; + /** + * 订单总金额(劵直接取,卡、常规订单后台在计算金额) + */ + private BigDecimal totalPrice; + @NotNull + @NotEmpty + private List orderItemList; + + public static class OrderItem implements Serializable { + @NotNull + private Integer orderItemId; + @NotNull + private BigDecimal itemQty; + + public Integer getOrderItemId() { + return orderItemId; + } + + public void setOrderItemId(Integer orderItemId) { + this.orderItemId = orderItemId; + } + + public BigDecimal getItemQty() { + return itemQty; + } + + public void setItemQty(BigDecimal itemQty) { + this.itemQty = itemQty; + } + } + + public String getMemberCode() { + return memberCode; + } + + public void setMemberCode(String memberCode) { + this.memberCode = memberCode; + } + + public Integer getOrderType() { + return orderType; + } + + public void setOrderType(Integer orderType) { + this.orderType = orderType; + } + + public Integer getOrderSource() { + return orderSource; + } + + public void setOrderSource(Integer orderSource) { + this.orderSource = orderSource; + } + + public String getConsigneePhone() { + return consigneePhone; + } + + public void setConsigneePhone(String consigneePhone) { + this.consigneePhone = consigneePhone; + } + + public String getConsigneeName() { + return consigneeName; + } + + public void setConsigneeName(String consigneeName) { + this.consigneeName = consigneeName; + } + + public String getConsigneeAddress() { + return consigneeAddress; + } + + public void setConsigneeAddress(String consigneeAddress) { + this.consigneeAddress = consigneeAddress; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Integer getPaymentMode() { + return paymentMode; + } + + public void setPaymentMode(Integer paymentMode) { + this.paymentMode = paymentMode; + } + + public Double getDiscount() { + return discount; + } + + public void setDiscount(Double discount) { + this.discount = discount; + } + + public Integer getIsShowAmount() { + return isShowAmount; + } + + public void setIsShowAmount(Integer isShowAmount) { + this.isShowAmount = isShowAmount; + } + + public List getOrderItemList() { + return orderItemList; + } + + public void setOrderItemList(List orderItemList) { + this.orderItemList = orderItemList; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public Integer getCreateUserId() { + return createUserId; + } + + public void setCreateUserId(Integer createUserId) { + this.createUserId = createUserId; + } + + public String getPaymentRelationNo() { + return paymentRelationNo; + } + + public void setPaymentRelationNo(String paymentRelationNo) { + this.paymentRelationNo = paymentRelationNo; + } + + public Date getAppointmentTime() { + return appointmentTime; + } + + public void setAppointmentTime(Date appointmentTime) { + this.appointmentTime = appointmentTime; + } + + public Integer getCompanyId() { + return companyId; + } + + public void setCompanyId(Integer companyId) { + this.companyId = companyId; + } + + public BigDecimal getDiscountPrice() { + return discountPrice; + } + + public void setDiscountPrice(BigDecimal discountPrice) { + this.discountPrice = discountPrice; + } + + public BigDecimal getTotalPrice() { + return totalPrice; + } + + public void setTotalPrice(BigDecimal totalPrice) { + this.totalPrice = totalPrice; + } + + public Integer getManagerId() { + return managerId; + } + + public void setManagerId(Integer managerId) { + this.managerId = managerId; + } + + public Integer getOtherPaymentMode() { + return otherPaymentMode; + } + + public void setOtherPaymentMode(Integer otherPaymentMode) { + this.otherPaymentMode = otherPaymentMode; + } +} diff --git a/src/main/java/com/xmomen/module/order/model/CreatePacking.java b/src/main/java/com/xmomen/module/order/model/CreatePacking.java new file mode 100644 index 0000000..39aefb2 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/CreatePacking.java @@ -0,0 +1,21 @@ +package com.xmomen.module.order.model; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * Created by Jeng on 16/4/5. + */ +public class CreatePacking implements Serializable { + + @NotNull + private String orderNo; + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } +} diff --git a/src/main/java/com/xmomen/module/order/model/OrderQuery.java b/src/main/java/com/xmomen/module/order/model/OrderQuery.java new file mode 100644 index 0000000..b6c3476 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/OrderQuery.java @@ -0,0 +1,44 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * Created by Jeng on 2016/5/19. + */ +public @Data +class OrderQuery implements Serializable { + + private Integer id; + private String orderNo; + private String[] orderNos; + private String keyword; + private Integer orderStatus; + private Integer packingTaskStatus; + private Integer packingTaskUserId; + private String packingTaskCreateTimeStart; + private String packingTaskCreateTimeEnd; + private Integer createUserId; + private boolean isHasPackingTaskUserId; + private Integer managerId; + private Integer companyId; + private String consigneeName; + private boolean hasNoShowCancel; + private Integer showDespatch; + private Integer showPackingAssigns; + + private String orderCreateTimeStart; + private String orderCreateTimeEnd; + private String despatchExpressCode; + + private Integer despatchExpressId; + + private String couponNumber; + + private String appointmentTimeStart; + private String appointmentTimeEnd; + + private Integer isTwoSend; +} diff --git a/src/main/java/com/xmomen/module/order/model/PackingModel.java b/src/main/java/com/xmomen/module/order/model/PackingModel.java new file mode 100644 index 0000000..9b8ae3f --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/PackingModel.java @@ -0,0 +1,20 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * Created by Jeng on 16/4/6. + */ +public @Data +class PackingModel implements Serializable { + + private Integer id; + private String orderNo; + private String packingNo; + private Date packingTime; + private Integer packingStatus; + private String packingStatusDesc; +} diff --git a/src/main/java/com/xmomen/module/order/model/PackingOrderItemModel.java b/src/main/java/com/xmomen/module/order/model/PackingOrderItemModel.java new file mode 100644 index 0000000..06c9a9e --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/PackingOrderItemModel.java @@ -0,0 +1,20 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * Created by Jeng on 2016/5/21. + */ +public @Data +class PackingOrderItemModel implements Serializable { + + private String itemCode; + private String itemName; + private String packingStatusDesc; + private BigDecimal itemQty; + private BigDecimal packedItemQty; + +} diff --git a/src/main/java/com/xmomen/module/order/model/PackingOrderModel.java b/src/main/java/com/xmomen/module/order/model/PackingOrderModel.java new file mode 100644 index 0000000..881af99 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/PackingOrderModel.java @@ -0,0 +1,23 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * Created by Jeng on 2016/5/21. + */ +public @Data +class PackingOrderModel implements Serializable { + + private Integer orderItemId; + private String orderNo; + private String packingNo; + private String itemCode; + private String itemName; + private String packingStatusDesc; + private BigDecimal itemQty; + private BigDecimal packedItemQty; + +} diff --git a/src/main/java/com/xmomen/module/order/model/PackingOrderQuery.java b/src/main/java/com/xmomen/module/order/model/PackingOrderQuery.java new file mode 100644 index 0000000..a804c95 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/PackingOrderQuery.java @@ -0,0 +1,19 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * Created by Jeng on 2016/5/21. + */ +public @Data +class PackingOrderQuery implements Serializable { + + private Integer orderId; + private String orderNo; + private Integer orderItemId; + private String keyword; + private String itemCode; + private String[] orderNos; +} diff --git a/src/main/java/com/xmomen/module/order/model/PackingRecordQuery.java b/src/main/java/com/xmomen/module/order/model/PackingRecordQuery.java new file mode 100644 index 0000000..41a55be --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/PackingRecordQuery.java @@ -0,0 +1,22 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * Created by Jeng on 2016/5/21. + */ +public @Data +class PackingRecordQuery implements Serializable { + /** + * ID + */ + private Integer id; + + private String keyword; + + private Integer orderItemId; + +} diff --git a/src/main/java/com/xmomen/module/order/model/PackingTask.java b/src/main/java/com/xmomen/module/order/model/PackingTask.java new file mode 100644 index 0000000..ac8f6b6 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/PackingTask.java @@ -0,0 +1,28 @@ +package com.xmomen.module.order.model; + +import lombok.Data; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** + * Created by Jeng on 16/5/25. + */ +public @Data +class PackingTask implements Serializable { + + /** + * 订单号集合 + */ + @NotNull + @NotEmpty + private List orderNos; + /** + * 装箱任务负责人ID + */ + @NotNull + private Integer packingTaskUserId; + +} diff --git a/src/main/java/com/xmomen/module/order/model/PurchaseModel.java b/src/main/java/com/xmomen/module/order/model/PurchaseModel.java new file mode 100644 index 0000000..6a18abf --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/PurchaseModel.java @@ -0,0 +1,36 @@ +package com.xmomen.module.order.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import lombok.Data; + +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * Created by Jeng on 2016/4/25. + */ +public @Data +class PurchaseModel implements Serializable { + + private int purchaseId; + @Excel(name="采购单号") + private String purchaseCode; + private Integer purchaseStatus; + private String purchaseStatusDesc; + private int cdItemId; + @Excel(name="商品名称") + private String itemName; + private String itemCode; + private String itemUnit; + @Excel(name="采购总数") + private BigDecimal totalItemQty; + private BigDecimal totalWeight; + private int distributeValue; + private int packageValue; + private int packingValue; + private String sellUnit; + private String spec; + private Date createDate; +} diff --git a/src/main/java/com/xmomen/module/order/model/ReturnOrder.java b/src/main/java/com/xmomen/module/order/model/ReturnOrder.java new file mode 100644 index 0000000..b3d8368 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/ReturnOrder.java @@ -0,0 +1,22 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * Created by tanxinzheng on 16/8/17. + */ +public @Data class ReturnOrder implements Serializable { + + private String orderNo; + + private List itemList; + + public static @Data class Item implements Serializable { + private String itemCode; + private Integer itemNumber; + } +} diff --git a/src/main/java/com/xmomen/module/order/model/UpdateOrder.java b/src/main/java/com/xmomen/module/order/model/UpdateOrder.java new file mode 100644 index 0000000..7b05186 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/model/UpdateOrder.java @@ -0,0 +1,164 @@ +package com.xmomen.module.order.model; + +import lombok.Data; + +import org.hibernate.validator.constraints.NotBlank; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * Created by Jeng on 16/4/5. + */ +public @Data class UpdateOrder implements Serializable { + + private String orderNo; + + @NotNull + private Integer id; + /** + * 1-卡,2-劵,3-常规 + */ + @NotNull + private Integer orderType; + + private String batchNo; + + /** + * 1-微信订单,2-商城订单,3-客服下单,4-采摘订单 + */ + private Integer orderSource; + + /** + * 客户名称 + */ + private String name; + + /** + * 客户代码 + */ + private String memberCode; + + /** + * 客户联系方式 + */ + private String phone; + + /** + * 付款方式 + */ + @NotNull + private Integer paymentMode; + + /** + * 附加付款方式 + */ + private Integer otherPaymentMode; + + /** + * 支付关系编号(卡号/券号) + */ + private String paymentRelationNo; + + /** + * 收货人手机 + */ + @NotNull + @NotBlank + private String consigneePhone; + + /** + * 收货人姓名 + */ + @NotNull + @NotBlank + private String consigneeName; + + /** + * 收货人地址 + */ + @NotNull + @NotBlank + private String consigneeAddress; + + /** + * 订单备注 + */ + private String remark; + + /** + * 折扣 + */ + private Double discount; + + /** + * 是否显示金额 + */ + private Integer isShowAmount; + + /** + * 操作人 + */ + private Integer createUserId; + + /** + * 单位 + */ + private Integer companyId; + /** + * 客户经理 + */ + private Integer managerId; + /** + * 折扣金额 + */ + private BigDecimal discountPrice; + /** + * 订单总金额(劵直接取,卡、常规订单后台在计算金额) + */ + private BigDecimal totalPrice; + + private Date appointmentTime; + @NotNull + @NotEmpty + private List orderItemList; + + public static class OrderItem implements Serializable { + @NotNull + private String itemCode; + @NotNull + private Integer orderItemId; + @NotNull + private BigDecimal itemQty; + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public Integer getOrderItemId() { + return orderItemId; + } + + public void setOrderItemId(Integer orderItemId) { + this.orderItemId = orderItemId; + } + + public BigDecimal getItemQty() { + return itemQty; + } + + public void setItemQty(BigDecimal itemQty) { + this.itemQty = itemQty; + } + } + +} diff --git a/src/main/java/com/xmomen/module/order/service/PackingService.java b/src/main/java/com/xmomen/module/order/service/PackingService.java new file mode 100644 index 0000000..85edfd8 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/service/PackingService.java @@ -0,0 +1,297 @@ +package com.xmomen.module.order.service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.DateUtils; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.base.entity.CdItem; +import com.xmomen.module.order.entity.*; +import com.xmomen.module.order.mapper.OrderMapper; +import com.xmomen.module.order.model.*; +import com.xmomen.module.system.entity.SysTask; +import com.xmomen.module.system.model.CreateTask; +import com.xmomen.module.system.service.TaskService; + +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Jeng on 16/4/5. + */ +@Service +public class PackingService { + + @Autowired + MybatisDao mybatisDao; + + @Autowired + TaskService taskService; + + @Autowired + OrderService orderService; + + public Page getPackingTaskCountList(Object o, Integer limit, Integer offset){ + Map map = new HashMap(); + map.put("roleType", "zhuangxiangzu"); + return (Page) mybatisDao.selectPage(OrderMapper.ORDER_MAPPER_NAMESPACE + "countPackingTask", map, limit, offset); + } + + public Page getPackingList(PackingQuery packingQuery, Integer limit, Integer offset){ + return (Page) mybatisDao.selectPage(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryPackingModel", packingQuery, limit, offset); + } + + public List getPackingList(PackingQuery packingQuery){ + return mybatisDao.getSqlSessionTemplate().selectList(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryPackingModel", packingQuery); + } + + @Transactional + /***新增装箱记录****/ + public TbPacking create(CreatePacking createPacking){ + //生成一个装箱码 + TbPacking tbPacking = new TbPacking(); + tbPacking.setPackingNo(DateUtils.getDateTimeString()); + tbPacking.setPackingStatus(0); + tbPacking = mybatisDao.insertByModel(tbPacking); + //记录订单的装箱码 + TbOrderRelation tbOrderRelation = new TbOrderRelation(); + tbOrderRelation.setOrderNo(createPacking.getOrderNo()); + tbOrderRelation.setRefType(OrderMapper.ORDER_PACKING_RELATION_CODE); + tbOrderRelation.setRefValue(tbPacking.getPackingNo()); + mybatisDao.insert(tbOrderRelation); + //更新订单的总箱数 + TbOrder order = new TbOrder(); + order.setOrderNo(createPacking.getOrderNo()); + order = mybatisDao.selectOneByModel(order); + order.setTotalBoxNum(order.getTotalBoxNum() + 1); + mybatisDao.update(order); + return tbPacking; + } + + /** + * 生成装箱任务 + * @param packingTask + */ + @Transactional + public void dispatchPackingTask(PackingTask packingTask){ + for (String orderNo : packingTask.getOrderNos()) { + //生成装箱任务 + CreateTask createTask = new CreateTask(); + createTask.setTaskHeadId(1); + createTask.setExecutorId(packingTask.getPackingTaskUserId()); + SysTask sysTask = taskService.createTask(createTask); + //任务和订单关联关系 + TbOrderRelation tbOrderRelation = new TbOrderRelation(); + tbOrderRelation.setOrderNo(orderNo); + tbOrderRelation.setRefType(OrderMapper.ORDER_PACKING_TASK_RELATION_CODE); + tbOrderRelation.setRefValue(String.valueOf(sysTask.getId())); + mybatisDao.insert(tbOrderRelation); + //更新订单状态为待装箱 + orderService.updateOrderStatus(orderNo, "13"); + } + } + + @Transactional + public void cancelPackingTask(String[] orderNoArray){ + TbOrderRelationExample tbOrderRelationExample = new TbOrderRelationExample(); + tbOrderRelationExample.createCriteria().andOrderNoIn(CollectionUtils.arrayToList(orderNoArray)).andRefTypeEqualTo(OrderMapper.ORDER_PACKING_TASK_RELATION_CODE); + List tbOrderRelationList = mybatisDao.selectByExample(tbOrderRelationExample); + Integer[] taskIds = new Integer[tbOrderRelationList.size()]; + for (int i = 0; i < tbOrderRelationList.size(); i++) { + TbOrderRelation tbOrderRelation = tbOrderRelationList.get(i); + mybatisDao.deleteByPrimaryKey(TbOrderRelation.class, tbOrderRelation.getId()); + taskIds[i] = Integer.valueOf(tbOrderRelation.getRefValue()); + //订单状态变为采购中 + orderService.updateOrderStatus(tbOrderRelation.getOrderNo(), "2"); + } + taskService.cancelTask(taskIds); + } + + @Transactional + public ScanModel createRecord(CreatePackingRecord createPackingRecord) { + // 根据UPC查询匹配的商品信息,若无则表示UPC不正确 + String itemCode = createPackingRecord.getUpc().substring(0, 7); + CdItem cdItem = new CdItem(); + cdItem.setItemCode(itemCode); + cdItem = mybatisDao.selectOneByModel(cdItem); + if(cdItem == null){ + throw new IllegalArgumentException("非法的UPC号码,未找到匹配商品编号"); + } + Map packingInfo = createPackingRecord.getPackingInfo(); + + // 查询装箱订单中是否有匹配的产品,且未商品装箱数未达到上限 + PackingOrderQuery packingOrderQuery = new PackingOrderQuery(); + packingOrderQuery.setOrderNos(packingInfo.keySet().toArray(new String[packingInfo.keySet().size()])); + packingOrderQuery.setItemCode(itemCode); + List packingRecordModels = queryPackingOrder(packingOrderQuery); + if(packingRecordModels == null || packingRecordModels.size() == 0){ + throw new IllegalArgumentException("所选装箱订单中未订购此商品"); + } + PackingOrderModel currentPackingOrder = null; + for (PackingOrderModel packingOrderModel : packingRecordModels) { + if(packingOrderModel.getPackedItemQty().compareTo(packingOrderModel.getItemQty()) < 0){ + // 商品已装箱数小于商品订购数则放入此装箱订单中 + currentPackingOrder = packingOrderModel; + break; + } + } + if(currentPackingOrder == null){ + throw new IllegalArgumentException("所选装箱订单中已全部完成此商品装箱"); + } + TbOrderRelation tbOrderRelation = new TbOrderRelation(); + tbOrderRelation.setOrderNo(currentPackingOrder.getOrderNo()); + tbOrderRelation.setRefType(OrderMapper.ORDER_PACKING_TASK_RELATION_CODE); + tbOrderRelation = mybatisDao.selectOneByModel(tbOrderRelation); + if(tbOrderRelation == null){ + throw new IllegalArgumentException(MessageFormat.format("此订单未分配装箱任务,订单编号:{0}", currentPackingOrder.getOrderNo())); + } + SysTask sysTask = mybatisDao.selectByPrimaryKey(SysTask.class, Integer.valueOf(tbOrderRelation.getRefValue())); + if(sysTask == null){ + throw new IllegalArgumentException(MessageFormat.format("此订单未分配装箱任务,订单编号:{0}", currentPackingOrder.getOrderNo())); + }else if(sysTask.getTaskStatus() == 0){ + sysTask.setTaskStatus(1); + sysTask.setStartTime(mybatisDao.getSysdate()); + mybatisDao.update(sysTask); + } + packingOrderQuery.setOrderItemId(currentPackingOrder.getOrderItemId()); + PackingOrderModel packingRecordModel = getOnePackingOrder(packingOrderQuery); + if(packingRecordModel != null && packingRecordModel.getItemQty().compareTo(packingRecordModel.getPackedItemQty()) == 0){ + throw new IllegalArgumentException("装箱数量已到达订单采购数量"); + } + + //计重产品要判断相同条形码 条形码不能多次扫描 + if("0".equals(cdItem.getSellUnit())){ + // 判断UPC是否已被扫描,若已扫描则做删除操作 + TbPackingRecordExample tbPackingRecordExample = new TbPackingRecordExample(); + tbPackingRecordExample.createCriteria().andUpcEqualTo(createPackingRecord.getUpc()) + .andPackingIdEqualTo(packingInfo.get(currentPackingOrder.getOrderNo())); + TbPackingRecord removePackingRecord = mybatisDao.selectOneByExample(tbPackingRecordExample); + if(removePackingRecord != null){ + //deleteRecord(removePackingRecord.getId()); + throw new IllegalArgumentException("订单号【"+currentPackingOrder.getOrderNo()+"】,UPC编号:【" + createPackingRecord.getUpc() + "】已经存在!"); + } + } + + TbPackingRecord tbPackingRecord = new TbPackingRecord(); + //获取订单ID + tbPackingRecord.setPackingId(packingInfo.get(currentPackingOrder.getOrderNo())); + tbPackingRecord.setScanTime(mybatisDao.getSysdate()); + tbPackingRecord.setUpc(createPackingRecord.getUpc()); + tbPackingRecord.setOrderItemId(currentPackingOrder.getOrderItemId()); + tbPackingRecord = mybatisDao.insertByModel(tbPackingRecord); + PackingOrderQuery packingOrderQuery1 = new PackingOrderQuery(); + packingOrderQuery1.setOrderNo(currentPackingOrder.getOrderNo()); + List packingOrderModelList = queryPackingOrder(packingOrderQuery1); + boolean isFinished = true; + for (PackingOrderModel packingOrderModel : packingOrderModelList) { + if(!"已完成".equals(packingOrderModel.getPackingStatusDesc())){ + isFinished = false; + break; + } + } + if(isFinished){ + sysTask.setFinishTime(mybatisDao.getSysdate()); + sysTask.setTaskStatus(2);//已完成装箱 + mybatisDao.update(sysTask); + // 完成装箱,订单状态扭转到待配送:4 + orderService.updateOrderStatus(currentPackingOrder.getOrderNo(), "4"); + }else if(!isFinished){ + sysTask.setTaskStatus(1);//待完成装箱 + mybatisDao.update(sysTask); + //订单状态装箱中 + orderService.updateOrderStatus(currentPackingOrder.getOrderNo(), "3"); + } + ScanModel scanModel = new ScanModel(); + BeanUtils.copyProperties(tbPackingRecord, scanModel); + scanModel.setOrderNo(currentPackingOrder.getOrderNo()); + scanModel.setTaskStatus(sysTask.getTaskStatus()); + return scanModel; + } + + + public List autoPacking(String orderNo, Integer packingId){ + List scanModelList = new ArrayList<>(); + // 查询当前订单未装箱商品 + PackingOrderQuery packingOrderQuery = new PackingOrderQuery(); + packingOrderQuery.setOrderNo(orderNo); + List packingOrderModelList = queryPackingOrder(packingOrderQuery); + for (PackingOrderModel packingOrderModel : packingOrderModelList) { + if(!"已完成".equals(packingOrderModel.getPackingStatusDesc())){ + BigDecimal total = packingOrderModel.getItemQty(); + BigDecimal need = packingOrderModel.getPackedItemQty(); + BigDecimal num = total.subtract(need); + if(BigDecimal.ZERO.compareTo(num) < 0){ + int n = num.intValue(); + for (int i = 0; i < n; i++) { + //自动装箱 条码默认为商品编码 + String upc = packingOrderModel.getItemCode(); + Map map = new HashMap<>(); + map.put(orderNo, packingId); + CreatePackingRecord createPackingRecord = new CreatePackingRecord(); + createPackingRecord.setPackingInfo(map); + createPackingRecord.setUpc(upc+String.valueOf((int)((Math.random()*9+1)*100000))); + ScanModel scanModel = createRecord(createPackingRecord); + scanModelList.add(scanModel); + } + } + } + } + return scanModelList; + } + + @Transactional + public void delete(Integer packingId){ + TbPackingRecordExample tbPackingRecordExample = new TbPackingRecordExample(); + tbPackingRecordExample.createCriteria().andPackingIdEqualTo(packingId); + mybatisDao.deleteByExample(tbPackingRecordExample); + } + + @Transactional + public void deleteRecord(Integer recordId){ + TbPackingRecord tbPackingRecord = mybatisDao.selectByPrimaryKey(TbPackingRecord.class, recordId); + if(tbPackingRecord != null){ + TbOrderItem tbOrderItem = mybatisDao.selectByPrimaryKey(TbOrderItem.class, tbPackingRecord.getOrderItemId()); + TbOrderRelation tbOrderRelation = new TbOrderRelation(); + tbOrderRelation.setOrderNo(tbOrderItem.getOrderNo()); + tbOrderRelation.setRefType(OrderMapper.ORDER_PACKING_TASK_RELATION_CODE); + tbOrderRelation = mybatisDao.selectOneByModel(tbOrderRelation); + SysTask sysTask = mybatisDao.selectByPrimaryKey(SysTask.class, Integer.valueOf(tbOrderRelation.getRefValue())); + sysTask.setTaskStatus(1); + mybatisDao.update(sysTask); + } + mybatisDao.deleteByPrimaryKey(TbPackingRecord.class, recordId); + } + + public PackingOrderModel getOnePackingOrder(PackingOrderQuery packingOrderQuery){ + return mybatisDao.getSqlSessionTemplate().selectOne(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryPackingOrderItemModel", packingOrderQuery); + } + + public List queryPackingOrder(PackingOrderQuery packingOrderQuery){ + return mybatisDao.getSqlSessionTemplate().selectList(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryPackingOrderItemModel", packingOrderQuery); + } + + public Page queryPackingOrder(PackingOrderQuery packingOrderQuery, Integer limit, Integer offset){ + return (Page) mybatisDao.selectPage(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryPackingOrderItemModel", packingOrderQuery, limit, offset); + } + + public Page queryPackingOrderItem(PackingOrderQuery packingOrderQuery, Integer limit, Integer offset){ + return (Page) mybatisDao.selectPage(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryCountPackingOrderItemModel", packingOrderQuery, limit, offset); + } + + public List queryPackingRecord(PackingRecordQuery queryPackingRecord){ + return mybatisDao.getSqlSessionTemplate().selectList(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryPackingRecordModel", queryPackingRecord); + } + + public Page queryPackingRecord(PackingRecordQuery queryPackingRecord, Integer limit, Integer offset){ + return (Page) mybatisDao.selectPage(OrderMapper.ORDER_MAPPER_NAMESPACE + "queryPackingRecordModel", queryPackingRecord, limit, offset); + } +} diff --git a/src/main/java/com/xmomen/module/order/service/PurchaseService.java b/src/main/java/com/xmomen/module/order/service/PurchaseService.java new file mode 100644 index 0000000..6d16028 --- /dev/null +++ b/src/main/java/com/xmomen/module/order/service/PurchaseService.java @@ -0,0 +1,155 @@ +package com.xmomen.module.order.service; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.DateUtils; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.order.entity.TbOrder; +import com.xmomen.module.order.entity.TbOrderExample; +import com.xmomen.module.order.entity.TbOrderRelation; +import com.xmomen.module.order.entity.TbPurchase; +import com.xmomen.module.order.entity.TbPurchaseExample; +import com.xmomen.module.order.mapper.OrderMapper; +import com.xmomen.module.order.model.CreatePurchase; +import com.xmomen.module.order.model.OrderPurchaseModel; +import com.xmomen.module.order.model.PurchaseModel; + +/** + * Created by Jeng on 16/4/5. + */ +@Service +public class PurchaseService { + + @Autowired + MybatisDao mybatisDao; + + /** + * 查询采购单 + * + * @param keyword + * @param limit + * @param offset + * @return + */ + public Page getPurchaseList(Map param, Integer limit, Integer offset) { + return (Page) mybatisDao.selectPage(OrderMapper.ORDER_MAPPER_NAMESPACE + "getPurchaseList", param, limit, offset); + } + + /** + * 查询采购单 + * + * @param keyword + * @param limit + * @param offset + * @return + */ + public List getPurchaseList(Map param) { + return mybatisDao.getSqlSessionTemplate().selectList(OrderMapper.ORDER_MAPPER_NAMESPACE + "getPurchaseList", param); + } + + /** + * 创建采购单 + * + * @param createPurchase + * @return + */ + @Transactional + public synchronized void createPurchase(CreatePurchase createPurchase) { + Map param = new HashMap(); + + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + if (createPurchase.getAppointmentTimeStart() != null) { + param.put("startTime", format.format(createPurchase.getAppointmentTimeStart())); + param.put("endTime", format.format(createPurchase.getAppointmentTimeEnd())); + } + else { + param.put("startTime", format.format(createPurchase.getOrderDate())); + param.put("endTime", format.format(new Date(createPurchase.getOrderDate().getTime() + 24 * 3600 * 1000))); + } + List purchaseModelList = mybatisDao.getSqlSessionTemplate().selectList(OrderMapper.ORDER_MAPPER_NAMESPACE + "getOrderPurchaseList", param); + if (CollectionUtils.isEmpty(purchaseModelList)) { + if (createPurchase.getAppointmentTimeStart() != null) { + throw new IllegalArgumentException("选定的配送日期内没有需要生成采购计划的订单"); + } + else { + throw new IllegalArgumentException("今天没有需要生成采购计划的订单"); + } + } + Map tbPurchaseMap = new HashMap(); + List orderNoList = new ArrayList(); + String purchaseCode = DateUtils.getDateTimeString(); + for (OrderPurchaseModel purchaseModel : purchaseModelList) { + if (tbPurchaseMap.get(purchaseModel.getItemCode()) == null) { + TbPurchase tbPurchase = new TbPurchase(); + tbPurchase.setPurchaseCode(purchaseCode); + tbPurchase.setCreateDate(mybatisDao.getSysdate()); + tbPurchase.setPurchaseStatus(0); + tbPurchase.setItemCode(purchaseModel.getItemCode()); + tbPurchase.setTotal(purchaseModel.getTotalItemQty()); + tbPurchase.setTotalWeight(purchaseModel.getTotalWeight()); + tbPurchaseMap.put(purchaseModel.getItemCode(), tbPurchase); + } + else { + BigDecimal total = tbPurchaseMap.get(purchaseModel.getItemCode()).getTotal().add(purchaseModel.getTotalItemQty()); + BigDecimal totalWeight = tbPurchaseMap.get(purchaseModel.getItemCode()).getTotalWeight().add(purchaseModel.getTotalWeight()); + tbPurchaseMap.get(purchaseModel.getItemCode()).setTotal(total); + tbPurchaseMap.get(purchaseModel.getItemCode()).setTotalWeight(totalWeight); + } + orderNoList.add(purchaseModel.getOrderNo()); + } + for (TbPurchase tbPurchase : tbPurchaseMap.values()) { + mybatisDao.insert(tbPurchase); + } + //去除重复的订单号 + HashSet h = new HashSet(orderNoList); + orderNoList.clear(); + orderNoList.addAll(h); + TbOrder tbOrder = new TbOrder(); + tbOrder.setOrderStatus("2");//待采购 + TbOrderExample tbOrderExample = new TbOrderExample(); + tbOrderExample.createCriteria() + .andOrderStatusEqualTo("1") + .andOrderNoIn(orderNoList); + mybatisDao.updateByExampleSelective(tbOrder, tbOrderExample); + for (String orderNo : orderNoList) { + TbOrderRelation tbOrderRelation = new TbOrderRelation(); + tbOrderRelation.setRefType("ORDER_PURCHASE_CODE"); + tbOrderRelation.setOrderNo(orderNo); + tbOrderRelation.setRefValue(purchaseCode); + mybatisDao.insert(tbOrderRelation); + } + } + + @Transactional + public void updatePurchaseStatus(Integer id, Integer purchaseStatus) { + TbPurchaseExample tbPurchaseExample = new TbPurchaseExample(); + tbPurchaseExample.createCriteria().andIdEqualTo(id); + TbPurchase tbPurchase = new TbPurchase(); + tbPurchase.setPurchaseStatus(purchaseStatus); + mybatisDao.updateOneByExampleSelective(tbPurchase, tbPurchaseExample); + } + + /** + * 删除采购单 + * + * @param id + */ + public void deletePurchase(Integer id) { + mybatisDao.deleteByPrimaryKey(TbPurchase.class, id); + } + +} diff --git a/src/main/java/com/xmomen/module/pick/controller/PickController.java b/src/main/java/com/xmomen/module/pick/controller/PickController.java new file mode 100644 index 0000000..87c2c4a --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/controller/PickController.java @@ -0,0 +1,53 @@ +package com.xmomen.module.pick.controller; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.logger.Log; +import com.xmomen.module.pick.model.CreateMember; +import com.xmomen.module.pick.model.PickVo; +import com.xmomen.module.pick.service.PickService; + +/** + */ +@RestController +public class PickController { + + @Autowired + PickService pickService; + + @Autowired + MybatisDao mybatisDao; + + /** + * 采摘结算 + * @param createPurchase + * @param bindingResult + * @return + */ + @RequestMapping(value = "/pick/settleAccounts", method = RequestMethod.PUT) + @Log(actionName = "采摘结算") + public void settleAccounts(@RequestBody @Valid PickVo pickVo, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + pickService.pick(pickVo); + } + + @RequestMapping(value = "/pick/pickCard", method = RequestMethod.PUT) + @Log(actionName = "办新卡") + public void pickCard(@RequestBody @Valid CreateMember createMember, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + pickService.pickCard(createMember); + } +} diff --git a/src/main/java/com/xmomen/module/pick/entity/TbExchangeCardLog.java b/src/main/java/com/xmomen/module/pick/entity/TbExchangeCardLog.java new file mode 100644 index 0000000..2613b09 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/TbExchangeCardLog.java @@ -0,0 +1,148 @@ +package com.xmomen.module.pick.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_exchange_card_log") +public class TbExchangeCardLog extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 旧卡ID + */ + private Integer oldCouponId; + + /** + * 旧卡卡号 + */ + private String oldCouponNo; + + /** + * + */ + private Integer newCouponId; + + /** + * + */ + private String newCouponNo; + + /** + * 换卡操作者 + */ + private Integer rechargeUser; + + /** + * 换卡采摘点 + */ + private Integer rechargePlace; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "OLD_COUPON_ID") + public Integer getOldCouponId() { + return oldCouponId; + } + + public void setOldCouponId(Integer oldCouponId) { + this.oldCouponId = oldCouponId; + if(oldCouponId == null){ + removeValidField("oldCouponId"); + return; + } + addValidField("oldCouponId"); + } + + @Column(name = "OLD_COUPON_NO") + public String getOldCouponNo() { + return oldCouponNo; + } + + public void setOldCouponNo(String oldCouponNo) { + this.oldCouponNo = oldCouponNo; + if(oldCouponNo == null){ + removeValidField("oldCouponNo"); + return; + } + addValidField("oldCouponNo"); + } + + @Column(name = "NEW_COUPON_ID") + public Integer getNewCouponId() { + return newCouponId; + } + + public void setNewCouponId(Integer newCouponId) { + this.newCouponId = newCouponId; + if(newCouponId == null){ + removeValidField("newCouponId"); + return; + } + addValidField("newCouponId"); + } + + @Column(name = "NEW_COUPON_NO") + public String getNewCouponNo() { + return newCouponNo; + } + + public void setNewCouponNo(String newCouponNo) { + this.newCouponNo = newCouponNo; + if(newCouponNo == null){ + removeValidField("newCouponNo"); + return; + } + addValidField("newCouponNo"); + } + + @Column(name = "RECHARGE_USER") + public Integer getRechargeUser() { + return rechargeUser; + } + + public void setRechargeUser(Integer rechargeUser) { + this.rechargeUser = rechargeUser; + if(rechargeUser == null){ + removeValidField("rechargeUser"); + return; + } + addValidField("rechargeUser"); + } + + @Column(name = "RECHARGE_PLACE") + public Integer getRechargePlace() { + return rechargePlace; + } + + public void setRechargePlace(Integer rechargePlace) { + this.rechargePlace = rechargePlace; + if(rechargePlace == null){ + removeValidField("rechargePlace"); + return; + } + addValidField("rechargePlace"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/entity/TbExchangeCardLogExample.java b/src/main/java/com/xmomen/module/pick/entity/TbExchangeCardLogExample.java new file mode 100644 index 0000000..35f6f7d --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/TbExchangeCardLogExample.java @@ -0,0 +1,641 @@ +package com.xmomen.module.pick.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class TbExchangeCardLogExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbExchangeCardLogExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOldCouponIdIsNull() { + addCriterion("OLD_COUPON_ID is null"); + return (Criteria) this; + } + + public Criteria andOldCouponIdIsNotNull() { + addCriterion("OLD_COUPON_ID is not null"); + return (Criteria) this; + } + + public Criteria andOldCouponIdEqualTo(Integer value) { + addCriterion("OLD_COUPON_ID =", value, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdNotEqualTo(Integer value) { + addCriterion("OLD_COUPON_ID <>", value, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdGreaterThan(Integer value) { + addCriterion("OLD_COUPON_ID >", value, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdGreaterThanOrEqualTo(Integer value) { + addCriterion("OLD_COUPON_ID >=", value, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdLessThan(Integer value) { + addCriterion("OLD_COUPON_ID <", value, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdLessThanOrEqualTo(Integer value) { + addCriterion("OLD_COUPON_ID <=", value, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdIn(List values) { + addCriterion("OLD_COUPON_ID in", values, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdNotIn(List values) { + addCriterion("OLD_COUPON_ID not in", values, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdBetween(Integer value1, Integer value2) { + addCriterion("OLD_COUPON_ID between", value1, value2, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponIdNotBetween(Integer value1, Integer value2) { + addCriterion("OLD_COUPON_ID not between", value1, value2, "oldCouponId"); + return (Criteria) this; + } + + public Criteria andOldCouponNoIsNull() { + addCriterion("OLD_COUPON_NO is null"); + return (Criteria) this; + } + + public Criteria andOldCouponNoIsNotNull() { + addCriterion("OLD_COUPON_NO is not null"); + return (Criteria) this; + } + + public Criteria andOldCouponNoEqualTo(String value) { + addCriterion("OLD_COUPON_NO =", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoNotEqualTo(String value) { + addCriterion("OLD_COUPON_NO <>", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoGreaterThan(String value) { + addCriterion("OLD_COUPON_NO >", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoGreaterThanOrEqualTo(String value) { + addCriterion("OLD_COUPON_NO >=", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoLessThan(String value) { + addCriterion("OLD_COUPON_NO <", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoLessThanOrEqualTo(String value) { + addCriterion("OLD_COUPON_NO <=", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoLike(String value) { + addCriterion("OLD_COUPON_NO like", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoNotLike(String value) { + addCriterion("OLD_COUPON_NO not like", value, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoIn(List values) { + addCriterion("OLD_COUPON_NO in", values, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoNotIn(List values) { + addCriterion("OLD_COUPON_NO not in", values, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoBetween(String value1, String value2) { + addCriterion("OLD_COUPON_NO between", value1, value2, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andOldCouponNoNotBetween(String value1, String value2) { + addCriterion("OLD_COUPON_NO not between", value1, value2, "oldCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponIdIsNull() { + addCriterion("NEW_COUPON_ID is null"); + return (Criteria) this; + } + + public Criteria andNewCouponIdIsNotNull() { + addCriterion("NEW_COUPON_ID is not null"); + return (Criteria) this; + } + + public Criteria andNewCouponIdEqualTo(Integer value) { + addCriterion("NEW_COUPON_ID =", value, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdNotEqualTo(Integer value) { + addCriterion("NEW_COUPON_ID <>", value, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdGreaterThan(Integer value) { + addCriterion("NEW_COUPON_ID >", value, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdGreaterThanOrEqualTo(Integer value) { + addCriterion("NEW_COUPON_ID >=", value, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdLessThan(Integer value) { + addCriterion("NEW_COUPON_ID <", value, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdLessThanOrEqualTo(Integer value) { + addCriterion("NEW_COUPON_ID <=", value, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdIn(List values) { + addCriterion("NEW_COUPON_ID in", values, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdNotIn(List values) { + addCriterion("NEW_COUPON_ID not in", values, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdBetween(Integer value1, Integer value2) { + addCriterion("NEW_COUPON_ID between", value1, value2, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponIdNotBetween(Integer value1, Integer value2) { + addCriterion("NEW_COUPON_ID not between", value1, value2, "newCouponId"); + return (Criteria) this; + } + + public Criteria andNewCouponNoIsNull() { + addCriterion("NEW_COUPON_NO is null"); + return (Criteria) this; + } + + public Criteria andNewCouponNoIsNotNull() { + addCriterion("NEW_COUPON_NO is not null"); + return (Criteria) this; + } + + public Criteria andNewCouponNoEqualTo(String value) { + addCriterion("NEW_COUPON_NO =", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoNotEqualTo(String value) { + addCriterion("NEW_COUPON_NO <>", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoGreaterThan(String value) { + addCriterion("NEW_COUPON_NO >", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoGreaterThanOrEqualTo(String value) { + addCriterion("NEW_COUPON_NO >=", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoLessThan(String value) { + addCriterion("NEW_COUPON_NO <", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoLessThanOrEqualTo(String value) { + addCriterion("NEW_COUPON_NO <=", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoLike(String value) { + addCriterion("NEW_COUPON_NO like", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoNotLike(String value) { + addCriterion("NEW_COUPON_NO not like", value, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoIn(List values) { + addCriterion("NEW_COUPON_NO in", values, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoNotIn(List values) { + addCriterion("NEW_COUPON_NO not in", values, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoBetween(String value1, String value2) { + addCriterion("NEW_COUPON_NO between", value1, value2, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andNewCouponNoNotBetween(String value1, String value2) { + addCriterion("NEW_COUPON_NO not between", value1, value2, "newCouponNo"); + return (Criteria) this; + } + + public Criteria andRechargeUserIsNull() { + addCriterion("RECHARGE_USER is null"); + return (Criteria) this; + } + + public Criteria andRechargeUserIsNotNull() { + addCriterion("RECHARGE_USER is not null"); + return (Criteria) this; + } + + public Criteria andRechargeUserEqualTo(Integer value) { + addCriterion("RECHARGE_USER =", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserNotEqualTo(Integer value) { + addCriterion("RECHARGE_USER <>", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserGreaterThan(Integer value) { + addCriterion("RECHARGE_USER >", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserGreaterThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_USER >=", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserLessThan(Integer value) { + addCriterion("RECHARGE_USER <", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserLessThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_USER <=", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserIn(List values) { + addCriterion("RECHARGE_USER in", values, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserNotIn(List values) { + addCriterion("RECHARGE_USER not in", values, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_USER between", value1, value2, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserNotBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_USER not between", value1, value2, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargePlaceIsNull() { + addCriterion("RECHARGE_PLACE is null"); + return (Criteria) this; + } + + public Criteria andRechargePlaceIsNotNull() { + addCriterion("RECHARGE_PLACE is not null"); + return (Criteria) this; + } + + public Criteria andRechargePlaceEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE =", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceNotEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE <>", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceGreaterThan(Integer value) { + addCriterion("RECHARGE_PLACE >", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceGreaterThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE >=", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceLessThan(Integer value) { + addCriterion("RECHARGE_PLACE <", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceLessThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE <=", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceIn(List values) { + addCriterion("RECHARGE_PLACE in", values, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceNotIn(List values) { + addCriterion("RECHARGE_PLACE not in", values, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_PLACE between", value1, value2, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceNotBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_PLACE not between", value1, value2, "rechargePlace"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/entity/TbPick.java b/src/main/java/com/xmomen/module/pick/entity/TbPick.java new file mode 100644 index 0000000..f4e9914 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/TbPick.java @@ -0,0 +1,207 @@ +package com.xmomen.module.pick.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_pick") +public class TbPick extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 卡号 + */ + private String couponNo; + + /** + * 采摘重量 + */ + private BigDecimal pickWeight; + + /** + * 采摘付款方式(1-刷卡,2-现金+刷卡,3-现金) + */ + private Integer pickPayType; + + /** + * 采摘总金额(刷卡+现金) + */ + private BigDecimal pickTotalPrice; + + /** + * 刷卡金额 + */ + private BigDecimal pickCradPrice; + + /** + * 现金 + */ + private BigDecimal pickCasePrice; + + /** + * 采摘日期 + */ + private Date pickDate; + + /** + * 采摘点 + */ + private Integer pickPlace; + + /** + * 结算人 + */ + private Integer pickPlaceUser; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "COUPON_NO") + public String getCouponNo() { + return couponNo; + } + + public void setCouponNo(String couponNo) { + this.couponNo = couponNo; + if(couponNo == null){ + removeValidField("couponNo"); + return; + } + addValidField("couponNo"); + } + + @Column(name = "PICK_WEIGHT") + public BigDecimal getPickWeight() { + return pickWeight; + } + + public void setPickWeight(BigDecimal pickWeight) { + this.pickWeight = pickWeight; + if(pickWeight == null){ + removeValidField("pickWeight"); + return; + } + addValidField("pickWeight"); + } + + @Column(name = "PICK_PAY_TYPE") + public Integer getPickPayType() { + return pickPayType; + } + + public void setPickPayType(Integer pickPayType) { + this.pickPayType = pickPayType; + if(pickPayType == null){ + removeValidField("pickPayType"); + return; + } + addValidField("pickPayType"); + } + + @Column(name = "PICK_TOTAL_PRICE") + public BigDecimal getPickTotalPrice() { + return pickTotalPrice; + } + + public void setPickTotalPrice(BigDecimal pickTotalPrice) { + this.pickTotalPrice = pickTotalPrice; + if(pickTotalPrice == null){ + removeValidField("pickTotalPrice"); + return; + } + addValidField("pickTotalPrice"); + } + + @Column(name = "PICK_CRAD_PRICE") + public BigDecimal getPickCradPrice() { + return pickCradPrice; + } + + public void setPickCradPrice(BigDecimal pickCradPrice) { + this.pickCradPrice = pickCradPrice; + if(pickCradPrice == null){ + removeValidField("pickCradPrice"); + return; + } + addValidField("pickCradPrice"); + } + + @Column(name = "PICK_CASE_PRICE") + public BigDecimal getPickCasePrice() { + return pickCasePrice; + } + + public void setPickCasePrice(BigDecimal pickCasePrice) { + this.pickCasePrice = pickCasePrice; + if(pickCasePrice == null){ + removeValidField("pickCasePrice"); + return; + } + addValidField("pickCasePrice"); + } + + @Column(name = "PICK_DATE") + public Date getPickDate() { + return pickDate; + } + + public void setPickDate(Date pickDate) { + this.pickDate = pickDate; + if(pickDate == null){ + removeValidField("pickDate"); + return; + } + addValidField("pickDate"); + } + + @Column(name = "PICK_PLACE") + public Integer getPickPlace() { + return pickPlace; + } + + public void setPickPlace(Integer pickPlace) { + this.pickPlace = pickPlace; + if(pickPlace == null){ + removeValidField("pickPlace"); + return; + } + addValidField("pickPlace"); + } + + @Column(name = "PICK_PLACE_USER") + public Integer getPickPlaceUser() { + return pickPlaceUser; + } + + public void setPickPlaceUser(Integer pickPlaceUser) { + this.pickPlaceUser = pickPlaceUser; + if(pickPlaceUser == null){ + removeValidField("pickPlaceUser"); + return; + } + addValidField("pickPlaceUser"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/entity/TbPickExample.java b/src/main/java/com/xmomen/module/pick/entity/TbPickExample.java new file mode 100644 index 0000000..20f6a77 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/TbPickExample.java @@ -0,0 +1,813 @@ +package com.xmomen.module.pick.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TbPickExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbPickExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCouponNoIsNull() { + addCriterion("COUPON_NO is null"); + return (Criteria) this; + } + + public Criteria andCouponNoIsNotNull() { + addCriterion("COUPON_NO is not null"); + return (Criteria) this; + } + + public Criteria andCouponNoEqualTo(String value) { + addCriterion("COUPON_NO =", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotEqualTo(String value) { + addCriterion("COUPON_NO <>", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoGreaterThan(String value) { + addCriterion("COUPON_NO >", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoGreaterThanOrEqualTo(String value) { + addCriterion("COUPON_NO >=", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoLessThan(String value) { + addCriterion("COUPON_NO <", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoLessThanOrEqualTo(String value) { + addCriterion("COUPON_NO <=", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoLike(String value) { + addCriterion("COUPON_NO like", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotLike(String value) { + addCriterion("COUPON_NO not like", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoIn(List values) { + addCriterion("COUPON_NO in", values, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotIn(List values) { + addCriterion("COUPON_NO not in", values, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoBetween(String value1, String value2) { + addCriterion("COUPON_NO between", value1, value2, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotBetween(String value1, String value2) { + addCriterion("COUPON_NO not between", value1, value2, "couponNo"); + return (Criteria) this; + } + + public Criteria andPickWeightIsNull() { + addCriterion("PICK_WEIGHT is null"); + return (Criteria) this; + } + + public Criteria andPickWeightIsNotNull() { + addCriterion("PICK_WEIGHT is not null"); + return (Criteria) this; + } + + public Criteria andPickWeightEqualTo(BigDecimal value) { + addCriterion("PICK_WEIGHT =", value, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightNotEqualTo(BigDecimal value) { + addCriterion("PICK_WEIGHT <>", value, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightGreaterThan(BigDecimal value) { + addCriterion("PICK_WEIGHT >", value, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_WEIGHT >=", value, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightLessThan(BigDecimal value) { + addCriterion("PICK_WEIGHT <", value, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightLessThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_WEIGHT <=", value, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightIn(List values) { + addCriterion("PICK_WEIGHT in", values, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightNotIn(List values) { + addCriterion("PICK_WEIGHT not in", values, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_WEIGHT between", value1, value2, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickWeightNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_WEIGHT not between", value1, value2, "pickWeight"); + return (Criteria) this; + } + + public Criteria andPickPayTypeIsNull() { + addCriterion("PICK_PAY_TYPE is null"); + return (Criteria) this; + } + + public Criteria andPickPayTypeIsNotNull() { + addCriterion("PICK_PAY_TYPE is not null"); + return (Criteria) this; + } + + public Criteria andPickPayTypeEqualTo(Integer value) { + addCriterion("PICK_PAY_TYPE =", value, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeNotEqualTo(Integer value) { + addCriterion("PICK_PAY_TYPE <>", value, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeGreaterThan(Integer value) { + addCriterion("PICK_PAY_TYPE >", value, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("PICK_PAY_TYPE >=", value, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeLessThan(Integer value) { + addCriterion("PICK_PAY_TYPE <", value, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeLessThanOrEqualTo(Integer value) { + addCriterion("PICK_PAY_TYPE <=", value, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeIn(List values) { + addCriterion("PICK_PAY_TYPE in", values, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeNotIn(List values) { + addCriterion("PICK_PAY_TYPE not in", values, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeBetween(Integer value1, Integer value2) { + addCriterion("PICK_PAY_TYPE between", value1, value2, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickPayTypeNotBetween(Integer value1, Integer value2) { + addCriterion("PICK_PAY_TYPE not between", value1, value2, "pickPayType"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceIsNull() { + addCriterion("PICK_TOTAL_PRICE is null"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceIsNotNull() { + addCriterion("PICK_TOTAL_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceEqualTo(BigDecimal value) { + addCriterion("PICK_TOTAL_PRICE =", value, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceNotEqualTo(BigDecimal value) { + addCriterion("PICK_TOTAL_PRICE <>", value, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceGreaterThan(BigDecimal value) { + addCriterion("PICK_TOTAL_PRICE >", value, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_TOTAL_PRICE >=", value, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceLessThan(BigDecimal value) { + addCriterion("PICK_TOTAL_PRICE <", value, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_TOTAL_PRICE <=", value, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceIn(List values) { + addCriterion("PICK_TOTAL_PRICE in", values, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceNotIn(List values) { + addCriterion("PICK_TOTAL_PRICE not in", values, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_TOTAL_PRICE between", value1, value2, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickTotalPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_TOTAL_PRICE not between", value1, value2, "pickTotalPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceIsNull() { + addCriterion("PICK_CRAD_PRICE is null"); + return (Criteria) this; + } + + public Criteria andPickCradPriceIsNotNull() { + addCriterion("PICK_CRAD_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andPickCradPriceEqualTo(BigDecimal value) { + addCriterion("PICK_CRAD_PRICE =", value, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceNotEqualTo(BigDecimal value) { + addCriterion("PICK_CRAD_PRICE <>", value, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceGreaterThan(BigDecimal value) { + addCriterion("PICK_CRAD_PRICE >", value, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_CRAD_PRICE >=", value, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceLessThan(BigDecimal value) { + addCriterion("PICK_CRAD_PRICE <", value, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_CRAD_PRICE <=", value, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceIn(List values) { + addCriterion("PICK_CRAD_PRICE in", values, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceNotIn(List values) { + addCriterion("PICK_CRAD_PRICE not in", values, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_CRAD_PRICE between", value1, value2, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCradPriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_CRAD_PRICE not between", value1, value2, "pickCradPrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceIsNull() { + addCriterion("PICK_CASE_PRICE is null"); + return (Criteria) this; + } + + public Criteria andPickCasePriceIsNotNull() { + addCriterion("PICK_CASE_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andPickCasePriceEqualTo(BigDecimal value) { + addCriterion("PICK_CASE_PRICE =", value, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceNotEqualTo(BigDecimal value) { + addCriterion("PICK_CASE_PRICE <>", value, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceGreaterThan(BigDecimal value) { + addCriterion("PICK_CASE_PRICE >", value, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_CASE_PRICE >=", value, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceLessThan(BigDecimal value) { + addCriterion("PICK_CASE_PRICE <", value, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("PICK_CASE_PRICE <=", value, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceIn(List values) { + addCriterion("PICK_CASE_PRICE in", values, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceNotIn(List values) { + addCriterion("PICK_CASE_PRICE not in", values, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_CASE_PRICE between", value1, value2, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickCasePriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("PICK_CASE_PRICE not between", value1, value2, "pickCasePrice"); + return (Criteria) this; + } + + public Criteria andPickDateIsNull() { + addCriterion("PICK_DATE is null"); + return (Criteria) this; + } + + public Criteria andPickDateIsNotNull() { + addCriterion("PICK_DATE is not null"); + return (Criteria) this; + } + + public Criteria andPickDateEqualTo(Date value) { + addCriterion("PICK_DATE =", value, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateNotEqualTo(Date value) { + addCriterion("PICK_DATE <>", value, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateGreaterThan(Date value) { + addCriterion("PICK_DATE >", value, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateGreaterThanOrEqualTo(Date value) { + addCriterion("PICK_DATE >=", value, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateLessThan(Date value) { + addCriterion("PICK_DATE <", value, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateLessThanOrEqualTo(Date value) { + addCriterion("PICK_DATE <=", value, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateIn(List values) { + addCriterion("PICK_DATE in", values, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateNotIn(List values) { + addCriterion("PICK_DATE not in", values, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateBetween(Date value1, Date value2) { + addCriterion("PICK_DATE between", value1, value2, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickDateNotBetween(Date value1, Date value2) { + addCriterion("PICK_DATE not between", value1, value2, "pickDate"); + return (Criteria) this; + } + + public Criteria andPickPlaceIsNull() { + addCriterion("PICK_PLACE is null"); + return (Criteria) this; + } + + public Criteria andPickPlaceIsNotNull() { + addCriterion("PICK_PLACE is not null"); + return (Criteria) this; + } + + public Criteria andPickPlaceEqualTo(Integer value) { + addCriterion("PICK_PLACE =", value, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceNotEqualTo(Integer value) { + addCriterion("PICK_PLACE <>", value, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceGreaterThan(Integer value) { + addCriterion("PICK_PLACE >", value, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceGreaterThanOrEqualTo(Integer value) { + addCriterion("PICK_PLACE >=", value, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceLessThan(Integer value) { + addCriterion("PICK_PLACE <", value, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceLessThanOrEqualTo(Integer value) { + addCriterion("PICK_PLACE <=", value, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceIn(List values) { + addCriterion("PICK_PLACE in", values, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceNotIn(List values) { + addCriterion("PICK_PLACE not in", values, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceBetween(Integer value1, Integer value2) { + addCriterion("PICK_PLACE between", value1, value2, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceNotBetween(Integer value1, Integer value2) { + addCriterion("PICK_PLACE not between", value1, value2, "pickPlace"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserIsNull() { + addCriterion("PICK_PLACE_USER is null"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserIsNotNull() { + addCriterion("PICK_PLACE_USER is not null"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserEqualTo(Integer value) { + addCriterion("PICK_PLACE_USER =", value, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserNotEqualTo(Integer value) { + addCriterion("PICK_PLACE_USER <>", value, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserGreaterThan(Integer value) { + addCriterion("PICK_PLACE_USER >", value, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserGreaterThanOrEqualTo(Integer value) { + addCriterion("PICK_PLACE_USER >=", value, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserLessThan(Integer value) { + addCriterion("PICK_PLACE_USER <", value, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserLessThanOrEqualTo(Integer value) { + addCriterion("PICK_PLACE_USER <=", value, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserIn(List values) { + addCriterion("PICK_PLACE_USER in", values, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserNotIn(List values) { + addCriterion("PICK_PLACE_USER not in", values, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserBetween(Integer value1, Integer value2) { + addCriterion("PICK_PLACE_USER between", value1, value2, "pickPlaceUser"); + return (Criteria) this; + } + + public Criteria andPickPlaceUserNotBetween(Integer value1, Integer value2) { + addCriterion("PICK_PLACE_USER not between", value1, value2, "pickPlaceUser"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/entity/TbRechargeLog.java b/src/main/java/com/xmomen/module/pick/entity/TbRechargeLog.java new file mode 100644 index 0000000..01bd1e8 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/TbRechargeLog.java @@ -0,0 +1,131 @@ +package com.xmomen.module.pick.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.math.BigDecimal; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_recharge_log") +public class TbRechargeLog extends BaseMybatisModel { + /** + * 充值记录 + */ + private Integer id; + + /** + * 充值的卡号 + */ + private String couponNo; + + /** + * 充值金额 + */ + private BigDecimal rechargePrice; + + /** + * 充值时间 + */ + private Date rechargeDate; + + /** + * 充值人 + */ + private Integer rechargeUser; + + /** + * 充值地点 + */ + private Integer rechargePlace; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "COUPON_NO") + public String getCouponNo() { + return couponNo; + } + + public void setCouponNo(String couponNo) { + this.couponNo = couponNo; + if(couponNo == null){ + removeValidField("couponNo"); + return; + } + addValidField("couponNo"); + } + + @Column(name = "RECHARGE_PRICE") + public BigDecimal getRechargePrice() { + return rechargePrice; + } + + public void setRechargePrice(BigDecimal rechargePrice) { + this.rechargePrice = rechargePrice; + if(rechargePrice == null){ + removeValidField("rechargePrice"); + return; + } + addValidField("rechargePrice"); + } + + @Column(name = "RECHARGE_DATE") + public Date getRechargeDate() { + return rechargeDate; + } + + public void setRechargeDate(Date rechargeDate) { + this.rechargeDate = rechargeDate; + if(rechargeDate == null){ + removeValidField("rechargeDate"); + return; + } + addValidField("rechargeDate"); + } + + @Column(name = "RECHARGE_USER") + public Integer getRechargeUser() { + return rechargeUser; + } + + public void setRechargeUser(Integer rechargeUser) { + this.rechargeUser = rechargeUser; + if(rechargeUser == null){ + removeValidField("rechargeUser"); + return; + } + addValidField("rechargeUser"); + } + + @Column(name = "RECHARGE_PLACE") + public Integer getRechargePlace() { + return rechargePlace; + } + + public void setRechargePlace(Integer rechargePlace) { + this.rechargePlace = rechargePlace; + if(rechargePlace == null){ + removeValidField("rechargePlace"); + return; + } + addValidField("rechargePlace"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/entity/TbRechargeLogExample.java b/src/main/java/com/xmomen/module/pick/entity/TbRechargeLogExample.java new file mode 100644 index 0000000..e64309f --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/TbRechargeLogExample.java @@ -0,0 +1,573 @@ +package com.xmomen.module.pick.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class TbRechargeLogExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public TbRechargeLogExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andCouponNoIsNull() { + addCriterion("COUPON_NO is null"); + return (Criteria) this; + } + + public Criteria andCouponNoIsNotNull() { + addCriterion("COUPON_NO is not null"); + return (Criteria) this; + } + + public Criteria andCouponNoEqualTo(String value) { + addCriterion("COUPON_NO =", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotEqualTo(String value) { + addCriterion("COUPON_NO <>", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoGreaterThan(String value) { + addCriterion("COUPON_NO >", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoGreaterThanOrEqualTo(String value) { + addCriterion("COUPON_NO >=", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoLessThan(String value) { + addCriterion("COUPON_NO <", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoLessThanOrEqualTo(String value) { + addCriterion("COUPON_NO <=", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoLike(String value) { + addCriterion("COUPON_NO like", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotLike(String value) { + addCriterion("COUPON_NO not like", value, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoIn(List values) { + addCriterion("COUPON_NO in", values, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotIn(List values) { + addCriterion("COUPON_NO not in", values, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoBetween(String value1, String value2) { + addCriterion("COUPON_NO between", value1, value2, "couponNo"); + return (Criteria) this; + } + + public Criteria andCouponNoNotBetween(String value1, String value2) { + addCriterion("COUPON_NO not between", value1, value2, "couponNo"); + return (Criteria) this; + } + + public Criteria andRechargePriceIsNull() { + addCriterion("RECHARGE_PRICE is null"); + return (Criteria) this; + } + + public Criteria andRechargePriceIsNotNull() { + addCriterion("RECHARGE_PRICE is not null"); + return (Criteria) this; + } + + public Criteria andRechargePriceEqualTo(BigDecimal value) { + addCriterion("RECHARGE_PRICE =", value, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceNotEqualTo(BigDecimal value) { + addCriterion("RECHARGE_PRICE <>", value, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceGreaterThan(BigDecimal value) { + addCriterion("RECHARGE_PRICE >", value, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceGreaterThanOrEqualTo(BigDecimal value) { + addCriterion("RECHARGE_PRICE >=", value, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceLessThan(BigDecimal value) { + addCriterion("RECHARGE_PRICE <", value, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceLessThanOrEqualTo(BigDecimal value) { + addCriterion("RECHARGE_PRICE <=", value, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceIn(List values) { + addCriterion("RECHARGE_PRICE in", values, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceNotIn(List values) { + addCriterion("RECHARGE_PRICE not in", values, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("RECHARGE_PRICE between", value1, value2, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargePriceNotBetween(BigDecimal value1, BigDecimal value2) { + addCriterion("RECHARGE_PRICE not between", value1, value2, "rechargePrice"); + return (Criteria) this; + } + + public Criteria andRechargeDateIsNull() { + addCriterion("RECHARGE_DATE is null"); + return (Criteria) this; + } + + public Criteria andRechargeDateIsNotNull() { + addCriterion("RECHARGE_DATE is not null"); + return (Criteria) this; + } + + public Criteria andRechargeDateEqualTo(Date value) { + addCriterion("RECHARGE_DATE =", value, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateNotEqualTo(Date value) { + addCriterion("RECHARGE_DATE <>", value, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateGreaterThan(Date value) { + addCriterion("RECHARGE_DATE >", value, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateGreaterThanOrEqualTo(Date value) { + addCriterion("RECHARGE_DATE >=", value, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateLessThan(Date value) { + addCriterion("RECHARGE_DATE <", value, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateLessThanOrEqualTo(Date value) { + addCriterion("RECHARGE_DATE <=", value, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateIn(List values) { + addCriterion("RECHARGE_DATE in", values, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateNotIn(List values) { + addCriterion("RECHARGE_DATE not in", values, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateBetween(Date value1, Date value2) { + addCriterion("RECHARGE_DATE between", value1, value2, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeDateNotBetween(Date value1, Date value2) { + addCriterion("RECHARGE_DATE not between", value1, value2, "rechargeDate"); + return (Criteria) this; + } + + public Criteria andRechargeUserIsNull() { + addCriterion("RECHARGE_USER is null"); + return (Criteria) this; + } + + public Criteria andRechargeUserIsNotNull() { + addCriterion("RECHARGE_USER is not null"); + return (Criteria) this; + } + + public Criteria andRechargeUserEqualTo(Integer value) { + addCriterion("RECHARGE_USER =", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserNotEqualTo(Integer value) { + addCriterion("RECHARGE_USER <>", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserGreaterThan(Integer value) { + addCriterion("RECHARGE_USER >", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserGreaterThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_USER >=", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserLessThan(Integer value) { + addCriterion("RECHARGE_USER <", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserLessThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_USER <=", value, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserIn(List values) { + addCriterion("RECHARGE_USER in", values, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserNotIn(List values) { + addCriterion("RECHARGE_USER not in", values, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_USER between", value1, value2, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargeUserNotBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_USER not between", value1, value2, "rechargeUser"); + return (Criteria) this; + } + + public Criteria andRechargePlaceIsNull() { + addCriterion("RECHARGE_PLACE is null"); + return (Criteria) this; + } + + public Criteria andRechargePlaceIsNotNull() { + addCriterion("RECHARGE_PLACE is not null"); + return (Criteria) this; + } + + public Criteria andRechargePlaceEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE =", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceNotEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE <>", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceGreaterThan(Integer value) { + addCriterion("RECHARGE_PLACE >", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceGreaterThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE >=", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceLessThan(Integer value) { + addCriterion("RECHARGE_PLACE <", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceLessThanOrEqualTo(Integer value) { + addCriterion("RECHARGE_PLACE <=", value, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceIn(List values) { + addCriterion("RECHARGE_PLACE in", values, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceNotIn(List values) { + addCriterion("RECHARGE_PLACE not in", values, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_PLACE between", value1, value2, "rechargePlace"); + return (Criteria) this; + } + + public Criteria andRechargePlaceNotBetween(Integer value1, Integer value2) { + addCriterion("RECHARGE_PLACE not between", value1, value2, "rechargePlace"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/entity/mapper/TbExchangeCardLogMapper.java b/src/main/java/com/xmomen/module/pick/entity/mapper/TbExchangeCardLogMapper.java new file mode 100644 index 0000000..78cfac5 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/mapper/TbExchangeCardLogMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.pick.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.pick.entity.TbExchangeCardLog; +import com.xmomen.module.pick.entity.TbExchangeCardLogExample; +import org.apache.ibatis.annotations.Param; + +public interface TbExchangeCardLogMapper extends MybatisMapper { + int countByExample(TbExchangeCardLogExample example); + + int deleteByExample(TbExchangeCardLogExample example); + + int insertSelective(TbExchangeCardLog record); + + int updateByExampleSelective(@Param("record") TbExchangeCardLog record, @Param("example") TbExchangeCardLogExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/entity/mapper/TbRechargeLogMapper.java b/src/main/java/com/xmomen/module/pick/entity/mapper/TbRechargeLogMapper.java new file mode 100644 index 0000000..da7f6e5 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/entity/mapper/TbRechargeLogMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.pick.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.pick.entity.TbRechargeLog; +import com.xmomen.module.pick.entity.TbRechargeLogExample; +import org.apache.ibatis.annotations.Param; + +public interface TbRechargeLogMapper extends MybatisMapper { + int countByExample(TbRechargeLogExample example); + + int deleteByExample(TbRechargeLogExample example); + + int insertSelective(TbRechargeLog record); + + int updateByExampleSelective(@Param("record") TbRechargeLog record, @Param("example") TbRechargeLogExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/pick/model/PickVo.java b/src/main/java/com/xmomen/module/pick/model/PickVo.java new file mode 100644 index 0000000..b23cb83 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/model/PickVo.java @@ -0,0 +1,15 @@ +package com.xmomen.module.pick.model; + +import java.io.Serializable; +import java.math.BigDecimal; + +import lombok.Data; + +public @Data +class PickVo implements Serializable{ + private BigDecimal pickWeight; + private BigDecimal pickPrice; + private Integer pickPayType; + private BigDecimal pickCasePrice; + private String couponNo; +} diff --git a/src/main/java/com/xmomen/module/pick/service/PickService.java b/src/main/java/com/xmomen/module/pick/service/PickService.java new file mode 100644 index 0000000..e464830 --- /dev/null +++ b/src/main/java/com/xmomen/module/pick/service/PickService.java @@ -0,0 +1,10 @@ +package com.xmomen.module.pick.service; + +import com.xmomen.module.pick.model.CreateMember; +import com.xmomen.module.pick.model.PickVo; + +public interface PickService { + public void pick(PickVo pickVo); + + public void pickCard(CreateMember createMember); +} diff --git a/src/main/java/com/xmomen/module/plan/controller/TablePlanController.java b/src/main/java/com/xmomen/module/plan/controller/TablePlanController.java new file mode 100644 index 0000000..e48f737 --- /dev/null +++ b/src/main/java/com/xmomen/module/plan/controller/TablePlanController.java @@ -0,0 +1,139 @@ +package com.xmomen.module.plan.controller; + +import java.util.HashMap; +import java.util.Map; + +import javax.validation.Valid; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.logger.Log; +import com.xmomen.module.plan.entity.TbTablePlan; +import com.xmomen.module.plan.mapper.TablePlanMapper; +import com.xmomen.module.plan.model.CreateTablePlan; +import com.xmomen.module.plan.model.TablePlanModel; +import com.xmomen.module.plan.model.UpdateTablePlan; +import com.xmomen.module.plan.service.TablePlanSercvice; +import com.xmomen.module.user.entity.SysUsers; + +/** + * Created by ted on 16/3/28. + */ +@RestController +public class TablePlanController { + + @Autowired + TablePlanSercvice tablePlanService; + @Autowired + TablePlanMapper tablePlanMapper; + @Autowired + MybatisDao mybatisDao; + /** + * 查询餐桌信息 + * @param id + * @return + */ + @RequestMapping(value = "/tablePlan", method = RequestMethod.GET) + @Log(actionName = "查询餐桌信息") + public Page getTablePlanList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) Integer id, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "phoneNumber", required = false) String phoneNumber){ + Map map = new HashMap(); + map.put("id", id); + map.put("keyword", keyword); + if(StringUtils.trimToNull(phoneNumber) != null){ + map.put("phoneNumber", phoneNumber); + } + //客服经理过滤 如果有客服组权限则不过滤 + if(SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE)){ + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + map.put("userId",userId); + } + return (Page) mybatisDao.selectPage(TablePlanMapper.TablePlanMapperNameSpace + "getTablePlanList", map, limit, offset); + } + + + @RequestMapping(value = "/tablePlan", method = RequestMethod.POST) + @Log(actionName = "新增餐桌") + public void createTablePlan(@RequestBody @Valid CreateTablePlan createTablePlan, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + tablePlanService.createTablePlan(createTablePlan); + } + + /** + * 根据ID查询餐桌信息 + * @param id + */ + @RequestMapping(value = "/tablePlan/{id}", method = RequestMethod.GET) + @Log(actionName = "根据ID查询餐桌信息") + public TablePlanModel getTablePlan(@PathVariable(value = "id") Integer id){ + Map map = new HashMap(); + map.put("id", id); + return mybatisDao.getSqlSessionTemplate().selectOne(TablePlanMapper.TablePlanMapperNameSpace + "getTablePlanList", map); + } + + /** + * 修改 + * @param id + */ + @RequestMapping(value = "/tablePlan/{id}", method = RequestMethod.PUT) + @Log(actionName = "修改餐桌信息") + public void updateTablePlan(@PathVariable(value = "id") Integer id, + @RequestBody @Valid UpdateTablePlan updateTablePlan, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + tablePlanService.updateTablePlan(id,updateTablePlan); + } + + /** + * 删除 + * @param id + */ + @RequestMapping(value = "/tablePlan/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除餐桌信息") + public void deleteTablePlan(@PathVariable(value = "id") Integer id){ + tablePlanService.delete(id); + } + + /** + * 暂停配送 + * @param id + */ + @RequestMapping(value = "/tablePlan/{id}/stop", method = RequestMethod.PUT) + @Log(actionName = "暂停配送") + public void stop(@PathVariable(value = "id") Integer id, + @RequestParam(value = "locked") Boolean locked){ + TbTablePlan tablePlan = new TbTablePlan(); + tablePlan.setIsStop(locked ? 1 : 0); + tablePlan.setId(id); + mybatisDao.update(tablePlan); + } + + /** + * 暂停配送 + * @param id + */ + @RequestMapping(value = "/tablePlan/createPlanOrder", method = RequestMethod.PUT) + @Log(actionName = "手工调用") + public void createPlanOrder(){ + tablePlanService.createTablePlanOrder(); + } +} diff --git a/src/main/java/com/xmomen/module/plan/entity/TbTablePlan.java b/src/main/java/com/xmomen/module/plan/entity/TbTablePlan.java new file mode 100644 index 0000000..7e54f32 --- /dev/null +++ b/src/main/java/com/xmomen/module/plan/entity/TbTablePlan.java @@ -0,0 +1,339 @@ +package com.xmomen.module.plan.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "tb_table_plan") +public class TbTablePlan extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 餐桌计划 + */ + private Integer cdPlanId; + + /** + * 审核状态(0-未审核,1-审核通过) + */ + private Integer auditStatus; + + /** + * 是否暂停 0-不暂停,1-暂停 + */ + private Integer isStop; + + /** + * + */ + private Integer cdMemberId; + + /** + * 卡号 + */ + private String couponNumber; + + /** + * 客户编号 + */ + private String memberCode; + + /** + * 手机号 + */ + private String consigneePhone; + + /** + * 收货人姓名 + */ + private String consigneeName; + + /** + * 收货人地址 + */ + private String consigneeAddress; + + /** + * 邮政编码 + */ + private String postcode; + + /** + * 星期几配送 + */ + private String sendWeekDay; + + /** + * 总配送次数 + */ + private Integer totalSendValue; + + /** + * 已配送次数 + */ + private Integer sendValue; + + /** + * 上次配送时间 + */ + private Date lastSendDate; + + /** + * 下次配送时间 + */ + private Date nextSendDate; + + /** + * 生效时间 + */ + private Date beginTime; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "CD_PLAN_ID") + public Integer getCdPlanId() { + return cdPlanId; + } + + public void setCdPlanId(Integer cdPlanId) { + this.cdPlanId = cdPlanId; + if(cdPlanId == null){ + removeValidField("cdPlanId"); + return; + } + addValidField("cdPlanId"); + } + + @Column(name = "AUDIT_STATUS") + public Integer getAuditStatus() { + return auditStatus; + } + + public void setAuditStatus(Integer auditStatus) { + this.auditStatus = auditStatus; + if(auditStatus == null){ + removeValidField("auditStatus"); + return; + } + addValidField("auditStatus"); + } + + @Column(name = "IS_STOP") + public Integer getIsStop() { + return isStop; + } + + public void setIsStop(Integer isStop) { + this.isStop = isStop; + if(isStop == null){ + removeValidField("isStop"); + return; + } + addValidField("isStop"); + } + + @Column(name = "CD_MEMBER_ID") + public Integer getCdMemberId() { + return cdMemberId; + } + + public void setCdMemberId(Integer cdMemberId) { + this.cdMemberId = cdMemberId; + if(cdMemberId == null){ + removeValidField("cdMemberId"); + return; + } + addValidField("cdMemberId"); + } + + @Column(name = "COUPON_NUMBER") + public String getCouponNumber() { + return couponNumber; + } + + public void setCouponNumber(String couponNumber) { + this.couponNumber = couponNumber; + if(couponNumber == null){ + removeValidField("couponNumber"); + return; + } + addValidField("couponNumber"); + } + + @Column(name = "MEMBER_CODE") + public String getMemberCode() { + return memberCode; + } + + public void setMemberCode(String memberCode) { + this.memberCode = memberCode; + if(memberCode == null){ + removeValidField("memberCode"); + return; + } + addValidField("memberCode"); + } + + @Column(name = "CONSIGNEE_PHONE") + public String getConsigneePhone() { + return consigneePhone; + } + + public void setConsigneePhone(String consigneePhone) { + this.consigneePhone = consigneePhone; + if(consigneePhone == null){ + removeValidField("consigneePhone"); + return; + } + addValidField("consigneePhone"); + } + + @Column(name = "CONSIGNEE_NAME") + public String getConsigneeName() { + return consigneeName; + } + + public void setConsigneeName(String consigneeName) { + this.consigneeName = consigneeName; + if(consigneeName == null){ + removeValidField("consigneeName"); + return; + } + addValidField("consigneeName"); + } + + @Column(name = "CONSIGNEE_ADDRESS") + public String getConsigneeAddress() { + return consigneeAddress; + } + + public void setConsigneeAddress(String consigneeAddress) { + this.consigneeAddress = consigneeAddress; + if(consigneeAddress == null){ + removeValidField("consigneeAddress"); + return; + } + addValidField("consigneeAddress"); + } + + @Column(name = "POSTCODE") + public String getPostcode() { + return postcode; + } + + public void setPostcode(String postcode) { + this.postcode = postcode; + if(postcode == null){ + removeValidField("postcode"); + return; + } + addValidField("postcode"); + } + + @Column(name = "SEND_WEEK_DAY") + public String getSendWeekDay() { + return sendWeekDay; + } + + public void setSendWeekDay(String sendWeekDay) { + this.sendWeekDay = sendWeekDay; + if(sendWeekDay == null){ + removeValidField("sendWeekDay"); + return; + } + addValidField("sendWeekDay"); + } + + @Column(name = "TOTAL_SEND_VALUE") + public Integer getTotalSendValue() { + return totalSendValue; + } + + public void setTotalSendValue(Integer totalSendValue) { + this.totalSendValue = totalSendValue; + if(totalSendValue == null){ + removeValidField("totalSendValue"); + return; + } + addValidField("totalSendValue"); + } + + @Column(name = "SEND_VALUE") + public Integer getSendValue() { + return sendValue; + } + + public void setSendValue(Integer sendValue) { + this.sendValue = sendValue; + if(sendValue == null){ + removeValidField("sendValue"); + return; + } + addValidField("sendValue"); + } + + @Column(name = "LAST_SEND_DATE") + public Date getLastSendDate() { + return lastSendDate; + } + + public void setLastSendDate(Date lastSendDate) { + this.lastSendDate = lastSendDate; + if(lastSendDate == null){ + removeValidField("lastSendDate"); + return; + } + addValidField("lastSendDate"); + } + + @Column(name = "NEXT_SEND_DATE") + public Date getNextSendDate() { + return nextSendDate; + } + + public void setNextSendDate(Date nextSendDate) { + this.nextSendDate = nextSendDate; + if(nextSendDate == null){ + removeValidField("nextSendDate"); + return; + } + addValidField("nextSendDate"); + } + + @Column(name = "BEGIN_TIME") + public Date getBeginTime() { + return beginTime; + } + + public void setBeginTime(Date beginTime) { + this.beginTime = beginTime; + if(beginTime == null){ + removeValidField("beginTime"); + return; + } + addValidField("beginTime"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/plan/entity/mapper/TbTablePlanMapper.java b/src/main/java/com/xmomen/module/plan/entity/mapper/TbTablePlanMapper.java new file mode 100644 index 0000000..0ee0f68 --- /dev/null +++ b/src/main/java/com/xmomen/module/plan/entity/mapper/TbTablePlanMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.plan.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.plan.entity.TbTablePlan; +import com.xmomen.module.plan.entity.TbTablePlanExample; +import org.apache.ibatis.annotations.Param; + +public interface TbTablePlanMapper extends MybatisMapper { + int countByExample(TbTablePlanExample example); + + int deleteByExample(TbTablePlanExample example); + + int insertSelective(TbTablePlan record); + + int updateByExampleSelective(@Param("record") TbTablePlan record, @Param("example") TbTablePlanExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/plan/mapper/TablePlanMapper.xml b/src/main/java/com/xmomen/module/plan/mapper/TablePlanMapper.xml new file mode 100644 index 0000000..67cd388 --- /dev/null +++ b/src/main/java/com/xmomen/module/plan/mapper/TablePlanMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/plan/model/UpdateTablePlan.java b/src/main/java/com/xmomen/module/plan/model/UpdateTablePlan.java new file mode 100644 index 0000000..6044600 --- /dev/null +++ b/src/main/java/com/xmomen/module/plan/model/UpdateTablePlan.java @@ -0,0 +1,60 @@ +package com.xmomen.module.plan.model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +import org.hibernate.validator.constraints.NotBlank; + +public @Data class UpdateTablePlan implements Serializable{ + /** + * 餐桌计划 + */ + private Integer cdPlanId; + + /** + * 审核状态(0-未审核,1-审核通过) + */ + private Integer auditStatus; + + /** + * 是否暂停 0-不暂停,1-暂停 + */ + private Integer isStop; + + /** + * + */ + private Integer cdMemberId; + + /** + * 卡号 + */ + private String couponNumber; + + /** + * 手机号 + */ + private String consigneePhone; + + /** + * 收货人姓名 + */ + private String consigneeName; + + /** + * 收货人地址 + */ + private String consigneeAddress; + /** + * 生效时间 + */ + private Date beginTime; + + private String sendWeekDay; +} diff --git a/src/main/java/com/xmomen/module/plan/service/TablePlanSercvice.java b/src/main/java/com/xmomen/module/plan/service/TablePlanSercvice.java new file mode 100644 index 0000000..c7aecb4 --- /dev/null +++ b/src/main/java/com/xmomen/module/plan/service/TablePlanSercvice.java @@ -0,0 +1,17 @@ +package com.xmomen.module.plan.service; + +import com.xmomen.module.plan.model.CreateTablePlan; +import com.xmomen.module.plan.model.UpdateTablePlan; + +public interface TablePlanSercvice { + public void createTablePlan(CreateTablePlan createTablePlan); + + public void updateTablePlan(Integer id,UpdateTablePlan updateTablePlan); + + public void delete(Integer id); + + /** + * 生成餐桌计划订单 + */ + public void createTablePlanOrder(); +} diff --git a/src/main/java/com/xmomen/module/plan/service/impl/TablePlanSercviceImpl.java b/src/main/java/com/xmomen/module/plan/service/impl/TablePlanSercviceImpl.java new file mode 100644 index 0000000..3c5eb6e --- /dev/null +++ b/src/main/java/com/xmomen/module/plan/service/impl/TablePlanSercviceImpl.java @@ -0,0 +1,241 @@ +package com.xmomen.module.plan.service.impl; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.utils.DateUtils; +import com.xmomen.module.base.entity.CdPlan; +import com.xmomen.module.base.entity.CdPlanItem; +import com.xmomen.module.order.entity.TbOrderRef; +import com.xmomen.module.order.model.CreateOrder; +import com.xmomen.module.order.model.CreateOrder.OrderItem; +import com.xmomen.module.order.service.OrderService; +import com.xmomen.module.plan.entity.TbTablePlan; +import com.xmomen.module.plan.entity.TbTablePlanExample; +import com.xmomen.module.plan.mapper.TablePlanMapper; +import com.xmomen.module.plan.model.CreateTablePlan; +import com.xmomen.module.plan.model.TablePlanModel; +import com.xmomen.module.plan.model.UpdateTablePlan; +import com.xmomen.module.plan.service.TablePlanSercvice; + +@Service +public class TablePlanSercviceImpl implements TablePlanSercvice { + @Autowired + MybatisDao mybatisDao; + + @Autowired + OrderService orderService; + + @Override + @Transactional + public void createTablePlan(CreateTablePlan createTablePlan) { + for(TbTablePlan tablePlan :createTablePlan.getTablePlans()){ + tablePlan.setAuditStatus(1); + tablePlan.setCdMemberId(createTablePlan.getCdMemberId()); + tablePlan.setConsigneeAddress(createTablePlan.getConsigneeAddress()); + tablePlan.setConsigneeName(createTablePlan.getConsigneeName()); + tablePlan.setConsigneePhone(createTablePlan.getConsigneePhone()); + tablePlan.setCouponNumber(createTablePlan.getCouponNumber()); + tablePlan.setSendValue(0); + CdPlan plan = mybatisDao.selectByPrimaryKey(CdPlan.class,tablePlan.getCdPlanId()); + tablePlan.setTotalSendValue(plan.getDeliverCount()); + mybatisDao.saveByModel(tablePlan); + } + } + + @Transactional + public void updateTablePlan(Integer id,UpdateTablePlan updateTablePlan) { + TbTablePlan tablePlan = new TbTablePlan(); + tablePlan.setId(id); + tablePlan.setCdPlanId(updateTablePlan.getCdPlanId()); + tablePlan.setCdMemberId(updateTablePlan.getCdMemberId()); + tablePlan.setConsigneeAddress(updateTablePlan.getConsigneeAddress()); + tablePlan.setConsigneeName(updateTablePlan.getConsigneeName()); + tablePlan.setConsigneePhone(updateTablePlan.getConsigneePhone()); + tablePlan.setCouponNumber(updateTablePlan.getCouponNumber()); + tablePlan.setSendWeekDay(updateTablePlan.getSendWeekDay()); + CdPlan plan = mybatisDao.selectByPrimaryKey(CdPlan.class,updateTablePlan.getCdPlanId()); + tablePlan.setTotalSendValue(plan.getDeliverCount()); + mybatisDao.saveByModel(tablePlan); + } + + @Transactional + public void delete(Integer id){ + mybatisDao.deleteByPrimaryKey(TbTablePlan.class, id); + } + + /** + * 生成餐桌计划订单 + */ + @Override + @Transactional + public void createTablePlanOrder() { + //获取今天星期几 + Date currentDate = new Date(); + Calendar cal = Calendar.getInstance(); + cal.setTime(currentDate); + //查找后一天的送货计划 + int weekday = cal.get(Calendar.DAY_OF_WEEK); + System.out.println(weekday); + SimpleDateFormat dateFm = new SimpleDateFormat("YYYY-MM-dd"); + //查询出所有未暂停的餐桌计划 + Map map = new HashMap(); + map.put("currentDate", dateFm.format(new Date())); + map.put("weekDay",weekday); + List tablePlanList = mybatisDao.getSqlSessionTemplate().selectList(TablePlanMapper.TablePlanMapperNameSpace + "getNormalTablePlanList", map); + if(tablePlanList.size() == 0){ + return ; + } + //拼装订单 + Map> tablePlanMap = new HashMap>(); + for(TablePlanModel tablePlanModel:tablePlanList){ + //先判断是否是要配送的订单 + //下次配送时间 + Date nextSendDate = tablePlanModel.getNextSendDate(); + if(nextSendDate != null){ + //下次配送时间不等于当前时间 + if (!dateFm.format(currentDate).equals(dateFm.format(nextSendDate))) { + continue; + } + } + //有效订单 (卡和手机号地址相同的合并成一个订单) + if(tablePlanMap.containsKey(tablePlanModel.getConsigneePhone()+tablePlanModel.getCouponNumber()+tablePlanModel.getConsigneeAddress())){ + tablePlanMap.get(tablePlanModel.getConsigneePhone()+tablePlanModel.getCouponNumber()+tablePlanModel.getConsigneeAddress()).add(tablePlanModel); + }else{ + List tablePlanModels = new ArrayList(); + tablePlanModels.add(tablePlanModel); + tablePlanMap.put(tablePlanModel.getConsigneePhone()+tablePlanModel.getCouponNumber()+tablePlanModel.getConsigneeAddress(), tablePlanModels); + } + + //计算下次配送时间 + //获取送货频次 + Integer deliveryType = tablePlanModel.getDeliveryType(); + //获取间隔天数 + Integer day = deliveryType * 7; + //一星期配送几次 + String[] sendWeekDays = tablePlanModel.getSendWeekDay().split(","); + //一星期配送一次 则直接加上间隔天数就行 + if(sendWeekDays.length == 1){ + nextSendDate = addDate(currentDate,day); + } + //一星期配送多次场合 + else{ + int i = 0; + for(String sendWeekDay : sendWeekDays){ + if(weekday == Integer.parseInt(sendWeekDay)){ + break; + } + i++; + } + //第一个或者中间的日期 + if(i == 0 || (i > 0 && i< (sendWeekDays.length -1))){ + day = Integer.parseInt(sendWeekDays[i+1]) - Integer.parseInt(sendWeekDays[i]); + nextSendDate = addDate(currentDate,day); + } + //最后一个 + else if(i == (sendWeekDays.length - 1)){ + day = day - (Integer.parseInt(sendWeekDays[i]) - Integer.parseInt(sendWeekDays[0])); + nextSendDate = addDate(currentDate,day); + } + } + + //更新订单的最后次送货时间 和次数 + TbTablePlanExample tbTablePlanExample = new TbTablePlanExample(); + tbTablePlanExample.createCriteria() + .andIdEqualTo(tablePlanModel.getId()); + TbTablePlan tbTablePlan = new TbTablePlan(); + tbTablePlan.setLastSendDate(currentDate); + tbTablePlan.setNextSendDate(nextSendDate); + tbTablePlan.setSendValue(tablePlanModel.getSendValue()+1); + mybatisDao.updateOneByExampleSelective(tbTablePlan, tbTablePlanExample); + } + //下单 + if(tablePlanMap.size() > 0){ + createOrderFormTablePlan(tablePlanMap); + } + } + + //餐桌计划下单 + private void createOrderFormTablePlan(Map> tablePlanMap){ + //一个一个手机号下单 + for(String key :tablePlanMap.keySet()){ + List tablePlanModels = tablePlanMap.get(key); + TablePlanModel tablePlanModelHead =tablePlanModels.get(0); + CreateOrder createOrder = new CreateOrder(); + String orderNo = DateUtils.getDateTimeString(); + createOrder.setOrderNo(orderNo); + createOrder.setConsigneeName(tablePlanModelHead.getConsigneeName()); + createOrder.setConsigneeAddress(tablePlanModelHead.getConsigneeAddress()); + createOrder.setConsigneePhone(tablePlanModelHead.getConsigneePhone()); + //卡号 + createOrder.setPaymentRelationNo(tablePlanModelHead.getCouponNumber()); + createOrder.setOrderSource(4); + //其他付款方式 + createOrder.setPaymentMode(6); + createOrder.setOrderType(3); + createOrder.setCreateUserId(tablePlanModelHead.getManagerId()); + createOrder.setManagerId(tablePlanModelHead.getManagerId()); + createOrder.setCompanyId(tablePlanModelHead.getCompanyId()); + createOrder.setAppointmentTime(addDate(mybatisDao.getSysdate(),1)); + //计算金额 + BigDecimal totalAmount = BigDecimal.ZERO; + List orderItemList = new ArrayList(); + //查找商品 + for(TablePlanModel tablePlanModel:tablePlanModels){ + List planItems = new ArrayList(); + //随机送产品 + if(tablePlanModel.getIsRandom() == 1){ + //随机取出对应产品类型的商品 + Map map = new HashMap(); + map.put("categoryId", tablePlanModel.getCdCategoryId()); + map.put("limit",tablePlanModel.getRandomNum()); + planItems = mybatisDao.getSqlSessionTemplate().selectList(TablePlanMapper.TablePlanMapperNameSpace + "getRandItem", map); + } + else{ + CdPlanItem cdPlanItem = new CdPlanItem(); + cdPlanItem.setCdPlanId(tablePlanModel.getCdPlanId()); + planItems = mybatisDao.selectByModel(cdPlanItem); + } + + for(CdPlanItem planItem : planItems){ + OrderItem orderItem = new OrderItem(); + orderItem.setOrderItemId(planItem.getCdItemId()); + orderItem.setItemQty(new BigDecimal(planItem.getCountValue())); + orderItemList.add(orderItem); + } + + BigDecimal taotalPrice = tablePlanModel.getPrice() == null ?BigDecimal.ZERO:tablePlanModel.getPrice(); + + totalAmount = totalAmount.add(taotalPrice.divide(new BigDecimal(tablePlanModel.getTotalSendValue()),2, BigDecimal.ROUND_DOWN)); + //生成餐桌计划和订单的关联关系 + TbOrderRef orderRef = new TbOrderRef(); + orderRef.setOrderNo(orderNo); + orderRef.setRefType("ORDER_TABLE_PLAN"); + orderRef.setRefValue(tablePlanModel.getId()+""); + mybatisDao.insert(orderRef); + } + + createOrder.setOrderItemList(orderItemList); + createOrder.setTotalPrice(totalAmount); + //下单 + orderService.createOrder(createOrder); + } + } + + public static Date addDate(Date d,long day) { + long time = d.getTime(); + day = day*24*60*60*1000; + time += day; + return new Date(time); + }} diff --git a/src/main/java/com/xmomen/module/product/mapper/ProductCategoryMapper.xml b/src/main/java/com/xmomen/module/product/mapper/ProductCategoryMapper.xml new file mode 100644 index 0000000..3b507de --- /dev/null +++ b/src/main/java/com/xmomen/module/product/mapper/ProductCategoryMapper.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/product/model/ProductLabel.java b/src/main/java/com/xmomen/module/product/model/ProductLabel.java new file mode 100644 index 0000000..9c18da5 --- /dev/null +++ b/src/main/java/com/xmomen/module/product/model/ProductLabel.java @@ -0,0 +1,30 @@ +package com.xmomen.module.product.model; + +public enum ProductLabel { + + XIAN_SHI_QIANG_GOU("xianShiQiangGou", "XIAN_SHI_QIANG_GOU"), + XIN_PIN_CHANG_XIAN("xinPinChangXian", "XIN_PIN_CHANG_XIAN"), + RE_MAI_TUI_JIAN("reMaiTuiJian", "RE_MAI_TUI_JIAN"); + String desc; + String entityField; + public String getEntityField() { + return this.entityField; + } + public String getDesc() { + return this.desc; + } + ProductLabel(String desc, String entityField) { + this.desc = desc; + this.entityField = entityField; + }; + + public static ProductLabel enumOf(String desc) { + ProductLabel[] labels = ProductLabel.values(); + int length = labels.length; + for(int i = 0; i < length; i++) { + ProductLabel label = labels[i]; + if(label.desc.equalsIgnoreCase(desc)) return label; + } + return null; + } +} diff --git a/src/main/java/com/xmomen/module/product/model/ProductModel.java b/src/main/java/com/xmomen/module/product/model/ProductModel.java new file mode 100644 index 0000000..b8f94f2 --- /dev/null +++ b/src/main/java/com/xmomen/module/product/model/ProductModel.java @@ -0,0 +1,40 @@ +package com.xmomen.module.product.model; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +import lombok.Data; + +public @Data class ProductModel { + + private Integer id; + private String itemCode; + private String itemName; + private Integer categoryId; + private String categoryName; + private String itemDescribe; + private Integer itemType; + private String yieldly; + private String spec; + private Double basePrice; + private Double memberPrice; + private String priceManner; + private Boolean sellStatus; + private String sellUnit; + private Double sellPrice; + private Integer sellNum; + private Integer stockNum; + + private Boolean xianShiQiangGou; + private Boolean xinPinChangXian; + private Boolean reMaiTuiJian; + + private String picUrl; + private Boolean isDefaultPath; + + private List picUrls; + private String detailContent; + + private Integer itemQty; +} diff --git a/src/main/java/com/xmomen/module/product/model/ProductQuery.java b/src/main/java/com/xmomen/module/product/model/ProductQuery.java new file mode 100644 index 0000000..31c2c69 --- /dev/null +++ b/src/main/java/com/xmomen/module/product/model/ProductQuery.java @@ -0,0 +1,18 @@ +package com.xmomen.module.product.model; + +import java.util.List; + +import lombok.Data; + +public @Data class ProductQuery { + + private Integer categoryId; + private String keyword; + private String orderField; + private Boolean isAsc = true; + private List filterLabels; + + private List productIds; + private String memberCode; + +} diff --git a/src/main/java/com/xmomen/module/product/service/impl/CategoryServiceImpl.java b/src/main/java/com/xmomen/module/product/service/impl/CategoryServiceImpl.java new file mode 100644 index 0000000..a379757 --- /dev/null +++ b/src/main/java/com/xmomen/module/product/service/impl/CategoryServiceImpl.java @@ -0,0 +1,58 @@ +package com.xmomen.module.product.service.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.product.entity.Category; +import com.xmomen.module.product.mapper.ProductCategoryMapper; +import com.xmomen.module.product.model.CategoryModel; +import com.xmomen.module.product.service.CategoryService; + +/** + * + * @author xiao + * + */ +@Service +public class CategoryServiceImpl implements CategoryService { + + @Autowired + MybatisDao mybatisDao; + + public List getAllProductCategory() { + List categoryList = mybatisDao.getSqlSessionTemplate().selectList(ProductCategoryMapper.ProductCategoryMapperNameSpace + "getProductCategoryList"); + List categories = new ArrayList(); + if(categoryList != null) { + Map topCategories = new TreeMap(); + for(Category category: categoryList) { + CategoryModel model = new CategoryModel(); + model.setId(category.getId()); + model.setLeaf(true); + model.setName(category.getName()); + if(category.getParentId() == null) { + topCategories.put(String.valueOf(category.getId()), model); + } else { + CategoryModel parentCategory = topCategories.get(String.valueOf(category.getParentId())); + if(parentCategory != null) { + parentCategory.setLeaf(false); + model.setParentId(parentCategory.getId()); + model.setParentName(parentCategory.getName()); + if(parentCategory.getNodes() == null) { + parentCategory.setNodes(new ArrayList()); + } + parentCategory.getNodes().add(model); + } + } + + } + categories.addAll(topCategories.values()); + } + return categories; + } +} diff --git a/src/main/java/com/xmomen/module/product/service/impl/ProductServiceImpl.java b/src/main/java/com/xmomen/module/product/service/impl/ProductServiceImpl.java new file mode 100644 index 0000000..713ce55 --- /dev/null +++ b/src/main/java/com/xmomen/module/product/service/impl/ProductServiceImpl.java @@ -0,0 +1,104 @@ +package com.xmomen.module.product.service.impl; + +import java.util.ArrayList; +import java.util.List; + +import com.xmomen.module.resource.service.ResourceUtilsService; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.product.mapper.ProductMapper; +import com.xmomen.module.product.model.ProductModel; +import com.xmomen.module.product.model.ProductQuery; +import com.xmomen.module.product.service.ProductService; +import com.xmomen.module.resource.service.ResourceService; + +@Service +public class ProductServiceImpl implements ProductService { + + @Autowired + MybatisDao mybatisDao; + + @SuppressWarnings("unchecked") + @Override + public Page getProductList(ProductQuery productQuery, Integer limit, Integer offset) { + Page pageModel = (Page) mybatisDao.selectPage(ProductMapper.ProductMapperNameSpace + "getProductList", productQuery, limit, offset); + List products = pageModel.getResult(); + if (products != null) { + for (ProductModel product : products) { + product.setBasePrice(null);//隐藏商品原价 + if (StringUtils.isEmpty(product.getPicUrl())) { + product.setPicUrl(ResourceUtilsService.getDefaultPicPath()); + } + else { + product.setPicUrl(ResourceUtilsService.getWholeHttpPath(product.getPicUrl())); + } + } + } + return pageModel; + } + + @Override + public ProductModel getDetailById(Integer id) { + List products = mybatisDao.getSqlSessionTemplate().selectList(ProductMapper.ProductMapperNameSpace + "getProductDetail", id); + List picUrls = new ArrayList(); + String defaultPicUrl = null; + if (products != null && !products.isEmpty()) { + for (ProductModel product : products) { + if (!StringUtils.isEmpty(product.getPicUrl())) { + if (product.getIsDefaultPath()) { + defaultPicUrl = product.getPicUrl(); + } + //else { + picUrls.add(ResourceUtilsService.getWholeHttpPath(product.getPicUrl())); + //} + } + } + ProductModel detail = products.get(0); + if(picUrls.isEmpty()) { + picUrls.add(ResourceUtilsService.getDefaultPicPath()); + } + detail.setPicUrls(picUrls); + detail.setBasePrice(null);//隐藏商品原价 + if (defaultPicUrl == null) { + if (StringUtils.isEmpty(detail.getPicUrl())) { + detail.setPicUrl(ResourceUtilsService.getDefaultPicPath()); + } + else { + detail.setPicUrl(ResourceUtilsService.getWholeHttpPath(detail.getPicUrl())); + } + } + else { + detail.setPicUrl(ResourceUtilsService.getWholeHttpPath(defaultPicUrl)); + } + return detail; + } + return null; + } + + @Override + public List getProducts(List itemIds) { + if (CollectionUtils.isEmpty(itemIds)) { + return new ArrayList(); + } + ProductQuery productQuery = new ProductQuery(); + productQuery.setProductIds(itemIds); + List products = mybatisDao.getSqlSessionTemplate().selectList(ProductMapper.ProductMapperNameSpace + "getProductsByIds", productQuery); + if (products != null && !products.isEmpty()) { + for (ProductModel product : products) { + product.setBasePrice(null);//隐藏商品原价 + if (StringUtils.isEmpty(product.getPicUrl())) { + product.setPicUrl(ResourceUtilsService.getDefaultPicPath()); + } + else { + product.setPicUrl(ResourceUtilsService.getWholeHttpPath(product.getPicUrl())); + } + } + } + return products; + } +} diff --git a/src/main/java/com/xmomen/module/receipt/controller/ReceivingCodeRequestController.java b/src/main/java/com/xmomen/module/receipt/controller/ReceivingCodeRequestController.java new file mode 100644 index 0000000..7261828 --- /dev/null +++ b/src/main/java/com/xmomen/module/receipt/controller/ReceivingCodeRequestController.java @@ -0,0 +1,44 @@ +package com.xmomen.module.receipt.controller; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.logger.Log; +import com.xmomen.module.receipt.entity.TbReceivingCodeRequest; +import com.xmomen.module.receipt.mapper.ReceivingCodeRequestMapper; + +@RestController +public class ReceivingCodeRequestController { + @Autowired + MybatisDao mybatisDao; + + /** + * 查询收货码请求 + * @param id + * @return + */ + @RequestMapping(value = "/receivingCodeRequest", method = RequestMethod.GET) + @Log(actionName = "查询收货码请求") + public Page getExpressList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "orderNo", required = false) String orderNo, + @RequestParam(value = "requestTimeStart", required = false) String requestTimeStart, + @RequestParam(value = "requestTimeEnd", required = false) String requestTimeEnd, + @RequestParam(value = "keyword", required = false) String keyword){ + Map map = new HashMap(); + map.put("orderNo", orderNo); + map.put("keyword", keyword); + map.put("requestTimeStart", requestTimeStart); + map.put("requestTimeEnd", requestTimeEnd); + return (Page) mybatisDao.selectPage(ReceivingCodeRequestMapper.ReceivingCodeRequestMapperNameSpace + "getReceivingCodeRequestList", map, limit, offset); + } + +} diff --git a/src/main/java/com/xmomen/module/receipt/controller/ReturnOrderController.java b/src/main/java/com/xmomen/module/receipt/controller/ReturnOrderController.java new file mode 100644 index 0000000..2e41b6b --- /dev/null +++ b/src/main/java/com/xmomen/module/receipt/controller/ReturnOrderController.java @@ -0,0 +1,119 @@ +package com.xmomen.module.receipt.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.logger.Log; +import com.xmomen.module.order.entity.TbOrderItem; +import com.xmomen.module.order.entity.TbReturnOrderItem; +import com.xmomen.module.order.model.OrderModel; +import com.xmomen.module.order.model.OrderQuery; +import com.xmomen.module.receipt.model.ReturnOrderModel; +import com.xmomen.module.receipt.model.ReturnOrderQuery; +import com.xmomen.module.receipt.service.ReturnOrderService; + +/** + * Created by Jeng on 2016/3/30. + */ +@RestController +public class ReturnOrderController { + + @Autowired + ReturnOrderService returnOrderService; + + @Autowired + MybatisDao mybatisDao; + + /** + * 退货订单列表 + * @param limit + * @param offset + * @param keyword + * @return + */ + @RequestMapping(value = "/returnOrder", method = RequestMethod.GET) + @Log(actionName = "查询退货订单列表") + public Page getUserList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "orderStatus", required = false) Integer orderStatus, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "returnTimeStart",required = false) String returnTimeStart, + @RequestParam(value = "returnTimeEnd",required = false) String returnTimeEnd + ){ + ReturnOrderQuery orderQuery = new ReturnOrderQuery(); + orderQuery.setKeyword(keyword); + if(StringUtilsExt.isNotBlank(returnTimeStart)){ + orderQuery.setReturnTimeStart(returnTimeStart); + } + + if(StringUtilsExt.isNotBlank(returnTimeEnd)){ + orderQuery.setReturnTimeEnd(returnTimeEnd); + } + //客服经理过滤 如果有客服组权限则不过滤 +// if(SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE)){ +// Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); +// orderQuery.setCreateUserId(userId); +// } + return returnOrderService.getReturnOrderList(orderQuery, limit, offset); + } + /** + * 查询退货订单商品列表 + * @param limit + * @param offset + * @param orderNo + * @return + */ + @RequestMapping(value = "/returnOrder/{id}/item", method = RequestMethod.GET) + @Log(actionName = "查询退货订单商品列表") + public Page getUserList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @PathVariable(value = "id") Integer id){ + TbReturnOrderItem returnOrderItem = new TbReturnOrderItem(); + returnOrderItem.setReturnOrderId(id); + return mybatisDao.selectPageByModel(returnOrderItem, limit, offset); + } + + /** + * 审核退货订单 + * @param orderNo + * @param statusCd + * @return + */ + @RequestMapping(value = "/returnOrder/{id}/audit", method = RequestMethod.POST) + @Log(actionName = "审核退货订单") + public void auditReturnOrder(@PathVariable(value = "id") Integer id, + @RequestParam(value="statusCd") Integer statusCd) { + this.returnOrderService.auditReturnOrder(id,statusCd); + } + + /** + * 退货收货扫描操作 + * @param boxNo 箱号 + */ + @RequestMapping(value ="/returnOrder/returnOrderShouhuo",method = RequestMethod.PUT) + @Log(actionName = "退货收货扫描操作") + public ReturnOrderModel returnOrderShouhuo(@RequestParam(value = "boxNo")String boxNo){ + return this.returnOrderService.returnOrderShouhuo(boxNo); + } + + /** + * 退货收货操作 + * @param boxNo 箱号 + */ + @RequestMapping(value ="/returnOrder/shouhuo",method = RequestMethod.PUT) + @Log(actionName = "退货收货操作") + public void orderNo(@RequestParam(value = "orderNo")String orderNo){ + this.returnOrderService.shouhuo(orderNo); + } + +} diff --git a/src/main/java/com/xmomen/module/receipt/model/ReceivingCodeRequestModel.java b/src/main/java/com/xmomen/module/receipt/model/ReceivingCodeRequestModel.java new file mode 100644 index 0000000..f3fb5ed --- /dev/null +++ b/src/main/java/com/xmomen/module/receipt/model/ReceivingCodeRequestModel.java @@ -0,0 +1,48 @@ +package com.xmomen.module.receipt.model; + +import java.util.Date; + +import lombok.Data; + + +public @Data class ReceivingCodeRequestModel { + /** + * 主键 + */ + private Integer id; + + /** + * 订单号 + */ + private String orderNo; + + /** + * 请求人 + */ + private String requestUser; + + /** + * 请求时间 + */ + private Date requestTime; + + /** + * 请求人手机号 + */ + private String requestPhone; + + /** + * 快递商名称 + */ + private String expressName; + + /** + * 收货码 + */ + private String receivingCode; + + /** + * 收货人 + */ + private String consigneeName; +} diff --git a/src/main/java/com/xmomen/module/receipt/model/ReturnOrderQuery.java b/src/main/java/com/xmomen/module/receipt/model/ReturnOrderQuery.java new file mode 100644 index 0000000..1271e06 --- /dev/null +++ b/src/main/java/com/xmomen/module/receipt/model/ReturnOrderQuery.java @@ -0,0 +1,25 @@ +package com.xmomen.module.receipt.model; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + */ +public @Data +class ReturnOrderQuery implements Serializable { + private Integer id; + private String orderNo; + private String returnTimeStart; + private String returnTimeEnd; + private String keyword; + private String returnStatus; + + private String managerId; + private String consigneeName; + private int hasNoShowCancel; + private int showDespatch; + private int createUserId; + private int despatchExpressId; +} diff --git a/src/main/java/com/xmomen/module/report/controller/OrderReportController.java b/src/main/java/com/xmomen/module/report/controller/OrderReportController.java new file mode 100644 index 0000000..e90f895 --- /dev/null +++ b/src/main/java/com/xmomen/module/report/controller/OrderReportController.java @@ -0,0 +1,192 @@ +package com.xmomen.module.report.controller; + +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.order.model.OrderQuery; +import com.xmomen.module.order.service.OrderService; +import com.xmomen.module.report.model.*; +import com.xmomen.module.report.service.ReportOrderService; +import com.xmomen.module.stockdaily.model.StockDailyModel; +import com.xmomen.module.stockdaily.service.StockDailyService; +import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +/** + * Created by tanxinzheng on 16/9/3. + */ +@Controller +public class OrderReportController { + + @Autowired + ReportOrderService reportOrderService; + + @Autowired + StockDailyService stockDailyService; + + /** + * 订单导出 + * + * @param modelMap + * @return + */ + @RequestMapping(value = "/report/order", method = RequestMethod.GET) + public String exportOrder( + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime, + @RequestParam(value = "companyId", required = false) Integer companyId, + @RequestParam(value = "managerId", required = false) Integer managerId, + ModelMap modelMap) { + ReportQuery reportQuery = new ReportQuery(); + if (StringUtilsExt.isNotBlank(beginTime)) { + reportQuery.setBeginTime(beginTime); + } + if (StringUtilsExt.isNotBlank(endTime)) { + reportQuery.setEndTime(endTime); + } + reportQuery.setCompanyId(companyId); + reportQuery.setManagerId(managerId); + //客服经理过滤 如果有客服组权限则不过滤 + if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.HOU_TAI_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.SUPER_ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.CWU) + && !SecurityUtils.getSubject().hasRole(AppConstants.WULIUZXB)) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + reportQuery.setManagerId(userId); + } + List list = reportOrderService.getOrderReportList(reportQuery); + String[] beginTimes = beginTime.split("-"); + String[] endTimes = endTime.split("-"); + modelMap.put(NormalExcelConstants.FILE_NAME, beginTimes[0] + "年" + beginTimes[1] + "月" + beginTimes[2] + "日-" + endTimes[0] + "年" + endTimes[1] + "月" + endTimes[2] + "日订单报表"); + modelMap.put(NormalExcelConstants.PARAMS, new ExportParams()); + modelMap.put(NormalExcelConstants.CLASS, OrderReport.class); + modelMap.put(NormalExcelConstants.DATA_LIST, list); + return NormalExcelConstants.JEECG_EXCEL_VIEW; + } + + /** + * 物流导出 + * + * @param modelMap + * @return + */ + @RequestMapping(value = "/report/express", method = RequestMethod.GET) + public String exportExpress( + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime, + @RequestParam(value = "companyId", required = false) Integer companyId, + @RequestParam(value = "managerId", required = false) Integer managerId, + ModelMap modelMap) { + ReportQuery reportQuery = new ReportQuery(); + if (StringUtilsExt.isNotBlank(beginTime)) { + reportQuery.setBeginTime(beginTime); + } + if (StringUtilsExt.isNotBlank(endTime)) { + reportQuery.setEndTime(endTime); + } + reportQuery.setCompanyId(companyId); + reportQuery.setManagerId(managerId); + //客服经理过滤 如果有客服组权限则不过滤 + if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.HOU_TAI_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.SUPER_ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.CWU) + && !SecurityUtils.getSubject().hasRole(AppConstants.WULIUZXB)) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + reportQuery.setManagerId(userId); + } + List list = reportOrderService.getExpressReportList(reportQuery); + String[] beginTimes = beginTime.split("-"); + String[] endTimes = endTime.split("-"); + modelMap.put(NormalExcelConstants.FILE_NAME, beginTimes[0] + "年" + beginTimes[1] + "月" + beginTimes[2] + "日-" + endTimes[0] + "年" + endTimes[1] + "月" + endTimes[2] + "日物流报表"); + modelMap.put(NormalExcelConstants.PARAMS, new ExportParams()); + modelMap.put(NormalExcelConstants.CLASS, ExpressReport.class); + modelMap.put(NormalExcelConstants.DATA_LIST, list); + return NormalExcelConstants.JEECG_EXCEL_VIEW; + } + + /** + * 财务导出 + * + * @param modelMap + * @return + */ + @RequestMapping(value = "/report/finance", method = RequestMethod.GET) + public String exportFinance( + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime, + @RequestParam(value = "companyId", required = false) Integer companyId, + @RequestParam(value = "managerId", required = false) Integer managerId, + ModelMap modelMap) { + ReportQuery reportQuery = new ReportQuery(); + if (StringUtilsExt.isNotBlank(beginTime)) { + reportQuery.setBeginTime(beginTime); + } + if (StringUtilsExt.isNotBlank(endTime)) { + reportQuery.setEndTime(endTime); + } + reportQuery.setCompanyId(companyId); + reportQuery.setManagerId(managerId); + //客服经理过滤 如果有客服组权限则不过滤 + if (SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.HOU_TAI_CODE) + && !SecurityUtils.getSubject().hasRole(AppConstants.ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.SUPER_ADMIN) + && !SecurityUtils.getSubject().hasRole(AppConstants.CWU) + && !SecurityUtils.getSubject().hasRole(AppConstants.WULIUZXB)) { + Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + reportQuery.setManagerId(userId); + } + List list = reportOrderService.getFinanceReportList(reportQuery); + String[] beginTimes = beginTime.split("-"); + String[] endTimes = endTime.split("-"); + modelMap.put(NormalExcelConstants.FILE_NAME, beginTimes[0] + "年" + beginTimes[1] + "月" + beginTimes[2] + "日-" + endTimes[0] + "年" + endTimes[1] + "月" + endTimes[2] + "日财务报表"); + modelMap.put(NormalExcelConstants.PARAMS, new ExportParams()); + modelMap.put(NormalExcelConstants.CLASS, FinanceReport.class); + modelMap.put(NormalExcelConstants.DATA_LIST, list); + return NormalExcelConstants.JEECG_EXCEL_VIEW; + } + + /** + * 库存快照导出 + * + * @param modelMap + * @return + */ + @RequestMapping(value = "/report/stockDaily", method = RequestMethod.GET) + public String exportStockDaily( + @RequestParam(value = "beginTime", required = false) String beginTime, + @RequestParam(value = "endTime", required = false) String endTime, + ModelMap modelMap) { + ReportQuery reportQuery = new ReportQuery(); + if (StringUtilsExt.isNotBlank(beginTime)) { + reportQuery.setBeginTime(beginTime); + } + if (StringUtilsExt.isNotBlank(endTime)) { + reportQuery.setEndTime(endTime); + } + + List list = stockDailyService.getStockDailyReport(reportQuery); + String[] beginTimes = beginTime.split("-"); + String[] endTimes = endTime.split("-"); + modelMap.put(NormalExcelConstants.FILE_NAME, beginTimes[0] + "年" + beginTimes[1] + "月" + beginTimes[2] + "日-" + endTimes[0] + "年" + endTimes[1] + "月" + endTimes[2] + "日库存快照报表"); + modelMap.put(NormalExcelConstants.PARAMS, new ExportParams()); + modelMap.put(NormalExcelConstants.CLASS, StockDailyReport.class); + modelMap.put(NormalExcelConstants.DATA_LIST, list); + return NormalExcelConstants.JEECG_EXCEL_VIEW; + } +} diff --git a/src/main/java/com/xmomen/module/report/mapper/ReportOrderMapper.java b/src/main/java/com/xmomen/module/report/mapper/ReportOrderMapper.java new file mode 100644 index 0000000..c4a173f --- /dev/null +++ b/src/main/java/com/xmomen/module/report/mapper/ReportOrderMapper.java @@ -0,0 +1,9 @@ +package com.xmomen.module.report.mapper; + +/** + * Created by Jeng on 16/4/13. + */ +public interface ReportOrderMapper { + + public static final String REPORT_ORDER_MAPPER_NAMESPACE = "com.xmomen.module.report.mapper.ReportOrderMapper."; +} diff --git a/src/main/java/com/xmomen/module/report/mapper/ReportOrderMapper.xml b/src/main/java/com/xmomen/module/report/mapper/ReportOrderMapper.xml new file mode 100644 index 0000000..49905fa --- /dev/null +++ b/src/main/java/com/xmomen/module/report/mapper/ReportOrderMapper.xml @@ -0,0 +1,513 @@ + + + + + + + + + + + + + + diff --git a/src/main/java/com/xmomen/module/report/model/ReportQuery.java b/src/main/java/com/xmomen/module/report/model/ReportQuery.java new file mode 100644 index 0000000..ab5a481 --- /dev/null +++ b/src/main/java/com/xmomen/module/report/model/ReportQuery.java @@ -0,0 +1,15 @@ +package com.xmomen.module.report.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + */ +public @Data +class ReportQuery implements Serializable { + private String beginTime; + private String endTime; + private Integer managerId; + private Integer companyId; +} diff --git a/src/main/java/com/xmomen/module/report/service/ReportOrderService.java b/src/main/java/com/xmomen/module/report/service/ReportOrderService.java new file mode 100644 index 0000000..6594a6b --- /dev/null +++ b/src/main/java/com/xmomen/module/report/service/ReportOrderService.java @@ -0,0 +1,135 @@ +package com.xmomen.module.report.service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.AssertExt; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.service.ItemService; +import com.xmomen.module.order.entity.*; +import com.xmomen.module.order.mapper.OrderMapper; +import com.xmomen.module.receipt.mapper.ReturnOrderMapper; +import com.xmomen.module.receipt.model.ReturnOrderModel; +import com.xmomen.module.receipt.model.ReturnOrderQuery; +import com.xmomen.module.report.mapper.ReportOrderMapper; +import com.xmomen.module.report.model.ExpressReport; +import com.xmomen.module.report.model.FinanceReport; +import com.xmomen.module.report.model.OrderReport; +import com.xmomen.module.report.model.ReportQuery; +import com.xmomen.module.wx.model.AjaxResult; +import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * Created by Jeng on 16/4/5. + */ +@Service +public class ReportOrderService { + + @Autowired + MybatisDao mybatisDao; + + /** + * 查询订单报表 + * + * @param reportQuery + * @return + */ + public List getOrderReportList(ReportQuery reportQuery) { + List orderReportList = mybatisDao.getSqlSessionTemplate().selectList(ReportOrderMapper.REPORT_ORDER_MAPPER_NAMESPACE + "getReportOrderList", reportQuery); + for (OrderReport orderReport : orderReportList) { + if ("0".equals(orderReport.getPaymentMode())) { + orderReport.setHuiKuiAmount(orderReport.getPayAmount()); + } + if ("1".equals(orderReport.getPaymentMode())) { + orderReport.setManagerAmount(orderReport.getPayAmount()); + } + else if ("4".equals(orderReport.getPaymentMode())) { + orderReport.setExpressAmount(orderReport.getPayAmount()); + } + else if ("5".equals(orderReport.getPaymentMode())) { + orderReport.setCouponAmount(orderReport.getPayAmount()); + } + else if ("7".equals(orderReport.getPaymentMode())) { + orderReport.setQuanAmount(orderReport.getPayAmount()); + } + else if ("2".equals(orderReport.getPaymentMode())) { + orderReport.setPosAmount(orderReport.getPayAmount()); + } + else if ("3".equals(orderReport.getPaymentMode())) { + orderReport.setZhuanZhanAmount(orderReport.getPayAmount()); + } + else if ("6".equals(orderReport.getPaymentMode())) { + orderReport.setOtherAmount(orderReport.getPayAmount()); + } + else if ("8".equals(orderReport.getPaymentMode())) { + orderReport.setHuiKuiAmount(orderReport.getPayAmount()); + } + //其他付款方式 + if ("1".equals(orderReport.getOtherPaymentMode())) { + orderReport.setManagerAmount(orderReport.getOtherPayAmount()); + } + else if ("4".equals(orderReport.getOtherPaymentMode())) { + orderReport.setExpressAmount(orderReport.getOtherPayAmount()); + } + else if ("5".equals(orderReport.getOtherPaymentMode())) { + orderReport.setCouponAmount(orderReport.getOtherPayAmount()); + } + else if ("7".equals(orderReport.getOtherPaymentMode())) { + orderReport.setQuanAmount(orderReport.getOtherPayAmount()); + } + else if ("2".equals(orderReport.getOtherPaymentMode())) { + orderReport.setPosAmount(orderReport.getOtherPayAmount()); + } + else if ("3".equals(orderReport.getOtherPaymentMode())) { + orderReport.setZhuanZhanAmount(orderReport.getOtherPayAmount()); + } + else if ("6".equals(orderReport.getOtherPaymentMode())) { + orderReport.setOtherAmount(orderReport.getOtherPayAmount()); + } + else if ("8".equals(orderReport.getOtherPaymentMode())) { + orderReport.setHuiKuiAmount(orderReport.getOtherPayAmount()); + } + } + + return orderReportList; + } + + /** + * 查询物流报表 + * + * @param reportQuery + * @return + */ + public List getExpressReportList(ReportQuery reportQuery) { + List expressReportList = mybatisDao.getSqlSessionTemplate().selectList(ReportOrderMapper.REPORT_ORDER_MAPPER_NAMESPACE + "getReportExpressList", reportQuery); + for (ExpressReport expressReport : expressReportList) { + if (expressReport.getIsReject() == 0) { + expressReport.setIsNormal(1); + expressReport.setIsNoNormal(0); + } + else { + expressReport.setIsNormal(0); + expressReport.setIsNoNormal(1); + } + } + return expressReportList; + } + + /** + * 查询财务报表 + * + * @param reportQuery + * @return + */ + public List getFinanceReportList(ReportQuery reportQuery) { + List financeReportList = mybatisDao.getSqlSessionTemplate().selectList(ReportOrderMapper.REPORT_ORDER_MAPPER_NAMESPACE + "getReportFinanceList", reportQuery); + return financeReportList; + } + +} diff --git a/src/main/java/com/xmomen/module/resource/api/DfsPath.java b/src/main/java/com/xmomen/module/resource/api/DfsPath.java new file mode 100644 index 0000000..20ae18f --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/api/DfsPath.java @@ -0,0 +1,45 @@ +package com.xmomen.module.resource.api; + +public class DfsPath { + + /** + * whole url, just like http://.../bucketName/remotePath + */ + private String httpPath; + + /** + * file path on storage server + */ + private String remotePath; + + public DfsPath() { + + } + + /** + * Constructor with httpPath and remotePath + * + * @param httpPath + * @param remotePath + */ + public DfsPath(String httpPath, String remotePath) { + this.httpPath = httpPath; + this.remotePath = remotePath; + } + + public String getHttpPath() { + return httpPath; + } + + public void setHttpPath(String httpPath) { + this.httpPath = httpPath; + } + + public String getRemotePath() { + return remotePath; + } + + public void setRemotePath(String remotePath) { + this.remotePath = remotePath; + } +} diff --git a/src/main/java/com/xmomen/module/resource/api/DfsSdk.java b/src/main/java/com/xmomen/module/resource/api/DfsSdk.java new file mode 100644 index 0000000..431a6f8 --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/api/DfsSdk.java @@ -0,0 +1,18 @@ +package com.xmomen.module.resource.api; + +import java.io.File; + +public class DfsSdk { + + public static DfsService getDfsInstance(String dfsType, String bucketName) { + if ("FastDFS".equalsIgnoreCase(dfsType)) { + DfsService dfsService = FastDfsService.getInstance(bucketName); + return dfsService; + } + return null; + } + + public static DfsService getDfsInstance() { + return getDfsInstance("FastDFS", "group1"); + } +} diff --git a/src/main/java/com/xmomen/module/resource/api/FastDfsService.java b/src/main/java/com/xmomen/module/resource/api/FastDfsService.java new file mode 100644 index 0000000..cc7b3fc --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/api/FastDfsService.java @@ -0,0 +1,362 @@ +package com.xmomen.module.resource.api; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.csource.common.IniFileReader; +import org.csource.common.MyException; +import org.csource.common.NameValuePair; +import org.csource.fastdfs.ClientGlobal; +import org.csource.fastdfs.StorageClient; +import org.csource.fastdfs.StorageServer; +import org.csource.fastdfs.TrackerClient; +import org.csource.fastdfs.TrackerServer; + +public class FastDfsService implements DfsService { + + private static FastDfsService instance = null; + + private String baseUrl = ""; + private String dmsBaseUrl = ""; + private String defaultPicUrl = ""; + + //private static Logger logger = Logger.getLogger(FastDfsService.class.getName()); + + private static String BASE_URL = "httpBaseUrl"; + + private static String DMS_BASE_URL = "dmsBaseUrl"; + + private static String DEFAULT_PIC_URL = "defaultPicUrl"; + + private static String FAST_DFS_KEY = "FastDfsKey"; + + /** + * bucket name + */ + private final String bucketName; + + /** + * constructor with bucketName + * + * @param bucketName bucket name + */ + private FastDfsService(String bucketName) { + this.bucketName = bucketName; + String configFilePath = null; + try { + configFilePath = FastDfsService.class.getResource("/").toURI().getPath() + "fdfs_client.conf"; + } catch (URISyntaxException e1) { + Exception e = new Exception("Cann't found fdfs_client.conf file under " + FastDfsService.class.getResource("/")); + handleException(e); + } + try { + ClientGlobal.init(configFilePath); + IniFileReader reader = new IniFileReader(configFilePath); + setBaseUrl(reader.getStrValue(BASE_URL)); + setDmsBaseUrl(reader.getStrValue(DMS_BASE_URL)); + setDefaultPicUrl(reader.getStrValue(DEFAULT_PIC_URL)); + } catch (Exception e) { + handleException(e); + } + } + + /** + * Get instance of FastDfsService, for Singleton + * @param bucketName bucket name + * @return instance of FastDfsService + */ + public static synchronized FastDfsService getInstance(String bucketName) { + if (null == instance) { + instance = new FastDfsService(bucketName); + } + return instance; + } + + /** + * Delete file on file system. + * + * @param remotePath remote file path + * @param key Key, not used in FastDFS + * @return true|false + */ + @Override + public boolean deleteObject(String remotePath, String key) { + int result = 0; + TrackerClient trackerClient = new TrackerClient(); + TrackerServer trackerServer = null; + try { + trackerServer = trackerClient.getConnection(); + StorageClient storageClient = new StorageClient(trackerServer, null); + result = storageClient.delete_file(bucketName, remotePath); + } catch(Exception e) { + handleException(e); + } finally { + if (null != trackerServer) { + try { + trackerServer.close(); + } catch (Exception e) { + handleException(e); + } + } + } + if (0 != result) { + //logger.info("delete faild, the faild code is: " + result); + return false; + } + return true; + } + + /** + * Find the whole url + * + * @param remotePath remote path + * @return the whole url + */ + @Override + public String getHttpPath(String remotePath) { + return baseUrl + "/" + bucketName + "/" + remotePath; + } + + @Override + public String getDmsHttpPath(String dmsFilePath) { + return dmsBaseUrl + dmsFilePath; + } + /** + * Get the file, and return DfsFile object + * + * @param remotePath remote path + * @param key Key, not used in FastDFS, can be null + * @return DfsFile object or null if fail + */ + @Override + public DfsFile getObject(String remotePath, String key) { + TrackerClient trackerClient = new TrackerClient(); + TrackerServer trackerServer = null; + StorageServer storageServer = null; + try { + trackerServer = trackerClient.getConnection(); + storageServer = trackerClient.getFetchStorage(trackerServer, bucketName, remotePath); + StorageClient storageClient = new StorageClient(trackerServer, storageServer); + byte[] bytes = storageClient.download_file(this.bucketName, remotePath); + if (null != bytes) { + NameValuePair[] value_pairs = storageClient.get_metadata(bucketName, remotePath); + Map metadata = new HashMap(); + for (int i = 0; i < value_pairs.length; i++) { + metadata.put(value_pairs[i].getName(), value_pairs[i].getValue()); + } + DfsFile dfsFile = new DfsFile(metadata.get(FAST_DFS_KEY), bytes, metadata); + return dfsFile; + } + } catch (Exception e){ + handleException(e); + } finally { + if (null != storageServer) { + try { + storageServer.close(); + } catch (Exception e) { + handleException(e); + } + } + if (null != trackerServer) { + try { + trackerServer.close(); + } catch (Exception e) { + handleException(e); + } + } + } + //logger.info("Get object failed, get null object"); + return null; + } + + /** + * Get the file list of file system. + * Not implement at the moment, because FastDFS API not support. + */ + @Override + public List listObjects() { + //to do + //Because fastDFS api do not support list object method. + return null; + } + + /** + * Upload the file to file system by file path + * + * @param filePath local file path. + * @param key Key, not used in FastDFS, can be null + * @param metadata metadata for file, can be null + * @return DfsFile object or null if fail + */ + @Override + public DfsPath putObject(String filePath, String key, Map metadata) { + File file = new File(filePath); + return putObject(file, key, metadata); + } + + /** + * Upload the file to file system by bytes + * + * @param bytes bytes + * @param key Key, not used in FastDFS + * @param metadata metadata for file, can be null + * @param extName extName for file, can be null + * @return DfsPath object or null if fail + */ + @Override + public DfsPath putObject(byte[] bytes, String key, Map metadata, String extName) { + TrackerClient trackerClient = new TrackerClient(); + TrackerServer trackerServer = null; + StorageServer storageServer = null; + try { + trackerServer = trackerClient.getConnection(); + StorageServer[] storageServers = trackerClient.getStoreStorages(trackerServer, bucketName); + if (null != storageServers) { + storageServer = storageServers[0]; + StorageClient storageClient = new StorageClient(trackerServer, storageServer); + + NameValuePair[] meta_list; + int i = 0; + if (null == metadata) { + meta_list = new NameValuePair[1]; + } else { + meta_list = new NameValuePair[metadata.size() + 1]; + for (Map.Entry entry : metadata.entrySet()) { + meta_list[i++] = new NameValuePair(entry.getKey(), entry.getValue()); + } + } + meta_list[i] = new NameValuePair(FAST_DFS_KEY, key); + + String[] results = storageClient.upload_file(bytes, extName, meta_list); + + if (null == results) { + //logger.info("upload file fail, error codes: " + storageClient.getErrorCode()); + return null; + } else { + String remote_fileName = results[1]; + String httpPath = this.getHttpPath(remote_fileName); + DfsPath dfsPath = new DfsPath(httpPath, remote_fileName); + return dfsPath; + } + } + } catch (Exception e) { + handleException(e); + } finally { + if (null != storageServer) { + try { + storageServer.close(); + } catch (Exception e) { + handleException(e); + } + } + if (null != trackerServer) { + try { + trackerServer.close(); + } catch (Exception e) { + handleException(e); + } + } + } + //logger.info("Upload file faild, because can not get storage servers!"); + return null; + + } + + /** + * Upload the file to file system + * + * @param file file + * @param key Key, not used in FastDFS, can be null + * @param metadata metadata for file , can be null + * @return DfsPath object or null if fail + */ + @Override + public DfsPath putObject(File file, String key, Map metadata) { + FileInputStream in = null; + byte[] file_buff = null; + try { + in = new FileInputStream(file); + if (null != in) { + int len = in.available(); + file_buff = new byte[len]; + in.read(file_buff); + } + } catch (Exception e) { + handleException(e); + } finally { + if (null != in) { + try { + in.close(); + } catch (Exception e) { + handleException(e); + } + } + } + String file_ext_name = ""; + if (file.getName().lastIndexOf(".") > 0) { + file_ext_name = file.getName().substring(file.getName().lastIndexOf(".") + 1); + } + return putObject(file_buff, key, metadata, file_ext_name); + } + + public String getBaseUrl() { + return baseUrl; + } + + private void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } + + public String getDmsBaseUrl() { + return dmsBaseUrl; + } + public void setDmsBaseUrl(String dmsBaseUrl) { + this.dmsBaseUrl = dmsBaseUrl; + } + + public String getDefaultPicUrl() { + return defaultPicUrl; + } + public void setDefaultPicUrl(String defaultPicUrl) { + this.defaultPicUrl = defaultPicUrl; + } + + /** + * Handle Exception + * @param e exception + */ + private void handleException(Exception e) { + if (e instanceof IOException) { + //logger.error("Exception occured : DFSException code: 100," + " exception message :" + e.getMessage()); + throw new DfsException("100", e.getMessage()); + } else if (e instanceof FileNotFoundException) { + //logger.error("Exception occured : DFSException code: 200," + " exception message : file not found." + e.getMessage()); + throw new DfsException("200", e.getMessage()); + } else if (e instanceof MyException) { + //logger.error("Exception occured : DFSException code: 300," + " exception message :" + e.getMessage()); + throw new DfsException("300", e.getMessage()); + } else if (e instanceof Exception) { + //logger.error("Exception occured : DFSException code: 400," + " exception message :" + e.getMessage()); + throw new DfsException("400", e.getMessage()); + } + } + + @Override + public String getDefaultPath(String type) { + if("PICTURE".equalsIgnoreCase(type)) { + return defaultPicUrl; + } + return defaultPicUrl; + } + + + + +} diff --git a/src/main/java/com/xmomen/module/resource/controller/ResourceController.java b/src/main/java/com/xmomen/module/resource/controller/ResourceController.java new file mode 100644 index 0000000..fcc48f5 --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/controller/ResourceController.java @@ -0,0 +1,130 @@ +package com.xmomen.module.resource.controller; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.logger.Log; +import com.xmomen.module.resource.model.ResourceQuery; +import com.xmomen.module.resource.model.ResourceModel; +import com.xmomen.module.resource.service.ResourceService; + +import org.apache.commons.io.IOUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.validation.Valid; +import java.io.Serializable; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-4-10 23:26:20 + */ +@RestController +@RequestMapping(value = "/resource") +public class ResourceController { + + @Autowired + ResourceService resourceService; + + /** + * 资源目录列表 + * + * @param limit 每页结果数 + * @param offset 页码 + * @param id 主键 + * @param ids 主键数组 + * @param excludeIds 不包含主键数组 + * @return Page 资源目录领域分页对象 + */ + @RequestMapping(method = RequestMethod.GET) + @Log(actionName = "查询资源目录列表") + public Page getResourceList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) String id, + @RequestParam(value = "entityType", required = false) String entityType, + @RequestParam(value = "entityId", required = false) String entityId, + @RequestParam(value = "ids", required = false) String[] ids, + @RequestParam(value = "excludeIds", required = false) String[] excludeIds) { + ResourceQuery resourceQuery = new ResourceQuery(); + resourceQuery.setId(id); + resourceQuery.setExcludeIds(excludeIds); + resourceQuery.setIds(ids); + resourceQuery.setEntityType(entityType); + resourceQuery.setEntityId(entityId); + return resourceService.getResourceModelPage(limit, offset, resourceQuery); + } + + /** + * 查询单个资源目录 + * + * @param id 主键 + * @return ResourceModel 资源目录领域对象 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @Log(actionName = "查询资源目录") + public ResourceModel getResourceById(@PathVariable(value = "id") String id) { + return resourceService.getOneResourceModel(id); + } + + /** + * 新增资源目录 + * + * @param resourceModel 新增对象参数 + * @return ResourceModel 资源目录领域对象 + */ + @RequestMapping(method = RequestMethod.POST) + @Log(actionName = "新增资源目录") + public ResourceModel createResource(@RequestBody @Valid ResourceModel resourceModel) { + return resourceService.createResource(resourceModel); + } + + /** + * 更新资源目录 + * + * @param id 主键 + * @param resourceModel 更新对象参数 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新资源目录") + public void updateResource(@PathVariable(value = "id") String id, + @RequestBody @Valid ResourceModel resourceModel) { + resourceService.updateResource(resourceModel); + } + + /** + * 删除资源目录 + * + * @param id 主键 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除单个资源目录") + public void deleteResource(@PathVariable(value = "id") String id) { + resourceService.deleteResource(id); + } + + /** + * 删除资源目录 + * + * @param ids 主键 + */ + @RequestMapping(method = RequestMethod.DELETE) + @Log(actionName = "批量删除资源目录") + public void deleteResources(@RequestParam(value = "ids") String[] ids) { + resourceService.deleteResource(ids); + } + + +} diff --git a/src/main/java/com/xmomen/module/resource/entity/Resource.java b/src/main/java/com/xmomen/module/resource/entity/Resource.java new file mode 100644 index 0000000..aaddc97 --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/entity/Resource.java @@ -0,0 +1,129 @@ +package com.xmomen.module.resource.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_resource") +public class Resource extends BaseMybatisModel { + /** + * + */ + private String id; + + /** + * + */ + private String entityType; + + /** + * + */ + private String entityId; + + /** + * + */ + private String path; + + /** + * + */ + private String resourceType; + + /** + * + */ + private Integer isDefault; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "ENTITY_TYPE") + public String getEntityType() { + return entityType; + } + + public void setEntityType(String entityType) { + this.entityType = entityType; + if(entityType == null){ + removeValidField("entityType"); + return; + } + addValidField("entityType"); + } + + @Column(name = "ENTITY_ID") + public String getEntityId() { + return entityId; + } + + public void setEntityId(String entityId) { + this.entityId = entityId; + if(entityId == null){ + removeValidField("entityId"); + return; + } + addValidField("entityId"); + } + + @Column(name = "PATH") + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + if(path == null){ + removeValidField("path"); + return; + } + addValidField("path"); + } + + @Column(name = "RESOURCE_TYPE") + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + if(resourceType == null){ + removeValidField("resourceType"); + return; + } + addValidField("resourceType"); + } + + @Column(name = "IS_DEFAULT") + public Integer getIsDefault() { + return isDefault; + } + + public void setIsDefault(Integer isDefault) { + this.isDefault = isDefault; + if(isDefault == null){ + removeValidField("isDefault"); + return; + } + addValidField("isDefault"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/resource/entity/mapper/ResourceMapper.java b/src/main/java/com/xmomen/module/resource/entity/mapper/ResourceMapper.java new file mode 100644 index 0000000..2da0f1b --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/entity/mapper/ResourceMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.resource.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.resource.entity.Resource; +import com.xmomen.module.resource.entity.ResourceExample; +import org.apache.ibatis.annotations.Param; + +public interface ResourceMapper extends MybatisMapper { + int countByExample(ResourceExample example); + + int deleteByExample(ResourceExample example); + + int insertSelective(Resource record); + + int updateByExampleSelective(@Param("record") Resource record, @Param("example") ResourceExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/resource/mapper/ResourceMapperExt.java b/src/main/java/com/xmomen/module/resource/mapper/ResourceMapperExt.java new file mode 100644 index 0000000..5407628 --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/mapper/ResourceMapperExt.java @@ -0,0 +1,12 @@ +package com.xmomen.module.resource.mapper; + +/** + * @author tanxinzheng + * @date 2017-4-10 23:26:20 + * @version 1.0.0 + */ +public interface ResourceMapperExt { + + public static final String ResourceMapperNameSpace = "com.xmomen.module.resource.mapper.ResourceMapperExt."; + +} diff --git a/src/main/java/com/xmomen/module/resource/model/ResourceQuery.java b/src/main/java/com/xmomen/module/resource/model/ResourceQuery.java new file mode 100644 index 0000000..4fc5774 --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/model/ResourceQuery.java @@ -0,0 +1,32 @@ +package com.xmomen.module.resource.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-4-10 23:26:20 + */ +public +@Data +class ResourceQuery implements Serializable { + /** + * 主键 + */ + private String id; + /** + * 包含主键集 + */ + private String[] ids; + /** + * 排除主键集 + */ + private String[] excludeIds; + + private String entityType; + + private String entityId; + +} diff --git a/src/main/java/com/xmomen/module/resource/service/impl/ResourceServiceImpl.java b/src/main/java/com/xmomen/module/resource/service/impl/ResourceServiceImpl.java new file mode 100644 index 0000000..30571b6 --- /dev/null +++ b/src/main/java/com/xmomen/module/resource/service/impl/ResourceServiceImpl.java @@ -0,0 +1,216 @@ +package com.xmomen.module.resource.service.impl; + +import com.xmomen.module.resource.api.DfsPath; +import com.xmomen.module.resource.api.DfsSdk; +import com.xmomen.module.resource.api.DfsService; +import com.xmomen.module.resource.entity.Resource; +import com.xmomen.module.resource.entity.ResourceExample; +import com.xmomen.module.resource.mapper.ResourceMapperExt; +import com.xmomen.module.resource.model.ResourceCreate; +import com.xmomen.module.resource.model.ResourceQuery; +import com.xmomen.module.resource.model.ResourceUpdate; +import com.xmomen.module.resource.model.ResourceModel; +import com.xmomen.module.resource.service.ResourceService; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.File; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-4-10 23:26:20 + */ +@Service +public class ResourceServiceImpl implements ResourceService { + + @Autowired + MybatisDao mybatisDao; + + /** + * 新增资源目录 + * + * @param resourceModel 新增资源目录对象参数 + * @return ResourceModel 资源目录领域对象 + */ + @Override + @Transactional + public ResourceModel createResource(ResourceModel resourceModel) { + Resource resource = createResource(resourceModel.getEntity()); + if (resource != null) { + return getOneResourceModel(resource.getId()); + } + return null; + } + + /** + * 新增资源目录实体对象 + * + * @param resource 新增资源目录实体对象参数 + * @return Resource 资源目录实体对象 + */ + @Override + @Transactional + public Resource createResource(Resource resource) { + return mybatisDao.insertByModel(resource); + } + + /** + * 批量新增资源目录 + * + * @param resourceModels 新增资源目录对象集合参数 + * @return List 资源目录领域对象集合 + */ + @Override + @Transactional + public List createResources(List resourceModels) { + List resourceModelList = null; + for (ResourceModel resourceModel : resourceModels) { + resourceModel = createResource(resourceModel); + if (resourceModel != null) { + if (resourceModelList == null) { + resourceModelList = new ArrayList<>(); + } + resourceModelList.add(resourceModel); + } + } + return resourceModelList; + } + + /** + * 更新资源目录 + * + * @param resourceModel 更新资源目录对象参数 + */ + @Override + @Transactional + public void updateResource(ResourceModel resourceModel) { + mybatisDao.update(resourceModel.getEntity()); + } + + /** + * 更新资源目录实体对象 + * + * @param resource 新增资源目录实体对象参数 + * @return Resource 资源目录实体对象 + */ + @Override + @Transactional + public void updateResource(Resource resource) { + mybatisDao.update(resource); + } + + /** + * 删除资源目录 + * + * @param ids 主键数组 + */ + @Override + @Transactional + public void deleteResource(String[] ids) { + ResourceExample resourceExample = new ResourceExample(); + resourceExample.createCriteria().andIdIn(Arrays.asList((String[]) ids)); + mybatisDao.deleteByExample(resourceExample); + } + + /** + * 删除资源目录 + * + * @param id 主键 + */ + @Override + @Transactional + public void deleteResource(String id) { + mybatisDao.deleteByPrimaryKey(Resource.class, id); + } + + /** + * 查询资源目录领域分页对象(带参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @param resourceQuery 查询参数 + * @return Page 资源目录参数对象 + */ + @Override + public Page getResourceModelPage(int limit, int offset, ResourceQuery resourceQuery) { + return (Page) mybatisDao.selectPage(ResourceMapperExt.ResourceMapperNameSpace + "getResourceModel", resourceQuery, limit, offset); + } + + /** + * 查询资源目录领域分页对象(无参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 资源目录领域对象 + */ + @Override + public Page getResourceModelPage(int limit, int offset) { + return (Page) mybatisDao.selectPage(ResourceMapperExt.ResourceMapperNameSpace + "getResourceModel", null, limit, offset); + } + + /** + * 查询资源目录领域集合对象(带参数条件) + * + * @param resourceQuery 查询参数对象 + * @return List 资源目录领域集合对象 + */ + @Override + public List getResourceModelList(ResourceQuery resourceQuery) { + return mybatisDao.getSqlSessionTemplate().selectList(ResourceMapperExt.ResourceMapperNameSpace + "getResourceModel", resourceQuery); + } + + /** + * 查询资源目录领域集合对象(无参数条件) + * + * @return List 资源目录领域集合对象 + */ + @Override + public List getResourceModelList() { + return mybatisDao.getSqlSessionTemplate().selectList(ResourceMapperExt.ResourceMapperNameSpace + "getResourceModel"); + } + + /** + * 查询资源目录实体对象 + * + * @param id 主键 + * @return Resource 资源目录实体对象 + */ + @Override + public Resource getOneResource(String id) { + return mybatisDao.selectByPrimaryKey(Resource.class, id); + } + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return ResourceModel 资源目录领域对象 + */ + @Override + public ResourceModel getOneResourceModel(String id) { + ResourceQuery resourceQuery = new ResourceQuery(); + resourceQuery.setId(id); + return mybatisDao.getSqlSessionTemplate().selectOne(ResourceMapperExt.ResourceMapperNameSpace + "getResourceModel", resourceQuery); + } + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * + * @param resourceQuery 资源目录查询参数对象 + * @return ResourceModel 资源目录领域对象 + */ + @Override + public ResourceModel getOneResourceModel(ResourceQuery resourceQuery) throws TooManyResultsException { + return mybatisDao.getSqlSessionTemplate().selectOne(ResourceMapperExt.ResourceMapperNameSpace + "getResourceModel", resourceQuery); + } +} diff --git a/src/main/java/com/xmomen/module/schedule/ItemPurchaseJob.java b/src/main/java/com/xmomen/module/schedule/ItemPurchaseJob.java new file mode 100644 index 0000000..d710288 --- /dev/null +++ b/src/main/java/com/xmomen/module/schedule/ItemPurchaseJob.java @@ -0,0 +1,34 @@ +package com.xmomen.module.schedule; + + +import com.xmomen.framework.support.SpringContextUtil; +import com.xmomen.module.order.model.CreatePurchase; +import com.xmomen.module.order.service.PurchaseService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * Created by Jeng on 2016/2/23. + */ +@Component(value = "itemPurchaseJob") +public class ItemPurchaseJob implements Job { + + @Autowired + PurchaseService purchaseService; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + if(purchaseService == null){ + purchaseService = (PurchaseService) SpringContextUtil.getApplicationContext().getBean(PurchaseService.class); + CreatePurchase createPurchase = new CreatePurchase(); + createPurchase.setOrderDate(new Date()); + purchaseService.createPurchase(createPurchase); + } + } +} diff --git a/src/main/java/com/xmomen/module/schedule/controller/vo/AddQuartzJob.java b/src/main/java/com/xmomen/module/schedule/controller/vo/AddQuartzJob.java new file mode 100644 index 0000000..29b9242 --- /dev/null +++ b/src/main/java/com/xmomen/module/schedule/controller/vo/AddQuartzJob.java @@ -0,0 +1,83 @@ +package com.xmomen.module.schedule.controller.vo; + +import org.hibernate.validator.constraints.NotBlank; + +import javax.validation.constraints.NotNull; + +/** + * Created by Jeng on 2016/2/23. + */ +public class AddQuartzJob { + + // 任务名称 + @NotNull + @NotBlank + private String jobName; + // 任务分组 + @NotNull + @NotBlank + private String jobGroup; + // 任务触发器ID + @NotNull + @NotBlank + private String jobTriggerId; + // 任务状态 0-禁用,1-启用,2-删除 + @NotNull + private Boolean started; + // 运行时间表达式 + @NotNull + @NotBlank + private String cronExpression; + // 任务描述 + @NotNull + @NotBlank + private String description; + + public String getJobName() { + return jobName; + } + + public void setJobName(String jobName) { + this.jobName = jobName; + } + + public Boolean getStarted() { + return started; + } + + public void setStarted(Boolean started) { + this.started = started; + } + + public String getJobGroup() { + return jobGroup; + } + + public void setJobGroup(String jobGroup) { + this.jobGroup = jobGroup; + } + + public String getJobTriggerId() { + return jobTriggerId; + } + + public void setJobTriggerId(String jobTriggerId) { + this.jobTriggerId = jobTriggerId; + } + + public String getCronExpression() { + return cronExpression; + } + + public void setCronExpression(String cronExpression) { + this.cronExpression = cronExpression; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/src/main/java/com/xmomen/module/schedule/entity/ScheduleJob.java b/src/main/java/com/xmomen/module/schedule/entity/ScheduleJob.java new file mode 100644 index 0000000..7129d8c --- /dev/null +++ b/src/main/java/com/xmomen/module/schedule/entity/ScheduleJob.java @@ -0,0 +1,144 @@ +package com.xmomen.module.schedule.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; + +import javax.persistence.*; + +@Entity +@Table(name = "schedule_job") +public class ScheduleJob extends BaseMybatisModel { + /** + * 物理主键 + */ + private Integer id; + + /** + * 任务名称 + */ + private String jobName; + + /** + * 任务属组 + */ + private String jobGroup; + + /** + * 任务状态:0-禁用,1-启用,2-删除 + */ + private Integer jobStatus; + + /** + * 任务描述 + */ + private String jobDescription; + + /** + * CRON表达式 + */ + private String cronExpression; + + /** + * 触发器ID + */ + private String triggerId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "JOB_NAME") + public String getJobName() { + return jobName; + } + + public void setJobName(String jobName) { + this.jobName = jobName; + if(jobName == null){ + removeValidField("jobName"); + return; + } + addValidField("jobName"); + } + + @Column(name = "JOB_GROUP") + public String getJobGroup() { + return jobGroup; + } + + public void setJobGroup(String jobGroup) { + this.jobGroup = jobGroup; + if(jobGroup == null){ + removeValidField("jobGroup"); + return; + } + addValidField("jobGroup"); + } + + @Column(name = "JOB_STATUS") + public Integer getJobStatus() { + return jobStatus; + } + + public void setJobStatus(Integer jobStatus) { + this.jobStatus = jobStatus; + if(jobStatus == null){ + removeValidField("jobStatus"); + return; + } + addValidField("jobStatus"); + } + + @Column(name = "JOB_DESCRIPTION") + public String getJobDescription() { + return jobDescription; + } + + public void setJobDescription(String jobDescription) { + this.jobDescription = jobDescription; + if(jobDescription == null){ + removeValidField("jobDescription"); + return; + } + addValidField("jobDescription"); + } + + @Column(name = "CRON_EXPRESSION") + public String getCronExpression() { + return cronExpression; + } + + public void setCronExpression(String cronExpression) { + this.cronExpression = cronExpression; + if(cronExpression == null){ + removeValidField("cronExpression"); + return; + } + addValidField("cronExpression"); + } + + @Column(name = "TRIGGER_ID") + public String getTriggerId() { + return triggerId; + } + + public void setTriggerId(String triggerId) { + this.triggerId = triggerId; + if(triggerId == null){ + removeValidField("triggerId"); + return; + } + addValidField("triggerId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/schedule/entity/ScheduleJobExample.java b/src/main/java/com/xmomen/module/schedule/entity/ScheduleJobExample.java new file mode 100644 index 0000000..2cb11f8 --- /dev/null +++ b/src/main/java/com/xmomen/module/schedule/entity/ScheduleJobExample.java @@ -0,0 +1,672 @@ +package com.xmomen.module.schedule.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; + +import java.util.ArrayList; +import java.util.List; + +public class ScheduleJobExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public ScheduleJobExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andJobNameIsNull() { + addCriterion("JOB_NAME is null"); + return (Criteria) this; + } + + public Criteria andJobNameIsNotNull() { + addCriterion("JOB_NAME is not null"); + return (Criteria) this; + } + + public Criteria andJobNameEqualTo(String value) { + addCriterion("JOB_NAME =", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameNotEqualTo(String value) { + addCriterion("JOB_NAME <>", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameGreaterThan(String value) { + addCriterion("JOB_NAME >", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameGreaterThanOrEqualTo(String value) { + addCriterion("JOB_NAME >=", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameLessThan(String value) { + addCriterion("JOB_NAME <", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameLessThanOrEqualTo(String value) { + addCriterion("JOB_NAME <=", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameLike(String value) { + addCriterion("JOB_NAME like", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameNotLike(String value) { + addCriterion("JOB_NAME not like", value, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameIn(List values) { + addCriterion("JOB_NAME in", values, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameNotIn(List values) { + addCriterion("JOB_NAME not in", values, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameBetween(String value1, String value2) { + addCriterion("JOB_NAME between", value1, value2, "jobName"); + return (Criteria) this; + } + + public Criteria andJobNameNotBetween(String value1, String value2) { + addCriterion("JOB_NAME not between", value1, value2, "jobName"); + return (Criteria) this; + } + + public Criteria andJobGroupIsNull() { + addCriterion("JOB_GROUP is null"); + return (Criteria) this; + } + + public Criteria andJobGroupIsNotNull() { + addCriterion("JOB_GROUP is not null"); + return (Criteria) this; + } + + public Criteria andJobGroupEqualTo(String value) { + addCriterion("JOB_GROUP =", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupNotEqualTo(String value) { + addCriterion("JOB_GROUP <>", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupGreaterThan(String value) { + addCriterion("JOB_GROUP >", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupGreaterThanOrEqualTo(String value) { + addCriterion("JOB_GROUP >=", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupLessThan(String value) { + addCriterion("JOB_GROUP <", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupLessThanOrEqualTo(String value) { + addCriterion("JOB_GROUP <=", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupLike(String value) { + addCriterion("JOB_GROUP like", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupNotLike(String value) { + addCriterion("JOB_GROUP not like", value, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupIn(List values) { + addCriterion("JOB_GROUP in", values, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupNotIn(List values) { + addCriterion("JOB_GROUP not in", values, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupBetween(String value1, String value2) { + addCriterion("JOB_GROUP between", value1, value2, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobGroupNotBetween(String value1, String value2) { + addCriterion("JOB_GROUP not between", value1, value2, "jobGroup"); + return (Criteria) this; + } + + public Criteria andJobStatusIsNull() { + addCriterion("JOB_STATUS is null"); + return (Criteria) this; + } + + public Criteria andJobStatusIsNotNull() { + addCriterion("JOB_STATUS is not null"); + return (Criteria) this; + } + + public Criteria andJobStatusEqualTo(Integer value) { + addCriterion("JOB_STATUS =", value, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusNotEqualTo(Integer value) { + addCriterion("JOB_STATUS <>", value, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusGreaterThan(Integer value) { + addCriterion("JOB_STATUS >", value, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusGreaterThanOrEqualTo(Integer value) { + addCriterion("JOB_STATUS >=", value, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusLessThan(Integer value) { + addCriterion("JOB_STATUS <", value, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusLessThanOrEqualTo(Integer value) { + addCriterion("JOB_STATUS <=", value, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusIn(List values) { + addCriterion("JOB_STATUS in", values, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusNotIn(List values) { + addCriterion("JOB_STATUS not in", values, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusBetween(Integer value1, Integer value2) { + addCriterion("JOB_STATUS between", value1, value2, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobStatusNotBetween(Integer value1, Integer value2) { + addCriterion("JOB_STATUS not between", value1, value2, "jobStatus"); + return (Criteria) this; + } + + public Criteria andJobDescriptionIsNull() { + addCriterion("JOB_DESCRIPTION is null"); + return (Criteria) this; + } + + public Criteria andJobDescriptionIsNotNull() { + addCriterion("JOB_DESCRIPTION is not null"); + return (Criteria) this; + } + + public Criteria andJobDescriptionEqualTo(String value) { + addCriterion("JOB_DESCRIPTION =", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionNotEqualTo(String value) { + addCriterion("JOB_DESCRIPTION <>", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionGreaterThan(String value) { + addCriterion("JOB_DESCRIPTION >", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("JOB_DESCRIPTION >=", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionLessThan(String value) { + addCriterion("JOB_DESCRIPTION <", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionLessThanOrEqualTo(String value) { + addCriterion("JOB_DESCRIPTION <=", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionLike(String value) { + addCriterion("JOB_DESCRIPTION like", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionNotLike(String value) { + addCriterion("JOB_DESCRIPTION not like", value, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionIn(List values) { + addCriterion("JOB_DESCRIPTION in", values, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionNotIn(List values) { + addCriterion("JOB_DESCRIPTION not in", values, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionBetween(String value1, String value2) { + addCriterion("JOB_DESCRIPTION between", value1, value2, "jobDescription"); + return (Criteria) this; + } + + public Criteria andJobDescriptionNotBetween(String value1, String value2) { + addCriterion("JOB_DESCRIPTION not between", value1, value2, "jobDescription"); + return (Criteria) this; + } + + public Criteria andCronExpressionIsNull() { + addCriterion("CRON_EXPRESSION is null"); + return (Criteria) this; + } + + public Criteria andCronExpressionIsNotNull() { + addCriterion("CRON_EXPRESSION is not null"); + return (Criteria) this; + } + + public Criteria andCronExpressionEqualTo(String value) { + addCriterion("CRON_EXPRESSION =", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionNotEqualTo(String value) { + addCriterion("CRON_EXPRESSION <>", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionGreaterThan(String value) { + addCriterion("CRON_EXPRESSION >", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionGreaterThanOrEqualTo(String value) { + addCriterion("CRON_EXPRESSION >=", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionLessThan(String value) { + addCriterion("CRON_EXPRESSION <", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionLessThanOrEqualTo(String value) { + addCriterion("CRON_EXPRESSION <=", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionLike(String value) { + addCriterion("CRON_EXPRESSION like", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionNotLike(String value) { + addCriterion("CRON_EXPRESSION not like", value, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionIn(List values) { + addCriterion("CRON_EXPRESSION in", values, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionNotIn(List values) { + addCriterion("CRON_EXPRESSION not in", values, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionBetween(String value1, String value2) { + addCriterion("CRON_EXPRESSION between", value1, value2, "cronExpression"); + return (Criteria) this; + } + + public Criteria andCronExpressionNotBetween(String value1, String value2) { + addCriterion("CRON_EXPRESSION not between", value1, value2, "cronExpression"); + return (Criteria) this; + } + + public Criteria andTriggerIdIsNull() { + addCriterion("TRIGGER_ID is null"); + return (Criteria) this; + } + + public Criteria andTriggerIdIsNotNull() { + addCriterion("TRIGGER_ID is not null"); + return (Criteria) this; + } + + public Criteria andTriggerIdEqualTo(String value) { + addCriterion("TRIGGER_ID =", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdNotEqualTo(String value) { + addCriterion("TRIGGER_ID <>", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdGreaterThan(String value) { + addCriterion("TRIGGER_ID >", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdGreaterThanOrEqualTo(String value) { + addCriterion("TRIGGER_ID >=", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdLessThan(String value) { + addCriterion("TRIGGER_ID <", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdLessThanOrEqualTo(String value) { + addCriterion("TRIGGER_ID <=", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdLike(String value) { + addCriterion("TRIGGER_ID like", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdNotLike(String value) { + addCriterion("TRIGGER_ID not like", value, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdIn(List values) { + addCriterion("TRIGGER_ID in", values, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdNotIn(List values) { + addCriterion("TRIGGER_ID not in", values, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdBetween(String value1, String value2) { + addCriterion("TRIGGER_ID between", value1, value2, "triggerId"); + return (Criteria) this; + } + + public Criteria andTriggerIdNotBetween(String value1, String value2) { + addCriterion("TRIGGER_ID not between", value1, value2, "triggerId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/schedule/entity/mapper/ScheduleJobMapper.java b/src/main/java/com/xmomen/module/schedule/entity/mapper/ScheduleJobMapper.java new file mode 100644 index 0000000..6e93598 --- /dev/null +++ b/src/main/java/com/xmomen/module/schedule/entity/mapper/ScheduleJobMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.schedule.entity.mapper; + +import com.xmomen.module.schedule.entity.ScheduleJob; +import com.xmomen.module.schedule.entity.ScheduleJobExample; +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import org.apache.ibatis.annotations.Param; + +public interface ScheduleJobMapper extends MybatisMapper { + int countByExample(ScheduleJobExample example); + + int deleteByExample(ScheduleJobExample example); + + int insertSelective(ScheduleJob record); + + int updateByExampleSelective(@Param("record") ScheduleJob record, @Param("example") ScheduleJobExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/schedule/service/ScheduleJobService.java b/src/main/java/com/xmomen/module/schedule/service/ScheduleJobService.java new file mode 100644 index 0000000..e17bde3 --- /dev/null +++ b/src/main/java/com/xmomen/module/schedule/service/ScheduleJobService.java @@ -0,0 +1,161 @@ +package com.xmomen.module.schedule.service; + +import com.xmomen.module.schedule.QuartzManager; +import com.xmomen.module.schedule.controller.vo.ScheduleJobVo; +import com.xmomen.module.schedule.controller.vo.UpdateQuartzJob; +import com.xmomen.module.schedule.entity.ScheduleJob; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.support.SpringContextUtil; +import com.xmomen.module.schedule.mapper.ScheduleMapper; +import org.apache.commons.lang.StringUtils; +import org.quartz.Job; +import org.quartz.JobDetail; +import org.quartz.SchedulerException; +import org.quartz.Trigger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.text.ParseException; +import java.util.List; + +/** + * Created by Jeng on 2016/2/23. + */ +@Service +public class ScheduleJobService { + + @Autowired + MybatisDao mybatisDao; + + /** + * 添加计划任务 + * @param scheduleJob + */ + @Transactional + public void addScheduleJob(ScheduleJob scheduleJob){ + mybatisDao.insert(scheduleJob); + } + + public void initScheduleJobs(){ + ScheduleJob scheduleJob = new ScheduleJob(); + //scheduleJob.setJobStatus(0); + List scheduleJobList = mybatisDao.selectByModel(scheduleJob); + for (ScheduleJob job : scheduleJobList) { + Object obj = SpringContextUtil.getBean(job.getTriggerId()); + if(obj instanceof Job){ + Job trigger = (Job) obj; + try { + if(Trigger.STATE_NORMAL == job.getJobStatus()){ + QuartzManager.addJob(job.getJobName(), job.getJobGroup(), trigger.getClass(), job.getCronExpression()); + }else if(Trigger.STATE_PAUSED == job.getJobStatus()){ + QuartzManager.addJob(job.getJobName(), job.getJobGroup(), trigger.getClass(), job.getCronExpression()); + QuartzManager.pauseJob(job.getJobName(), job.getJobGroup()); + } + } catch (SchedulerException e) { + e.printStackTrace(); + } catch (ParseException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 查询计划任务 + * @param keyword + * @param pageSize + * @param pageNum + * @return + */ + public Page queryScheduleJobs(String keyword, Integer pageSize, Integer pageNum){ + String string = StringUtils.trimToEmpty(keyword); + return (Page) mybatisDao.selectPage(ScheduleMapper.ScheduleMapperNameSpace + "queryScheduleJobs", string, pageSize, pageNum); + } + + /** + * 更新定时脚本 + * @param scheduleId + * @param updateQuartzJob + */ + @Transactional + public void updateScheduleJob(Integer scheduleId, UpdateQuartzJob updateQuartzJob){ + if(scheduleId == null){ + throw new IllegalArgumentException("scheduleId must be not null"); + } + try { + ScheduleJob oldSchedule = mybatisDao.selectByPrimaryKey(ScheduleJob.class, scheduleId); + String jobName = oldSchedule.getJobName(); + String jobGroup = oldSchedule.getJobGroup(); + String triggerId = oldSchedule.getTriggerId(); + String cronExpression = oldSchedule.getCronExpression(); + ScheduleJob scheduleJob = new ScheduleJob(); + scheduleJob.setJobName(updateQuartzJob.getJobName()); + scheduleJob.setJobGroup(updateQuartzJob.getJobGroup()); + scheduleJob.setTriggerId(updateQuartzJob.getJobTriggerId()); + scheduleJob.setJobDescription(updateQuartzJob.getDescription()); + scheduleJob.setCronExpression(updateQuartzJob.getCronExpression()); + scheduleJob.setId(scheduleId); + if((StringUtils.isNotBlank(updateQuartzJob.getJobName()) && !jobName.equals(updateQuartzJob.getJobName())) + || (StringUtils.isNotBlank(updateQuartzJob.getJobGroup()) && !jobGroup.equals(updateQuartzJob.getJobGroup())) + || (StringUtils.isNotBlank(updateQuartzJob.getJobTriggerId()) && !triggerId.equals(updateQuartzJob.getJobTriggerId()) + || (StringUtils.isNotBlank(updateQuartzJob.getCronExpression()) && !cronExpression.equals(updateQuartzJob.getJobTriggerId())))){ + QuartzManager.removeJob(jobName, jobGroup); + Job job = (Job) SpringContextUtil.getApplicationContext().getBean(updateQuartzJob.getJobTriggerId()); + jobName = updateQuartzJob.getJobName(); + jobGroup = updateQuartzJob.getJobGroup(); + QuartzManager.addJob(jobName, jobGroup, job.getClass(), updateQuartzJob.getCronExpression()); + if(Trigger.STATE_NORMAL != oldSchedule.getJobStatus()){ + QuartzManager.pauseJob(jobName, jobGroup); + } + } + QuartzManager.getScheduler().getTriggerState(jobName, jobGroup); + if(UpdateQuartzJob.ACTION_START.equalsIgnoreCase(updateQuartzJob.getAction())){ + scheduleJob.setJobStatus(Trigger.STATE_NORMAL); + QuartzManager.resumeJob(jobName, jobGroup); + }else if(UpdateQuartzJob.ACTION_RESTART.equalsIgnoreCase(updateQuartzJob.getAction())){ + scheduleJob.setJobStatus(Trigger.STATE_NORMAL); + QuartzManager.resumeJob(jobName, jobGroup); + }else if(UpdateQuartzJob.ACTION_PAUSE.equalsIgnoreCase(updateQuartzJob.getAction())){ + scheduleJob.setJobStatus(Trigger.STATE_PAUSED); + QuartzManager.pauseJob(jobName, jobGroup); + }else if(UpdateQuartzJob.ACTION_STOP.equalsIgnoreCase(updateQuartzJob.getAction())){ + scheduleJob.setJobStatus(Trigger.STATE_NONE); + QuartzManager.unscheduleJob(jobName, jobGroup); + } + mybatisDao.updateByModel(scheduleJob); + } catch (SchedulerException e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } catch (ParseException e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } + } + + /** + * 删除定时任务 + * @param scheduleId + */ + public void deleteScheduleJob(Integer scheduleId){ + ScheduleJob scheduleJob = mybatisDao.selectByPrimaryKey(ScheduleJob.class, scheduleId); + if(scheduleJob != null){ + try { + String jobName = scheduleJob.getJobName(); + String jobGroup = scheduleJob.getJobGroup(); + JobDetail jobDetail = QuartzManager.getJobDetail(jobName, jobGroup); + if(jobDetail == null){ + return; + } + if(QuartzManager.isRunning(jobName, jobGroup)){ + throw new IllegalArgumentException("此任务正在运行,请关闭任务再重新操作!"); + } + } catch (SchedulerException e) { + e.printStackTrace(); + throw new IllegalArgumentException(e); + } + mybatisDao.deleteByPrimaryKey(ScheduleJob.class, scheduleId); + } + } +} diff --git a/src/main/java/com/xmomen/module/sms/api/Client.java b/src/main/java/com/xmomen/module/sms/api/Client.java new file mode 100644 index 0000000..68318a3 --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/api/Client.java @@ -0,0 +1,94 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.xmomen.module.sms.api; + +import com.xmomen.module.sms.util.HttpUtil; + +/** + * Client + */ +public class Client { + /** + * 发送请求 + * + * @param request request对象 + * @return Response + * @throws Exception + */ + public static Response execute(Request request) throws Exception { + switch (request.getMethod()) { + case GET: + return HttpUtil.httpGet(request.getHost(), request.getPath(), + request.getTimeout(), + request.getHeaders(), + request.getQuerys(), + request.getSignHeaderPrefixList(), + request.getAppKey(), request.getAppSecret()); + case POST_FORM: + return HttpUtil.httpPost(request.getHost(), request.getPath(), + request.getTimeout(), + request.getHeaders(), + request.getQuerys(), + request.getBodys(), + request.getSignHeaderPrefixList(), + request.getAppKey(), request.getAppSecret()); + case POST_STRING: + return HttpUtil.httpPost(request.getHost(), request.getPath(), + request.getTimeout(), + request.getHeaders(), + request.getQuerys(), + request.getStringBody(), + request.getSignHeaderPrefixList(), + request.getAppKey(), request.getAppSecret()); + case POST_BYTES: + return HttpUtil.httpPost(request.getHost(), request.getPath(), + request.getTimeout(), + request.getHeaders(), + request.getQuerys(), + request.getBytesBody(), + request.getSignHeaderPrefixList(), + request.getAppKey(), request.getAppSecret()); + case PUT_STRING: + return HttpUtil.httpPut(request.getHost(), request.getPath(), + request.getTimeout(), + request.getHeaders(), + request.getQuerys(), + request.getStringBody(), + request.getSignHeaderPrefixList(), + request.getAppKey(), request.getAppSecret()); + case PUT_BYTES: + return HttpUtil.httpPut(request.getHost(), request.getPath(), + request.getTimeout(), + request.getHeaders(), + request.getQuerys(), + request.getBytesBody(), + request.getSignHeaderPrefixList(), + request.getAppKey(), request.getAppSecret()); + case DELETE: + return HttpUtil.httpDelete(request.getHost(), request.getPath(), + request.getTimeout(), + request.getHeaders(), + request.getQuerys(), + request.getSignHeaderPrefixList(), + request.getAppKey(), request.getAppSecret()); + default: + throw new IllegalArgumentException(String.format("unsupported method:%s", request.getMethod())); + } + } +} diff --git a/src/main/java/com/xmomen/module/sms/api/SmsMessageService.java b/src/main/java/com/xmomen/module/sms/api/SmsMessageService.java new file mode 100644 index 0000000..c39e5ac --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/api/SmsMessageService.java @@ -0,0 +1,130 @@ +//package com.xmomen.module.sms.api; +// +//import org.apache.shiro.ShiroException; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.beans.factory.InitializingBean; +//import org.springframework.stereotype.Component; +// +//import com.aliyun.mns.client.CloudAccount; +//import com.aliyun.mns.client.CloudTopic; +//import com.aliyun.mns.client.MNSClient; +//import com.aliyun.mns.common.ServiceException; +//import com.aliyun.mns.model.BatchSmsAttributes; +//import com.aliyun.mns.model.MessageAttributes; +//import com.aliyun.mns.model.RawTopicMessage; +//import com.aliyun.mns.model.TopicMessage; +//import com.xmomen.framework.exception.BusinessException; +//import com.xmomen.module.sms.util.GlobalIdentifyCodeManager; +//import com.xmomen.module.wx.pay.common.RandomStringGenerator; +// +//@Component +//public class SmsMessageService implements InitializingBean { +// +// static Logger log = LoggerFactory.getLogger(SmsService.class); +// +// private MNSClient client; +// +// public void startUp() { +// CloudAccount account = new CloudAccount("LTAI1klbIDX7r7cw", +// "YIy5b9LtvfRvboEXhJjztmJCY7eO2I", +// "http://1478678502173333.mns.cn-hangzhou.aliyuncs.com/"); +// client = account.getMNSClient(); +// } +// public SmsResponse sendSingleRequest(String phoneNumber) throws Exception { +// if(client == null || !client.isOpen()) { +// log.info("client已关闭,重新创建连接"); +// startUp(); +// } +// CloudTopic topic = client.getTopicRef("sms.topic-cn-hangzhou"); +// +// /** +// * Step 2. 设置SMS消息体(必须) +// * +// * 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。 +// */ +// RawTopicMessage msg = new RawTopicMessage(); +// msg.setMessageBody("sms-message"); +// +// +// /** +// * Step 3. 生成SMS消息属性 +// */ +// MessageAttributes messageAttributes = new MessageAttributes(); +// BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes(); +// // 3.1 设置发送短信的签名(SMSSignName) +// batchSmsAttributes.setFreeSignName("益谷上禾"); +// // 3.2 设置发送短信使用的模板(SMSTempateCode) +// batchSmsAttributes.setTemplateCode("SMS_67180402"); +// // 3.3 设置发送短信所使用的模板中参数对应的值(在短信模板中定义的,没有可以不用设置) +// BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams(); +// String identifyCode = RandomStringGenerator.getRandomNumberStrByLength(6); +// smsReceiverParams.setParam("code", identifyCode); +// // 3.4 增加接收短信的号码 +// batchSmsAttributes.addSmsReceiver(phoneNumber, smsReceiverParams); +// messageAttributes.setBatchSmsAttributes(batchSmsAttributes); +// +// try { +// /** +// * Step 4. 发布SMS消息 +// */ +// TopicMessage ret = topic.publishMessage(msg, messageAttributes); +// log.info("MessageId:" + ret.getMessageId()); +// GlobalIdentifyCodeManager.updateIdenfifyCode(phoneNumber, identifyCode); +// SmsResponse response = new SmsResponse(); +// response.setSuccess(true); +// return response; +// } catch (ServiceException se) { +// log.error("API异常:" + se.getMessage()); +// throw new BusinessException("执行SMS API 异常:ErrorCode=" + se.getErrorCode() + ", RequestId=" + se.getRequestId()); +// } catch (Exception e) { +// log.error("系统异常", e.getMessage()); +// client.close(); +// client = null; +// return null; +// } +// } +// +// public SmsResponse sendPasswordInfo(String phoneNumber, String plainPassword) { +// if(client == null || !client.isOpen()) { +// log.info("client已关闭,重新创建连接"); +// startUp(); +// } +// CloudTopic topic = client.getTopicRef("sms.topic-cn-hangzhou"); +// MessageAttributes messageAttributes = new MessageAttributes(); +// BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes(); +// // 3.1 设置发送短信的签名(SMSSignName) +// batchSmsAttributes.setFreeSignName("益谷上禾"); +// // TODO 密码重置的模板 +// batchSmsAttributes.setTemplateCode("SMS_67180402"); +// // 3.3 设置发送短信所使用的模板中参数对应的值(在短信模板中定义的,没有可以不用设置) +// BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams(); +// smsReceiverParams.setParam("code", plainPassword); +// // 3.4 增加接收短信的号码 +// batchSmsAttributes.addSmsReceiver(phoneNumber, smsReceiverParams); +// messageAttributes.setBatchSmsAttributes(batchSmsAttributes); +// +// RawTopicMessage msg = new RawTopicMessage(); +// msg.setMessageBody("sms-message"); +// try { +// TopicMessage ret = topic.publishMessage(msg, messageAttributes); +// log.info("MessageId:" + ret.getMessageId()); +// SmsResponse response = new SmsResponse(); +// response.setSuccess(true); +// return response; +// } catch (ServiceException se) { +// log.error("API异常:" + se.getMessage()); +// throw new BusinessException("执行SMS API 异常:ErrorCode=" + se.getErrorCode() + ", RequestId=" + se.getRequestId()); +// } catch (Exception e) { +// log.error("系统异常", e.getMessage()); +// client.close(); +// client = null; +// return null; +// } +// } +// +// @Override +// public void afterPropertiesSet() throws Exception { +// startUp(); +// } +//} diff --git a/src/main/java/com/xmomen/module/sms/constant/Constants.java b/src/main/java/com/xmomen/module/sms/constant/Constants.java new file mode 100644 index 0000000..dfcd205 --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/constant/Constants.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.xmomen.module.sms.constant; + +/** + * 通用常量 + */ +public class Constants { + //签名算法HmacSha256 + public static final String HMAC_SHA256 = "HmacSHA256"; + //编码UTF-8 + public static final String ENCODING = "UTF-8"; + //UserAgent + public static final String USER_AGENT = "demo/aliyun/java"; + //换行符 + public static final String LF = "\n"; + //串联符 + public static final String SPE1 = ","; + //示意符 + public static final String SPE2 = ":"; + //连接符 + public static final String SPE3 = "&"; + //赋值符 + public static final String SPE4 = "="; + //问号符 + public static final String SPE5 = "?"; + //默认请求超时时间,单位毫秒 + public static final int DEFAULT_TIMEOUT = 1000; + //参与签名的系统Header前缀,只有指定前缀的Header才会参与到签名中 + public static final String CA_HEADER_TO_SIGN_PREFIX_SYSTEM = "X-Ca-"; +} diff --git a/src/main/java/com/xmomen/module/sms/constant/HttpMethod.java b/src/main/java/com/xmomen/module/sms/constant/HttpMethod.java new file mode 100644 index 0000000..3c7bacd --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/constant/HttpMethod.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.xmomen.module.sms.constant; + +/** + * HTTP方法常量 + */ +public class HttpMethod { + //GET + public static final String GET = "GET"; + //POST + public static final String POST = "POST"; + //PUT + public static final String PUT = "PUT"; + //DELETE + public static final String DELETE = "DELETE"; +} diff --git a/src/main/java/com/xmomen/module/sms/enums/Method.java b/src/main/java/com/xmomen/module/sms/enums/Method.java new file mode 100644 index 0000000..8af04f7 --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/enums/Method.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.xmomen.module.sms.enums; + +/** + * Http请求方法 + * Created by lipengfei on 16/3/17. + */ +public enum Method { + GET, POST_FORM, POST_STRING, POST_BYTES, PUT_FORM, PUT_STRING, PUT_BYTES, DELETE; +} diff --git a/src/main/java/com/xmomen/module/sms/model/IdentifyCodeModel.java b/src/main/java/com/xmomen/module/sms/model/IdentifyCodeModel.java new file mode 100644 index 0000000..1e72113 --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/model/IdentifyCodeModel.java @@ -0,0 +1,58 @@ +package com.xmomen.module.sms.model; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.concurrent.TimeUnit; + +import lombok.Data; + +public @Data class IdentifyCodeModel { + + private String identifyCode; + private Date createTime; + private Date expiredTime; + + public IdentifyCodeModel(String identifyCode, Long validTime, TimeUnit timeUnit) { + this.identifyCode = identifyCode; + Calendar calendar = new GregorianCalendar(); + createTime = calendar.getTime(); + if(validTime != null) { + if(validTime > 0) { + switch(timeUnit) { + case SECONDS: { + expiredTime = new Date(createTime.getTime() + validTime * 1000); + break; + } + case MINUTES: { + expiredTime = new Date(createTime.getTime() + validTime * 1000 * 60); + break; + } + default: { + throw new IllegalArgumentException("不支持其他时间类型"); + } + } + } else { + throw new IllegalArgumentException("不合法有效时间值"); + } + + } + } + + public IdentifyCodeModel(String identifyCode, Long validTime) { + this(identifyCode, validTime, TimeUnit.SECONDS); + } + public IdentifyCodeModel(String identifyCode) { + this(identifyCode, null); + } + + public boolean isExpired() { + Date now = new Date(); + if(expiredTime == null) return false; + if(now.getTime() > expiredTime.getTime()) { + return true; + } + return false; + } + +} diff --git a/src/main/java/com/xmomen/module/sms/util/HttpUtil.java b/src/main/java/com/xmomen/module/sms/util/HttpUtil.java new file mode 100644 index 0000000..24e6792 --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/util/HttpUtil.java @@ -0,0 +1,491 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.xmomen.module.sms.util; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URLEncoder; +import java.nio.ByteBuffer; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.nio.channels.WritableByteChannel; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import org.apache.commons.lang.StringUtils; +import org.apache.http.Header; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.ByteArrayEntity; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.params.CoreConnectionPNames; + +import com.xmomen.module.sms.api.Response; +import com.xmomen.module.sms.constant.Constants; +import com.xmomen.module.sms.constant.ContentType; +import com.xmomen.module.sms.constant.HttpHeader; +import com.xmomen.module.sms.constant.HttpMethod; +import com.xmomen.module.sms.constant.SystemHeader; + +/** + * Http工具类 + */ +public class HttpUtil { + /** + * HTTP GET + * @param host + * @param path + * @param connectTimeout + * @param headers + * @param querys + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws Exception + */ + public static Response httpGet(String host, String path, int connectTimeout, Map headers, Map querys, List signHeaderPrefixList, String appKey, String appSecret) + throws Exception { + headers = initialBasicHeader(HttpMethod.GET, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret); + + HttpClient httpClient = wrapClient(host); + httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout)); + + HttpGet get = new HttpGet(initUrl(host, path, querys)); + + for (Map.Entry e : headers.entrySet()) { + get.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue())); + } + + return convert(httpClient.execute(get)); + } + + /** + * HTTP POST表单 + * @param host + * @param path + * @param connectTimeout + * @param headers + * @param querys + * @param bodys + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws Exception + */ + public static Response httpPost(String host, String path, int connectTimeout, Map headers, Map querys, Map bodys, List signHeaderPrefixList, String appKey, String appSecret) + throws Exception { + if (headers == null) { + headers = new HashMap(); + } + + headers.put(HttpHeader.HTTP_HEADER_CONTENT_TYPE, ContentType.CONTENT_TYPE_FORM); + + headers = initialBasicHeader(HttpMethod.POST, path, headers, querys, bodys, signHeaderPrefixList, appKey, appSecret); + + HttpClient httpClient = wrapClient(host); + httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout)); + + HttpPost post = new HttpPost(initUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + post.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue())); + } + + UrlEncodedFormEntity formEntity = buildFormEntity(bodys); + if (formEntity != null) { + post.setEntity(formEntity); + } + + return convert(httpClient.execute(post)); + } + + /** + * Http POST 字符串 + * @param host + * @param path + * @param connectTimeout + * @param headers + * @param querys + * @param body + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws Exception + */ + public static Response httpPost(String host, String path, int connectTimeout, Map headers, Map querys, String body, List signHeaderPrefixList, String appKey, String appSecret) + throws Exception { + headers = initialBasicHeader(HttpMethod.POST, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret); + + HttpClient httpClient = wrapClient(host); + httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout)); + + HttpPost post = new HttpPost(initUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + post.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue())); + } + + if (StringUtils.isNotBlank(body)) { + post.setEntity(new StringEntity(body, Constants.ENCODING)); + + } + + return convert(httpClient.execute(post)); + } + + /** + * HTTP POST 字节数组 + * @param host + * @param path + * @param connectTimeout + * @param headers + * @param querys + * @param bodys + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws Exception + */ + public static Response httpPost(String host, String path, int connectTimeout, Map headers, Map querys, byte[] bodys, List signHeaderPrefixList, String appKey, String appSecret) + throws Exception { + headers = initialBasicHeader(HttpMethod.POST, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret); + + HttpClient httpClient = wrapClient(host); + httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout)); + + HttpPost post = new HttpPost(initUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + post.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue())); + } + + if (bodys != null) { + post.setEntity(new ByteArrayEntity(bodys)); + } + + return convert(httpClient.execute(post)); + } + + /** + * HTTP PUT 字符串 + * @param host + * @param path + * @param connectTimeout + * @param headers + * @param querys + * @param body + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws Exception + */ + public static Response httpPut(String host, String path, int connectTimeout, Map headers, Map querys, String body, List signHeaderPrefixList, String appKey, String appSecret) + throws Exception { + headers = initialBasicHeader(HttpMethod.PUT, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret); + + HttpClient httpClient = wrapClient(host); + httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout)); + + HttpPut put = new HttpPut(initUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + put.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue())); + } + + if (StringUtils.isNotBlank(body)) { + put.setEntity(new StringEntity(body, Constants.ENCODING)); + + } + + return convert(httpClient.execute(put)); + } + + /** + * HTTP PUT字节数组 + * @param host + * @param path + * @param connectTimeout + * @param headers + * @param querys + * @param bodys + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws Exception + */ + public static Response httpPut(String host, String path, int connectTimeout, Map headers, Map querys, byte[] bodys, List signHeaderPrefixList, String appKey, String appSecret) + throws Exception { + headers = initialBasicHeader(HttpMethod.PUT, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret); + + HttpClient httpClient = wrapClient(host); + httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout)); + + HttpPut put = new HttpPut(initUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + put.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue())); + } + + if (bodys != null) { + put.setEntity(new ByteArrayEntity(bodys)); + } + + return convert(httpClient.execute(put)); + } + + /** + * HTTP DELETE + * @param host + * @param path + * @param connectTimeout + * @param headers + * @param querys + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws Exception + */ + public static Response httpDelete(String host, String path, int connectTimeout, Map headers, Map querys, List signHeaderPrefixList, String appKey, String appSecret) + throws Exception { + headers = initialBasicHeader(HttpMethod.DELETE, path, headers, querys, null, signHeaderPrefixList, appKey, appSecret); + + HttpClient httpClient = wrapClient(host); + httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, getTimeout(connectTimeout)); + + HttpDelete delete = new HttpDelete(initUrl(host, path, querys)); + for (Map.Entry e : headers.entrySet()) { + delete.addHeader(e.getKey(), MessageDigestUtil.utf8ToIso88591(e.getValue())); + } + + return convert(httpClient.execute(delete)); + } + + /** + * 构建FormEntity + * + * @param formParam + * @return + * @throws UnsupportedEncodingException + */ + private static UrlEncodedFormEntity buildFormEntity(Map formParam) + throws UnsupportedEncodingException { + if (formParam != null) { + List nameValuePairList = new ArrayList(); + + for (String key : formParam.keySet()) { + nameValuePairList.add(new BasicNameValuePair(key, formParam.get(key))); + } + UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, Constants.ENCODING); + formEntity.setContentType(ContentType.CONTENT_TYPE_FORM); + return formEntity; + } + + return null; + } + + private static String initUrl(String host, String path, Map querys) throws UnsupportedEncodingException { + StringBuilder sbUrl = new StringBuilder(); + sbUrl.append(host); + if (!StringUtils.isBlank(path)) { + sbUrl.append(path); + } + if (null != querys) { + StringBuilder sbQuery = new StringBuilder(); + for (Map.Entry query : querys.entrySet()) { + if (0 < sbQuery.length()) { + sbQuery.append(Constants.SPE3); + } + if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { + sbQuery.append(query.getValue()); + } + if (!StringUtils.isBlank(query.getKey())) { + sbQuery.append(query.getKey()); + if (!StringUtils.isBlank(query.getValue())) { + sbQuery.append(Constants.SPE4); + sbQuery.append(URLEncoder.encode(query.getValue(), Constants.ENCODING)); + } + } + } + if (0 < sbQuery.length()) { + sbUrl.append(Constants.SPE5).append(sbQuery); + } + } + + return sbUrl.toString(); + } + + + /** + * 初始化基础Header + * @param method + * @param path + * @param headers + * @param querys + * @param bodys + * @param signHeaderPrefixList + * @param appKey + * @param appSecret + * @return + * @throws MalformedURLException + */ + private static Map initialBasicHeader(String method, String path, + Map headers, + Map querys, + Map bodys, + List signHeaderPrefixList, + String appKey, String appSecret) + throws MalformedURLException { + if (headers == null) { + headers = new HashMap(); + } + + headers.put(SystemHeader.X_CA_TIMESTAMP, String.valueOf(new Date().getTime())); + //headers.put(SystemHeader.X_CA_NONCE, UUID.randomUUID().toString()); + headers.put(SystemHeader.X_CA_KEY, appKey); + headers.put(SystemHeader.X_CA_SIGNATURE, + SignUtil.sign(appSecret, method, path, headers, querys, bodys, signHeaderPrefixList)); + + return headers; + } + + /** + * 读取超时时间 + * + * @param timeout + * @return + */ + private static int getTimeout(int timeout) { + if (timeout == 0) { + return Constants.DEFAULT_TIMEOUT; + } + + return timeout; + } + + private static Response convert(HttpResponse response) throws IOException { + Response res = new Response(); + + if (null != response) { + res.setStatusCode(response.getStatusLine().getStatusCode()); + for (Header header : response.getAllHeaders()) { + res.setHeader(header.getName(), MessageDigestUtil.iso88591ToUtf8(header.getValue())); + } + + res.setContentType(res.getHeader("Content-Type")); + res.setRequestId(res.getHeader("X-Ca-Request-Id")); + res.setErrorMessage(res.getHeader("X-Ca-Error-Message")); + res.setBody(readStreamAsStr(response.getEntity().getContent())); + + } else { + //服务器无回应 + res.setStatusCode(500); + res.setErrorMessage("No Response"); + } + + return res; + } + + + /** + * 将流转换为字符串 + * + * @param is + * @return + * @throws IOException + */ + public static String readStreamAsStr(InputStream is) throws IOException { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + WritableByteChannel dest = Channels.newChannel(bos); + ReadableByteChannel src = Channels.newChannel(is); + ByteBuffer bb = ByteBuffer.allocate(4096); + + while (src.read(bb) != -1) { + bb.flip(); + dest.write(bb); + bb.clear(); + } + src.close(); + dest.close(); + + return new String(bos.toByteArray(), Constants.ENCODING); + } + + private static HttpClient wrapClient(String host) { + HttpClient httpClient = new DefaultHttpClient(); + if (host.startsWith("https://")) { + sslClient(httpClient); + } + + return httpClient; + } + + private static void sslClient(HttpClient httpClient) { + try { + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + public X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted(X509Certificate[] xcs, String str) { + + } + public void checkServerTrusted(X509Certificate[] xcs, String str) { + + } + }; + ctx.init(null, new TrustManager[] { tm }, null); + SSLSocketFactory ssf = new SSLSocketFactory(ctx); + ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + ClientConnectionManager ccm = httpClient.getConnectionManager(); + SchemeRegistry registry = ccm.getSchemeRegistry(); + registry.register(new Scheme("https", 443, ssf)); + } catch (KeyManagementException ex) { + throw new RuntimeException(ex); + } catch (NoSuchAlgorithmException ex) { + throw new RuntimeException(ex); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/sms/util/SignUtil.java b/src/main/java/com/xmomen/module/sms/util/SignUtil.java new file mode 100644 index 0000000..1f3706f --- /dev/null +++ b/src/main/java/com/xmomen/module/sms/util/SignUtil.java @@ -0,0 +1,229 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package com.xmomen.module.sms.util; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang.StringUtils; + +import com.xmomen.module.sms.constant.Constants; +import com.xmomen.module.sms.constant.HttpHeader; +import com.xmomen.module.sms.constant.SystemHeader; + +/** + * 签名工具 + */ +public class SignUtil { + + /** + * 计算签名 + * + * @param secret APP密钥 + * @param method HttpMethod + * @param path + * @param headers + * @param querys + * @param bodys + * @param signHeaderPrefixList 自定义参与签名Header前缀 + * @return 签名后的字符串 + */ + public static String sign(String secret, String method, String path, + Map headers, + Map querys, + Map bodys, + List signHeaderPrefixList) { + try { + Mac hmacSha256 = Mac.getInstance(Constants.HMAC_SHA256); + byte[] keyBytes = secret.getBytes(Constants.ENCODING); + hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, Constants.HMAC_SHA256)); + + return new String(Base64.encodeBase64( + hmacSha256.doFinal(buildStringToSign(method, path, headers, querys, bodys, signHeaderPrefixList) + .getBytes(Constants.ENCODING))), + Constants.ENCODING); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * 构建待签名字符串 + * @param method + * @param path + * @param headers + * @param querys + * @param bodys + * @param signHeaderPrefixList + * @return + */ + private static String buildStringToSign(String method, String path, + Map headers, + Map querys, + Map bodys, + List signHeaderPrefixList) { + StringBuilder sb = new StringBuilder(); + + sb.append(method.toUpperCase()).append(Constants.LF); + if (null != headers) { + if (null != headers.get(HttpHeader.HTTP_HEADER_ACCEPT)) { + sb.append(headers.get(HttpHeader.HTTP_HEADER_ACCEPT)); + } + sb.append(Constants.LF); + if (null != headers.get(HttpHeader.HTTP_HEADER_CONTENT_MD5)) { + sb.append(headers.get(HttpHeader.HTTP_HEADER_CONTENT_MD5)); + } + sb.append(Constants.LF); + if (null != headers.get(HttpHeader.HTTP_HEADER_CONTENT_TYPE)) { + sb.append(headers.get(HttpHeader.HTTP_HEADER_CONTENT_TYPE)); + } + sb.append(Constants.LF); + if (null != headers.get(HttpHeader.HTTP_HEADER_DATE)) { + sb.append(headers.get(HttpHeader.HTTP_HEADER_DATE)); + } + } + sb.append(Constants.LF); + sb.append(buildHeaders(headers, signHeaderPrefixList)); + sb.append(buildResource(path, querys, bodys)); + + return sb.toString(); + } + + /** + * 构建待签名Path+Query+BODY + * + * @param path + * @param querys + * @param bodys + * @return 待签名 + */ + private static String buildResource(String path, Map querys, Map bodys) { + StringBuilder sb = new StringBuilder(); + + if (!StringUtils.isBlank(path)) { + sb.append(path); + } + Map sortMap = new TreeMap(); + if (null != querys) { + for (Map.Entry query : querys.entrySet()) { + if (!StringUtils.isBlank(query.getKey())) { + sortMap.put(query.getKey(), query.getValue()); + } + } + } + + if (null != bodys) { + for (Map.Entry body : bodys.entrySet()) { + if (!StringUtils.isBlank(body.getKey())) { + sortMap.put(body.getKey(), body.getValue()); + } + } + } + + StringBuilder sbParam = new StringBuilder(); + for (Map.Entry item : sortMap.entrySet()) { + if (!StringUtils.isBlank(item.getKey())) { + if (0 < sbParam.length()) { + sbParam.append(Constants.SPE3); + } + sbParam.append(item.getKey()); + if (!StringUtils.isBlank(item.getValue())) { + sbParam.append(Constants.SPE4).append(item.getValue()); + } + } + } + if (0 < sbParam.length()) { + sb.append(Constants.SPE5); + sb.append(sbParam); + } + + return sb.toString(); + } + + /** + * 构建待签名Http头 + * + * @param headers 请求中所有的Http头 + * @param signHeaderPrefixList 自定义参与签名Header前缀 + * @return 待签名Http头 + */ + private static String buildHeaders(Map headers, List signHeaderPrefixList) { + StringBuilder sb = new StringBuilder(); + + if (null != signHeaderPrefixList) { + signHeaderPrefixList.remove(SystemHeader.X_CA_SIGNATURE); + signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_ACCEPT); + signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_CONTENT_MD5); + signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_CONTENT_TYPE); + signHeaderPrefixList.remove(HttpHeader.HTTP_HEADER_DATE); + Collections.sort(signHeaderPrefixList); + if (null != headers) { + Map sortMap = new TreeMap(); + sortMap.putAll(headers); + StringBuilder signHeadersStringBuilder = new StringBuilder(); + for (Map.Entry header : sortMap.entrySet()) { + if (isHeaderToSign(header.getKey(), signHeaderPrefixList)) { + sb.append(header.getKey()); + sb.append(Constants.SPE2); + if (!StringUtils.isBlank(header.getValue())) { + sb.append(header.getValue()); + } + sb.append(Constants.LF); + if (0 < signHeadersStringBuilder.length()) { + signHeadersStringBuilder.append(Constants.SPE1); + } + signHeadersStringBuilder.append(header.getKey()); + } + } + headers.put(SystemHeader.X_CA_SIGNATURE_HEADERS, signHeadersStringBuilder.toString()); + } + } + + return sb.toString(); + } + + /** + * Http头是否参与签名 return + */ + private static boolean isHeaderToSign(String headerName, List signHeaderPrefixList) { + if (StringUtils.isBlank(headerName)) { + return false; + } + + if (headerName.startsWith(Constants.CA_HEADER_TO_SIGN_PREFIX_SYSTEM)) { + return true; + } + + if (null != signHeaderPrefixList) { + for (String signHeaderPrefix : signHeaderPrefixList) { + if (headerName.equalsIgnoreCase(signHeaderPrefix)) { + return true; + } + } + } + + return false; + } +} diff --git a/src/main/java/com/xmomen/module/stock/controller/StockController.java b/src/main/java/com/xmomen/module/stock/controller/StockController.java new file mode 100644 index 0000000..a2f4e23 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/controller/StockController.java @@ -0,0 +1,170 @@ +package com.xmomen.module.stock.controller; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.StringUtils; +import com.xmomen.module.core.web.controller.DmsBaseController; +import com.xmomen.module.logger.Log; +import com.xmomen.module.stock.model.StockChange; +import com.xmomen.module.stock.model.StockQuery; +import com.xmomen.module.stock.model.StockModel; +import com.xmomen.module.stock.service.StockService; + +import com.xmomen.module.wx.model.AjaxResult; +import org.apache.commons.io.IOUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.validation.Valid; +import java.io.Serializable; +import java.io.IOException; +import java.io.InputStream; +import java.util.Date; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-13 12:49:20 + */ +@RestController +@RequestMapping(value = "/stock") +public class StockController extends DmsBaseController { + + @Autowired + StockService stockService; + + /** + * 商品库存记录列表 + * + * @param limit 每页结果数 + * @param offset 页码 + * @param id 主键 + * @param ids 主键数组 + * @param excludeIds 不包含主键数组 + * @return Page 商品库存记录领域分页对象 + */ + @RequestMapping(method = RequestMethod.GET) + @Log(actionName = "查询商品库存记录列表") + public Page getStockList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "id", required = false) String id, + @RequestParam(value = "ids", required = false) String[] ids, + @RequestParam(value = "excludeIds", required = false) String[] excludeIds, + @RequestParam(value = "itemName", required = false) String itemName, + @RequestParam(value = "itemCode", required = false) String itemCode) { + StockQuery stockQuery = new StockQuery(); + stockQuery.setKeyword(StringUtils.trimToEmpty(keyword)); + stockQuery.setId(id); + stockQuery.setExcludeIds(excludeIds); + stockQuery.setIds(ids); + stockQuery.setItemCode(itemCode); + stockQuery.setItemName(itemName); + return stockService.getStockModelPage(limit, offset, stockQuery); + } + + /** + * 查询单个商品库存记录 + * + * @param id 主键 + * @return StockModel 商品库存记录领域对象 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @Log(actionName = "查询商品库存记录") + public StockModel getStockById(@PathVariable(value = "id") String id) { + return stockService.getOneStockModel(id); + } + + /** + * 新增商品库存记录 + * + * @param stockModel 新增对象参数 + * @return StockModel 商品库存记录领域对象 + */ + @RequestMapping(method = RequestMethod.POST) + @Log(actionName = "新增商品库存记录") + public StockModel createStock(@RequestBody @Valid StockModel stockModel) { + stockModel.setInsertUserId(getCurrentUserId()); + stockModel.setUpdateUserId(getCurrentUserId()); + return stockService.createStock(stockModel); + } + + /** + * 更新商品库存记录 + * + * @param id 主键 + * @param stockModel 更新对象参数 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新商品库存记录") + public void updateStock(@PathVariable(value = "id") String id, + @RequestBody @Valid StockModel stockModel) { + stockModel.setUpdateUserId(getCurrentUserId()); + stockService.updateStock(stockModel); + } + + /** + * 库存变更 + * + * @param id + * @param stockChange + */ + @RequestMapping(value = "/{id}/change", method = RequestMethod.PUT) + @Log(actionName = "更新商品库存记录") + public void updateStock(@PathVariable(value = "id") String id, + @RequestBody @Valid StockChange stockChange) { + stockChange.setActionBy(getCurrentUserId()); + stockChange.setStockId(id); + stockService.changeStock(stockChange); + } + + + /** + * 删除商品库存记录 + * + * @param id 主键 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除单个商品库存记录") + public void deleteStock(@PathVariable(value = "id") String id) { + stockService.deleteStock(id); + } + + /** + * 删除商品库存记录 + * + * @param ids 主键 + */ + @RequestMapping(method = RequestMethod.DELETE) + @Log(actionName = "批量删除商品库存记录") + public void deleteStocks(@RequestParam(value = "ids") String[] ids) { + stockService.deleteStock(ids); + } + + /** + * 预包装库存变化 + */ + @RequestMapping(value = "/beforehandPackageChangeStock", method = RequestMethod.GET) + @Log + public AjaxResult beforehandPackageChangeStock(@RequestParam(value = "itemId") Integer itemId, @RequestParam(value = "changeStockNum") Integer changeStockNum) { + AjaxResult ajaxResult = new AjaxResult(); + try { + ajaxResult = this.stockService.changeStockNum(itemId, changeStockNum, "预包装入库", 1); + } catch (Exception e) { + ajaxResult.setResult(0); + ajaxResult.setMessage(e.getMessage()); + } + return ajaxResult; + } +} diff --git a/src/main/java/com/xmomen/module/stock/controller/StockRecordController.java b/src/main/java/com/xmomen/module/stock/controller/StockRecordController.java new file mode 100644 index 0000000..e503ce0 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/controller/StockRecordController.java @@ -0,0 +1,132 @@ +package com.xmomen.module.stock.controller; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.logger.Log; +import com.xmomen.module.stock.model.StockRecordQuery; +import com.xmomen.module.stock.model.StockRecordModel; +import com.xmomen.module.stock.service.StockRecordService; + +import org.apache.commons.io.IOUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.validation.Valid; +import java.io.Serializable; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-13 12:48:23 + */ +@RestController +@RequestMapping(value = "/stockRecord") +public class StockRecordController { + + @Autowired + StockRecordService stockRecordService; + + /** + * 商品库存列表 + * + * @param limit 每页结果数 + * @param offset 页码 + * @param id 主键 + * @param ids 主键数组 + * @param excludeIds 不包含主键数组 + * @return Page 商品库存领域分页对象 + */ + @RequestMapping(method = RequestMethod.GET) + @Log(actionName = "查询商品库存列表") + public Page getStockRecordList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) String id, + @RequestParam(value = "ids", required = false) String[] ids, + @RequestParam(value = "stockId", required = false) String stockId, + @RequestParam(value = "changeType", required = false) Integer changeType, + @RequestParam(value = "dailyDate", required = false) String dailyDate, + @RequestParam(value = "excludeIds", required = false) String[] excludeIds) { + StockRecordQuery stockRecordQuery = new StockRecordQuery(); + stockRecordQuery.setId(id); + stockRecordQuery.setExcludeIds(excludeIds); + stockRecordQuery.setIds(ids); + stockRecordQuery.setStockId(stockId); + stockRecordQuery.setChangeType(changeType); + stockRecordQuery.setDailyDate(dailyDate); + return stockRecordService.getStockRecordModelPage(limit, offset, stockRecordQuery); + } + + /** + * 查询单个商品库存 + * + * @param id 主键 + * @return StockRecordModel 商品库存领域对象 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @Log(actionName = "查询商品库存") + public StockRecordModel getStockRecordById(@PathVariable(value = "id") String id) { + return stockRecordService.getOneStockRecordModel(id); + } + + /** + * 新增商品库存 + * + * @param stockRecordModel 新增对象参数 + * @return StockRecordModel 商品库存领域对象 + */ + @RequestMapping(method = RequestMethod.POST) + @Log(actionName = "新增商品库存") + public StockRecordModel createStockRecord(@RequestBody @Valid StockRecordModel stockRecordModel) { + return stockRecordService.createStockRecord(stockRecordModel); + } + + /** + * 更新商品库存 + * + * @param id 主键 + * @param stockRecordModel 更新对象参数 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新商品库存") + public void updateStockRecord(@PathVariable(value = "id") String id, + @RequestBody @Valid StockRecordModel stockRecordModel) { + stockRecordService.updateStockRecord(stockRecordModel); + } + + /** + * 删除商品库存 + * + * @param id 主键 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除单个商品库存") + public void deleteStockRecord(@PathVariable(value = "id") String id) { + stockRecordService.deleteStockRecord(id); + } + + /** + * 删除商品库存 + * + * @param ids 主键 + */ + @RequestMapping(method = RequestMethod.DELETE) + @Log(actionName = "批量删除商品库存") + public void deleteStockRecords(@RequestParam(value = "ids") String[] ids) { + stockRecordService.deleteStockRecord(ids); + } + + +} diff --git a/src/main/java/com/xmomen/module/stock/entity/Stock.java b/src/main/java/com/xmomen/module/stock/entity/Stock.java new file mode 100644 index 0000000..e6f8153 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/entity/Stock.java @@ -0,0 +1,168 @@ +package com.xmomen.module.stock.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "cd_stock") +public class Stock extends BaseMybatisModel { + /** + * 主键 + */ + private String id; + + /** + * 商品ID + */ + private Integer itemId; + + /** + * 库存数 + */ + private Integer stockNum; + + /** + * 预警数量 + */ + private Integer warningNum; + + /** + * 创建时间 + */ + private Date insertDate; + + /** + * 创建人 + */ + private Integer insertUserId; + + /** + * 更新时间 + */ + private Date updateDate; + + /** + * 更新人 + */ + private Integer updateUserId; + + @Column(name = "id") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "item_id") + public Integer getItemId() { + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + if(itemId == null){ + removeValidField("itemId"); + return; + } + addValidField("itemId"); + } + + @Column(name = "stock_num") + public Integer getStockNum() { + return stockNum; + } + + public void setStockNum(Integer stockNum) { + this.stockNum = stockNum; + if(stockNum == null){ + removeValidField("stockNum"); + return; + } + addValidField("stockNum"); + } + + @Column(name = "warning_num") + public Integer getWarningNum() { + return warningNum; + } + + public void setWarningNum(Integer warningNum) { + this.warningNum = warningNum; + if(warningNum == null){ + removeValidField("warningNum"); + return; + } + addValidField("warningNum"); + } + + @Column(name = "insert_date") + public Date getInsertDate() { + return insertDate; + } + + public void setInsertDate(Date insertDate) { + this.insertDate = insertDate; + if(insertDate == null){ + removeValidField("insertDate"); + return; + } + addValidField("insertDate"); + } + + @Column(name = "insert_user_id") + public Integer getInsertUserId() { + return insertUserId; + } + + public void setInsertUserId(Integer insertUserId) { + this.insertUserId = insertUserId; + if(insertUserId == null){ + removeValidField("insertUserId"); + return; + } + addValidField("insertUserId"); + } + + @Column(name = "update_date") + public Date getUpdateDate() { + return updateDate; + } + + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + if(updateDate == null){ + removeValidField("updateDate"); + return; + } + addValidField("updateDate"); + } + + @Column(name = "update_user_id") + public Integer getUpdateUserId() { + return updateUserId; + } + + public void setUpdateUserId(Integer updateUserId) { + this.updateUserId = updateUserId; + if(updateUserId == null){ + removeValidField("updateUserId"); + return; + } + addValidField("updateUserId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/stock/entity/StockExample.java b/src/main/java/com/xmomen/module/stock/entity/StockExample.java new file mode 100644 index 0000000..02f9697 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/entity/StockExample.java @@ -0,0 +1,692 @@ +package com.xmomen.module.stock.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class StockExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public StockExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andItemIdIsNull() { + addCriterion("item_id is null"); + return (Criteria) this; + } + + public Criteria andItemIdIsNotNull() { + addCriterion("item_id is not null"); + return (Criteria) this; + } + + public Criteria andItemIdEqualTo(Integer value) { + addCriterion("item_id =", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdNotEqualTo(Integer value) { + addCriterion("item_id <>", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdGreaterThan(Integer value) { + addCriterion("item_id >", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdGreaterThanOrEqualTo(Integer value) { + addCriterion("item_id >=", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdLessThan(Integer value) { + addCriterion("item_id <", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdLessThanOrEqualTo(Integer value) { + addCriterion("item_id <=", value, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdIn(List values) { + addCriterion("item_id in", values, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdNotIn(List values) { + addCriterion("item_id not in", values, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdBetween(Integer value1, Integer value2) { + addCriterion("item_id between", value1, value2, "itemId"); + return (Criteria) this; + } + + public Criteria andItemIdNotBetween(Integer value1, Integer value2) { + addCriterion("item_id not between", value1, value2, "itemId"); + return (Criteria) this; + } + + public Criteria andStockNumIsNull() { + addCriterion("stock_num is null"); + return (Criteria) this; + } + + public Criteria andStockNumIsNotNull() { + addCriterion("stock_num is not null"); + return (Criteria) this; + } + + public Criteria andStockNumEqualTo(Integer value) { + addCriterion("stock_num =", value, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumNotEqualTo(Integer value) { + addCriterion("stock_num <>", value, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumGreaterThan(Integer value) { + addCriterion("stock_num >", value, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumGreaterThanOrEqualTo(Integer value) { + addCriterion("stock_num >=", value, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumLessThan(Integer value) { + addCriterion("stock_num <", value, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumLessThanOrEqualTo(Integer value) { + addCriterion("stock_num <=", value, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumIn(List values) { + addCriterion("stock_num in", values, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumNotIn(List values) { + addCriterion("stock_num not in", values, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumBetween(Integer value1, Integer value2) { + addCriterion("stock_num between", value1, value2, "stockNum"); + return (Criteria) this; + } + + public Criteria andStockNumNotBetween(Integer value1, Integer value2) { + addCriterion("stock_num not between", value1, value2, "stockNum"); + return (Criteria) this; + } + + public Criteria andWarningNumIsNull() { + addCriterion("warning_num is null"); + return (Criteria) this; + } + + public Criteria andWarningNumIsNotNull() { + addCriterion("warning_num is not null"); + return (Criteria) this; + } + + public Criteria andWarningNumEqualTo(Integer value) { + addCriterion("warning_num =", value, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumNotEqualTo(Integer value) { + addCriterion("warning_num <>", value, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumGreaterThan(Integer value) { + addCriterion("warning_num >", value, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumGreaterThanOrEqualTo(Integer value) { + addCriterion("warning_num >=", value, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumLessThan(Integer value) { + addCriterion("warning_num <", value, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumLessThanOrEqualTo(Integer value) { + addCriterion("warning_num <=", value, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumIn(List values) { + addCriterion("warning_num in", values, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumNotIn(List values) { + addCriterion("warning_num not in", values, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumBetween(Integer value1, Integer value2) { + addCriterion("warning_num between", value1, value2, "warningNum"); + return (Criteria) this; + } + + public Criteria andWarningNumNotBetween(Integer value1, Integer value2) { + addCriterion("warning_num not between", value1, value2, "warningNum"); + return (Criteria) this; + } + + public Criteria andInsertDateIsNull() { + addCriterion("insert_date is null"); + return (Criteria) this; + } + + public Criteria andInsertDateIsNotNull() { + addCriterion("insert_date is not null"); + return (Criteria) this; + } + + public Criteria andInsertDateEqualTo(Date value) { + addCriterion("insert_date =", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotEqualTo(Date value) { + addCriterion("insert_date <>", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateGreaterThan(Date value) { + addCriterion("insert_date >", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateGreaterThanOrEqualTo(Date value) { + addCriterion("insert_date >=", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateLessThan(Date value) { + addCriterion("insert_date <", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateLessThanOrEqualTo(Date value) { + addCriterion("insert_date <=", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateIn(List values) { + addCriterion("insert_date in", values, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotIn(List values) { + addCriterion("insert_date not in", values, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateBetween(Date value1, Date value2) { + addCriterion("insert_date between", value1, value2, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotBetween(Date value1, Date value2) { + addCriterion("insert_date not between", value1, value2, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertUserIdIsNull() { + addCriterion("insert_user_id is null"); + return (Criteria) this; + } + + public Criteria andInsertUserIdIsNotNull() { + addCriterion("insert_user_id is not null"); + return (Criteria) this; + } + + public Criteria andInsertUserIdEqualTo(Integer value) { + addCriterion("insert_user_id =", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdNotEqualTo(Integer value) { + addCriterion("insert_user_id <>", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdGreaterThan(Integer value) { + addCriterion("insert_user_id >", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("insert_user_id >=", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdLessThan(Integer value) { + addCriterion("insert_user_id <", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdLessThanOrEqualTo(Integer value) { + addCriterion("insert_user_id <=", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdIn(List values) { + addCriterion("insert_user_id in", values, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdNotIn(List values) { + addCriterion("insert_user_id not in", values, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdBetween(Integer value1, Integer value2) { + addCriterion("insert_user_id between", value1, value2, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("insert_user_id not between", value1, value2, "insertUserId"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNull() { + addCriterion("update_date is null"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNotNull() { + addCriterion("update_date is not null"); + return (Criteria) this; + } + + public Criteria andUpdateDateEqualTo(Date value) { + addCriterion("update_date =", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotEqualTo(Date value) { + addCriterion("update_date <>", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThan(Date value) { + addCriterion("update_date >", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThanOrEqualTo(Date value) { + addCriterion("update_date >=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThan(Date value) { + addCriterion("update_date <", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThanOrEqualTo(Date value) { + addCriterion("update_date <=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateIn(List values) { + addCriterion("update_date in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotIn(List values) { + addCriterion("update_date not in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateBetween(Date value1, Date value2) { + addCriterion("update_date between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotBetween(Date value1, Date value2) { + addCriterion("update_date not between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNull() { + addCriterion("update_user_id is null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNotNull() { + addCriterion("update_user_id is not null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdEqualTo(Integer value) { + addCriterion("update_user_id =", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotEqualTo(Integer value) { + addCriterion("update_user_id <>", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThan(Integer value) { + addCriterion("update_user_id >", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("update_user_id >=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThan(Integer value) { + addCriterion("update_user_id <", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThanOrEqualTo(Integer value) { + addCriterion("update_user_id <=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIn(List values) { + addCriterion("update_user_id in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotIn(List values) { + addCriterion("update_user_id not in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdBetween(Integer value1, Integer value2) { + addCriterion("update_user_id between", value1, value2, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("update_user_id not between", value1, value2, "updateUserId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/stock/entity/StockRecordExample.java b/src/main/java/com/xmomen/module/stock/entity/StockRecordExample.java new file mode 100644 index 0000000..2e678cc --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/entity/StockRecordExample.java @@ -0,0 +1,832 @@ +package com.xmomen.module.stock.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class StockRecordExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public StockRecordExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andStockIdIsNull() { + addCriterion("stock_id is null"); + return (Criteria) this; + } + + public Criteria andStockIdIsNotNull() { + addCriterion("stock_id is not null"); + return (Criteria) this; + } + + public Criteria andStockIdEqualTo(String value) { + addCriterion("stock_id =", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdNotEqualTo(String value) { + addCriterion("stock_id <>", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdGreaterThan(String value) { + addCriterion("stock_id >", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdGreaterThanOrEqualTo(String value) { + addCriterion("stock_id >=", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdLessThan(String value) { + addCriterion("stock_id <", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdLessThanOrEqualTo(String value) { + addCriterion("stock_id <=", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdLike(String value) { + addCriterion("stock_id like", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdNotLike(String value) { + addCriterion("stock_id not like", value, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdIn(List values) { + addCriterion("stock_id in", values, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdNotIn(List values) { + addCriterion("stock_id not in", values, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdBetween(String value1, String value2) { + addCriterion("stock_id between", value1, value2, "stockId"); + return (Criteria) this; + } + + public Criteria andStockIdNotBetween(String value1, String value2) { + addCriterion("stock_id not between", value1, value2, "stockId"); + return (Criteria) this; + } + + public Criteria andChangeNumIsNull() { + addCriterion("change_num is null"); + return (Criteria) this; + } + + public Criteria andChangeNumIsNotNull() { + addCriterion("change_num is not null"); + return (Criteria) this; + } + + public Criteria andChangeNumEqualTo(Integer value) { + addCriterion("change_num =", value, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumNotEqualTo(Integer value) { + addCriterion("change_num <>", value, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumGreaterThan(Integer value) { + addCriterion("change_num >", value, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumGreaterThanOrEqualTo(Integer value) { + addCriterion("change_num >=", value, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumLessThan(Integer value) { + addCriterion("change_num <", value, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumLessThanOrEqualTo(Integer value) { + addCriterion("change_num <=", value, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumIn(List values) { + addCriterion("change_num in", values, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumNotIn(List values) { + addCriterion("change_num not in", values, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumBetween(Integer value1, Integer value2) { + addCriterion("change_num between", value1, value2, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangeNumNotBetween(Integer value1, Integer value2) { + addCriterion("change_num not between", value1, value2, "changeNum"); + return (Criteria) this; + } + + public Criteria andChangTypeIsNull() { + addCriterion("chang_type is null"); + return (Criteria) this; + } + + public Criteria andChangTypeIsNotNull() { + addCriterion("chang_type is not null"); + return (Criteria) this; + } + + public Criteria andChangTypeEqualTo(Integer value) { + addCriterion("chang_type =", value, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeNotEqualTo(Integer value) { + addCriterion("chang_type <>", value, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeGreaterThan(Integer value) { + addCriterion("chang_type >", value, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("chang_type >=", value, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeLessThan(Integer value) { + addCriterion("chang_type <", value, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeLessThanOrEqualTo(Integer value) { + addCriterion("chang_type <=", value, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeIn(List values) { + addCriterion("chang_type in", values, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeNotIn(List values) { + addCriterion("chang_type not in", values, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeBetween(Integer value1, Integer value2) { + addCriterion("chang_type between", value1, value2, "changType"); + return (Criteria) this; + } + + public Criteria andChangTypeNotBetween(Integer value1, Integer value2) { + addCriterion("chang_type not between", value1, value2, "changType"); + return (Criteria) this; + } + + public Criteria andRefOrderIdIsNull() { + addCriterion("ref_order_id is null"); + return (Criteria) this; + } + + public Criteria andRefOrderIdIsNotNull() { + addCriterion("ref_order_id is not null"); + return (Criteria) this; + } + + public Criteria andRefOrderIdEqualTo(Integer value) { + addCriterion("ref_order_id =", value, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdNotEqualTo(Integer value) { + addCriterion("ref_order_id <>", value, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdGreaterThan(Integer value) { + addCriterion("ref_order_id >", value, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ref_order_id >=", value, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdLessThan(Integer value) { + addCriterion("ref_order_id <", value, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdLessThanOrEqualTo(Integer value) { + addCriterion("ref_order_id <=", value, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdIn(List values) { + addCriterion("ref_order_id in", values, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdNotIn(List values) { + addCriterion("ref_order_id not in", values, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdBetween(Integer value1, Integer value2) { + addCriterion("ref_order_id between", value1, value2, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRefOrderIdNotBetween(Integer value1, Integer value2) { + addCriterion("ref_order_id not between", value1, value2, "refOrderId"); + return (Criteria) this; + } + + public Criteria andRemarkIsNull() { + addCriterion("remark is null"); + return (Criteria) this; + } + + public Criteria andRemarkIsNotNull() { + addCriterion("remark is not null"); + return (Criteria) this; + } + + public Criteria andRemarkEqualTo(String value) { + addCriterion("remark =", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotEqualTo(String value) { + addCriterion("remark <>", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThan(String value) { + addCriterion("remark >", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkGreaterThanOrEqualTo(String value) { + addCriterion("remark >=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThan(String value) { + addCriterion("remark <", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLessThanOrEqualTo(String value) { + addCriterion("remark <=", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkLike(String value) { + addCriterion("remark like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotLike(String value) { + addCriterion("remark not like", value, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkIn(List values) { + addCriterion("remark in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotIn(List values) { + addCriterion("remark not in", values, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkBetween(String value1, String value2) { + addCriterion("remark between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andRemarkNotBetween(String value1, String value2) { + addCriterion("remark not between", value1, value2, "remark"); + return (Criteria) this; + } + + public Criteria andInsertUserIdIsNull() { + addCriterion("insert_user_id is null"); + return (Criteria) this; + } + + public Criteria andInsertUserIdIsNotNull() { + addCriterion("insert_user_id is not null"); + return (Criteria) this; + } + + public Criteria andInsertUserIdEqualTo(Integer value) { + addCriterion("insert_user_id =", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdNotEqualTo(Integer value) { + addCriterion("insert_user_id <>", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdGreaterThan(Integer value) { + addCriterion("insert_user_id >", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("insert_user_id >=", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdLessThan(Integer value) { + addCriterion("insert_user_id <", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdLessThanOrEqualTo(Integer value) { + addCriterion("insert_user_id <=", value, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdIn(List values) { + addCriterion("insert_user_id in", values, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdNotIn(List values) { + addCriterion("insert_user_id not in", values, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdBetween(Integer value1, Integer value2) { + addCriterion("insert_user_id between", value1, value2, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("insert_user_id not between", value1, value2, "insertUserId"); + return (Criteria) this; + } + + public Criteria andInsertDateIsNull() { + addCriterion("insert_date is null"); + return (Criteria) this; + } + + public Criteria andInsertDateIsNotNull() { + addCriterion("insert_date is not null"); + return (Criteria) this; + } + + public Criteria andInsertDateEqualTo(Date value) { + addCriterion("insert_date =", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotEqualTo(Date value) { + addCriterion("insert_date <>", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateGreaterThan(Date value) { + addCriterion("insert_date >", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateGreaterThanOrEqualTo(Date value) { + addCriterion("insert_date >=", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateLessThan(Date value) { + addCriterion("insert_date <", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateLessThanOrEqualTo(Date value) { + addCriterion("insert_date <=", value, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateIn(List values) { + addCriterion("insert_date in", values, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotIn(List values) { + addCriterion("insert_date not in", values, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateBetween(Date value1, Date value2) { + addCriterion("insert_date between", value1, value2, "insertDate"); + return (Criteria) this; + } + + public Criteria andInsertDateNotBetween(Date value1, Date value2) { + addCriterion("insert_date not between", value1, value2, "insertDate"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNull() { + addCriterion("update_user_id is null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIsNotNull() { + addCriterion("update_user_id is not null"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdEqualTo(Integer value) { + addCriterion("update_user_id =", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotEqualTo(Integer value) { + addCriterion("update_user_id <>", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThan(Integer value) { + addCriterion("update_user_id >", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("update_user_id >=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThan(Integer value) { + addCriterion("update_user_id <", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdLessThanOrEqualTo(Integer value) { + addCriterion("update_user_id <=", value, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdIn(List values) { + addCriterion("update_user_id in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotIn(List values) { + addCriterion("update_user_id not in", values, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdBetween(Integer value1, Integer value2) { + addCriterion("update_user_id between", value1, value2, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("update_user_id not between", value1, value2, "updateUserId"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNull() { + addCriterion("update_date is null"); + return (Criteria) this; + } + + public Criteria andUpdateDateIsNotNull() { + addCriterion("update_date is not null"); + return (Criteria) this; + } + + public Criteria andUpdateDateEqualTo(Date value) { + addCriterion("update_date =", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotEqualTo(Date value) { + addCriterion("update_date <>", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThan(Date value) { + addCriterion("update_date >", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateGreaterThanOrEqualTo(Date value) { + addCriterion("update_date >=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThan(Date value) { + addCriterion("update_date <", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateLessThanOrEqualTo(Date value) { + addCriterion("update_date <=", value, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateIn(List values) { + addCriterion("update_date in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotIn(List values) { + addCriterion("update_date not in", values, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateBetween(Date value1, Date value2) { + addCriterion("update_date between", value1, value2, "updateDate"); + return (Criteria) this; + } + + public Criteria andUpdateDateNotBetween(Date value1, Date value2) { + addCriterion("update_date not between", value1, value2, "updateDate"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/stock/entity/mapper/StockRecordMapper.java b/src/main/java/com/xmomen/module/stock/entity/mapper/StockRecordMapper.java new file mode 100644 index 0000000..d621b63 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/entity/mapper/StockRecordMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.stock.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.stock.entity.StockRecord; +import com.xmomen.module.stock.entity.StockRecordExample; +import org.apache.ibatis.annotations.Param; + +public interface StockRecordMapper extends MybatisMapper { + int countByExample(StockRecordExample example); + + int deleteByExample(StockRecordExample example); + + int insertSelective(StockRecord record); + + int updateByExampleSelective(@Param("record") StockRecord record, @Param("example") StockRecordExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/stock/entity/mapper/StockRecordMapper.xml b/src/main/java/com/xmomen/module/stock/entity/mapper/StockRecordMapper.xml new file mode 100644 index 0000000..84ec1cf --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/entity/mapper/StockRecordMapper.xml @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, stock_id, change_num, chang_type, ref_order_id, remark, insert_user_id, insert_date, + update_user_id, update_date + + + + delete from cd_stock_record + + + + + + + SELECT replace(UUID(),'-','') + + insert into cd_stock_record + + id, + + stock_id, + + + change_num, + + + chang_type, + + + ref_order_id, + + + remark, + + + insert_user_id, + + + insert_date, + + + update_user_id, + + + update_date, + + + + #{id,jdbcType=VARCHAR}, + + #{stockId,jdbcType=VARCHAR}, + + + #{changeNum,jdbcType=INTEGER}, + + + #{changType,jdbcType=INTEGER}, + + + #{refOrderId,jdbcType=INTEGER}, + + + #{remark,jdbcType=VARCHAR}, + + + #{insertUserId,jdbcType=INTEGER}, + + + #{insertDate,jdbcType=TIMESTAMP}, + + + #{updateUserId,jdbcType=INTEGER}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + + + + update cd_stock_record + + + id = #{record.id,jdbcType=VARCHAR}, + + + stock_id = #{record.stockId,jdbcType=VARCHAR}, + + + change_num = #{record.changeNum,jdbcType=INTEGER}, + + + chang_type = #{record.changType,jdbcType=INTEGER}, + + + ref_order_id = #{record.refOrderId,jdbcType=INTEGER}, + + + remark = #{record.remark,jdbcType=VARCHAR}, + + + insert_user_id = #{record.insertUserId,jdbcType=INTEGER}, + + + insert_date = #{record.insertDate,jdbcType=TIMESTAMP}, + + + update_user_id = #{record.updateUserId,jdbcType=INTEGER}, + + + update_date = #{record.updateDate,jdbcType=TIMESTAMP}, + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/stock/model/StockChange.java b/src/main/java/com/xmomen/module/stock/model/StockChange.java new file mode 100644 index 0000000..2ce2a11 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/model/StockChange.java @@ -0,0 +1,19 @@ +package com.xmomen.module.stock.model; + +import com.xmomen.framework.model.BaseModel; +import lombok.Data; + +import java.io.Serializable; + +/** + * Created by tanxinzheng on 17/5/17. + */ +@Data +public class StockChange extends BaseModel implements Serializable{ + + private String stockId; + private Integer type;//1-入库,2-破损,3-核销 + private Integer number; + private Integer actionBy; + +} diff --git a/src/main/java/com/xmomen/module/stock/model/StockQuery.java b/src/main/java/com/xmomen/module/stock/model/StockQuery.java new file mode 100644 index 0000000..42f803b --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/model/StockQuery.java @@ -0,0 +1,34 @@ +package com.xmomen.module.stock.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-13 12:49:20 + */ +public +@Data +class StockQuery implements Serializable { + /** + * 主键 + */ + private String id; + /** + * 包含主键集 + */ + private String[] ids; + /** + * 排除主键集 + */ + private String[] excludeIds; + + private String keyword; + + private String itemCode; + + private String itemName; + +} diff --git a/src/main/java/com/xmomen/module/stock/model/StockRecordCreate.java b/src/main/java/com/xmomen/module/stock/model/StockRecordCreate.java new file mode 100644 index 0000000..a6289cf --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/model/StockRecordCreate.java @@ -0,0 +1,45 @@ +package com.xmomen.module.stock.model; + +import lombok.Data; +import com.xmomen.module.stock.entity.StockRecord; +import org.springframework.beans.BeanUtils; + + import java.lang.String; + import java.lang.Integer; + import java.util.Date; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @date 2017-5-13 12:48:23 + * @version 1.0.0 + */ +public @Data class StockRecordCreate implements Serializable { + + /** 主键 */ + private String id; + /** 库存id */ + private String stockId; + /** 变更数量 */ + private Integer changeNum; + /** 1-增加 2-减少 */ + private Integer changType; + /** 如果是订单变更,关联订单ID */ + private Integer refOrderId; + /** 备注(记录变更) */ + private String remark; + /** 创建人 */ + private Integer insertUserId; + /** 创建时间 */ + private Date insertDate; + /** 更新人 */ + private Integer updateUserId; + /** 更新时间 */ + private Date updateDate; + + public StockRecord getEntity(){ + StockRecord stockRecord = new StockRecord(); + BeanUtils.copyProperties(this, stockRecord); + return stockRecord; + } +} diff --git a/src/main/java/com/xmomen/module/stock/model/StockRecordModel.java b/src/main/java/com/xmomen/module/stock/model/StockRecordModel.java new file mode 100644 index 0000000..1903065 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/model/StockRecordModel.java @@ -0,0 +1,110 @@ +package com.xmomen.module.stock.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.xmomen.module.stock.entity.StockRecord; +import lombok.Data; +import org.hibernate.validator.constraints.*; + +import javax.validation.constraints.*; + +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelTarget; +import org.springframework.beans.BeanUtils; + +import java.lang.String; +import java.lang.Integer; +import java.util.Date; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-13 12:48:23 + */ +@ExcelTarget(value = "StockRecordModel") +public +@Data +class StockRecordModel implements Serializable { + + /** + * 主键 + */ + @NotBlank(message = "主键为必填项") + @Length(max = 32, message = "主键字符长度限制[0,32]") + private String id; + /** + * 库存id + */ + @Excel(name = "库存id") + @NotBlank(message = "库存id为必填项") + @Length(max = 32, message = "库存id字符长度限制[0,32]") + private String stockId; + /** + * 变更数量 + */ + @Excel(name = "变更数量") + @NotBlank(message = "变更数量为必填项") + @Range(max = 999999999, min = -999999999, message = "变更数量数值范围[999999999,-999999999]") + private Integer changeNum; + /** + * 1-增加 2-减少 + */ + @Excel(name = "1-增加 2-减少") + @NotBlank(message = "1-增加 2-减少为必填项") + @Range(max = 999999999, min = -999999999, message = "1-增加 2-减少数值范围[999999999,-999999999]") + private Integer changType; + /** + * 如果是订单变更,关联订单ID + */ + @Excel(name = "如果是订单变更,关联订单ID") + @Range(max = 999999999, min = -999999999, message = "如果是订单变更,关联订单ID数值范围[999999999,-999999999]") + private Integer refOrderId; + /** + * 备注(记录变更) + */ + @Excel(name = "备注(记录变更)") + @Length(max = 128, message = "备注(记录变更)字符长度限制[0,128]") + private String remark; + /** + * 创建人 + */ + @Excel(name = "创建人") + @NotBlank(message = "创建人为必填项") + @Range(max = 999999999, min = -999999999, message = "创建人数值范围[999999999,-999999999]") + private Integer insertUserId; + /** + * 创建时间 + */ + @Excel(name = "创建时间") + @NotBlank(message = "创建时间为必填项") + private Date insertDate; + /** + * 更新人 + */ + @Excel(name = "更新人") + @Range(max = 999999999, min = -999999999, message = "更新人数值范围[999999999,-999999999]") + private Integer updateUserId; + /** + * 更新时间 + */ + @Excel(name = "更新时间") + private Date updateDate; + + private String orderNo; + private String itemName; + private String itemCode; + + /** + * Get StockRecord Entity Object + * + * @return + */ + @JsonIgnore + public StockRecord getEntity() { + StockRecord stockRecord = new StockRecord(); + BeanUtils.copyProperties(this, stockRecord); + return stockRecord; + } + + +} diff --git a/src/main/java/com/xmomen/module/stock/service/StockRecordService.java b/src/main/java/com/xmomen/module/stock/service/StockRecordService.java new file mode 100644 index 0000000..3489b81 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/service/StockRecordService.java @@ -0,0 +1,115 @@ +package com.xmomen.module.stock.service; + +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.stock.model.StockRecordQuery; +import com.xmomen.module.stock.model.StockRecordModel; +import com.xmomen.module.stock.entity.StockRecord; +import org.apache.ibatis.exceptions.TooManyResultsException; + +import java.io.Serializable; +import java.util.List; + +/** + * @author tanxinzheng + * @date 2017-5-13 12:48:23 + * @version 1.0.0 + */ +public interface StockRecordService { + + /** + * 新增商品库存 + * @param stockRecordModel 新增商品库存对象参数 + * @return StockRecordModel 商品库存领域对象 + */ + public StockRecordModel createStockRecord(StockRecordModel stockRecordModel); + + /** + * 新增商品库存实体对象 + * @param stockRecord 新增商品库存实体对象参数 + * @return StockRecord 商品库存实体对象 + */ + public StockRecord createStockRecord(StockRecord stockRecord); + + /** + * 批量新增商品库存 + * @param StockRecordModel 新增商品库存对象集合参数 + * @return List 商品库存领域对象集合 + */ + List createStockRecords(List stockRecordModels); + + /** + * 更新商品库存 + * @param stockRecordModel 更新商品库存对象参数 + */ + public void updateStockRecord(StockRecordModel stockRecordModel); + + /** + * 更新商品库存实体对象 + * @param stockRecord 新增商品库存实体对象参数 + * @return StockRecord 商品库存实体对象 + */ + public void updateStockRecord(StockRecord stockRecord); + + /** + * 批量删除商品库存 + * @param ids 主键数组 + */ + public void deleteStockRecord(String[] ids); + + /** + * 删除商品库存 + * @param id 主键 + */ + public void deleteStockRecord(String id); + + /** + * 查询商品库存领域分页对象(带参数条件) + * @param stockRecordQuery 查询参数 + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 商品库存参数对象 + */ + public Page getStockRecordModelPage(int limit, int offset, StockRecordQuery stockRecordQuery); + + /** + * 查询商品库存领域分页对象(无参数条件) + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 商品库存领域对象 + */ + public Page getStockRecordModelPage(int limit, int offset); + + /** + * 查询商品库存领域集合对象(带参数条件) + * @param stockRecordQuery 查询参数对象 + * @return List 商品库存领域集合对象 + */ + public List getStockRecordModelList(StockRecordQuery stockRecordQuery); + + /** + * 查询商品库存领域集合对象(无参数条件) + * @return List 商品库存领域集合对象 + */ + public List getStockRecordModelList(); + + /** + * 查询商品库存实体对象 + * @param id 主键 + * @return StockRecord 商品库存实体对象 + */ + public StockRecord getOneStockRecord(String id); + + /** + * 根据主键查询单个对象 + * @param id 主键 + * @return StockRecordModel 商品库存领域对象 + */ + public StockRecordModel getOneStockRecordModel(String id); + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * @param stockRecordQuery 商品库存查询参数对象 + * @return StockRecordModel 商品库存领域对象 + */ + public StockRecordModel getOneStockRecordModel(StockRecordQuery stockRecordQuery) throws TooManyResultsException; +} diff --git a/src/main/java/com/xmomen/module/stock/service/StockService.java b/src/main/java/com/xmomen/module/stock/service/StockService.java new file mode 100644 index 0000000..f49aa74 --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/service/StockService.java @@ -0,0 +1,171 @@ +package com.xmomen.module.stock.service; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.stock.model.StockChange; +import com.xmomen.module.stock.model.StockQuery; +import com.xmomen.module.stock.model.StockModel; +import com.xmomen.module.stock.entity.Stock; +import com.xmomen.module.wx.model.AjaxResult; +import org.apache.ibatis.exceptions.TooManyResultsException; + +import java.io.Serializable; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-13 12:49:20 + */ +public interface StockService { + + /** + * 新增商品库存记录 + * + * @param stockModel 新增商品库存记录对象参数 + * @return StockModel 商品库存记录领域对象 + */ + public StockModel createStock(StockModel stockModel); + + /** + * 新增商品库存记录实体对象 + * + * @param stock 新增商品库存记录实体对象参数 + * @return Stock 商品库存记录实体对象 + */ + public Stock createStock(Stock stock); + + /** + * 批量新增商品库存记录 + * + * @param stockModels 新增商品库存记录对象集合参数 + * @return List 商品库存记录领域对象集合 + */ + List createStocks(List stockModels); + + /** + * 更新商品库存记录 + * + * @param stockModel 更新商品库存记录对象参数 + */ + public void updateStock(StockModel stockModel); + + /** + * 更新商品库存记录实体对象 + * + * @param stock 新增商品库存记录实体对象参数 + * @return Stock 商品库存记录实体对象 + */ + public void updateStock(Stock stock); + + /** + * 库存变更 + * + * @param stockChange + */ + public void changeStock(StockChange stockChange); + + /** + * 批量删除商品库存记录 + * + * @param ids 主键数组 + */ + public void deleteStock(String[] ids); + + /** + * 删除商品库存记录 + * + * @param id 主键 + */ + public void deleteStock(String id); + + /** + * 查询商品库存记录领域分页对象(带参数条件) + * + * @param stockQuery 查询参数 + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 商品库存记录参数对象 + */ + public Page getStockModelPage(int limit, int offset, StockQuery stockQuery); + + /** + * 查询商品库存记录领域分页对象(无参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 商品库存记录领域对象 + */ + public Page getStockModelPage(int limit, int offset); + + /** + * 查询商品库存记录领域集合对象(带参数条件) + * + * @param stockQuery 查询参数对象 + * @return List 商品库存记录领域集合对象 + */ + public List getStockModelList(StockQuery stockQuery); + + /** + * 查询商品库存记录领域集合对象(无参数条件) + * + * @return List 商品库存记录领域集合对象 + */ + public List getStockModelList(); + + /** + * 查询商品库存记录实体对象 + * + * @param id 主键 + * @return Stock 商品库存记录实体对象 + */ + public Stock getOneStock(String id); + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return StockModel 商品库存记录领域对象 + */ + public StockModel getOneStockModel(String id); + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * + * @param stockQuery 商品库存记录查询参数对象 + * @return StockModel 商品库存记录领域对象 + */ + public StockModel getOneStockModel(StockQuery stockQuery) throws TooManyResultsException; + + /** + * 库存校验 + * + * @param itemId 商品ID + * @param needNum 数量 + * @return true-库存充足 false-库存不足 + */ + public boolean checkStock(Integer itemId, Integer needNum); + + /** + * 库存变化表(订单) + * + * @param itemId 商品id + * @param changeStockNum 变化数量 负数表示扣除 + * @param orderId 订单id + * @param remark 备注 + * @param changeType 1-入库(预包装,手工入库),2-出库,3-取消退款入库 4-破损 5-核销 + * @return + */ + public AjaxResult changeStockNum(Integer itemId, Integer changeStockNum, Integer orderId, String remark, Integer changeType) throws BusinessException; + + /** + * 库存变化表 + * + * @param itemId 商品id + * @param changeStockNum 变化数量 负数表示扣除 + * @param remark 备注 + * @param changeType 1-入库(预包装,手工入库),2-出库,3-取消退款入库 4-破损 5-核销 + * @return + */ + public AjaxResult changeStockNum(Integer itemId, Integer changeStockNum, String remark, Integer changeType) throws BusinessException; +} diff --git a/src/main/java/com/xmomen/module/stock/service/impl/StockRecordServiceImpl.java b/src/main/java/com/xmomen/module/stock/service/impl/StockRecordServiceImpl.java new file mode 100644 index 0000000..e0a55ad --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/service/impl/StockRecordServiceImpl.java @@ -0,0 +1,211 @@ +package com.xmomen.module.stock.service.impl; + +import com.xmomen.module.stock.entity.StockRecord; +import com.xmomen.module.stock.entity.StockRecordExample; +import com.xmomen.module.stock.mapper.StockRecordMapperExt; +import com.xmomen.module.stock.model.StockRecordCreate; +import com.xmomen.module.stock.model.StockRecordQuery; +import com.xmomen.module.stock.model.StockRecordUpdate; +import com.xmomen.module.stock.model.StockRecordModel; +import com.xmomen.module.stock.service.StockRecordService; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @author tanxinzheng + * @date 2017-5-13 12:48:23 + * @version 1.0.0 + */ +@Service +public class StockRecordServiceImpl implements StockRecordService { + + @Autowired + MybatisDao mybatisDao; + + /** + * 新增商品库存 + * + * @param stockRecordModel 新增商品库存对象参数 + * @return StockRecordModel 商品库存领域对象 + */ + @Override + @Transactional + public StockRecordModel createStockRecord(StockRecordModel stockRecordModel) { + StockRecord stockRecord = createStockRecord(stockRecordModel.getEntity()); + if(stockRecord != null){ + return getOneStockRecordModel(stockRecord.getId()); + } + return null; + } + + /** + * 新增商品库存实体对象 + * + * @param stockRecord 新增商品库存实体对象参数 + * @return StockRecord 商品库存实体对象 + */ + @Override + @Transactional + public StockRecord createStockRecord(StockRecord stockRecord) { + return mybatisDao.insertByModel(stockRecord); + } + + /** + * 批量新增商品库存 + * + * @param stockRecordModels 新增商品库存对象集合参数 + * @return List 商品库存领域对象集合 + */ + @Override + @Transactional + public List createStockRecords(List stockRecordModels) { + List stockRecordModelList = null; + for (StockRecordModel stockRecordModel : stockRecordModels) { + stockRecordModel = createStockRecord(stockRecordModel); + if(stockRecordModel != null){ + if(stockRecordModelList == null){ + stockRecordModelList = new ArrayList<>(); + } + stockRecordModelList.add(stockRecordModel); + } + } + return stockRecordModelList; + } + + /** + * 更新商品库存 + * + * @param stockRecordModel 更新商品库存对象参数 + */ + @Override + @Transactional + public void updateStockRecord(StockRecordModel stockRecordModel) { + mybatisDao.update(stockRecordModel.getEntity()); + } + + /** + * 更新商品库存实体对象 + * + * @param stockRecord 新增商品库存实体对象参数 + * @return StockRecord 商品库存实体对象 + */ + @Override + @Transactional + public void updateStockRecord(StockRecord stockRecord) { + mybatisDao.update(stockRecord); + } + + /** + * 删除商品库存 + * + * @param ids 主键数组 + */ + @Override + @Transactional + public void deleteStockRecord(String[] ids) { + StockRecordExample stockRecordExample = new StockRecordExample(); + stockRecordExample.createCriteria().andIdIn(Arrays.asList((String[]) ids)); + mybatisDao.deleteByExample(stockRecordExample); + } + + /** + * 删除商品库存 + * + * @param id 主键 + */ + @Override + @Transactional + public void deleteStockRecord(String id) { + mybatisDao.deleteByPrimaryKey(StockRecord.class, id); + } + + /** + * 查询商品库存领域分页对象(带参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @param stockRecordQuery 查询参数 + * @return Page 商品库存参数对象 + */ + @Override + public Page getStockRecordModelPage(int limit, int offset, StockRecordQuery stockRecordQuery) { + return (Page) mybatisDao.selectPage(StockRecordMapperExt.StockRecordMapperNameSpace + "getStockRecordModel", stockRecordQuery, limit, offset); + } + + /** + * 查询商品库存领域分页对象(无参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 商品库存领域对象 + */ + @Override + public Page getStockRecordModelPage(int limit, int offset) { + return (Page) mybatisDao.selectPage(StockRecordMapperExt.StockRecordMapperNameSpace + "getStockRecordModel", null, limit, offset); + } + + /** + * 查询商品库存领域集合对象(带参数条件) + * + * @param stockRecordQuery 查询参数对象 + * @return List 商品库存领域集合对象 + */ + @Override + public List getStockRecordModelList(StockRecordQuery stockRecordQuery) { + return mybatisDao.getSqlSessionTemplate().selectList(StockRecordMapperExt.StockRecordMapperNameSpace + "getStockRecordModel", stockRecordQuery); + } + + /** + * 查询商品库存领域集合对象(无参数条件) + * + * @return List 商品库存领域集合对象 + */ + @Override + public List getStockRecordModelList() { + return mybatisDao.getSqlSessionTemplate().selectList(StockRecordMapperExt.StockRecordMapperNameSpace + "getStockRecordModel"); + } + + /** + * 查询商品库存实体对象 + * + * @param id 主键 + * @return StockRecord 商品库存实体对象 + */ + @Override + public StockRecord getOneStockRecord(String id) { + return mybatisDao.selectByPrimaryKey(StockRecord.class, id); + } + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return StockRecordModel 商品库存领域对象 + */ + @Override + public StockRecordModel getOneStockRecordModel(String id) { + StockRecordQuery stockRecordQuery = new StockRecordQuery(); + stockRecordQuery.setId(id); + return mybatisDao.getSqlSessionTemplate().selectOne(StockRecordMapperExt.StockRecordMapperNameSpace + "getStockRecordModel", stockRecordQuery); + } + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * + * @param stockRecordQuery 商品库存查询参数对象 + * @return StockRecordModel 商品库存领域对象 + */ + @Override + public StockRecordModel getOneStockRecordModel(StockRecordQuery stockRecordQuery) throws TooManyResultsException { + return mybatisDao.getSqlSessionTemplate().selectOne(StockRecordMapperExt.StockRecordMapperNameSpace + "getStockRecordModel", stockRecordQuery); + } +} diff --git a/src/main/java/com/xmomen/module/stock/service/impl/StockServiceImpl.java b/src/main/java/com/xmomen/module/stock/service/impl/StockServiceImpl.java new file mode 100644 index 0000000..a7d8c3f --- /dev/null +++ b/src/main/java/com/xmomen/module/stock/service/impl/StockServiceImpl.java @@ -0,0 +1,413 @@ +package com.xmomen.module.stock.service.impl; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.beforehandpackagerecord.entity.BeforehandPackageRecord; +import com.xmomen.module.stock.entity.Stock; +import com.xmomen.module.stock.entity.StockExample; +import com.xmomen.module.stock.entity.StockRecord; +import com.xmomen.module.stock.mapper.StockMapperExt; +import com.xmomen.module.stock.model.*; +import com.xmomen.module.stock.service.StockRecordService; +import com.xmomen.module.stock.service.StockService; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.wx.model.AjaxResult; +import com.xmomen.module.wx.util.DateUtils; +import org.apache.ibatis.exceptions.TooManyResultsException; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-13 12:49:20 + */ +@Service +public class StockServiceImpl implements StockService { + + @Autowired + MybatisDao mybatisDao; + + @Autowired + StockRecordService stockRecordService; + + /** + * 新增商品库存记录 + * + * @param stockModel 新增商品库存记录对象参数 + * @return StockModel 商品库存记录领域对象 + */ + @Override + @Transactional + public StockModel createStock(StockModel stockModel) { + StockExample stockExample = new StockExample(); + stockExample.createCriteria().andItemIdEqualTo(stockModel.getItemId()); + int num = mybatisDao.countByExample(stockExample); + if (num > 0) { + throw new IllegalArgumentException("此商品已有库存信息"); + } + stockModel.setInsertDate(new Date()); + stockModel.setUpdateDate(new Date()); + Stock stock = createStock(stockModel.getEntity()); + + //添加记录 + StockRecord stockRecord = new StockRecord(); + stockRecord.setInsertDate(new Date()); + stockRecord.setInsertUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + stockRecord.setUpdateDate(new Date()); + stockRecord.setUpdateUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + stockRecord.setStockId(stock.getId()); + stockRecord.setRemark("库存初始化"); + stockRecord.setChangType(1); + stockRecord.setChangeNum(stock.getStockNum()); + this.mybatisDao.save(stockRecord); + + if (stock != null) { + return getOneStockModel(stock.getId()); + } + return null; + } + + /** + * 新增商品库存记录实体对象 + * + * @param stock 新增商品库存记录实体对象参数 + * @return Stock 商品库存记录实体对象 + */ + @Override + @Transactional + public Stock createStock(Stock stock) { + return mybatisDao.insertByModel(stock); + } + + /** + * 批量新增商品库存记录 + * + * @param stockModels 新增商品库存记录对象集合参数 + * @return List 商品库存记录领域对象集合 + */ + @Override + @Transactional + public List createStocks(List stockModels) { + List stockModelList = null; + for (StockModel stockModel : stockModels) { + stockModel = createStock(stockModel); + if (stockModel != null) { + if (stockModelList == null) { + stockModelList = new ArrayList<>(); + } + stockModelList.add(stockModel); + } + } + return stockModelList; + } + + /** + * 更新商品库存记录 + * + * @param stockModel 更新商品库存记录对象参数 + */ + @Override + @Transactional + public void updateStock(StockModel stockModel) { + stockModel.setUpdateDate(new Date()); + mybatisDao.update(stockModel.getEntity()); + } + + /** + * 更新商品库存记录实体对象 + * + * @param stock 新增商品库存记录实体对象参数 + * @return Stock 商品库存记录实体对象 + */ + @Override + @Transactional + public void updateStock(Stock stock) { + mybatisDao.update(stock); + } + + /** + * 库存变更 + * + * @param stockChange + */ + @Transactional + @Override + public void changeStock(StockChange stockChange) { + Stock stock = mybatisDao.selectByPrimaryKey(Stock.class, stockChange.getStockId()); + if (stock == null) { + throw new BusinessException("未找到匹配的库存信息"); + } + stock.setUpdateUserId(stockChange.getActionBy()); + stock.setUpdateDate(new Date()); + StockRecord stockRecord = new StockRecord(); + stockRecord.setInsertDate(new Date()); + stockRecord.setInsertUserId(stockChange.getActionBy()); + stockRecord.setUpdateDate(new Date()); + stockRecord.setUpdateUserId(stockChange.getActionBy()); + stockRecord.setStockId(stockChange.getStockId()); + if (AppConstants.STOCK_CHANGE_TYPE_IN == stockChange.getType()) { + stockRecord.setChangeNum(stockChange.getNumber()); + //1-入库,2-出库,3-取消退款入库 4-破损 5-核销 + stockRecord.setChangType(1); + stockRecord.setRemark("手工入库"); + stock.setStockNum(stock.getStockNum() + stockChange.getNumber()); + } + else if (AppConstants.STOCK_CHANGE_TYPE_BROKEN == stockChange.getType()) { + Integer num = stock.getStockNum() - stockChange.getNumber(); + if (num < 0) { + throw new BusinessException("请输入小于库存数量的破损数值"); + } + //1-入库,2-出库,3-取消退款入库 4-破损 5-核销 + stockRecord.setChangType(4); + stockRecord.setRemark("破损"); + stockRecord.setChangeNum(stockChange.getNumber() * -1); + stock.setStockNum(num); + } + else if (AppConstants.STOCK_CHANGE_TYPE_CANCEL == stockChange.getType()) { + Integer num = stock.getStockNum() - stockChange.getNumber(); + if (num < 0) { + throw new BusinessException("请输入小于库存数量的核销数值"); + } + //1-入库,2-出库,3-取消退款入库 4-破损 5-核销 + stockRecord.setChangType(5); + stockRecord.setRemark("核销"); + stockRecord.setChangeNum(stockChange.getNumber() * -1); + stock.setStockNum(num); + } + mybatisDao.update(stock); + stockRecordService.createStockRecord(stockRecord); + } + + /** + * 删除商品库存记录 + * + * @param ids 主键数组 + */ + @Override + @Transactional + public void deleteStock(String[] ids) { + StockExample stockExample = new StockExample(); + stockExample.createCriteria().andIdIn(Arrays.asList((String[]) ids)); + mybatisDao.deleteByExample(stockExample); + } + + /** + * 删除商品库存记录 + * + * @param id 主键 + */ + @Override + @Transactional + public void deleteStock(String id) { + mybatisDao.deleteByPrimaryKey(Stock.class, id); + } + + /** + * 查询商品库存记录领域分页对象(带参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @param stockQuery 查询参数 + * @return Page 商品库存记录参数对象 + */ + @Override + public Page getStockModelPage(int limit, int offset, StockQuery stockQuery) { + return (Page) mybatisDao.selectPage(StockMapperExt.StockMapperNameSpace + "getStockModel", stockQuery, limit, offset); + } + + /** + * 查询商品库存记录领域分页对象(无参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 商品库存记录领域对象 + */ + @Override + public Page getStockModelPage(int limit, int offset) { + return (Page) mybatisDao.selectPage(StockMapperExt.StockMapperNameSpace + "getStockModel", null, limit, offset); + } + + /** + * 查询商品库存记录领域集合对象(带参数条件) + * + * @param stockQuery 查询参数对象 + * @return List 商品库存记录领域集合对象 + */ + @Override + public List getStockModelList(StockQuery stockQuery) { + return mybatisDao.getSqlSessionTemplate().selectList(StockMapperExt.StockMapperNameSpace + "getStockModel", stockQuery); + } + + /** + * 查询商品库存记录领域集合对象(无参数条件) + * + * @return List 商品库存记录领域集合对象 + */ + @Override + public List getStockModelList() { + return mybatisDao.getSqlSessionTemplate().selectList(StockMapperExt.StockMapperNameSpace + "getStockModel"); + } + + /** + * 查询商品库存记录实体对象 + * + * @param id 主键 + * @return Stock 商品库存记录实体对象 + */ + @Override + public Stock getOneStock(String id) { + return mybatisDao.selectByPrimaryKey(Stock.class, id); + } + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return StockModel 商品库存记录领域对象 + */ + @Override + public StockModel getOneStockModel(String id) { + StockQuery stockQuery = new StockQuery(); + stockQuery.setId(id); + return mybatisDao.getSqlSessionTemplate().selectOne(StockMapperExt.StockMapperNameSpace + "getStockModel", stockQuery); + } + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * + * @param stockQuery 商品库存记录查询参数对象 + * @return StockModel 商品库存记录领域对象 + */ + @Override + public StockModel getOneStockModel(StockQuery stockQuery) throws TooManyResultsException { + return mybatisDao.getSqlSessionTemplate().selectOne(StockMapperExt.StockMapperNameSpace + "getStockModel", stockQuery); + } + + /** + * 库存校验 + * + * @param itemId 商品ID + * @param needNum 数量 + * @return true-库存充足 false-库存不足 + */ + public boolean checkStock(Integer itemId, Integer needNum) { + //查询商品库存是否存在 + Stock stock = new Stock(); + stock.setItemId(itemId); + List stockList = mybatisDao.selectByModel(stock); + //库存存在 + if (stockList.size() > 0) { + stock = stockList.get(0); + if (stock.getStockNum() >= needNum) { + return true; + } + return false; + } + else { + return false; + } + } + + /** + * 库存变化表 + * + * @param itemId 商品id + * @param changeStockNum 变化数量 负数表示扣除 + * @param remark 备注 + * @param changeType 1-入库(预包装,手工入库),2-出库,3-取消退款入库 4-破损 5-核销 + * @return + */ + @Transactional + public AjaxResult changeStockNum(Integer itemId, Integer changeStockNum, String remark, Integer changeType) throws BusinessException { + return changeStockNum(itemId, changeStockNum, null, remark, changeType); + } + + /** + * 库存变化表(订单) + * + * @param itemId 商品id + * @param changeStockNum 变化数量 负数表示扣除 + * @param orderId 订单id + * @param remark 备注 + * @param changeType 1-入库(预包装,手工入库),2-出库,3-取消退款入库 4-破损 5-核销 + * @return + */ + @Transactional + public AjaxResult changeStockNum(Integer itemId, Integer changeStockNum, Integer orderId, String remark, Integer changeType) throws BusinessException { + AjaxResult ajaxResult = new AjaxResult(); + //查询商品库存是否存在 + Stock stock = new Stock(); + stock.setItemId(itemId); + List stockList = mybatisDao.selectByModel(stock); + //库存存在 + if (stockList.size() > 0) { + stock = stockList.get(0); + //变更库存 + + //如果是扣除 判断库存是否够 + if (changeStockNum < 0) { + if (stock.getStockNum() + changeStockNum < 0) { + throw new BusinessException("库存不够,下单失败。"); + } + } + stock.setStockNum(stock.getStockNum() + changeStockNum); + mybatisDao.updateByModel(stock); + } + //无库存记录 新增 + else { + if (changeStockNum > 0) { + stock.setInsertDate(DateUtils.getNowDate()); + stock.setInsertUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + stock.setUpdateDate(DateUtils.getNowDate()); + stock.setUpdateUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + stock.setStockNum(changeStockNum); + stock.setWarningNum(0); + mybatisDao.save(stock); + } + else { + throw new BusinessException("无库存不能扣除。"); + } + } + //添加变更记录 + StockRecord stockRecord = new StockRecord(); + stockRecord.setChangeNum(changeStockNum); + //1-入库(预包装,手工入库),2-出库,3-取消退款入库 4-破损 5-核销 + stockRecord.setChangType(changeType); + stockRecord.setInsertDate(DateUtils.getNowDate()); + stockRecord.setInsertUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + stockRecord.setUpdateDate(DateUtils.getNowDate()); + stockRecord.setUpdateUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + stockRecord.setRefOrderId(orderId); + stockRecord.setRemark(remark); + stockRecord.setStockId(stock.getId()); + mybatisDao.save(stockRecord); + + //预包装添加包装记录 + if (remark.equals("预包装入库")) { + //添加预包装记录 + BeforehandPackageRecord beforehandPackageRecord = new BeforehandPackageRecord(); + beforehandPackageRecord.setInsertDate(DateUtils.getNowDate()); + beforehandPackageRecord.setInsertUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + beforehandPackageRecord.setUpdateDate(DateUtils.getNowDate()); + beforehandPackageRecord.setUpdateUserId((Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY)); + beforehandPackageRecord.setCdItemId(itemId); + beforehandPackageRecord.setPackageNum(changeStockNum); + mybatisDao.save(beforehandPackageRecord); + } + + ajaxResult.setResult(1); + ajaxResult.setMessage("操作成功"); + return ajaxResult; + } + +} diff --git a/src/main/java/com/xmomen/module/stockdaily/controller/StockDailyController.java b/src/main/java/com/xmomen/module/stockdaily/controller/StockDailyController.java new file mode 100644 index 0000000..b9a3847 --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/controller/StockDailyController.java @@ -0,0 +1,139 @@ +package com.xmomen.module.stockdaily.controller; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.logger.Log; +import com.xmomen.module.stockdaily.model.StockDailyQuery; +import com.xmomen.module.stockdaily.model.StockDailyModel; +import com.xmomen.module.stockdaily.service.StockDailyService; + +import org.apache.commons.io.IOUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.validation.Valid; +import java.io.Serializable; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-26 21:56:23 + */ +@RestController +@RequestMapping(value = "/stockDaily") +public class StockDailyController { + + @Autowired + StockDailyService stockDailyService; + + /** + * 库存日报列表 + * + * @param limit 每页结果数 + * @param offset 页码 + * @param id 主键 + * @param ids 主键数组 + * @param excludeIds 不包含主键数组 + * @return Page 库存日报领域分页对象 + */ + @RequestMapping(method = RequestMethod.GET) + @Log(actionName = "查询库存日报列表") + public Page getStockDailyList(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "id", required = false) String id, + @RequestParam(value = "ids", required = false) String[] ids, + @RequestParam(value = "dailyDateStart", required = false) String dailyDateStart, + @RequestParam(value = "dailyDateEnd", required = false) String dailyDateEnd, + @RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "excludeIds", required = false) String[] excludeIds) { + StockDailyQuery stockDailyQuery = new StockDailyQuery(); + stockDailyQuery.setId(id); + stockDailyQuery.setExcludeIds(excludeIds); + stockDailyQuery.setIds(ids); + stockDailyQuery.setKeyword(keyword); + stockDailyQuery.setDailyDateStart(dailyDateStart); + stockDailyQuery.setDailyDateEnd(dailyDateEnd); + return stockDailyService.getStockDailyModelPage(limit, offset, stockDailyQuery); + } + + /** + * 查询单个库存日报 + * + * @param id 主键 + * @return StockDailyModel 库存日报领域对象 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + @Log(actionName = "查询库存日报") + public StockDailyModel getStockDailyById(@PathVariable(value = "id") String id) { + return stockDailyService.getOneStockDailyModel(id); + } + + /** + * 新增库存日报 + * + * @param stockDailyModel 新增对象参数 + * @return StockDailyModel 库存日报领域对象 + */ + @RequestMapping(method = RequestMethod.POST) + @Log(actionName = "新增库存日报") + public StockDailyModel createStockDaily(@RequestBody @Valid StockDailyModel stockDailyModel) { + return stockDailyService.createStockDaily(stockDailyModel); + } + + /** + * 更新库存日报 + * + * @param id 主键 + * @param stockDailyModel 更新对象参数 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + @Log(actionName = "更新库存日报") + public void updateStockDaily(@PathVariable(value = "id") String id, + @RequestBody @Valid StockDailyModel stockDailyModel) { + stockDailyService.updateStockDaily(stockDailyModel); + } + + /** + * 删除库存日报 + * + * @param id 主键 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除单个库存日报") + public void deleteStockDaily(@PathVariable(value = "id") String id) { + stockDailyService.deleteStockDaily(id); + } + + /** + * 删除库存日报 + * + * @param ids 主键 + */ + @RequestMapping(method = RequestMethod.DELETE) + @Log(actionName = "批量删除库存日报") + public void deleteStockDailys(@RequestParam(value = "ids") String[] ids) { + stockDailyService.deleteStockDaily(ids); + } + + /** + * 手动创建库存快照 + */ + @RequestMapping(value = "/createStockDaily", method = RequestMethod.GET) + @Log(actionName = "手动创建库存快照") + public void createStockDaily() { + stockDailyService.createStockDaily(); + } +} diff --git a/src/main/java/com/xmomen/module/stockdaily/entity/mapper/StockDailyMapper.java b/src/main/java/com/xmomen/module/stockdaily/entity/mapper/StockDailyMapper.java new file mode 100644 index 0000000..6aec105 --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/entity/mapper/StockDailyMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.stockdaily.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.stockdaily.entity.StockDaily; +import com.xmomen.module.stockdaily.entity.StockDailyExample; +import org.apache.ibatis.annotations.Param; + +public interface StockDailyMapper extends MybatisMapper { + int countByExample(StockDailyExample example); + + int deleteByExample(StockDailyExample example); + + int insertSelective(StockDaily record); + + int updateByExampleSelective(@Param("record") StockDaily record, @Param("example") StockDailyExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/stockdaily/entity/mapper/StockDailyMapper.xml b/src/main/java/com/xmomen/module/stockdaily/entity/mapper/StockDailyMapper.xml new file mode 100644 index 0000000..8f482ff --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/entity/mapper/StockDailyMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, stock_id, item_id, old_stock_num, in_num, return_in_num, out_num, damaged_num, + verification_num, new_stock_num, daily_date, insert_date + + + + delete from cd_stock_daily + + + + + + + SELECT replace(UUID(),'-','') + + insert into cd_stock_daily + + id, + + stock_id, + + + item_id, + + + old_stock_num, + + + in_num, + + + return_in_num, + + + out_num, + + + damaged_num, + + + verification_num, + + + new_stock_num, + + + daily_date, + + + insert_date, + + + + #{id,jdbcType=VARCHAR}, + + #{stockId,jdbcType=VARCHAR}, + + + #{itemId,jdbcType=VARCHAR}, + + + #{oldStockNum,jdbcType=INTEGER}, + + + #{inNum,jdbcType=INTEGER}, + + + #{returnInNum,jdbcType=INTEGER}, + + + #{outNum,jdbcType=INTEGER}, + + + #{damagedNum,jdbcType=INTEGER}, + + + #{verificationNum,jdbcType=INTEGER}, + + + #{newStockNum,jdbcType=INTEGER}, + + + #{dailyDate,jdbcType=DATE}, + + + #{insertDate,jdbcType=TIMESTAMP}, + + + + + + update cd_stock_daily + + + id = #{record.id,jdbcType=VARCHAR}, + + + stock_id = #{record.stockId,jdbcType=VARCHAR}, + + + item_id = #{record.itemId,jdbcType=VARCHAR}, + + + old_stock_num = #{record.oldStockNum,jdbcType=INTEGER}, + + + in_num = #{record.inNum,jdbcType=INTEGER}, + + + return_in_num = #{record.returnInNum,jdbcType=INTEGER}, + + + out_num = #{record.outNum,jdbcType=INTEGER}, + + + damaged_num = #{record.damagedNum,jdbcType=INTEGER}, + + + verification_num = #{record.verificationNum,jdbcType=INTEGER}, + + + new_stock_num = #{record.newStockNum,jdbcType=INTEGER}, + + + daily_date = #{record.dailyDate,jdbcType=DATE}, + + + insert_date = #{record.insertDate,jdbcType=TIMESTAMP}, + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/stockdaily/mapper/StockDailyMapperExt.java b/src/main/java/com/xmomen/module/stockdaily/mapper/StockDailyMapperExt.java new file mode 100644 index 0000000..14c9a20 --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/mapper/StockDailyMapperExt.java @@ -0,0 +1,12 @@ +package com.xmomen.module.stockdaily.mapper; + +/** + * @author tanxinzheng + * @date 2017-5-26 21:56:23 + * @version 1.0.0 + */ +public interface StockDailyMapperExt { + + public static final String StockDailyMapperNameSpace = "com.xmomen.module.stockdaily.mapper.StockDailyMapperExt."; + +} diff --git a/src/main/java/com/xmomen/module/stockdaily/model/StockDailyCreate.java b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyCreate.java new file mode 100644 index 0000000..533c16e --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyCreate.java @@ -0,0 +1,49 @@ +package com.xmomen.module.stockdaily.model; + +import lombok.Data; +import com.xmomen.module.stockdaily.entity.StockDaily; +import org.springframework.beans.BeanUtils; + + import java.lang.String; + import java.lang.Integer; + import java.util.Date; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @date 2017-5-26 21:56:22 + * @version 1.0.0 + */ +public @Data class StockDailyCreate implements Serializable { + + /** 主键 */ + private String id; + /** */ + private String stockId; + /** */ + private String itemId; + /** 昨日库存 */ + private Integer oldStockNum; + /** 入库库存 */ + private Integer inNum; + /** 取消退货入库数 */ + private Integer returnInNum; + /** 出库库存 */ + private Integer outNum; + /** 破损数 */ + private Integer damagedNum; + /** 核销数 */ + private Integer verificationNum; + /** 现库存 */ + private Integer newStockNum; + /** 快照时间 */ + private Date dailyDate; + /** 插入时间 */ + private Date insertDate; + + public StockDaily getEntity(){ + StockDaily stockDaily = new StockDaily(); + BeanUtils.copyProperties(this, stockDaily); + return stockDaily; + } +} diff --git a/src/main/java/com/xmomen/module/stockdaily/model/StockDailyModel.java b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyModel.java new file mode 100644 index 0000000..917dcbb --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyModel.java @@ -0,0 +1,123 @@ +package com.xmomen.module.stockdaily.model; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.xmomen.module.stockdaily.entity.StockDaily; +import lombok.Data; +import org.hibernate.validator.constraints.*; + +import javax.validation.constraints.*; + +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelTarget; +import org.springframework.beans.BeanUtils; + +import java.lang.String; +import java.lang.Integer; +import java.util.Date; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-26 21:56:23 + */ +@ExcelTarget(value = "StockDailyModel") +public +@Data +class StockDailyModel implements Serializable { + + /** + * 主键 + */ + @NotBlank(message = "主键为必填项") + @Length(max = 32, message = "主键字符长度限制[0,32]") + private String id; + /** */ + @Excel(name = "") + @NotBlank(message = "为必填项") + @Length(max = 32, message = "字符长度限制[0,32]") + private String stockId; + /** */ + @Excel(name = "") + @NotBlank(message = "为必填项") + @Length(max = 32, message = "字符长度限制[0,32]") + private String itemId; + /** + * 昨日库存 + */ + @Excel(name = "昨日库存") + @Range(max = 999999999, min = -999999999, message = "昨日库存数值范围[999999999,-999999999]") + private Integer oldStockNum; + /** + * 入库库存 + */ + @Excel(name = "入库库存") + @NotBlank(message = "入库库存为必填项") + @Range(max = 999999999, min = -999999999, message = "入库库存数值范围[999999999,-999999999]") + private Integer inNum; + /** + * 取消退货入库数 + */ + @Excel(name = "取消退货入库数") + @NotBlank(message = "取消退货入库数为必填项") + @Range(max = 999999999, min = -999999999, message = "取消退货入库数数值范围[999999999,-999999999]") + private Integer returnInNum; + /** + * 出库库存 + */ + @Excel(name = "出库库存") + @NotBlank(message = "出库库存为必填项") + @Range(max = 999999999, min = -999999999, message = "出库库存数值范围[999999999,-999999999]") + private Integer outNum; + /** + * 破损数 + */ + @Excel(name = "破损数") + @NotBlank(message = "破损数为必填项") + @Range(max = 999999999, min = -999999999, message = "破损数数值范围[999999999,-999999999]") + private Integer damagedNum; + /** + * 核销数 + */ + @Excel(name = "核销数") + @NotBlank(message = "核销数为必填项") + @Range(max = 999999999, min = -999999999, message = "核销数数值范围[999999999,-999999999]") + private Integer verificationNum; + /** + * 现库存 + */ + @Excel(name = "现库存") + @NotBlank(message = "现库存为必填项") + @Range(max = 999999999, min = -999999999, message = "现库存数值范围[999999999,-999999999]") + private Integer newStockNum; + /** + * 快照时间 + */ + @Excel(name = "快照时间") + @NotBlank(message = "快照时间为必填项") + private Date dailyDate; + /** + * 插入时间 + */ + @Excel(name = "插入时间") + @NotBlank(message = "插入时间为必填项") + private Date insertDate; + + private String itemName; + + private String itemCode; + + /** + * Get StockDaily Entity Object + * + * @return + */ + @JsonIgnore + public StockDaily getEntity() { + StockDaily stockDaily = new StockDaily(); + BeanUtils.copyProperties(this, stockDaily); + return stockDaily; + } + + +} diff --git a/src/main/java/com/xmomen/module/stockdaily/model/StockDailyQuery.java b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyQuery.java new file mode 100644 index 0000000..1d1f4d5 --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyQuery.java @@ -0,0 +1,34 @@ +package com.xmomen.module.stockdaily.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-26 21:56:22 + */ +public +@Data +class StockDailyQuery implements Serializable { + /** + * 主键 + */ + private String id; + /** + * 包含主键集 + */ + private String[] ids; + /** + * 排除主键集 + */ + private String[] excludeIds; + + private String dailyDateStart; + + private String dailyDateEnd; + + private String keyword; + +} diff --git a/src/main/java/com/xmomen/module/stockdaily/model/StockDailyUpdate.java b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyUpdate.java new file mode 100644 index 0000000..85de12b --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/model/StockDailyUpdate.java @@ -0,0 +1,50 @@ +package com.xmomen.module.stockdaily.model; + +import lombok.Data; +import com.xmomen.module.stockdaily.entity.StockDaily; +import org.springframework.beans.BeanUtils; + + import java.lang.String; + import java.lang.Integer; + import java.util.Date; +import java.io.Serializable; + +/** + * @author tanxinzheng + * @date 2017-5-26 21:56:22 + * @version 1.0.0 + */ +public @Data class StockDailyUpdate implements Serializable { + + /** 主键 */ + private String id; + /** */ + private String stockId; + /** */ + private String itemId; + /** 昨日库存 */ + private Integer oldStockNum; + /** 入库库存 */ + private Integer inNum; + /** 取消退货入库数 */ + private Integer returnInNum; + /** 出库库存 */ + private Integer outNum; + /** 破损数 */ + private Integer damagedNum; + /** 核销数 */ + private Integer verificationNum; + /** 现库存 */ + private Integer newStockNum; + /** 快照时间 */ + private Date dailyDate; + /** 插入时间 */ + private Date insertDate; + + + public StockDaily getEntity(){ + StockDaily stockDaily = new StockDaily(); + BeanUtils.copyProperties(this, stockDaily); + return stockDaily; + } +} diff --git a/src/main/java/com/xmomen/module/stockdaily/service/StockDailyService.java b/src/main/java/com/xmomen/module/stockdaily/service/StockDailyService.java new file mode 100644 index 0000000..25bee35 --- /dev/null +++ b/src/main/java/com/xmomen/module/stockdaily/service/StockDailyService.java @@ -0,0 +1,144 @@ +package com.xmomen.module.stockdaily.service; + +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.report.model.ReportQuery; +import com.xmomen.module.report.model.StockDailyReport; +import com.xmomen.module.stockdaily.model.StockDailyQuery; +import com.xmomen.module.stockdaily.model.StockDailyModel; +import com.xmomen.module.stockdaily.entity.StockDaily; +import org.apache.ibatis.exceptions.TooManyResultsException; + +import java.io.Serializable; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-5-26 21:56:23 + */ +public interface StockDailyService { + + /** + * 新增库存日报 + * + * @param stockDailyModel 新增库存日报对象参数 + * @return StockDailyModel 库存日报领域对象 + */ + public StockDailyModel createStockDaily(StockDailyModel stockDailyModel); + + /** + * 新增库存日报实体对象 + * + * @param stockDaily 新增库存日报实体对象参数 + * @return StockDaily 库存日报实体对象 + */ + public StockDaily createStockDaily(StockDaily stockDaily); + + /** + * 批量新增库存日报 + * + * @param StockDailyModel 新增库存日报对象集合参数 + * @return List 库存日报领域对象集合 + */ + List createStockDailys(List stockDailyModels); + + /** + * 更新库存日报 + * + * @param stockDailyModel 更新库存日报对象参数 + */ + public void updateStockDaily(StockDailyModel stockDailyModel); + + /** + * 更新库存日报实体对象 + * + * @param stockDaily 新增库存日报实体对象参数 + * @return StockDaily 库存日报实体对象 + */ + public void updateStockDaily(StockDaily stockDaily); + + /** + * 批量删除库存日报 + * + * @param ids 主键数组 + */ + public void deleteStockDaily(String[] ids); + + /** + * 删除库存日报 + * + * @param id 主键 + */ + public void deleteStockDaily(String id); + + /** + * 查询库存日报领域分页对象(带参数条件) + * + * @param stockDailyQuery 查询参数 + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 库存日报参数对象 + */ + public Page getStockDailyModelPage(int limit, int offset, StockDailyQuery stockDailyQuery); + + /** + * 查询库存日报领域分页对象(无参数条件) + * + * @param limit 每页最大数 + * @param offset 页码 + * @return Page 库存日报领域对象 + */ + public Page getStockDailyModelPage(int limit, int offset); + + /** + * 查询库存日报领域集合对象(带参数条件) + * + * @param stockDailyQuery 查询参数对象 + * @return List 库存日报领域集合对象 + */ + public List getStockDailyModelList(StockDailyQuery stockDailyQuery); + + /** + * 查询库存日报领域集合对象(无参数条件) + * + * @return List 库存日报领域集合对象 + */ + public List getStockDailyModelList(); + + /** + * 查询库存日报实体对象 + * + * @param id 主键 + * @return StockDaily 库存日报实体对象 + */ + public StockDaily getOneStockDaily(String id); + + /** + * 根据主键查询单个对象 + * + * @param id 主键 + * @return StockDailyModel 库存日报领域对象 + */ + public StockDailyModel getOneStockDailyModel(String id); + + /** + * 根据查询参数查询单个对象(此方法只用于提供精确查询单个对象,若结果数超过1,则会报错) + * + * @param stockDailyQuery 库存日报查询参数对象 + * @return StockDailyModel 库存日报领域对象 + */ + public StockDailyModel getOneStockDailyModel(StockDailyQuery stockDailyQuery) throws TooManyResultsException; + + /** + * 定时任务创建库存快照 + */ + public void createStockDaily(); + + /** + * 查询财务报表 + * + * @param reportQuery + * @return + */ + public List getStockDailyReport(ReportQuery reportQuery); +} diff --git a/src/main/java/com/xmomen/module/system/controller/OrganizationController.java b/src/main/java/com/xmomen/module/system/controller/OrganizationController.java new file mode 100644 index 0000000..6d6f1e0 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/controller/OrganizationController.java @@ -0,0 +1,112 @@ +package com.xmomen.module.system.controller; + +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.account.web.controller.vo.CreateUserGroup; +import com.xmomen.module.account.web.controller.vo.UpdateUserGroup; +import com.xmomen.module.logger.Log; +import com.xmomen.module.system.entity.SysOrganization; +import com.xmomen.module.system.model.CreateOrganization; +import com.xmomen.module.system.model.OrganizationModel; +import com.xmomen.module.system.service.OrganizationService; +import com.xmomen.module.user.entity.SysRoles; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * Created by Jeng on 16/3/25. + */ +@RestController +public class OrganizationController { + + @Autowired + OrganizationService organizationService; + + /** + * 查询组织机构信息 + * @param id + * @return + */ + @RequestMapping(value = "/organization", method = RequestMethod.GET) + @Log(actionName = "查询组织机构信息") + public List getOrganizationTree(@RequestParam(value = "id", required = false) Integer id){ + return organizationService.getOrganizationTree(id); + } + + /** + * 新增机构组织 + * @param createOrganization + * @param bindingResult + * @throws ArgumentValidException + */ + @RequestMapping(value = "/organization", method = RequestMethod.POST) + @Log(actionName = "新增组织机构") + public void createOrganization(@RequestBody @Valid CreateOrganization createOrganization, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + SysOrganization sysOrganization = new SysOrganization(); + sysOrganization.setName(createOrganization.getName()); + sysOrganization.setDescription(createOrganization.getDescription()); + sysOrganization.setParentId(createOrganization.getParentId()); + organizationService.createOrganization(sysOrganization); + } + + /** + * 删除机构组织 + * @param id + */ + @RequestMapping(value = "/organization/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除组织机构") + public void deleteOrganization(@PathVariable(value = "id") Integer id){ + organizationService.delete(id); + } + + /** + * 修改机构组织 + * @param id + */ + @RequestMapping(value = "/organization/{id}", method = RequestMethod.PUT) + @Log(actionName = "修改组织机构") + public void updateOrganization(@PathVariable(value = "id") Integer id, + @RequestBody @Valid CreateOrganization createOrganization, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + SysOrganization sysOrganization = new SysOrganization(); + sysOrganization.setId(id); + sysOrganization.setName(createOrganization.getName()); + sysOrganization.setDescription(createOrganization.getDescription()); + sysOrganization.setParentId(createOrganization.getParentId()); + organizationService.updateOrganization(sysOrganization); + } + + /** + * 新增机构组织用户 + * @param id + * @param userIds + */ + @RequestMapping(value = "/organization/{id}/user", method = RequestMethod.POST) + @Log(actionName = "新增组织机构用户") + public void bindOrganizationUser(@PathVariable(value = "id") Integer id, + @RequestParam(value = "userIds") Integer[] userIds) { + + organizationService.bindOrganizationUser(id, userIds); + } + + /** + * 删除机构组织用户 + * @param id + * @param userIds + */ + @RequestMapping(value = "/organization/{id}/user", method = RequestMethod.DELETE) + @Log(actionName = "删除组织机构用户") + public void updateOrganization(@PathVariable(value = "id") Integer id, + @RequestParam(value = "userIds") Integer[] userIds) { + organizationService.unBindOrganizationUser(id, userIds); + } +} diff --git a/src/main/java/com/xmomen/module/system/controller/TaskController.java b/src/main/java/com/xmomen/module/system/controller/TaskController.java new file mode 100644 index 0000000..d7fa5ec --- /dev/null +++ b/src/main/java/com/xmomen/module/system/controller/TaskController.java @@ -0,0 +1,78 @@ +package com.xmomen.module.system.controller; + +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.logger.Log; +import com.xmomen.module.system.entity.SysTask; +import com.xmomen.module.system.model.CreateTask; +import com.xmomen.module.system.model.TaskModel; +import com.xmomen.module.system.model.TaskQuery; +import com.xmomen.module.system.service.TaskService; +import com.xmomen.module.system.service.TaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +/** + * Created by Jeng on 16/3/25. + */ +@RestController +public class TaskController { + + @Autowired + TaskService taskService; + + /** + * 查询任务信息 + * @param limit + * @param offset + * @param taskStatus + * @param executorIds + * @param keyword + * @return + */ + @RequestMapping(value = "/task", method = RequestMethod.GET) + @Log(actionName = "查询任务信息") + public Page getTaskTree(@RequestParam(value = "limit") Integer limit, + @RequestParam(value = "offset") Integer offset, + @RequestParam(value = "taskStatus", required = false) Integer[] taskStatus, + @RequestParam(value = "executorIds", required = false) Integer[] executorIds, + @RequestParam(value = "keyword", required = false) String keyword){ + TaskQuery taskQuery = new TaskQuery(); + taskQuery.setKeyword(keyword); + taskQuery.setTaskStatus(taskStatus); + taskQuery.setExecutorIds(executorIds); + return taskService.getTaskList(taskQuery, limit, offset); + } + + + /** + * 删除机构组织 + * @param id + */ + @RequestMapping(value = "/task/{id}", method = RequestMethod.DELETE) + @Log(actionName = "删除任务") + public void deleteTask(@PathVariable(value = "id") Integer id){ + taskService.deleteTask(id); + } + + /** + * 修改机构组织 + * @param id + */ + @RequestMapping(value = "/task/{id}", method = RequestMethod.PUT) + @Log(actionName = "修改任务") + public void updateTask(@PathVariable(value = "id") Integer id, + @RequestBody @Valid CreateTask createTask, BindingResult bindingResult) throws ArgumentValidException { + if(bindingResult != null && bindingResult.hasErrors()){ + throw new ArgumentValidException(bindingResult); + } + SysTask sysTask = new SysTask(); + sysTask.setId(id); + taskService.updateTask(sysTask); + } + +} diff --git a/src/main/java/com/xmomen/module/system/entity/SysDictionaryExample.java b/src/main/java/com/xmomen/module/system/entity/SysDictionaryExample.java new file mode 100644 index 0000000..d0d81a3 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/entity/SysDictionaryExample.java @@ -0,0 +1,461 @@ +package com.xmomen.module.system.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class SysDictionaryExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SysDictionaryExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeIsNull() { + addCriterion("DICTIONARY_CODE is null"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeIsNotNull() { + addCriterion("DICTIONARY_CODE is not null"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeEqualTo(String value) { + addCriterion("DICTIONARY_CODE =", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeNotEqualTo(String value) { + addCriterion("DICTIONARY_CODE <>", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeGreaterThan(String value) { + addCriterion("DICTIONARY_CODE >", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeGreaterThanOrEqualTo(String value) { + addCriterion("DICTIONARY_CODE >=", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeLessThan(String value) { + addCriterion("DICTIONARY_CODE <", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeLessThanOrEqualTo(String value) { + addCriterion("DICTIONARY_CODE <=", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeLike(String value) { + addCriterion("DICTIONARY_CODE like", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeNotLike(String value) { + addCriterion("DICTIONARY_CODE not like", value, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeIn(List values) { + addCriterion("DICTIONARY_CODE in", values, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeNotIn(List values) { + addCriterion("DICTIONARY_CODE not in", values, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeBetween(String value1, String value2) { + addCriterion("DICTIONARY_CODE between", value1, value2, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryCodeNotBetween(String value1, String value2) { + addCriterion("DICTIONARY_CODE not between", value1, value2, "dictionaryCode"); + return (Criteria) this; + } + + public Criteria andDictionaryDescIsNull() { + addCriterion("DICTIONARY_DESC is null"); + return (Criteria) this; + } + + public Criteria andDictionaryDescIsNotNull() { + addCriterion("DICTIONARY_DESC is not null"); + return (Criteria) this; + } + + public Criteria andDictionaryDescEqualTo(String value) { + addCriterion("DICTIONARY_DESC =", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescNotEqualTo(String value) { + addCriterion("DICTIONARY_DESC <>", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescGreaterThan(String value) { + addCriterion("DICTIONARY_DESC >", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescGreaterThanOrEqualTo(String value) { + addCriterion("DICTIONARY_DESC >=", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescLessThan(String value) { + addCriterion("DICTIONARY_DESC <", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescLessThanOrEqualTo(String value) { + addCriterion("DICTIONARY_DESC <=", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescLike(String value) { + addCriterion("DICTIONARY_DESC like", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescNotLike(String value) { + addCriterion("DICTIONARY_DESC not like", value, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescIn(List values) { + addCriterion("DICTIONARY_DESC in", values, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescNotIn(List values) { + addCriterion("DICTIONARY_DESC not in", values, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescBetween(String value1, String value2) { + addCriterion("DICTIONARY_DESC between", value1, value2, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andDictionaryDescNotBetween(String value1, String value2) { + addCriterion("DICTIONARY_DESC not between", value1, value2, "dictionaryDesc"); + return (Criteria) this; + } + + public Criteria andAvailableIsNull() { + addCriterion("AVAILABLE is null"); + return (Criteria) this; + } + + public Criteria andAvailableIsNotNull() { + addCriterion("AVAILABLE is not null"); + return (Criteria) this; + } + + public Criteria andAvailableEqualTo(Integer value) { + addCriterion("AVAILABLE =", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotEqualTo(Integer value) { + addCriterion("AVAILABLE <>", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableGreaterThan(Integer value) { + addCriterion("AVAILABLE >", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableGreaterThanOrEqualTo(Integer value) { + addCriterion("AVAILABLE >=", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableLessThan(Integer value) { + addCriterion("AVAILABLE <", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableLessThanOrEqualTo(Integer value) { + addCriterion("AVAILABLE <=", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableIn(List values) { + addCriterion("AVAILABLE in", values, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotIn(List values) { + addCriterion("AVAILABLE not in", values, "available"); + return (Criteria) this; + } + + public Criteria andAvailableBetween(Integer value1, Integer value2) { + addCriterion("AVAILABLE between", value1, value2, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotBetween(Integer value1, Integer value2) { + addCriterion("AVAILABLE not between", value1, value2, "available"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/system/entity/SysOrganization.java b/src/main/java/com/xmomen/module/system/entity/SysOrganization.java new file mode 100644 index 0000000..5ba6163 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/entity/SysOrganization.java @@ -0,0 +1,91 @@ +package com.xmomen.module.system.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "sys_organization") +public class SysOrganization extends BaseMybatisModel { + /** + * 物理主键 + */ + private Integer id; + + /** + * 组织名称 + */ + private String name; + + /** + * + */ + private String description; + + /** + * + */ + private Integer parentId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "NAME") + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + if(name == null){ + removeValidField("name"); + return; + } + addValidField("name"); + } + + @Column(name = "DESCRIPTION") + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + if(description == null){ + removeValidField("description"); + return; + } + addValidField("description"); + } + + @Column(name = "PARENT_ID") + public Integer getParentId() { + return parentId; + } + + public void setParentId(Integer parentId) { + this.parentId = parentId; + if(parentId == null){ + removeValidField("parentId"); + return; + } + addValidField("parentId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/system/entity/SysTaskHead.java b/src/main/java/com/xmomen/module/system/entity/SysTaskHead.java new file mode 100644 index 0000000..2aff8e9 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/entity/SysTaskHead.java @@ -0,0 +1,72 @@ +package com.xmomen.module.system.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "sys_task_head") +public class SysTaskHead extends BaseMybatisModel { + /** + * 主键 + */ + private Integer id; + + /** + * 任务名称 + */ + private String taskName; + + /** + * 任务描述 + */ + private String taskDesc; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "TASK_NAME") + public String getTaskName() { + return taskName; + } + + public void setTaskName(String taskName) { + this.taskName = taskName; + if(taskName == null){ + removeValidField("taskName"); + return; + } + addValidField("taskName"); + } + + @Column(name = "TASK_DESC") + public String getTaskDesc() { + return taskDesc; + } + + public void setTaskDesc(String taskDesc) { + this.taskDesc = taskDesc; + if(taskDesc == null){ + removeValidField("taskDesc"); + return; + } + addValidField("taskDesc"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/system/entity/SysUserOrganization.java b/src/main/java/com/xmomen/module/system/entity/SysUserOrganization.java new file mode 100644 index 0000000..3cc7e8f --- /dev/null +++ b/src/main/java/com/xmomen/module/system/entity/SysUserOrganization.java @@ -0,0 +1,72 @@ +package com.xmomen.module.system.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "sys_user_organization") +public class SysUserOrganization extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 部门 + */ + private Integer organizationId; + + /** + * 用户 + */ + private Integer userId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "ORGANIZATION_ID") + public Integer getOrganizationId() { + return organizationId; + } + + public void setOrganizationId(Integer organizationId) { + this.organizationId = organizationId; + if(organizationId == null){ + removeValidField("organizationId"); + return; + } + addValidField("organizationId"); + } + + @Column(name = "USER_ID") + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + if(userId == null){ + removeValidField("userId"); + return; + } + addValidField("userId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/system/entity/SysUserOrganizationExample.java b/src/main/java/com/xmomen/module/system/entity/SysUserOrganizationExample.java new file mode 100644 index 0000000..6fd0f15 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/entity/SysUserOrganizationExample.java @@ -0,0 +1,381 @@ +package com.xmomen.module.system.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class SysUserOrganizationExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SysUserOrganizationExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andOrganizationIdIsNull() { + addCriterion("ORGANIZATION_ID is null"); + return (Criteria) this; + } + + public Criteria andOrganizationIdIsNotNull() { + addCriterion("ORGANIZATION_ID is not null"); + return (Criteria) this; + } + + public Criteria andOrganizationIdEqualTo(Integer value) { + addCriterion("ORGANIZATION_ID =", value, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdNotEqualTo(Integer value) { + addCriterion("ORGANIZATION_ID <>", value, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdGreaterThan(Integer value) { + addCriterion("ORGANIZATION_ID >", value, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ORGANIZATION_ID >=", value, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdLessThan(Integer value) { + addCriterion("ORGANIZATION_ID <", value, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdLessThanOrEqualTo(Integer value) { + addCriterion("ORGANIZATION_ID <=", value, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdIn(List values) { + addCriterion("ORGANIZATION_ID in", values, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdNotIn(List values) { + addCriterion("ORGANIZATION_ID not in", values, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdBetween(Integer value1, Integer value2) { + addCriterion("ORGANIZATION_ID between", value1, value2, "organizationId"); + return (Criteria) this; + } + + public Criteria andOrganizationIdNotBetween(Integer value1, Integer value2) { + addCriterion("ORGANIZATION_ID not between", value1, value2, "organizationId"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("USER_ID is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Integer value) { + addCriterion("USER_ID =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Integer value) { + addCriterion("USER_ID <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Integer value) { + addCriterion("USER_ID >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("USER_ID >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Integer value) { + addCriterion("USER_ID <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Integer value) { + addCriterion("USER_ID <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("USER_ID in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("USER_ID not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Integer value1, Integer value2) { + addCriterion("USER_ID between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("USER_ID not between", value1, value2, "userId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/system/entity/mapper/SysDictionaryParameterMapper.java b/src/main/java/com/xmomen/module/system/entity/mapper/SysDictionaryParameterMapper.java new file mode 100644 index 0000000..02d6993 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/entity/mapper/SysDictionaryParameterMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.system.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.system.entity.SysDictionaryParameter; +import com.xmomen.module.system.entity.SysDictionaryParameterExample; +import org.apache.ibatis.annotations.Param; + +public interface SysDictionaryParameterMapper extends MybatisMapper { + int countByExample(SysDictionaryParameterExample example); + + int deleteByExample(SysDictionaryParameterExample example); + + int insertSelective(SysDictionaryParameter record); + + int updateByExampleSelective(@Param("record") SysDictionaryParameter record, @Param("example") SysDictionaryParameterExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/system/entity/mapper/SysOrganizationMapper.java b/src/main/java/com/xmomen/module/system/entity/mapper/SysOrganizationMapper.java new file mode 100644 index 0000000..26d3724 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/entity/mapper/SysOrganizationMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.system.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.system.entity.SysOrganization; +import com.xmomen.module.system.entity.SysOrganizationExample; +import org.apache.ibatis.annotations.Param; + +public interface SysOrganizationMapper extends MybatisMapper { + int countByExample(SysOrganizationExample example); + + int deleteByExample(SysOrganizationExample example); + + int insertSelective(SysOrganization record); + + int updateByExampleSelective(@Param("record") SysOrganization record, @Param("example") SysOrganizationExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/system/mapper/DictionaryMapper.java b/src/main/java/com/xmomen/module/system/mapper/DictionaryMapper.java new file mode 100644 index 0000000..77eb766 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/mapper/DictionaryMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.system.mapper; + +import com.xmomen.module.system.model.Dictionary; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Select; + +/** + * Created by Jeng on 16/4/2. + */ +public interface DictionaryMapper { + + @Select(value = "") + @ResultType(Dictionary.class) + public Dictionary getDictionaryList(@Param(value = "keyword") String keyword); +} diff --git a/src/main/java/com/xmomen/module/system/mapper/OrganizationMapper.java b/src/main/java/com/xmomen/module/system/mapper/OrganizationMapper.java new file mode 100644 index 0000000..0c13430 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/mapper/OrganizationMapper.java @@ -0,0 +1,18 @@ +package com.xmomen.module.system.mapper; + +import com.xmomen.module.system.model.OrganizationModel; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * Created by Jeng on 16/3/27. + */ +public interface OrganizationMapper { + + @Select(value = "SELECT s.ID,s.NAME,s.DESCRIPTION, s.PARENT_ID,p.NAME AS parent_name FROM sys_organization s LEFT JOIN sys_organization p ON p.ID=s.PARENT_ID where FIND_IN_SET(s.id, query_children_organization(${id}))") + @ResultType(OrganizationModel.class) + public List getOrganizationTree(@Param(value = "id") Integer id); +} diff --git a/src/main/java/com/xmomen/module/system/mapper/TaskMapper.java b/src/main/java/com/xmomen/module/system/mapper/TaskMapper.java new file mode 100644 index 0000000..1dc95bc --- /dev/null +++ b/src/main/java/com/xmomen/module/system/mapper/TaskMapper.java @@ -0,0 +1,9 @@ +package com.xmomen.module.system.mapper; + +/** + * Created by Jeng on 16/4/2. + */ +public interface TaskMapper { + + public static final String TASK_MAPPER_NAMESPACE = "com.xmomen.module.system.mapper.TaskMapper."; +} diff --git a/src/main/java/com/xmomen/module/system/model/CreateDictionary.java b/src/main/java/com/xmomen/module/system/model/CreateDictionary.java new file mode 100644 index 0000000..c6c3915 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/model/CreateDictionary.java @@ -0,0 +1,83 @@ +package com.xmomen.module.system.model; + +import org.hibernate.validator.constraints.Length; +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * Created by Jeng on 16/4/2. + */ +public class CreateDictionary implements Serializable { + + /** + * 字典 + */ + @NotNull + private Integer sysDictionaryId; + + /** + * 显示值 + */ + @NotNull + @NotEmpty + private String showValue; + + /** + * 实际值 + */ + @NotNull + @NotEmpty + private String realValue; + + /** + * 排位 + */ + private Integer sortValue; + + /** + * 0-禁用,1-启用 + */ + private Integer available; + + public Integer getSysDictionaryId() { + return sysDictionaryId; + } + + public void setSysDictionaryId(Integer sysDictionaryId) { + this.sysDictionaryId = sysDictionaryId; + } + + public String getShowValue() { + return showValue; + } + + public void setShowValue(String showValue) { + this.showValue = showValue; + } + + public String getRealValue() { + return realValue; + } + + public void setRealValue(String realValue) { + this.realValue = realValue; + } + + public Integer getSortValue() { + return sortValue; + } + + public void setSortValue(Integer sortValue) { + this.sortValue = sortValue; + } + + public Integer getAvailable() { + return available; + } + + public void setAvailable(Integer available) { + this.available = available; + } +} diff --git a/src/main/java/com/xmomen/module/system/model/CreateTask.java b/src/main/java/com/xmomen/module/system/model/CreateTask.java new file mode 100644 index 0000000..4eb4efb --- /dev/null +++ b/src/main/java/com/xmomen/module/system/model/CreateTask.java @@ -0,0 +1,15 @@ +package com.xmomen.module.system.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * Created by Jeng on 2016/5/31. + */ +public @Data +class CreateTask implements Serializable { + + private Integer taskHeadId; + private Integer executorId; +} diff --git a/src/main/java/com/xmomen/module/system/model/Dictionary.java b/src/main/java/com/xmomen/module/system/model/Dictionary.java new file mode 100644 index 0000000..1808235 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/model/Dictionary.java @@ -0,0 +1,100 @@ +package com.xmomen.module.system.model; + +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * Created by Jeng on 16/4/2. + */ +public class Dictionary implements Serializable { + + private Integer id; + + /** + * 字典 + */ + private Integer sysDictionaryId; + + /** + * 显示值 + */ + private String showValue; + + /** + * 实际值 + */ + private String realValue; + + /** + * 排位 + */ + private Integer sortValue; + + /** + * 0-禁用,1-启用 + */ + private Integer available; + + /** + * 启用状态描述 + */ + private String availableDesc; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getSysDictionaryId() { + return sysDictionaryId; + } + + public void setSysDictionaryId(Integer sysDictionaryId) { + this.sysDictionaryId = sysDictionaryId; + } + + public String getShowValue() { + return showValue; + } + + public void setShowValue(String showValue) { + this.showValue = showValue; + } + + public String getRealValue() { + return realValue; + } + + public void setRealValue(String realValue) { + this.realValue = realValue; + } + + public Integer getSortValue() { + return sortValue; + } + + public void setSortValue(Integer sortValue) { + this.sortValue = sortValue; + } + + public Integer getAvailable() { + return available; + } + + public void setAvailable(Integer available) { + this.available = available; + } + + public String getAvailableDesc() { + return availableDesc; + } + + public void setAvailableDesc(String availableDesc) { + this.availableDesc = availableDesc; + } +} diff --git a/src/main/java/com/xmomen/module/system/model/DictionaryGroup.java b/src/main/java/com/xmomen/module/system/model/DictionaryGroup.java new file mode 100644 index 0000000..46f0bdc --- /dev/null +++ b/src/main/java/com/xmomen/module/system/model/DictionaryGroup.java @@ -0,0 +1,76 @@ +package com.xmomen.module.system.model; + +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * Created by Jeng on 16/4/2. + */ +public class DictionaryGroup implements Serializable { + + /** + * 物理主键 + */ + private Integer id; + /** + * 字典编号 + */ + private String dictionaryCode; + + /** + * 字典描述 + */ + private String dictionaryDesc; + + /** + * 是否启用 + */ + private Integer available; + + /** + * 启用状态描述 + */ + private String availableDesc; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getDictionaryCode() { + return dictionaryCode; + } + + public void setDictionaryCode(String dictionaryCode) { + this.dictionaryCode = dictionaryCode; + } + + public String getDictionaryDesc() { + return dictionaryDesc; + } + + public void setDictionaryDesc(String dictionaryDesc) { + this.dictionaryDesc = dictionaryDesc; + } + + public Integer getAvailable() { + return available; + } + + public void setAvailable(Integer available) { + this.available = available; + } + + public String getAvailableDesc() { + return availableDesc; + } + + public void setAvailableDesc(String availableDesc) { + this.availableDesc = availableDesc; + } +} diff --git a/src/main/java/com/xmomen/module/system/model/UpdateDictionary.java b/src/main/java/com/xmomen/module/system/model/UpdateDictionary.java new file mode 100644 index 0000000..b386526 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/model/UpdateDictionary.java @@ -0,0 +1,93 @@ +package com.xmomen.module.system.model; + +import org.hibernate.validator.constraints.NotEmpty; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * Created by Jeng on 16/4/2. + */ +public class UpdateDictionary implements Serializable { + + @NotNull + private Integer id; + + /** + * 字典 + */ + @NotNull + private Integer sysDictionaryId; + + /** + * 显示值 + */ + @NotNull + @NotEmpty + private String showValue; + + /** + * 实际值 + */ + @NotNull + @NotEmpty + private String realValue; + + /** + * 排位 + */ + private Integer sortValue; + + /** + * 0-禁用,1-启用 + */ + private Integer available; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public Integer getSysDictionaryId() { + return sysDictionaryId; + } + + public void setSysDictionaryId(Integer sysDictionaryId) { + this.sysDictionaryId = sysDictionaryId; + } + + public String getShowValue() { + return showValue; + } + + public void setShowValue(String showValue) { + this.showValue = showValue; + } + + public String getRealValue() { + return realValue; + } + + public void setRealValue(String realValue) { + this.realValue = realValue; + } + + public Integer getSortValue() { + return sortValue; + } + + public void setSortValue(Integer sortValue) { + this.sortValue = sortValue; + } + + public Integer getAvailable() { + return available; + } + + public void setAvailable(Integer available) { + this.available = available; + } +} diff --git a/src/main/java/com/xmomen/module/system/service/DictionaryGroupService.java b/src/main/java/com/xmomen/module/system/service/DictionaryGroupService.java new file mode 100644 index 0000000..5c1eac4 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/service/DictionaryGroupService.java @@ -0,0 +1,48 @@ +package com.xmomen.module.system.service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.system.entity.SysDictionary; +import com.xmomen.module.system.entity.SysDictionaryExample; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created by Jeng on 16/4/2. + */ +@Service +public class DictionaryGroupService { + + @Autowired + MybatisDao mybatisDao; + + @Transactional + public SysDictionary createDictionary(SysDictionary sysDictionary){ + return mybatisDao.insertByModel(sysDictionary); + } + + public Page getDictionaryList(String keyword, Integer limit, Integer offset){ + String keywordP ="%" + StringUtilsExt.trimToEmpty(keyword) + "%"; + SysDictionaryExample sysDictionaryExample = new SysDictionaryExample(); + sysDictionaryExample.createCriteria() + .andDictionaryCodeLike(keywordP); + sysDictionaryExample.or().andDictionaryDescLike(keywordP); + return mybatisDao.selectPageByExample(sysDictionaryExample, limit, offset); + } + + public SysDictionary getDictionary(Integer id){ + return mybatisDao.selectByPrimaryKey(SysDictionary.class, id); + } + + public void updateDictionary(SysDictionary sysDictionary){ + mybatisDao.update(sysDictionary); + } + + public void deleteDictionary(Integer id){ + mybatisDao.deleteByPrimaryKey(SysDictionary.class, id); + } + + +} diff --git a/src/main/java/com/xmomen/module/system/service/DictionaryService.java b/src/main/java/com/xmomen/module/system/service/DictionaryService.java new file mode 100644 index 0000000..10a66b4 --- /dev/null +++ b/src/main/java/com/xmomen/module/system/service/DictionaryService.java @@ -0,0 +1,47 @@ +package com.xmomen.module.system.service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.system.entity.SysDictionary; +import com.xmomen.module.system.entity.SysDictionaryExample; +import com.xmomen.module.system.entity.SysDictionaryParameter; +import com.xmomen.module.system.entity.SysDictionaryParameterExample; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created by Jeng on 16/4/2. + */ +@Service +public class DictionaryService { + + @Autowired + MybatisDao mybatisDao; + + @Transactional + public SysDictionaryParameter createDictionary(SysDictionaryParameter sysDictionaryParameter){ + return mybatisDao.insertByModel(sysDictionaryParameter); + } + + public Page getDictionaryList(Integer groupId, Integer limit, Integer offset){ + SysDictionaryParameterExample sysDictionaryExample = new SysDictionaryParameterExample(); + sysDictionaryExample.createCriteria().andSysDictionaryIdEqualTo(groupId); + return mybatisDao.selectPageByExample(sysDictionaryExample, limit, offset); + } + + public SysDictionaryParameter getDictionary(Integer id){ + return mybatisDao.selectByPrimaryKey(SysDictionaryParameter.class, id); + } + + public void updateDictionary(SysDictionaryParameter sysDictionary){ + mybatisDao.update(sysDictionary); + } + + public void deleteDictionary(Integer id){ + mybatisDao.deleteByPrimaryKey(SysDictionaryParameter.class, id); + } + + +} diff --git a/src/main/java/com/xmomen/module/system/service/OrganizationService.java b/src/main/java/com/xmomen/module/system/service/OrganizationService.java new file mode 100644 index 0000000..8f4421e --- /dev/null +++ b/src/main/java/com/xmomen/module/system/service/OrganizationService.java @@ -0,0 +1,165 @@ +package com.xmomen.module.system.service; + +import com.alibaba.fastjson.JSONObject; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.system.entity.SysOrganization; +import com.xmomen.module.system.entity.SysOrganizationExample; +import com.xmomen.module.system.entity.SysUserOrganization; +import com.xmomen.module.system.entity.SysUserOrganizationExample; +import com.xmomen.module.system.mapper.OrganizationMapper; +import com.xmomen.module.system.model.OrganizationModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by Jeng on 16/3/25. + */ +@Service +public class OrganizationService { + + @Autowired + MybatisDao mybatisDao; + + @Autowired + OrganizationMapper organizationMapper; + + /** + * 查询树形组织结构 + * @param id + * @return + */ + public List getOrganizationTree(Integer id){ + SysOrganizationExample sysOrganizationExample = new SysOrganizationExample(); + List result = new ArrayList(); + if(id == null){ + sysOrganizationExample.createCriteria().andParentIdIsNull(); + List sysOrganizationList = mybatisDao.selectByExample(sysOrganizationExample); + for (SysOrganization sysOrganization : sysOrganizationList) { + List organizationModels = organizationMapper.getOrganizationTree(sysOrganization.getId()); + result.add(getTree(organizationModels, id)); + } + } + return result; + } + + private OrganizationModel getTree(List list, Integer id){ + OrganizationModel root = new OrganizationModel(); + for (OrganizationModel organization : list) { + if(organization.getParentId() == id){ + root = organization; + }else{ + getTreeNode(organization, root); + } + } + return root; + } + + /** + * 获取子节点 + * @param child + * @param parent + */ + private void getTreeNode(OrganizationModel child, OrganizationModel parent){ + if(child.getParentId() != null && child.getParentId().equals(parent.getId())){ + if(parent.getNodes() == null){ + List childes = new ArrayList(); + childes.add(child); + parent.setNodes(childes); + }else{ + parent.getNodes().add(child); + } + }else{ + if(parent.getNodes() != null && parent.getNodes().size() > 0){ + for (int i = 0; i < parent.getNodes().size(); i++) { + OrganizationModel childTree = parent.getNodes().get(i); + getTreeNode(child, childTree); + } + } + } + } + + /** + * 创建组织结构 + * @param sysOrganization + * @return + */ + @Transactional + public SysOrganization createOrganization(SysOrganization sysOrganization){ + return mybatisDao.saveByModel(sysOrganization); + } + + /** + * 绑定组织机构用户 + * @param organizationId + * @param userId + */ + @Transactional + public void bindOrganizationUser(Integer organizationId, Integer userId){ + SysUserOrganization sysUserOrganization = new SysUserOrganization(); + sysUserOrganization.setOrganizationId(organizationId); + sysUserOrganization.setUserId(userId); + mybatisDao.insert(sysUserOrganization); + } + + /** + * 批量绑定组织机构用户 + * @param organizationId + * @param userIds + */ + @Transactional + public void bindOrganizationUser(Integer organizationId, Integer... userIds){ + for (Integer userId : userIds) { + bindOrganizationUser(organizationId, userId); + } + } + + /** + * 解除组织机构用户关系 + * @param organizationId + * @param userId + */ + @Transactional + public void unBindOrganizationUser(Integer organizationId, Integer userId){ + SysUserOrganizationExample sysUserOrganizationExample = new SysUserOrganizationExample(); + sysUserOrganizationExample.createCriteria() + .andOrganizationIdEqualTo(organizationId) + .andUserIdEqualTo(userId); + mybatisDao.deleteByExample(sysUserOrganizationExample); + } + + /** + * 批量解除组织机构用户 + * @param organizationId + * @param userIds + */ + @Transactional + public void unBindOrganizationUser(Integer organizationId, Integer... userIds){ + for (Integer userId : userIds) { + unBindOrganizationUser(organizationId, userId); + } + } + + /** + * 更新组织机构 + * @param sysOrganization + */ + @Transactional + public void updateOrganization(SysOrganization sysOrganization){ + mybatisDao.save(sysOrganization); + } + + /** + * 删除机构组织 + * @param id + */ + @Transactional + public void delete(Integer id){ + mybatisDao.deleteByPrimaryKey(SysOrganization.class, id); + } +} diff --git a/src/main/java/com/xmomen/module/user/entity/SysPermissions.java b/src/main/java/com/xmomen/module/user/entity/SysPermissions.java new file mode 100644 index 0000000..2138bdd --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysPermissions.java @@ -0,0 +1,90 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "sys_permissions") +public class SysPermissions extends BaseMybatisModel { + /** + * 物理主键 + */ + private Integer id; + + /** + * 权限 + */ + private String permission; + + /** + * 权限描述 + */ + private String description; + + /** + * 是否生效:0-禁用,1-启用 + */ + private Integer available; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "PERMISSION") + public String getPermission() { + return permission; + } + + public void setPermission(String permission) { + this.permission = permission; + if(permission == null){ + removeValidField("permission"); + return; + } + addValidField("permission"); + } + + @Column(name = "DESCRIPTION") + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + if(description == null){ + removeValidField("description"); + return; + } + addValidField("description"); + } + + @Column(name = "AVAILABLE") + public Integer getAvailable() { + return available; + } + + public void setAvailable(Integer available) { + this.available = available; + if(available == null){ + removeValidField("available"); + return; + } + addValidField("available"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/SysPermissionsExample.java b/src/main/java/com/xmomen/module/user/entity/SysPermissionsExample.java new file mode 100644 index 0000000..fbecc41 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysPermissionsExample.java @@ -0,0 +1,461 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class SysPermissionsExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SysPermissionsExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andPermissionIsNull() { + addCriterion("PERMISSION is null"); + return (Criteria) this; + } + + public Criteria andPermissionIsNotNull() { + addCriterion("PERMISSION is not null"); + return (Criteria) this; + } + + public Criteria andPermissionEqualTo(String value) { + addCriterion("PERMISSION =", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionNotEqualTo(String value) { + addCriterion("PERMISSION <>", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionGreaterThan(String value) { + addCriterion("PERMISSION >", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionGreaterThanOrEqualTo(String value) { + addCriterion("PERMISSION >=", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionLessThan(String value) { + addCriterion("PERMISSION <", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionLessThanOrEqualTo(String value) { + addCriterion("PERMISSION <=", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionLike(String value) { + addCriterion("PERMISSION like", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionNotLike(String value) { + addCriterion("PERMISSION not like", value, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionIn(List values) { + addCriterion("PERMISSION in", values, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionNotIn(List values) { + addCriterion("PERMISSION not in", values, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionBetween(String value1, String value2) { + addCriterion("PERMISSION between", value1, value2, "permission"); + return (Criteria) this; + } + + public Criteria andPermissionNotBetween(String value1, String value2) { + addCriterion("PERMISSION not between", value1, value2, "permission"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNull() { + addCriterion("DESCRIPTION is null"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNotNull() { + addCriterion("DESCRIPTION is not null"); + return (Criteria) this; + } + + public Criteria andDescriptionEqualTo(String value) { + addCriterion("DESCRIPTION =", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotEqualTo(String value) { + addCriterion("DESCRIPTION <>", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThan(String value) { + addCriterion("DESCRIPTION >", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("DESCRIPTION >=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThan(String value) { + addCriterion("DESCRIPTION <", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThanOrEqualTo(String value) { + addCriterion("DESCRIPTION <=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLike(String value) { + addCriterion("DESCRIPTION like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotLike(String value) { + addCriterion("DESCRIPTION not like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionIn(List values) { + addCriterion("DESCRIPTION in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotIn(List values) { + addCriterion("DESCRIPTION not in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionBetween(String value1, String value2) { + addCriterion("DESCRIPTION between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotBetween(String value1, String value2) { + addCriterion("DESCRIPTION not between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andAvailableIsNull() { + addCriterion("AVAILABLE is null"); + return (Criteria) this; + } + + public Criteria andAvailableIsNotNull() { + addCriterion("AVAILABLE is not null"); + return (Criteria) this; + } + + public Criteria andAvailableEqualTo(Integer value) { + addCriterion("AVAILABLE =", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotEqualTo(Integer value) { + addCriterion("AVAILABLE <>", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableGreaterThan(Integer value) { + addCriterion("AVAILABLE >", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableGreaterThanOrEqualTo(Integer value) { + addCriterion("AVAILABLE >=", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableLessThan(Integer value) { + addCriterion("AVAILABLE <", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableLessThanOrEqualTo(Integer value) { + addCriterion("AVAILABLE <=", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableIn(List values) { + addCriterion("AVAILABLE in", values, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotIn(List values) { + addCriterion("AVAILABLE not in", values, "available"); + return (Criteria) this; + } + + public Criteria andAvailableBetween(Integer value1, Integer value2) { + addCriterion("AVAILABLE between", value1, value2, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotBetween(Integer value1, Integer value2) { + addCriterion("AVAILABLE not between", value1, value2, "available"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/SysRoles.java b/src/main/java/com/xmomen/module/user/entity/SysRoles.java new file mode 100644 index 0000000..b458fb8 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysRoles.java @@ -0,0 +1,90 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(name = "sys_roles") +public class SysRoles extends BaseMybatisModel { + /** + * 物理主键 + */ + private Integer id; + + /** + * 角色 + */ + private String role; + + /** + * 角色描述 + */ + private String description; + + /** + * 是否启用:0-禁用,1-启用 + */ + private Integer available; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "ROLE") + public String getRole() { + return role; + } + + public void setRole(String role) { + this.role = role; + if(role == null){ + removeValidField("role"); + return; + } + addValidField("role"); + } + + @Column(name = "DESCRIPTION") + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + if(description == null){ + removeValidField("description"); + return; + } + addValidField("description"); + } + + @Column(name = "AVAILABLE") + public Integer getAvailable() { + return available; + } + + public void setAvailable(Integer available) { + this.available = available; + if(available == null){ + removeValidField("available"); + return; + } + addValidField("available"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/SysRolesExample.java b/src/main/java/com/xmomen/module/user/entity/SysRolesExample.java new file mode 100644 index 0000000..69e20c1 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysRolesExample.java @@ -0,0 +1,461 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; +import java.util.ArrayList; +import java.util.List; + +public class SysRolesExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SysRolesExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andRoleIsNull() { + addCriterion("ROLE is null"); + return (Criteria) this; + } + + public Criteria andRoleIsNotNull() { + addCriterion("ROLE is not null"); + return (Criteria) this; + } + + public Criteria andRoleEqualTo(String value) { + addCriterion("ROLE =", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleNotEqualTo(String value) { + addCriterion("ROLE <>", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleGreaterThan(String value) { + addCriterion("ROLE >", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleGreaterThanOrEqualTo(String value) { + addCriterion("ROLE >=", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleLessThan(String value) { + addCriterion("ROLE <", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleLessThanOrEqualTo(String value) { + addCriterion("ROLE <=", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleLike(String value) { + addCriterion("ROLE like", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleNotLike(String value) { + addCriterion("ROLE not like", value, "role"); + return (Criteria) this; + } + + public Criteria andRoleIn(List values) { + addCriterion("ROLE in", values, "role"); + return (Criteria) this; + } + + public Criteria andRoleNotIn(List values) { + addCriterion("ROLE not in", values, "role"); + return (Criteria) this; + } + + public Criteria andRoleBetween(String value1, String value2) { + addCriterion("ROLE between", value1, value2, "role"); + return (Criteria) this; + } + + public Criteria andRoleNotBetween(String value1, String value2) { + addCriterion("ROLE not between", value1, value2, "role"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNull() { + addCriterion("DESCRIPTION is null"); + return (Criteria) this; + } + + public Criteria andDescriptionIsNotNull() { + addCriterion("DESCRIPTION is not null"); + return (Criteria) this; + } + + public Criteria andDescriptionEqualTo(String value) { + addCriterion("DESCRIPTION =", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotEqualTo(String value) { + addCriterion("DESCRIPTION <>", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThan(String value) { + addCriterion("DESCRIPTION >", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionGreaterThanOrEqualTo(String value) { + addCriterion("DESCRIPTION >=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThan(String value) { + addCriterion("DESCRIPTION <", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLessThanOrEqualTo(String value) { + addCriterion("DESCRIPTION <=", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionLike(String value) { + addCriterion("DESCRIPTION like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotLike(String value) { + addCriterion("DESCRIPTION not like", value, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionIn(List values) { + addCriterion("DESCRIPTION in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotIn(List values) { + addCriterion("DESCRIPTION not in", values, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionBetween(String value1, String value2) { + addCriterion("DESCRIPTION between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andDescriptionNotBetween(String value1, String value2) { + addCriterion("DESCRIPTION not between", value1, value2, "description"); + return (Criteria) this; + } + + public Criteria andAvailableIsNull() { + addCriterion("AVAILABLE is null"); + return (Criteria) this; + } + + public Criteria andAvailableIsNotNull() { + addCriterion("AVAILABLE is not null"); + return (Criteria) this; + } + + public Criteria andAvailableEqualTo(Integer value) { + addCriterion("AVAILABLE =", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotEqualTo(Integer value) { + addCriterion("AVAILABLE <>", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableGreaterThan(Integer value) { + addCriterion("AVAILABLE >", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableGreaterThanOrEqualTo(Integer value) { + addCriterion("AVAILABLE >=", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableLessThan(Integer value) { + addCriterion("AVAILABLE <", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableLessThanOrEqualTo(Integer value) { + addCriterion("AVAILABLE <=", value, "available"); + return (Criteria) this; + } + + public Criteria andAvailableIn(List values) { + addCriterion("AVAILABLE in", values, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotIn(List values) { + addCriterion("AVAILABLE not in", values, "available"); + return (Criteria) this; + } + + public Criteria andAvailableBetween(Integer value1, Integer value2) { + addCriterion("AVAILABLE between", value1, value2, "available"); + return (Criteria) this; + } + + public Criteria andAvailableNotBetween(Integer value1, Integer value2) { + addCriterion("AVAILABLE not between", value1, value2, "available"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/SysRolesPermissionsExample.java b/src/main/java/com/xmomen/module/user/entity/SysRolesPermissionsExample.java new file mode 100644 index 0000000..34de622 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysRolesPermissionsExample.java @@ -0,0 +1,382 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; + +import java.util.ArrayList; +import java.util.List; + +public class SysRolesPermissionsExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SysRolesPermissionsExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andRoleIdIsNull() { + addCriterion("ROLE_ID is null"); + return (Criteria) this; + } + + public Criteria andRoleIdIsNotNull() { + addCriterion("ROLE_ID is not null"); + return (Criteria) this; + } + + public Criteria andRoleIdEqualTo(Integer value) { + addCriterion("ROLE_ID =", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdNotEqualTo(Integer value) { + addCriterion("ROLE_ID <>", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdGreaterThan(Integer value) { + addCriterion("ROLE_ID >", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ROLE_ID >=", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdLessThan(Integer value) { + addCriterion("ROLE_ID <", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdLessThanOrEqualTo(Integer value) { + addCriterion("ROLE_ID <=", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdIn(List values) { + addCriterion("ROLE_ID in", values, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdNotIn(List values) { + addCriterion("ROLE_ID not in", values, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdBetween(Integer value1, Integer value2) { + addCriterion("ROLE_ID between", value1, value2, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdNotBetween(Integer value1, Integer value2) { + addCriterion("ROLE_ID not between", value1, value2, "roleId"); + return (Criteria) this; + } + + public Criteria andPermissionIdIsNull() { + addCriterion("PERMISSION_ID is null"); + return (Criteria) this; + } + + public Criteria andPermissionIdIsNotNull() { + addCriterion("PERMISSION_ID is not null"); + return (Criteria) this; + } + + public Criteria andPermissionIdEqualTo(Integer value) { + addCriterion("PERMISSION_ID =", value, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdNotEqualTo(Integer value) { + addCriterion("PERMISSION_ID <>", value, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdGreaterThan(Integer value) { + addCriterion("PERMISSION_ID >", value, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdGreaterThanOrEqualTo(Integer value) { + addCriterion("PERMISSION_ID >=", value, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdLessThan(Integer value) { + addCriterion("PERMISSION_ID <", value, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdLessThanOrEqualTo(Integer value) { + addCriterion("PERMISSION_ID <=", value, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdIn(List values) { + addCriterion("PERMISSION_ID in", values, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdNotIn(List values) { + addCriterion("PERMISSION_ID not in", values, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdBetween(Integer value1, Integer value2) { + addCriterion("PERMISSION_ID between", value1, value2, "permissionId"); + return (Criteria) this; + } + + public Criteria andPermissionIdNotBetween(Integer value1, Integer value2) { + addCriterion("PERMISSION_ID not between", value1, value2, "permissionId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/SysUsers.java b/src/main/java/com/xmomen/module/user/entity/SysUsers.java new file mode 100644 index 0000000..c0be1f3 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysUsers.java @@ -0,0 +1,243 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "sys_users") +public class SysUsers extends BaseMybatisModel { + /** + * + */ + private Integer id; + + /** + * 登陆用户名 + */ + private String username; + + /** + * 真实姓名 + */ + private String realname; + + /** + * 密码盐值 + */ + private String salt; + + /** + * 登陆密码 + */ + private String password; + + /** + * 年龄 + */ + private Integer age; + + /** + * 1-男,2女 + */ + private Integer sex; + + /** + * 邮箱 + */ + private String email; + + /** + * QQ + */ + private String qq; + + /** + * 手机号 + */ + private String phoneNumber; + + /** + * 办公室电话 + */ + private String officeTel; + + /** + * 0-禁用,1-启用 + */ + private Integer locked; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "USERNAME") + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + if(username == null){ + removeValidField("username"); + return; + } + addValidField("username"); + } + + @Column(name = "REALNAME") + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + if(realname == null){ + removeValidField("realname"); + return; + } + addValidField("realname"); + } + + @Column(name = "SALT") + public String getSalt() { + return salt; + } + + public void setSalt(String salt) { + this.salt = salt; + if(salt == null){ + removeValidField("salt"); + return; + } + addValidField("salt"); + } + + @Column(name = "PASSWORD") + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + if(password == null){ + removeValidField("password"); + return; + } + addValidField("password"); + } + + @Column(name = "AGE") + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + if(age == null){ + removeValidField("age"); + return; + } + addValidField("age"); + } + + @Column(name = "SEX") + public Integer getSex() { + return sex; + } + + public void setSex(Integer sex) { + this.sex = sex; + if(sex == null){ + removeValidField("sex"); + return; + } + addValidField("sex"); + } + + @Column(name = "EMAIL") + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + if(email == null){ + removeValidField("email"); + return; + } + addValidField("email"); + } + + @Column(name = "QQ") + public String getQq() { + return qq; + } + + public void setQq(String qq) { + this.qq = qq; + if(qq == null){ + removeValidField("qq"); + return; + } + addValidField("qq"); + } + + @Column(name = "PHONE_NUMBER") + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + if(phoneNumber == null){ + removeValidField("phoneNumber"); + return; + } + addValidField("phoneNumber"); + } + + @Column(name = "OFFICE_TEL") + public String getOfficeTel() { + return officeTel; + } + + public void setOfficeTel(String officeTel) { + this.officeTel = officeTel; + if(officeTel == null){ + removeValidField("officeTel"); + return; + } + addValidField("officeTel"); + } + + @Column(name = "LOCKED") + public Integer getLocked() { + return locked; + } + + public void setLocked(Integer locked) { + this.locked = locked; + if(locked == null){ + removeValidField("locked"); + return; + } + addValidField("locked"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/SysUsersRoles.java b/src/main/java/com/xmomen/module/user/entity/SysUsersRoles.java new file mode 100644 index 0000000..9e5a692 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysUsersRoles.java @@ -0,0 +1,68 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; + +import javax.persistence.*; + +@Entity +@Table(name = "sys_users_roles") +public class SysUsersRoles extends BaseMybatisModel { + /** + * 物理主键 + */ + private Integer id; + + /** + * 用户表关联主键 + */ + private Integer userId; + + /** + * 角色表关联主键 + */ + private Integer roleId; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "USER_ID") + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + if(userId == null){ + removeValidField("userId"); + return; + } + addValidField("userId"); + } + + @Column(name = "ROLE_ID") + public Integer getRoleId() { + return roleId; + } + + public void setRoleId(Integer roleId) { + this.roleId = roleId; + if(roleId == null){ + removeValidField("roleId"); + return; + } + addValidField("roleId"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/SysUsersRolesExample.java b/src/main/java/com/xmomen/module/user/entity/SysUsersRolesExample.java new file mode 100644 index 0000000..a4e2259 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/SysUsersRolesExample.java @@ -0,0 +1,382 @@ +package com.xmomen.module.user.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisExample; + +import java.util.ArrayList; +import java.util.List; + +public class SysUsersRolesExample extends BaseMybatisExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public SysUsersRolesExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("ID is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("ID is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(Integer value) { + addCriterion("ID =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(Integer value) { + addCriterion("ID <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(Integer value) { + addCriterion("ID >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ID >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(Integer value) { + addCriterion("ID <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(Integer value) { + addCriterion("ID <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("ID in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("ID not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(Integer value1, Integer value2) { + addCriterion("ID between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(Integer value1, Integer value2) { + addCriterion("ID not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andUserIdIsNull() { + addCriterion("USER_ID is null"); + return (Criteria) this; + } + + public Criteria andUserIdIsNotNull() { + addCriterion("USER_ID is not null"); + return (Criteria) this; + } + + public Criteria andUserIdEqualTo(Integer value) { + addCriterion("USER_ID =", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotEqualTo(Integer value) { + addCriterion("USER_ID <>", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThan(Integer value) { + addCriterion("USER_ID >", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdGreaterThanOrEqualTo(Integer value) { + addCriterion("USER_ID >=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThan(Integer value) { + addCriterion("USER_ID <", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdLessThanOrEqualTo(Integer value) { + addCriterion("USER_ID <=", value, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdIn(List values) { + addCriterion("USER_ID in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotIn(List values) { + addCriterion("USER_ID not in", values, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdBetween(Integer value1, Integer value2) { + addCriterion("USER_ID between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andUserIdNotBetween(Integer value1, Integer value2) { + addCriterion("USER_ID not between", value1, value2, "userId"); + return (Criteria) this; + } + + public Criteria andRoleIdIsNull() { + addCriterion("ROLE_ID is null"); + return (Criteria) this; + } + + public Criteria andRoleIdIsNotNull() { + addCriterion("ROLE_ID is not null"); + return (Criteria) this; + } + + public Criteria andRoleIdEqualTo(Integer value) { + addCriterion("ROLE_ID =", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdNotEqualTo(Integer value) { + addCriterion("ROLE_ID <>", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdGreaterThan(Integer value) { + addCriterion("ROLE_ID >", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdGreaterThanOrEqualTo(Integer value) { + addCriterion("ROLE_ID >=", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdLessThan(Integer value) { + addCriterion("ROLE_ID <", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdLessThanOrEqualTo(Integer value) { + addCriterion("ROLE_ID <=", value, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdIn(List values) { + addCriterion("ROLE_ID in", values, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdNotIn(List values) { + addCriterion("ROLE_ID not in", values, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdBetween(Integer value1, Integer value2) { + addCriterion("ROLE_ID between", value1, value2, "roleId"); + return (Criteria) this; + } + + public Criteria andRoleIdNotBetween(Integer value1, Integer value2) { + addCriterion("ROLE_ID not between", value1, value2, "roleId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/mapper/SysPermissionsMapper.java b/src/main/java/com/xmomen/module/user/entity/mapper/SysPermissionsMapper.java new file mode 100644 index 0000000..5ac64ee --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/mapper/SysPermissionsMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.user.entity.mapper; + +import com.xmomen.module.user.entity.SysPermissions; +import com.xmomen.module.user.entity.SysPermissionsExample; +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import org.apache.ibatis.annotations.Param; + +public interface SysPermissionsMapper extends MybatisMapper { + int countByExample(SysPermissionsExample example); + + int deleteByExample(SysPermissionsExample example); + + int insertSelective(SysPermissions record); + + int updateByExampleSelective(@Param("record") SysPermissions record, @Param("example") SysPermissionsExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/user/entity/mapper/SysRolesPermissionsMapper.java b/src/main/java/com/xmomen/module/user/entity/mapper/SysRolesPermissionsMapper.java new file mode 100644 index 0000000..2d919c6 --- /dev/null +++ b/src/main/java/com/xmomen/module/user/entity/mapper/SysRolesPermissionsMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.user.entity.mapper; + +import com.xmomen.module.user.entity.SysRolesPermissionsExample; +import com.xmomen.module.user.entity.SysRolesPermissions; +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import org.apache.ibatis.annotations.Param; + +public interface SysRolesPermissionsMapper extends MybatisMapper { + int countByExample(SysRolesPermissionsExample example); + + int deleteByExample(SysRolesPermissionsExample example); + + int insertSelective(SysRolesPermissions record); + + int updateByExampleSelective(@Param("record") SysRolesPermissions record, @Param("example") SysRolesPermissionsExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wb/controller/CommonMemberController.java b/src/main/java/com/xmomen/module/wb/controller/CommonMemberController.java new file mode 100644 index 0000000..f255bf8 --- /dev/null +++ b/src/main/java/com/xmomen/module/wb/controller/CommonMemberController.java @@ -0,0 +1,269 @@ +package com.xmomen.module.wb.controller; + +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; + +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.DisabledAccountException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.UnknownAccountException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.web.rest.RestError; +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.model.CreateMember; +import com.xmomen.module.base.service.MemberService; +import com.xmomen.module.core.web.filter.FormAuthenticationFilterExt; +import com.xmomen.module.member.model.MemberAddressCreate; +//import com.xmomen.module.sms.api.SmsMessageService; +import com.xmomen.module.sms.api.SmsResponse; +import com.xmomen.module.sms.model.IdentifyCodeModel; +import com.xmomen.module.sms.util.GlobalIdentifyCodeManager; +import com.xmomen.module.wb.model.PcMember; +import com.xmomen.module.wb.model.PcUpdatePasswordModel; +import com.xmomen.module.wx.pay.common.RandomStringGenerator; + +@RestController +public class CommonMemberController extends PcBaseController{ + + @Autowired + MemberService memberService; + + /** + * 普通用户注册 + */ + @RequestMapping(value = "/member/register", method = RequestMethod.POST) + public CdMember register(@RequestBody @Valid PcMember createPcMember) throws BusinessException { + CreateMember createMember = new CreateMember(); + createMember.setPhoneNumber(createPcMember.getPhoneNumber()); + createMember.setPassword(createPcMember.getPassword()); + createMember.setMemberAddressList(new ArrayList()); + createMember.setEmail(createPcMember.getEmail()); + String phoneNumber = createPcMember.getPhoneNumber(); + if(!StringUtils.isNumeric(phoneNumber) || phoneNumber.length() != 11) { + throw new BusinessException("不合法的手机号码"); + } + String identifyCodeKey = createPcMember.getPhoneNumber(); + IdentifyCodeModel identifyCodeModel = GlobalIdentifyCodeManager.getIdentifyCode(identifyCodeKey); + if(identifyCodeModel == null || identifyCodeModel.isExpired()) { + throw new BusinessException("验证码未生成或者已过期"); + } + if(!createPcMember.getPhoneIdentifyCode().equals(identifyCodeModel.getIdentifyCode())) { + throw new BusinessException("验证码不正确"); + } + CdMember memberQuery = new CdMember(); + memberQuery.setPhoneNumber(phoneNumber); + CdMember cdMember = memberService.findMember(memberQuery); + if(cdMember == null) { + cdMember = memberService.createMember(createMember); + } else if(StringUtils.isEmpty(cdMember.getPassword())) { + memberService.updatePassword(cdMember.getId(), createPcMember.getPassword(), ""); + } else { + throw new BusinessException("用户已被注册"); + } + cdMember.setPassword(""); + return cdMember; + } + + @RequestMapping(value = "/member/login", method = RequestMethod.POST) + public ResponseEntity login(HttpServletRequest request, Model model){ + Map result = new HashMap<>(); + if(SecurityUtils.getSubject().isAuthenticated()){ + String username = (String) SecurityUtils.getSubject().getPrincipal(); + result.put("status", 200); + result.put("username", username); + return new ResponseEntity(result, HttpStatus.OK); + } + String exceptionClassName = (String) request.getAttribute(FormAuthenticationFilterExt.DEFAULT_ERROR_KEY_ATTRIBUTE_NAME); + String error = null; + RestError restError = new RestError(); + restError.setTimestamp(new Date()); + if(DisabledAccountException.class.getName().equals(exceptionClassName)){ + restError.setMessage("该账号已被锁定,请联系客服。"); + }else if(UnknownAccountException.class.getName().equals(exceptionClassName)) { + restError.setMessage("用户名不存在"); + } else if(IncorrectCredentialsException.class.getName().equals(exceptionClassName)) { + restError.setMessage("用户名或密码错误"); + } else if(exceptionClassName != null) { + restError.setMessage( "登录失败:" + exceptionClassName); + } + restError.setStatus(401); + return new ResponseEntity(restError, HttpStatus.UNAUTHORIZED); + } + + /** + * 会员账号 + * @return + */ + @RequestMapping(value = "/member/account", method = RequestMethod.GET) + public CdMember accountSetting(){ + Integer memberId = getCurrentMemberId(); + CdMember memberModel = memberService.getOneMemberModel(String.valueOf(memberId)); + return memberModel; + } + + @RequestMapping(value = "/member/logout") + public ResponseEntity logout(HttpServletRequest request){ + String message = "登出成功"; + try { + SecurityUtils.getSubject().logout(); + } catch (Exception e) { + message = "登出失败"; + } + return new ResponseEntity(message, HttpStatus.UNAUTHORIZED); + } + + @RequestMapping(value = "/member/phonecode") + public SmsResponse sendSms(@RequestParam(value="phone") String phoneNumber) throws Exception { + if(!StringUtils.isNumeric(phoneNumber) || phoneNumber.length() != 11) { + throw new BusinessException("不合法的手机号码"); + } + CdMember memberQuery = new CdMember(); + memberQuery.setPhoneNumber(phoneNumber); + CdMember cdMember = memberService.findMember(memberQuery); + if(cdMember != null){ + throw new BusinessException("该手机号码已注册"); + } +// SmsResponse smsResponse = smsMessageService.sendSingleRequest(phoneNumber); + + return new SmsResponse(); + } + + /** + * 发送验证码到用户手机,用户找回密码(密码重置)操作 + * @param phoneNumber + * @return + * @throws Exception + @RequestMapping(value = "/member/operationcode") + public SmsResponse getOperationCode(@RequestParam(value="phone") String phoneNumber) throws Exception { + if(!StringUtils.isNumeric(phoneNumber) || phoneNumber.length() != 11) { + throw new BusinessException("不合法的手机号码"); + } + CdMember memberQuery = new CdMember(); + memberQuery.setPhoneNumber(phoneNumber); + CdMember cdMember = memberService.findMember(memberQuery); + if(cdMember == null){ + throw new BusinessException("该用户不存在"); + } + String operationCode = RandomStringGenerator.getRandomNumberStrByLength(6); + SmsResponse smsResponse = smsMessageService.sendPasswordInfo(phoneNumber, operationCode); + if(smsResponse == null) { + throw new Exception("调用SMS接口失败"); + } else { + GlobalIdentifyCodeManager.updateOperationCode(phoneNumber, operationCode); + } + return smsResponse; + SmsResponse smsResponse = smsMessageService.sendSingleRequest(phoneNumber); + if(smsResponse == null) { + throw new Exception("调用SMS接口失败"); + } + return smsResponse; + } + */ + + /** + * 根据发送到手机的验证码,手动输入密码达到重置密码的目的 + * @param pcMember + * @return + * @throws Exception + */ + @RequestMapping(value = "/member/resetpassword", method = RequestMethod.POST) + public CdMember resetPassword(@RequestBody @Valid PcMember pcMember) throws Exception { + String phoneNumber = pcMember.getPhoneNumber(); + if(!StringUtils.isNumeric(phoneNumber) || phoneNumber.length() != 11) { + throw new BusinessException("不合法的手机号码"); + } + String identifyCodeKey = pcMember.getPhoneNumber(); + //IdentifyCodeModel identifyCodeModel = GlobalIdentifyCodeManager.getOperationCode(identifyCodeKey); + IdentifyCodeModel identifyCodeModel = GlobalIdentifyCodeManager.getIdentifyCode(identifyCodeKey); + if(identifyCodeModel == null || identifyCodeModel.isExpired()) { + throw new BusinessException("验证码未生成或者已过期"); + } + if(!pcMember.getPhoneIdentifyCode().equals(identifyCodeModel.getIdentifyCode())) { + throw new BusinessException("验证码不正确"); + } + CdMember memberQuery = new CdMember(); + memberQuery.setPhoneNumber(phoneNumber); + CdMember cdMember = memberService.findMember(memberQuery); + if(cdMember == null) { + throw new BusinessException("该用户不存在"); + } + boolean success = memberService.resetPassword(cdMember.getId(), pcMember.getPassword()); + if(!success) { + throw new BusinessException("密码重置失败"); + } + cdMember.setPassword(""); + return cdMember; + } + + /** + * 直接发送随机生成的6位数密码到手机,达到重置密码的目的 + * @param phoneNumber + * @return + * @throws Exception + */ + @RequestMapping(value = "/member/resetpassword", method = RequestMethod.GET) + public SmsResponse resetPassword(@RequestParam(value="phone") String phoneNumber) throws Exception { + if(!StringUtils.isNumeric(phoneNumber) || phoneNumber.length() != 11) { + throw new BusinessException("不合法的手机号码"); + } + CdMember memberQuery = new CdMember(); + memberQuery.setPhoneNumber(phoneNumber); + CdMember cdMember = memberService.findMember(memberQuery); + if(cdMember == null) { + throw new BusinessException("该用户不存在"); + } + String newPassword = RandomStringGenerator.getRandomNumberStrByLength(6); + String oldPassword = cdMember.getPassword(); + if(oldPassword == null) { + oldPassword = ""; + } + boolean success = memberService.updatePassword(cdMember.getId(), newPassword, oldPassword); + if(success) { +// SmsResponse smsResponse = smsMessageService.sendPasswordInfo(phoneNumber, newPassword); + + return new SmsResponse(); + } else { + throw new BusinessException("密码重置失败"); + } + } + + /** + * 更新密码 + * @param updatePasswordModel + * @return + * @throws BusinessException + */ + @RequestMapping(value = "/member/changepassword", method = RequestMethod.POST) + public CdMember changePassword(@RequestBody @Valid PcUpdatePasswordModel updatePasswordModel) throws BusinessException { + String phoneNumber = updatePasswordModel.getPhoneNumber(); + CdMember memberQuery = new CdMember(); + memberQuery.setPhoneNumber(phoneNumber); + CdMember cdMember = memberService.findMember(memberQuery); + if(cdMember == null) { + throw new BusinessException("当前用户不存在"); + } else { + boolean success = memberService.updatePassword(cdMember.getId(), updatePasswordModel.getPassword(), updatePasswordModel.getOldPassword()); + if(!success) { + throw new BusinessException("密码不正确"); + } + } + cdMember.setPassword(""); + return cdMember; + } +} diff --git a/src/main/java/com/xmomen/module/wb/controller/PcBaseController.java b/src/main/java/com/xmomen/module/wb/controller/PcBaseController.java new file mode 100644 index 0000000..8f81ef5 --- /dev/null +++ b/src/main/java/com/xmomen/module/wb/controller/PcBaseController.java @@ -0,0 +1,23 @@ +package com.xmomen.module.wb.controller; + +import com.xmomen.module.base.constant.AppConstants; +import org.apache.shiro.SecurityUtils; +import org.springframework.web.bind.annotation.RestController; + +/** + * Created by tanxinzheng on 17/5/12. + */ +@RestController +public class PcBaseController { + + /** + * 获取当前登录memberId + * @return + */ + protected Integer getCurrentMemberId(){ + Integer memberId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + return memberId; + } + + +} diff --git a/src/main/java/com/xmomen/module/wb/controller/PcCouponController.java b/src/main/java/com/xmomen/module/wb/controller/PcCouponController.java new file mode 100644 index 0000000..9eb7c42 --- /dev/null +++ b/src/main/java/com/xmomen/module/wb/controller/PcCouponController.java @@ -0,0 +1,55 @@ +package com.xmomen.module.wb.controller; + +import java.util.List; + +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.base.service.CouponService; +import com.xmomen.module.wx.module.coupon.model.CouponQueryModel; +import com.xmomen.module.wx.module.coupon.model.WxCouponModel; + +@RestController +@RequestMapping("/wb/coupon") +public class PcCouponController { + + @Autowired + private CouponService couponService; + + @RequestMapping(method = RequestMethod.GET) + List getCoupons(@RequestParam(value="couponType") Integer couponType, + @RequestParam(value="useable", required = false) Boolean useable) { + Integer memberId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + CouponQueryModel couponQueryModel = new CouponQueryModel(); + couponQueryModel.setCdUserId(memberId); + couponQueryModel.setCouponType(couponType); + couponQueryModel.setUseable(useable); + return couponService.getMyCouponList(couponQueryModel); + } + + @RequestMapping(value="/bind", method = RequestMethod.POST) + Boolean bindCoupon(@RequestParam(value="couponNumber", required=true) String couponNumber, + @RequestParam(value="password", required = false) String password) throws Exception { + Integer memberId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + return couponService.bindMember(couponNumber, memberId, password); + } + + @RequestMapping(value="/validate", method = RequestMethod.GET) + Boolean validateCoupon(@RequestParam(value="couponNumber", required=true) String couponNumber, + @RequestParam(value="password", required = false) String password) { + return couponService.validate(couponNumber, password); + } + + @RequestMapping(value="/reset", method = RequestMethod.POST) + Boolean resetPasword(@RequestParam(value="couponNumber", required=true) String couponNumber, + @RequestParam(value="password", required = false) String password, + @RequestParam(value="newPassword", required = true) String newPassword) throws Exception { + Integer memberId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY); + return couponService.resetPasword(couponNumber, password, newPassword, memberId); + } +} diff --git a/src/main/java/com/xmomen/module/wb/model/PcMemberInfo.java b/src/main/java/com/xmomen/module/wb/model/PcMemberInfo.java new file mode 100644 index 0000000..c299213 --- /dev/null +++ b/src/main/java/com/xmomen/module/wb/model/PcMemberInfo.java @@ -0,0 +1,11 @@ +package com.xmomen.module.wb.model; + +import lombok.Data; + +public @Data class PcMemberInfo { + + private String name; + private Integer memberId; + private String phoneNumber; + private String email; +} diff --git a/src/main/java/com/xmomen/module/wx/constants/AppCodeConsts.java b/src/main/java/com/xmomen/module/wx/constants/AppCodeConsts.java new file mode 100644 index 0000000..01dcb60 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/constants/AppCodeConsts.java @@ -0,0 +1,59 @@ +package com.xmomen.module.wx.constants; + +/** + * 微信模板常量类 + */ +public class AppCodeConsts { + + /** + * 微信模块 + */ + public static final String APP_WX = "WX"; + + public static final String MSG_TYPE = "msgType"; + + public static final String MSG_ID = "msgId"; + + public static final String FROM_USER_NAME = "fromUserName"; + + public static final String CREATE_TIME = "createTime"; + + //模板消息发送成功 + public final static int TEMPLATE_MESSAGE_SEND_SUCCESS = 1; + + //模板消息发送失败 + public final static int TEMPLATE_MESSAGE_SEND_FAIL = 0; + + //模板消息接收成功 + public final static int TEMPLATE_MESSAGE_RECEIVE_SUCCESS = 1; + + //模板消息接收失败 + public final static int TEMPLATE_MESSAGE_RECEIVE_FAIL = 0; + + //自动回复 + public final static int AUTO_REPLIED = 1; + + //快速回复 + public final static int QUICK_REPLIED = 1; + + //图片存储路径 + public final static String UPLOAD_IMAGE_ROOT_PATH = "/upload/weixinImage/"; + + //语音存储路径 + public final static String UPLOAD_VOICE_ROOT_PATH = "/upload/weixinVoice/"; + + //视频存储路径 + public final static String UPLOAD_VIDEO_ROOT_PATH = "/upload/weixinVideo/"; + + //MP3文件后缀 + public final static String MP3 = ".mp3"; + + //视频文件后缀 + public final static String MP4 = ".mp4"; + + //图片文件后缀 + public final static String JPEG = ".JPEG"; + + //文件夹分离器 + public final static String separator = "/"; +} diff --git a/src/main/java/com/xmomen/module/wx/constants/EventEnum.java b/src/main/java/com/xmomen/module/wx/constants/EventEnum.java new file mode 100644 index 0000000..3c57b1b --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/constants/EventEnum.java @@ -0,0 +1,28 @@ +package com.xmomen.module.wx.constants; + +/** + * 事件类型 + */ +public enum EventEnum { + + //订阅 + subscribe, + + //取消订阅 + unsubscribe, + + //自定义菜单点击事件 + CLICK, + + //上报地理位置 + location, + + //点击菜单跳转链接时的事件推送 + VIEW, + + //二维码扫描 + scan, + + //模板消息事件推送 + TEMPLATESENDJOBFINISH; +} diff --git a/src/main/java/com/xmomen/module/wx/constants/RequestEventEnum.java b/src/main/java/com/xmomen/module/wx/constants/RequestEventEnum.java new file mode 100644 index 0000000..9fbb7ec --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/constants/RequestEventEnum.java @@ -0,0 +1,45 @@ +package com.xmomen.module.wx.constants; + +/** + * 事件类型(大小写完全对应微信请求的字符串) + */ +public enum RequestEventEnum { + //订阅 + subscribe, + + //取消订阅 + unsubscribe, + + //上报地理位置 + LOCATION, + + //二维码扫描 + SCAN, + + //模板消息事件推送 + TEMPLATESENDJOBFINISH, + + /** + * 用户点击自定义菜单后,微信会把点击事件推送给开发者 + */ + //点击菜单跳转链接时的事件推送 + VIEW, + //点击菜单拉取消息时的事件推送 + CLICK, + /** + * 仅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用户,旧版本微信用户点击后将没有回应,开发者也不能正常接收到事件推送 + */ + //扫码推事件的事件推送 + scancode_push, + //扫码推事件且弹出“消息接收中”提示框的事件推送 + scancode_waitmsg, + //弹出系统拍照发图的事件推送 + pic_sysphoto, + //弹出拍照或者相册发图的事件推送 + pic_photo_or_album, + //弹出微信相册发图器的事件推送 + pic_weixin, + //弹出地理位置选择器的事件推送 + location_select; + +} diff --git a/src/main/java/com/xmomen/module/wx/constants/WechatUrlConstants.java b/src/main/java/com/xmomen/module/wx/constants/WechatUrlConstants.java new file mode 100644 index 0000000..91ca610 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/constants/WechatUrlConstants.java @@ -0,0 +1,28 @@ +package com.xmomen.module.wx.constants; + + +public class WechatUrlConstants { + + + /** + * 微信授权地址 + * appid 公众号的唯一标识 + * redirect_uri 授权后重定向的回调链接地址 + * scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid), + * snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。 + 并且,即使在未关注的情况下,只要用户授权,也能获取其信息) + state 重定向后会带上state参数,开发者可以填写任意参数值 + #wechat_redirect 直接在微信打开链接,可以不填此参数。做页面302重定向时候,必须带此参数 + */ + public static final String OAUTH = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect"; + + /** + * 获取oauth网页认证的token + */ + public static String GET_ACCESS_TOKEN_OAUTH = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; + + /** + * 获取未关注用户信息 + */ + public static String GET_NO_GUANZHU_USER_INFO = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN"; +} diff --git a/src/main/java/com/xmomen/module/wx/controller/BindController.java b/src/main/java/com/xmomen/module/wx/controller/BindController.java new file mode 100644 index 0000000..8d34d22 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/controller/BindController.java @@ -0,0 +1,409 @@ +package com.xmomen.module.wx.controller; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.utils.AssertExt; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.base.entity.CdBind; +import com.xmomen.module.base.entity.CdExpressMember; +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.service.MemberService; +import com.xmomen.module.logger.Log; +import com.xmomen.module.order.entity.TbOrder; +import com.xmomen.module.order.entity.TbOrderItem; +import com.xmomen.module.order.entity.TbOrderRef; +import com.xmomen.module.order.service.OrderService; +import com.xmomen.module.receipt.entity.TbReceivingCodeRequest; +import com.xmomen.module.receipt.service.ReturnOrderService; +import com.xmomen.module.wx.model.AccessTokenOAuth; +import com.xmomen.module.wx.model.AjaxResult; +import com.xmomen.module.wx.service.BindService; +import com.xmomen.module.wx.util.Auth2Handler; +import com.xmomen.module.wx.util.PropertiesUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.List; + +/** + * 微信绑定控制器 + * + * @author Administrator + */ + +@Controller +public class BindController { + Logger logger = LoggerFactory.getLogger(BindController.class); + + @Autowired + BindService bindService; + + @Autowired + MybatisDao mybatisDao; + + @Autowired + ReturnOrderService returnOrderService; + + @Autowired + MemberService memberService; + + @RequestMapping(value = "/bind/auth") + public String oauth2Api(HttpServletRequest request, + HttpServletResponse response, @RequestParam("url") String url, + @RequestParam(value = "param", required = false) String param) { + String redirectUrl = ""; + logger.info("web url <-->" + request.getRequestURL() + "?" + + request.getQueryString()); + logger.info("r <-->" + url); + if (StringUtilsExt.isNotEmpty(url)) { + String callbackUrl; + try { + String reqServer = PropertiesUtils + .findPropertiesKey("wx.domain"); + if (StringUtils.isEmpty(reqServer)) { + reqServer = "http://system.1g3h.com"; + } + callbackUrl = reqServer + "/bind/auth2Url?url=" + + URLEncoder.encode(url, "UTF-8") + "¶m=" + param; + logger.info("oauth callbackurl <--->" + callbackUrl); + redirectUrl = Auth2Handler.getOauthUrl(callbackUrl); + logger.info("oauth redirectUrl<---->" + redirectUrl); + response.sendRedirect(redirectUrl); + } catch (UnsupportedEncodingException e) { + logger.error("r参数encode失败:" + url, e); + e.printStackTrace(); + } catch (IOException e) { + logger.error("oauth redirect跳转失败:", e); + e.printStackTrace(); + } + + } + return null; + } + + @RequestMapping(value = "/bind/auth2Url") + public String oauth2Url(HttpServletRequest request, + HttpServletResponse response, @RequestParam("code") String code, + @RequestParam("url") String url, + @RequestParam(value = "param", required = false) String param) + throws IOException { + AccessTokenOAuth accessToken = Auth2Handler.getAccessToken(code); + String openId = accessToken.getOpenid(); + logger.info("openid----->" + openId); + logger.info("跳转的url" + url); + // 查询是否有绑定 + CdBind bind = new CdBind(); + bind.setOpenId(openId); + List binds = mybatisDao.selectByModel(bind); + Integer memberId = null; + if (binds.size() > 0) { + memberId = binds.get(0).getUserId(); + } + request.setAttribute("openId", openId); + request.setAttribute("accessToken", accessToken.getAccessToken()); + //不是微商城跳转场合 + if (url.indexOf("index.html") == -1) { + if (binds != null && binds.size() > 0) { + bind = binds.get(0); + String phone = bind.getPhone(); + // 跳转到收货页面 + if (url.equals("/wx/receipt")) { + request.setAttribute("express", "0"); + // 订单信息 + TbOrder order = new TbOrder(); + order.setOrderNo(param); + order = mybatisDao.selectOneByModel(order); + request.setAttribute("orderInfo", order); + // 订单明细信息 + TbOrderItem orderItem = new TbOrderItem(); + orderItem.setOrderNo(param); + List orderItems = mybatisDao + .selectByModel(orderItem); + request.setAttribute("orderItemInfo", orderItems); + request.setAttribute("phone", phone); + //货主扫描 则订单未收货 + if (order.getConsigneePhone().equals(phone) && order.getOrderStatus().equals("5")) { + return url; + } + // 如果订单已经收货 则是要退货处理 + if ((order.getOrderStatus().equals("6") || order.getOrderStatus().equals("7")) && order.getConsigneePhone().equals(phone)) { + return "/wx/returnOrder"; + } + // 查询扫描的是不是快递员 如果是快递员 则需要输入收货码 + // 查找快递员信息 + CdExpressMember expressMember = new CdExpressMember(); + expressMember.setPhone(phone); + List expressMembers = mybatisDao + .selectByModel(expressMember); + if (expressMembers != null && expressMembers.size() > 0 && order.getOrderStatus().equals("5")) { + // 快递员扫描 + request.setAttribute("express", "1"); + request.setAttribute("expressId", expressMembers.get(0).getId()); + return url; + } + // 如果订单已经收货 则是要退货处理 + if (expressMembers != null && expressMembers.size() > 0 && (order.getOrderStatus().equals("6") || order.getOrderStatus().equals("7"))) { + request.setAttribute("express", "1"); + request.setAttribute("expressId", expressMembers.get(0).getId()); + return "/wx/returnOrder"; + } + if (expressMembers == null) { + String message = "您绑定手机号和订单收货人手机号不一致,不能收货,请确认"; + request.setAttribute("message", message); + return "wx/receiptNoAuth"; + } + // 如果订单状态是退货中状态,则必须是要快递员账号扫描 + if (order.getOrderStatus().equals("11")) { + if (expressMembers.size() > 0) { + request.setAttribute("express", "1"); + request.setAttribute("expressId", expressMembers.get(0).getId()); + return "/wx/returnOrder"; + } + else { + String message = "该订单已申请退货,不能再进行收货处理。"; + request.setAttribute("message", message); + return "wx/receiptNoAuth"; + } + } + + String message = "该订单不能再进行收货处理,请联系客服。"; + request.setAttribute("message", message); + return "wx/receiptNoAuth"; + } + // 扫码送货 + else if (url.equals("/wx/scanning")) { + String message = bindService.bindExpressMember(bind.getUserId(), + param); + request.setAttribute("message", message); + if ("扫描成功".equals(message)) { + return "wx/scanningSuccess"; + } + else { + return "wx/scanningFail"; + } + } + } + // 跳转到绑定页面 + else { + request.setAttribute("message", "请先绑定手机号,再进行操作!"); + return "wx/bind"; + } + } + //微商城跳转场合 + else { + String redirectUrl = "redirect:" + url + "?openId=" + openId + "&accessToken=" + accessToken.getAccessToken(); + //添加绑定 + if (memberId == null) { + CdMember cdMember = memberService.bindMember(openId); + memberId = cdMember.getId(); + } + redirectUrl = redirectUrl + "&memberId=" + memberId; + return redirectUrl; + } + return "wx/bind"; + } + + /** + * 绑定页面跳转 + * + * @param openId 微信唯一标识 + * @param bindType 绑定类型 + */ + @RequestMapping(value = "/wx/bind", method = RequestMethod.GET) + public String bind(HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value = "openId") String openId, + @RequestParam(value = "bindType") String bindType) { + request.setAttribute("openId", openId); + request.setAttribute("bindType", bindType); + return "wx/bind"; + } + + /** + * 账号绑定 + * + * @param openId 微信唯一标识 + * @param phone 手机号 + */ + @RequestMapping(value = "/bind/account", method = RequestMethod.GET) + public String bindAccount(HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value = "openId") String openId, + @RequestParam(value = "phone") String phone, + @RequestParam(value = "bindType") String bindType) { + AssertExt.notNull(openId, "openId不能为空"); + AssertExt.notNull(phone, "手机号不能为空"); + boolean flag = bindService.bindAccount(openId, phone, bindType); + if (flag) { + request.setAttribute("phone", phone); + return "wx/bindSuccess"; + } + else { + request.setAttribute("openId", openId); + request.setAttribute("bindType", bindType); + return "wx/bindFail"; + } + } + + /** + * 扫描发运 + * + * @param openId 微信唯一标识 + * @param bindType 绑定类型 + */ +// @RequestMapping(value = "/bind/scanning", method = RequestMethod.GET) +// @ResponseBody +// public String scanning(HttpServletRequest request, +// HttpServletResponse response, +// @RequestParam(value = "phone") String phone, +// @RequestParam(value = "orderNo") String orderNo) { +// AssertExt.notNull(orderNo, "订单号不能为空"); +// AssertExt.notNull(phone, "手机号不能为空"); +// bindService.bindExpressMember(phone, orderNo); +// return "wx/scanningSuccess"; +// } + + /** + * 收货 + */ + @RequestMapping(value = "/wx/shouhuo", method = RequestMethod.GET) + @ResponseBody + public AjaxResult shouhuo( + HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value = "shouhuoNo", required = false) String shouhuoNo, + @RequestParam(value = "openId") String openId, + @RequestParam(value = "orderNo") String orderNo) { + AjaxResult ajaxResult = new AjaxResult(); + // 如果有收货码 判断收货码是否正确 + TbOrderRef orderRef = new TbOrderRef(); + orderRef.setOrderNo(orderNo); + orderRef.setRefType("SHOU_HUO_NO"); + orderRef = mybatisDao.selectOneByModel(orderRef); + // 判断输入的收货码是否正确 + if (StringUtilsExt.isBlank(shouhuoNo) + || (StringUtilsExt.isNotBlank(shouhuoNo) && shouhuoNo + .equals(orderRef.getRefValue()))) { + return this.bindService.orderShouhuo(openId, orderNo, shouhuoNo, + ajaxResult); + } + else { + ajaxResult.setMessage("收货码不正确。"); + ajaxResult.setResult(0); + return ajaxResult; + } + } + + /** + * 收货码请求 + */ + @RequestMapping(value = "/wx/shouhuoRequest", method = RequestMethod.GET) + @ResponseBody + public boolean shouhuoRequest(HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value = "phone") String phone, + @RequestParam(value = "openId") String openId, + @RequestParam(value = "orderNo") String orderNo) { + logger.info("请求的订单编号:", orderNo); + TbReceivingCodeRequest receivingCodeRequest = new TbReceivingCodeRequest(); + receivingCodeRequest.setOrderNo(orderNo); + receivingCodeRequest.setRequestPhone(phone); + CdExpressMember expressMember = new CdExpressMember(); + expressMember.setPhone(phone); + List expressMembers = mybatisDao + .selectByModel(expressMember); + if (expressMembers != null && expressMembers.size() > 0) { + CdExpressMember expressMember2 = expressMembers.get(0); + receivingCodeRequest.setRequestUser(expressMember2.getMemberName()); + receivingCodeRequest.setRequestTime(mybatisDao.getSysdate()); + receivingCodeRequest.setRequestExpressId(expressMember2 + .getCdExpressId()); + } + this.mybatisDao.save(receivingCodeRequest); + return true; + } + + /** + * 二次配送 + */ + @RequestMapping(value = "/wx/twoPeiSong", method = RequestMethod.GET) + @ResponseBody + public boolean twoPeiSong(HttpServletRequest request, + HttpServletResponse response, + @RequestParam(value = "phone") String phone, + @RequestParam(value = "orderNo") String orderNo) { + TbOrder order = new TbOrder(); + order.setOrderNo(orderNo); + order = mybatisDao.selectOneByModel(order); + // 二次配送 + order.setOrderStatus("8"); + mybatisDao.save(order); + return true; + } + + @Autowired + OrderService orderService; + + /** + * 拒绝收货 + * + * @param returnOrder + * @param bindingResult + * @return + */ + @RequestMapping(value = "/wx/refuse", method = RequestMethod.GET) + @Log(actionName = "拒绝收货") + @ResponseBody + public AjaxResult refuse(@RequestParam(value = "orderNo") String orderNo, + @RequestParam(value = "phone") String phone, + @RequestParam(value = "expressId") Integer expressId) { + AjaxResult ajaxResult = returnOrderService.noShouhuo(orderNo, phone, expressId); + return ajaxResult; + } + + + /** + * 新增部分退货订单 + * + * @param returnOrder + * @param bindingResult + * @return + */ + @RequestMapping(value = "/wx/returnOrderEvent", method = RequestMethod.POST) + @Log(actionName = "微信回调接口-订单退货") + @ResponseBody + public AjaxResult returnOrderEvent(@RequestParam(value = "orderNo") String orderNo, + @RequestParam(value = "itemIds") String itemIds) { + AjaxResult ajaxResult = returnOrderService.returnOrder(orderNo, itemIds); + return ajaxResult; + } + + /** + * 退货 快递员收货功能 + * + * @param returnOrder + * @param bindingResult + * @return + */ + @RequestMapping(value = "/wx/shouhuoReturn", method = RequestMethod.GET) + @Log(actionName = "退货 快递员收货") + @ResponseBody + public AjaxResult shouhuoReturn(@RequestParam(value = "orderNo") String orderNo, + @RequestParam(value = "phone") String phone, + @RequestParam(value = "expressId") int expressId) { + AjaxResult ajaxResult = returnOrderService.shouhuoReturn(orderNo, phone, expressId); + return ajaxResult; + } + +} diff --git a/src/main/java/com/xmomen/module/wx/controller/UserInfoController.java b/src/main/java/com/xmomen/module/wx/controller/UserInfoController.java new file mode 100644 index 0000000..ff1f756 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/controller/UserInfoController.java @@ -0,0 +1,66 @@ +package com.xmomen.module.wx.controller; + +import java.util.HashMap; +import java.util.Map; + +import com.xmomen.module.wx.util.Auth2Handler; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.base.mapper.MemberMapper; +import com.xmomen.module.base.model.MemberModel; +import com.xmomen.module.wx.model.AjaxResult; +import com.xmomen.module.wx.model.UserInfoModel; +import com.xmomen.module.wx.model.WeixinUserInfo; +import com.xmomen.module.wx.service.WeixinApiService; + +@RestController +public class UserInfoController { + + @Autowired + WeixinApiService weixinApiService; + + @Autowired + MybatisDao mybatisDao; + + @RequestMapping(value = "/wx/userInfo", method = RequestMethod.GET) + public AjaxResult getUserInfo(@RequestParam(value = "openId", required = false) String openId, + @RequestParam(value = "accessToken", required = false) String accessToken, + @RequestParam(value = "memberId", required = false) Integer memberId) { + AjaxResult ajaxResult = new AjaxResult(); + UserInfoModel userInfo = new UserInfoModel(); + ajaxResult.setResult(1); + if (!StringUtils.isEmpty(openId)) { + String publicUid = "gh_9248df680cef"; + String accessTokenWechat = weixinApiService.getAccessToken(publicUid); + //获取微信关注的用户信息 + WeixinUserInfo weixinUserInfo = WeixinApiService.getWeixinUserInfo(accessTokenWechat, openId); + + //未关注微信 + if (weixinUserInfo.getSubscribe() == 0) { + //获取网页授权的微信信息 + weixinUserInfo = Auth2Handler.getNoGuanzhuWeixinUserInfo(accessToken, openId); + } + + if (weixinUserInfo != null && !StringUtils.isEmpty(weixinUserInfo.getNickname())) { + userInfo.setName(weixinUserInfo.getNickname()); + userInfo.setHeadimgurl(weixinUserInfo.getHeadimgurl()); + } + + Map map = new HashMap(); + map.put("id", memberId); + MemberModel memberModel = mybatisDao.getSqlSessionTemplate().selectOne(MemberMapper.MemberMapperNameSpace + "getMemberList", map); + if (memberModel != null) { + userInfo.setName(memberModel.getName()); + userInfo.setPhone(memberModel.getPhoneNumber()); + } + } + ajaxResult.setContent(userInfo); + return ajaxResult; + } +} diff --git a/src/main/java/com/xmomen/module/wx/controller/WxAdviceController.java b/src/main/java/com/xmomen/module/wx/controller/WxAdviceController.java new file mode 100644 index 0000000..eadf702 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/controller/WxAdviceController.java @@ -0,0 +1,32 @@ +package com.xmomen.module.wx.controller; + +import com.xmomen.module.advice.model.AdviceModel; +import com.xmomen.module.advice.service.AdviceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 获取最新快报咨询 + * + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-3-29 0:27:52 + */ +@RestController +@RequestMapping(value = "/wx/advice") +public class WxAdviceController { + + @Autowired + AdviceService adviceService; + + + /** + * 获取最新的快报 + */ + @RequestMapping(value = "/getLastNew", method = RequestMethod.GET) + public List getLastNew() { + return adviceService.getAdviceModelList(); + } +} diff --git a/src/main/java/com/xmomen/module/wx/controller/WxMemberAddressController.java b/src/main/java/com/xmomen/module/wx/controller/WxMemberAddressController.java new file mode 100644 index 0000000..0210347 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/controller/WxMemberAddressController.java @@ -0,0 +1,122 @@ +package com.xmomen.module.wx.controller; + +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.page.Page; +import com.xmomen.module.base.constant.AppConstants; +import com.xmomen.module.logger.Log; +import com.xmomen.module.member.model.MemberAddressQuery; +import com.xmomen.module.member.model.MemberAddressModel; +import com.xmomen.module.member.service.MemberAddressService; + +import org.apache.commons.io.IOUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; +import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; +import org.jeecgframework.poi.exception.excel.ExcelImportException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import javax.validation.Valid; +import java.io.Serializable; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-3-29 0:27:52 + */ +@RestController +@RequestMapping(value = "/wx/memberAddress") +public class WxMemberAddressController { + + @Autowired + MemberAddressService memberAddressService; + + /** + * 客户地址列表 + * + * @param limit 每页结果数 + * @param offset 页码 + * @param id 主键 + * @param ids 主键数组 + * @param excludeIds 不包含主键数组 + * @return Page 客户地址领域分页对象 + */ + @RequestMapping(method = RequestMethod.GET) + public List getMemberAddressList(@RequestParam(value = "id", required = false) String id, + @RequestParam(value = "ids", required = false) String[] ids, + @RequestParam(value = "memberId", required = true) String memberId, + @RequestParam(value = "excludeIds", required = false) String[] excludeIds) { + MemberAddressQuery memberAddressQuery = new MemberAddressQuery(); + memberAddressQuery.setId(id); + memberAddressQuery.setExcludeIds(excludeIds); + memberAddressQuery.setIds(ids); + memberAddressQuery.setCdMemberId(memberId); + return memberAddressService.getMemberAddressModels(memberAddressQuery); + } + + /** + * 查询单个客户地址 + * + * @param id 主键 + * @return MemberAddressModel 客户地址领域对象 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public MemberAddressModel getMemberAddressById(@PathVariable(value = "id") String id) { + return memberAddressService.getOneMemberAddressModel(id); + } + + /** + * 新增客户地址 + * + * @param memberAddressModel 新增对象参数 + * @return MemberAddressModel 客户地址领域对象 + */ + @RequestMapping(method = RequestMethod.POST) + public MemberAddressModel createMemberAddress(@RequestBody @Valid MemberAddressModel memberAddressModel) { + return memberAddressService.createMemberAddress(memberAddressModel); + } + + /** + * 更新客户地址 + * + * @param id 主键 + * @param memberAddressModel 更新对象参数 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + public void updateMemberAddress(@PathVariable(value = "id") String id, + @RequestBody @Valid MemberAddressModel memberAddressModel) { + memberAddressService.updateMemberAddress(memberAddressModel); + } + + /** + * 删除客户地址 + * + * @param id 主键 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + public void deleteMemberAddress(@PathVariable(value = "id") String id) { + memberAddressService.deleteMemberAddress(id); + } + + /** + * 删除客户地址 + * + * @param ids 主键 + */ + @RequestMapping(method = RequestMethod.DELETE) + public void deleteMemberAddresss(@RequestParam(value = "ids") String[] ids) { + memberAddressService.deleteMemberAddress(ids); + } + + +} diff --git a/src/main/java/com/xmomen/module/wx/controller/WxMemberController.java b/src/main/java/com/xmomen/module/wx/controller/WxMemberController.java new file mode 100644 index 0000000..0edfac0 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/controller/WxMemberController.java @@ -0,0 +1,44 @@ +package com.xmomen.module.wx.controller; + +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.service.MemberService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * @author tanxinzheng + * @version 1.0.0 + * @date 2017-3-29 0:27:52 + */ +@RestController +@RequestMapping(value = "/wx/member") +public class WxMemberController { + + @Autowired + MemberService memberSercvice; + + + /** + * 更新客户手机号 + * + * @param memberId member主键 + * @param mobile 新手机号码 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + public void updateMemberAddress(@PathVariable("id") Integer memberId, + @RequestParam("mobile") String mobile) { + memberSercvice.updateMobile(memberId, mobile); + } + + /** + * 查询单个客户 + * + * @param id 主键 + * @return CdMember 客户领域对象 + */ + @RequestMapping(value = "/{id}", method = RequestMethod.GET) + public CdMember getMemberById(@PathVariable(value = "id") String id) { + return memberSercvice.getOneMemberModel(id); + } + +} diff --git a/src/main/java/com/xmomen/module/wx/entity/WxAppSetting.java b/src/main/java/com/xmomen/module/wx/entity/WxAppSetting.java new file mode 100644 index 0000000..0678971 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/entity/WxAppSetting.java @@ -0,0 +1,320 @@ +package com.xmomen.module.wx.entity; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; +import java.util.Date; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Version; + +@Entity +@Table(name = "wx_app_setting") +public class WxAppSetting extends BaseMybatisModel { + /** + * UID + */ + private String uid; + + /** + * 公众号UID + */ + private String publicUid; + + /** + * 是否是服务号 + */ + private Integer isServiceAccount; + + /** + * AppId + */ + private String appId; + + /** + * AppSecret + */ + private String appSecret; + + /** + * Token + */ + private String token; + + /** + * 公司名称 + */ + private String companyName; + + /** + * 应用名称 + */ + private String applicationName; + + /** + * 自定义回复程序集 + */ + private String customAssemblyName; + + /** + * 自定义回复类名称 + */ + private String customClassName; + + /** + * 跳转域名 + */ + private String domainName; + + /** + * 记录状态 + */ + private Integer recordStatus; + + /** + * 有效的凭证 + */ + private String accessToken; + + /** + * 凭证有效时间 + */ + private Integer expiresIn; + + /** + * 凭证最后取得时间 + */ + private Date lastGetTime; + + /** + * 备注 + */ + private String remark; + + @Column(name = "uid") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + if(uid == null){ + removeValidField("uid"); + return; + } + addValidField("uid"); + } + + @Column(name = "public_uid") + public String getPublicUid() { + return publicUid; + } + + public void setPublicUid(String publicUid) { + this.publicUid = publicUid; + if(publicUid == null){ + removeValidField("publicUid"); + return; + } + addValidField("publicUid"); + } + + @Column(name = "is_service_account") + public Integer getIsServiceAccount() { + return isServiceAccount; + } + + public void setIsServiceAccount(Integer isServiceAccount) { + this.isServiceAccount = isServiceAccount; + if(isServiceAccount == null){ + removeValidField("isServiceAccount"); + return; + } + addValidField("isServiceAccount"); + } + + @Column(name = "app_id") + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + if(appId == null){ + removeValidField("appId"); + return; + } + addValidField("appId"); + } + + @Column(name = "app_secret") + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + if(appSecret == null){ + removeValidField("appSecret"); + return; + } + addValidField("appSecret"); + } + + @Column(name = "token") + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + if(token == null){ + removeValidField("token"); + return; + } + addValidField("token"); + } + + @Column(name = "company_name") + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + if(companyName == null){ + removeValidField("companyName"); + return; + } + addValidField("companyName"); + } + + @Column(name = "application_name") + public String getApplicationName() { + return applicationName; + } + + public void setApplicationName(String applicationName) { + this.applicationName = applicationName; + if(applicationName == null){ + removeValidField("applicationName"); + return; + } + addValidField("applicationName"); + } + + @Column(name = "custom_assembly_name") + public String getCustomAssemblyName() { + return customAssemblyName; + } + + public void setCustomAssemblyName(String customAssemblyName) { + this.customAssemblyName = customAssemblyName; + if(customAssemblyName == null){ + removeValidField("customAssemblyName"); + return; + } + addValidField("customAssemblyName"); + } + + @Column(name = "custom_class_name") + public String getCustomClassName() { + return customClassName; + } + + public void setCustomClassName(String customClassName) { + this.customClassName = customClassName; + if(customClassName == null){ + removeValidField("customClassName"); + return; + } + addValidField("customClassName"); + } + + @Column(name = "domain_name") + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + if(domainName == null){ + removeValidField("domainName"); + return; + } + addValidField("domainName"); + } + + @Column(name = "record_status") + public Integer getRecordStatus() { + return recordStatus; + } + + public void setRecordStatus(Integer recordStatus) { + this.recordStatus = recordStatus; + if(recordStatus == null){ + removeValidField("recordStatus"); + return; + } + addValidField("recordStatus"); + } + + @Column(name = "access_token") + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + if(accessToken == null){ + removeValidField("accessToken"); + return; + } + addValidField("accessToken"); + } + + @Column(name = "expires_in") + public Integer getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(Integer expiresIn) { + this.expiresIn = expiresIn; + if(expiresIn == null){ + removeValidField("expiresIn"); + return; + } + addValidField("expiresIn"); + } + + @Column(name = "last_get_time") + public Date getLastGetTime() { + return lastGetTime; + } + + public void setLastGetTime(Date lastGetTime) { + this.lastGetTime = lastGetTime; + if(lastGetTime == null){ + removeValidField("lastGetTime"); + return; + } + addValidField("lastGetTime"); + } + + @Column(name = "remark") + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + if(remark == null){ + removeValidField("remark"); + return; + } + addValidField("remark"); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wx/entity/mapper/WxAppSettingMapper.java b/src/main/java/com/xmomen/module/wx/entity/mapper/WxAppSettingMapper.java new file mode 100644 index 0000000..0ca9b31 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/entity/mapper/WxAppSettingMapper.java @@ -0,0 +1,16 @@ +package com.xmomen.module.wx.entity.mapper; + +import com.xmomen.framework.mybatis.mapper.MybatisMapper; +import com.xmomen.module.wx.entity.WxAppSetting; +import com.xmomen.module.wx.entity.WxAppSettingExample; +import org.apache.ibatis.annotations.Param; + +public interface WxAppSettingMapper extends MybatisMapper { + int countByExample(WxAppSettingExample example); + + int deleteByExample(WxAppSettingExample example); + + int insertSelective(WxAppSetting record); + + int updateByExampleSelective(@Param("record") WxAppSetting record, @Param("example") WxAppSettingExample example); +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wx/model/AccessTokenOAuth.java b/src/main/java/com/xmomen/module/wx/model/AccessTokenOAuth.java new file mode 100644 index 0000000..2c4e346 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/AccessTokenOAuth.java @@ -0,0 +1,73 @@ +package com.xmomen.module.wx.model; + +/** + * 网页授权接口调用凭证 + */ +public class AccessTokenOAuth { + + /** + * 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同 + */ + private String accessToken; + + /** + * access_token接口调用凭证超时时间,单位(秒) + */ + private int expiresIn; + + /** + * 用户刷新access_token + */ + private String refreshToken; + + /** + * 用户唯一标识 + */ + private String openid; + + /** + * 用户授权的作用域,使用逗号(,)分隔 + */ + private String scope; + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public int getExpiresIn() { + return expiresIn; + } + + public void setExpiresIn(int expiresIn) { + this.expiresIn = expiresIn; + } + + public String getRefreshToken() { + return refreshToken; + } + + public void setRefreshToken(String refreshToken) { + this.refreshToken = refreshToken; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getScope() { + return scope; + } + + public void setScope(String scope) { + this.scope = scope; + } + +} diff --git a/src/main/java/com/xmomen/module/wx/model/MessageBase.java b/src/main/java/com/xmomen/module/wx/model/MessageBase.java new file mode 100644 index 0000000..b95f80e --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/MessageBase.java @@ -0,0 +1,60 @@ +package com.xmomen.module.wx.model; + +import java.io.Serializable; + +/** + * 微信Message抽象类 + */ +public abstract class MessageBase implements Serializable { + /** + * 接收者 + */ + private String toUserName; + + /** + * 发送者 + */ + private String fromUserName; + + /** + * 消息类型 + */ + private String msgType; + + /** + * 消息创建时间 + */ + private long createTime; + + public String getToUserName() { + return toUserName; + } + + public void setToUserName(String toUserName) { + this.toUserName = toUserName; + } + + public String getFromUserName() { + return fromUserName; + } + + public void setFromUserName(String fromUserName) { + this.fromUserName = fromUserName; + } + + public String getMsgType() { + return msgType; + } + + public void setMsgType(String msgType) { + this.msgType = msgType; + } + + public long getCreateTime() { + return createTime; + } + + public void setCreateTime(long createTime) { + this.createTime = createTime; + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/PayAttachModel.java b/src/main/java/com/xmomen/module/wx/model/PayAttachModel.java new file mode 100644 index 0000000..9703e2f --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/PayAttachModel.java @@ -0,0 +1,22 @@ +package com.xmomen.module.wx.model; + +import lombok.Data; + +public @Data class PayAttachModel { + + public PayAttachModel() {} + + public PayAttachModel(int type, String tradeNo, String tradeId, String openId, int memberId) { + this.type = type; + this.tradeNo = tradeNo; + this.tradeId = tradeId; + this.openId = openId; + this.memberId = memberId; + } + String tradeId; + int type; + String tradeNo; + String openId; + int memberId; + +} diff --git a/src/main/java/com/xmomen/module/wx/model/messageTemplate/CustomSendMessageTextModel.java b/src/main/java/com/xmomen/module/wx/model/messageTemplate/CustomSendMessageTextModel.java new file mode 100644 index 0000000..782ee31 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/messageTemplate/CustomSendMessageTextModel.java @@ -0,0 +1,42 @@ +package com.xmomen.module.wx.model.messageTemplate; + +/** + * 客服发送消息模板BEAN (文本消息) + * { + * "touser":"OPENID", + * "msgtype":"text", + * "text": + * { + * "content":"Hello World" + * } + * } + */ +public class CustomSendMessageTextModel extends CustomSendMessageBaseModel { + + + Text text; + + public Text getText() { + return text; + } + + public void setContent(String content) { + Text text = new Text(); + text.setContent(content); + this.text = text; + } + + //内容类 + public class Text { + String content; + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + } + +} diff --git a/src/main/java/com/xmomen/module/wx/model/messageTemplate/PushMessageTemplateModel.java b/src/main/java/com/xmomen/module/wx/model/messageTemplate/PushMessageTemplateModel.java new file mode 100644 index 0000000..6a22062 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/messageTemplate/PushMessageTemplateModel.java @@ -0,0 +1,232 @@ +package com.xmomen.module.wx.model.messageTemplate; + +import java.io.Serializable; + +/** + * 模板消息bean + */ +public class PushMessageTemplateModel implements Serializable { + + /** + * 接收者 + */ + private String touser; + + /** + * 模板ID + */ + private String template_id; + + /** + * 跳转URL + */ + private String url; + + /** + * 标题颜色 + */ + private String topcolor; + + /** + * 数据类 内部类 + */ + private Data data; + + public String getTouser() { + return touser; + } + + public void setTouser(String touser) { + this.touser = touser; + } + + public String getTemplate_id() { + return template_id; + } + + public void setTemplate_id(String template_id) { + this.template_id = template_id; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getTopcolor() { + return topcolor; + } + + public void setTopcolor(String topcolor) { + this.topcolor = topcolor; + } + + /** + * 第一个参数 + * + * @param color 值颜色 + * @param value 值 + * @return + */ + public First setFirst(String color, String value) { + First first = new First(); + first.setColor(color); + first.setValue(value); + return first; + } + + /** + * 第二个填充参数 + * + * @param color 值颜色 + * @param value 值 + * @return + */ + public Keyword1 setKeyword1(String color, String value) { + Keyword1 key1 = new Keyword1(); + key1.setColor(color); + key1.setValue(value); + return key1; + } + + /** + * 第三个填充参数 + * + * @param color 值颜色 + * @param value 值 + * @return + */ + public Keyword2 setKeyword2(String color, String value) { + Keyword2 key2 = new Keyword2(); + key2.setColor(color); + key2.setValue(value); + return key2; + } + + /** + * 第四个填充参数 + * + * @param color 值颜色 + * @param value 值 + * @return + */ + public Remark setRemark(String color, String value) { + Remark remark = new Remark(); + remark.setColor(color); + remark.setValue(value); + return remark; + } + + /** + * 设置数据 + * + * @param first + * @param key1 + * @param key2 + * @param remark + */ + public void setDataVal(First first, Keyword1 key1, Keyword2 key2, Remark remark) { + Data d = new Data(); + d.setFirst(first); + d.setKeyword1(key1); + d.setKeyword2(key2); + d.setRemark(remark); + setData(d); + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + /** + * 参数基类 + */ + class BaseParam { + + private String value; + + private String color; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + } + + class First extends BaseParam { + } + + class Keyword1 extends BaseParam { + } + + class Keyword2 extends BaseParam { + } + + class Remark extends BaseParam { + } + + /** + * 数据封装类 + */ + class Data { + + private First first; + + private Keyword1 keyword1; + + private Keyword2 keyword2; + + private Remark remark; + + public First getFirst() { + return first; + } + + public void setFirst(First first) { + this.first = first; + } + + public Keyword1 getKeyword1() { + return keyword1; + } + + public void setKeyword1(Keyword1 keyword1) { + this.keyword1 = keyword1; + } + + public Keyword2 getKeyword2() { + return keyword2; + } + + public void setKeyword2(Keyword2 keyword2) { + this.keyword2 = keyword2; + } + + public Remark getRemark() { + return remark; + } + + public void setRemark(Remark remark) { + this.remark = remark; + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wx/model/messageTemplate/WeixinResponseStatusModel.java b/src/main/java/com/xmomen/module/wx/model/messageTemplate/WeixinResponseStatusModel.java new file mode 100644 index 0000000..265f0c6 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/messageTemplate/WeixinResponseStatusModel.java @@ -0,0 +1,46 @@ +package com.xmomen.module.wx.model.messageTemplate; + +/** + * 微信服务器请求回复封装类 + */ +public class WeixinResponseStatusModel { + + /** + * 状态码 + */ + private int errcode; + + /** + * 消息 + */ + private String errmsg; + + /** + * 消息id + */ + private String msgid; + + public int getErrcode() { + return errcode; + } + + public void setErrcode(int errcode) { + this.errcode = errcode; + } + + public String getErrmsg() { + return errmsg; + } + + public void setErrmsg(String errmsg) { + this.errmsg = errmsg; + } + + public String getMsgid() { + return msgid; + } + + public void setMsgid(String msgid) { + this.msgid = msgid; + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventLocation.java b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventLocation.java new file mode 100644 index 0000000..1ee1f5b --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventLocation.java @@ -0,0 +1,64 @@ +package com.xmomen.module.wx.model.requestModel.event; + + +import com.xmomen.module.wx.constants.RequestEventEnum; + +import java.io.Serializable; + +/** + * 上报地理位置事件 + * + * + * + * 123456789 + * + * + * 23.137466 + * 113.352425 + * 119.385040 + * + */ +public class RequestMessageEventLocation extends RequestMessageEventBase implements Serializable { + + /** + * 地理位置纬度 + */ + private double latitude; + /** + * 地理位置经度 + */ + private double longitude; + /** + * 地理位置精度 + */ + private double precision; + + @Override + public String getEvent() { + return RequestEventEnum.LOCATION.toString(); + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + public double getPrecision() { + return precision; + } + + public void setPrecision(double precision) { + this.precision = precision; + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventScan.java b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventScan.java new file mode 100644 index 0000000..d374c11 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventScan.java @@ -0,0 +1,29 @@ +package com.xmomen.module.wx.model.requestModel.event; + +import java.io.Serializable; + +/** + * 扫描二维码事件 + * + * + * 123456789 + * + * + * + * + * + */ +public class RequestMessageEventScan extends RequestMessageEventBase implements Serializable { + /** + * 二维码的ticket,可用来换取二维码图片 + */ + private String ticket; + + public String getTicket() { + return ticket; + } + + public void setTicket(String ticket) { + this.ticket = ticket; + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventScanCode.java b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventScanCode.java new file mode 100644 index 0000000..e3bd7c6 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventScanCode.java @@ -0,0 +1,44 @@ +package com.xmomen.module.wx.model.requestModel.event; + + +import java.io.Serializable; + +/** + * 自定义菜单二维码扫描请求封装类 + */ +public class RequestMessageEventScanCode extends RequestMessageEventBase implements Serializable { + //扫描信息 + private ScanCodeInfo scanCodeInfo; + + public ScanCodeInfo getScanCodeInfo() { + return scanCodeInfo; + } + + public void setScanCodeInfo(ScanCodeInfo scanCodeInfo) { + this.scanCodeInfo = scanCodeInfo; + } + + public class ScanCodeInfo { + //扫描类型,一般是qrcode + private String scanType; + + //扫描结果,即二维码对应的字符串信息 + private String scanResult; + + public String getScanType() { + return scanType; + } + + public void setScanType(String scanType) { + this.scanType = scanType; + } + + public String getScanResult() { + return scanResult; + } + + public void setScanResult(String scanResult) { + this.scanResult = scanResult; + } + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventTemplateSendJobFinish.java b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventTemplateSendJobFinish.java new file mode 100644 index 0000000..f6c0e60 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/event/RequestMessageEventTemplateSendJobFinish.java @@ -0,0 +1,44 @@ +package com.xmomen.module.wx.model.requestModel.event; + +import java.io.Serializable; + +/** + * 在模版消息发送任务完成后,微信服务器会将是否送达成功作为通知,发送到开发者中心中填写的服务器配置地址中。 + * + * + * + * 1395658920 + * + * + * 200163836 + * + * + */ +public class RequestMessageEventTemplateSendJobFinish extends RequestMessageEventBase implements Serializable { + + /** + * 发送状态 + */ + private String status; + + /** + * 消息ID + */ + private String msgID; + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMsgID() { + return msgID; + } + + public void setMsgID(String msgID) { + this.msgID = msgID; + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageLink.java b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageLink.java new file mode 100644 index 0000000..ae425a1 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageLink.java @@ -0,0 +1,51 @@ +package com.xmomen.module.wx.model.requestModel.message; + + +import java.io.Serializable; + +/** + * 链接消息 + */ +public class RequestMessageLink extends RequestMessageBase implements Serializable { + + /** + * 消息标题 + */ + private String title; + + /** + * 消息描述 + */ + private String description; + + /** + * 消息链接 + */ + private String url; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + description = description; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + url = url; + } + + +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageText.java b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageText.java new file mode 100644 index 0000000..de45e01 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageText.java @@ -0,0 +1,33 @@ +package com.xmomen.module.wx.model.requestModel.message; + + +import java.io.Serializable; + +/** + * 文本消息 + * + * + * + * 1348831860 + * + * + * 1234567890123456 + * + */ +public class RequestMessageText extends RequestMessageBase implements Serializable { + + /** + * 文本消息内容 + */ + private String content; + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageVideo.java b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageVideo.java new file mode 100644 index 0000000..d2dc69a --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageVideo.java @@ -0,0 +1,35 @@ +package com.xmomen.module.wx.model.requestModel.message; + +import java.io.Serializable; + +/** + * 视频消息 + */ +public class RequestMessageVideo extends RequestMessageBase implements Serializable { + + /** + * 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。 + */ + private String mediaId; + + /** + * 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。 + */ + private String thumbMediaId; + + public String getMediaId() { + return mediaId; + } + + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + + public String getThumbMediaId() { + return thumbMediaId; + } + + public void setThumbMediaId(String thumbMediaId) { + this.thumbMediaId = thumbMediaId; + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageVoice.java b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageVoice.java new file mode 100644 index 0000000..d6f32cd --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/requestModel/message/RequestMessageVoice.java @@ -0,0 +1,36 @@ +package com.xmomen.module.wx.model.requestModel.message; + + +import java.io.Serializable; + +/** + * 语音消息 + */ +public class RequestMessageVoice extends RequestMessageBase implements Serializable { + + /** + * 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。 + */ + private String mediaId; + + /** + * 语音格式,如amr,speex等 + */ + private String format; + + public String getMediaId() { + return mediaId; + } + + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageImage.java b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageImage.java new file mode 100644 index 0000000..192bdbb --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageImage.java @@ -0,0 +1,43 @@ +package com.xmomen.module.wx.model.responseModel; + + +/** + * 回复图片消息 + * 格式如下: + * + * + * + * 12345678 + * + * + * + * + * + */ +public class ResponseMessageImage extends ResponseMessageBase { + + private Image image; + + public Image getImage() { + return image; + } + + public void setImage(Image image) { + this.image = image; + } + + class Image { + /** + * 通过上传多媒体文件,得到的id + */ + private String mediaId; + + public String getMediaId() { + return mediaId; + } + + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + } +} diff --git a/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageMusic.java b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageMusic.java new file mode 100644 index 0000000..6530bbc --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageMusic.java @@ -0,0 +1,84 @@ +package com.xmomen.module.wx.model.responseModel; + + +/** + * 回复音乐消息 + * 格式: + * + * + * + * 12345678 + * + * + * <![CDATA[TITLE]]> + * + * + * + * + * + * + */ +public class ResponseMessageMusic extends ResponseMessageBase { + + private Music music; + + public Music getMusic() { + return music; + } + + public void setMusic(Music music) { + this.music = music; + } + + class Music { + /** + * 音乐名称 + */ + private String title; + /** + * 音乐描述 + */ + private String description; + /** + * 音乐链接 + */ + private String musicUrl; + /** + * 高质量音乐链接,WIFI环境优先使用该链接播放音乐 + */ + private String hQMusicUrl; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getMusicUrl() { + return musicUrl; + } + + public void setMusicUrl(String musicUrl) { + this.musicUrl = musicUrl; + } + + public String gethQMusicUrl() { + return hQMusicUrl; + } + + public void sethQMusicUrl(String hQMusicUrl) { + this.hQMusicUrl = hQMusicUrl; + } + } + +} diff --git a/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageText.java b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageText.java new file mode 100644 index 0000000..050fe11 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageText.java @@ -0,0 +1,30 @@ +package com.xmomen.module.wx.model.responseModel; + + +/** + * 回复文本消息 + * 格式 + * + * + * + * 12345678 + * + * + * + */ +public class ResponseMessageText extends ResponseMessageBase { + + /** + * 回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示) + */ + private String content; + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + +} diff --git a/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageVoice.java b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageVoice.java new file mode 100644 index 0000000..16b0396 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/model/responseModel/ResponseMessageVoice.java @@ -0,0 +1,42 @@ +package com.xmomen.module.wx.model.responseModel; + +/** + * 回复语音消息 + * 格式: + * + * + * + * 12345678 + * + * + * + * + * + */ +public class ResponseMessageVoice extends ResponseMessageBase { + + private Voice voice; + + public Voice getVoice() { + return voice; + } + + public void setVoice(Voice voice) { + this.voice = voice; + } + + class Voice { + /** + * 通过上传多媒体文件,得到的id + */ + private String mediaId; + + public String getMediaId() { + return mediaId; + } + + public void setMediaId(String mediaId) { + this.mediaId = mediaId; + } + } +} diff --git a/src/main/java/com/xmomen/module/wx/module/address/controller/AddressController.java b/src/main/java/com/xmomen/module/wx/module/address/controller/AddressController.java new file mode 100644 index 0000000..f93d531 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/address/controller/AddressController.java @@ -0,0 +1,72 @@ +package com.xmomen.module.wx.module.address.controller; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.member.entity.MemberAddress; +import com.xmomen.module.member.service.MemberAddressService; +import com.xmomen.module.order.entity.TbOrder; +import com.xmomen.module.order.model.WxCreateOrder; +import com.xmomen.module.order.service.OrderService; +import com.xmomen.module.wx.module.order.model.MyOrderQuery; +import com.xmomen.module.wx.module.order.model.OrderDetailModel; +import com.xmomen.module.wx.module.order.model.OrderModel; +import com.xmomen.module.wx.module.order.service.MyOrderService; +import org.apache.shiro.SecurityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; + +@Controller +public class AddressController { + + @Autowired + MemberAddressService memberAddressService; + + @Autowired + OrderService orderService; + + @Autowired + MybatisDao mybatisDao; + + /** + * 默认收货地址 + * + * @param addressId 收货地址 + * @return + */ + @RequestMapping(value = "/wx/defaultAddress", method = RequestMethod.GET) + @ResponseBody + public Boolean defaultAddress( + @RequestParam(value = "addressId") String addressId) { + memberAddressService.defaultAddress(addressId); + return Boolean.TRUE; + } + + + /** + * 获取默认收货地址 + * + * @param memberId 客户ID + * @return + */ + @RequestMapping(value = "/wx/getDefaultAddress", method = RequestMethod.GET) + @ResponseBody + public MemberAddress getDefaultAddress( + @RequestParam(value = "memberId") Integer memberId) { + MemberAddress memberAddress = new MemberAddress(); + memberAddress.setCdMemberId(memberId); + memberAddress.setIsDefault(true); + List memberAddresses = this.mybatisDao.selectByModel(memberAddress); + if (memberAddresses.size() > 0) { + return memberAddresses.get(0); + } + return null; + } +} diff --git a/src/main/java/com/xmomen/module/wx/module/bind/controller/BindMemberController.java b/src/main/java/com/xmomen/module/wx/module/bind/controller/BindMemberController.java new file mode 100644 index 0000000..d490e32 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/bind/controller/BindMemberController.java @@ -0,0 +1,31 @@ +package com.xmomen.module.wx.module.bind.controller; + +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.base.service.MemberService; +import com.xmomen.module.order.service.OrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +@Controller +public class BindMemberController { + + @Autowired + MemberService memberSercvice; + + @Autowired + OrderService orderService; + + @RequestMapping(value = "/wx/bindMember", method = RequestMethod.PUT) + @ResponseBody + public CdMember bindMember( + @RequestParam(value = "mobile") String mobile, + @RequestParam(value = "name") String name, + @RequestParam(value = "openId") String openId, + @RequestParam(value = "memberId") Integer memberId) throws Exception { + return memberSercvice.bindMember(mobile, name, openId, memberId); + } +} diff --git a/src/main/java/com/xmomen/module/wx/module/cart/controller/CartController.java b/src/main/java/com/xmomen/module/wx/module/cart/controller/CartController.java new file mode 100644 index 0000000..acf50b2 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/cart/controller/CartController.java @@ -0,0 +1,50 @@ +package com.xmomen.module.wx.module.cart.controller; + +import java.util.List; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.xmomen.framework.web.exceptions.ArgumentValidException; +import com.xmomen.module.product.model.ProductModel; +import com.xmomen.module.product.model.ProductQuery; +import com.xmomen.module.wx.module.cart.model.UpdateCartModel; +import com.xmomen.module.wx.module.cart.service.CartService; + +@Controller +@RequestMapping(value = "/wx") +public class CartController { + + @Autowired + private CartService cartService; + + @ResponseBody + @RequestMapping(value ="/cart", method = RequestMethod.GET) + public List getCartProduct(@RequestParam(value = "memberId", required = true) Integer memberId) { + ProductQuery productQuery = new ProductQuery(); + productQuery.setMemberCode(String.valueOf(memberId)); + return cartService.getProductsInCart(productQuery); + } + + @ResponseBody + @RequestMapping(value ="/cart", method = RequestMethod.POST) + public Boolean updateCart(@RequestBody @Valid UpdateCartModel updateCartModel){ + cartService.change(String.valueOf(updateCartModel.getMemberId()), updateCartModel.getItemId(), updateCartModel.getItemQty()); + return Boolean.TRUE; + } + + @ResponseBody + @RequestMapping(value = "/cart/sync", method = RequestMethod.GET) + public Boolean syncCart(@RequestParam(value = "memberId", required = true) Integer memberId) { + cartService.syncToDB(String.valueOf(memberId)); + return Boolean.TRUE; + } +} diff --git a/src/main/java/com/xmomen/module/wx/module/cart/entity/TbCartItem.java b/src/main/java/com/xmomen/module/wx/module/cart/entity/TbCartItem.java new file mode 100644 index 0000000..0730d15 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/cart/entity/TbCartItem.java @@ -0,0 +1,81 @@ +package com.xmomen.module.wx.module.cart.entity; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; + +@Entity +@Table(name = "tb_shopping_cart") +public class TbCartItem extends BaseMybatisModel { + + private String id; + + private String userToken; + + private Integer itemId; + + private Integer itemNumber; + + @Column(name = "ID") + @Id + @GeneratedValue(generator = "UUIDGenerator") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "USER_TOKEN") + public String getUserToken() { + return userToken; + } + + public void setUserToken(String userToken) { + this.userToken = userToken; + if(userToken == null) { + removeValidField("userToken"); + return; + } + addValidField("userToken"); + } + + @Column(name = "ITEM_ID") + public Integer getItemId() { + return itemId; + } + + public void setItemId(Integer itemId) { + this.itemId = itemId; + if(itemId == null){ + removeValidField("itemId"); + return; + } + addValidField("itemId"); + } + + @Column(name = "ITEM_NUMBER") + public Integer getItemNumber() { + return itemNumber; + } + + public void setItemNumber(Integer itemNumber) { + this.itemNumber = itemNumber; + if(itemNumber == null){ + removeValidField("itemNumber"); + return; + } + addValidField("itemNumber"); + } + +} diff --git a/src/main/java/com/xmomen/module/wx/module/cart/mapper/CartMapper.java b/src/main/java/com/xmomen/module/wx/module/cart/mapper/CartMapper.java new file mode 100644 index 0000000..a51ad6f --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/cart/mapper/CartMapper.java @@ -0,0 +1,5 @@ +package com.xmomen.module.wx.module.cart.mapper; + +public interface CartMapper { + public static final String CART_MAPPER_NAMESPACE = "com.xmomen.module.wx.module.cart.mapper.CartMapper."; +} diff --git a/src/main/java/com/xmomen/module/wx/module/cart/mapper/CartMapper.xml b/src/main/java/com/xmomen/module/wx/module/cart/mapper/CartMapper.xml new file mode 100644 index 0000000..15c62be --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/cart/mapper/CartMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + DELETE FROM TB_SHOPPING_CART WHERE USER_TOKEN = #{userToken} + AND ITEM_ID in + #{id} + + + + + + UPDATE TB_SHOPPING_CART set ITEM_NUMBER = #{itemNumber} + WHERE USER_TOKEN = #{userToken} AND ITEM_ID = #{itemId} + + + INSERT INTO TB_SHOPPING_CART(ID, USER_TOKEN, ITEM_ID, ITEM_NUMBER) + VALUES((SELECT replace(uuid(), '-', '') from dual), #{userToken}, #{itemId}, #{itemNumber}) + + + + + + UPDATE tb_shopping_cart set user_token = #{newMemberId} where user_token = #{oldMemberId} + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wx/module/cart/model/CartItemQuery.java b/src/main/java/com/xmomen/module/wx/module/cart/model/CartItemQuery.java new file mode 100644 index 0000000..6974579 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/cart/model/CartItemQuery.java @@ -0,0 +1,9 @@ +package com.xmomen.module.wx.module.cart.model; + +import lombok.Data; + +public @Data class CartItemQuery { + + private String userToken; + private Integer itemId; +} diff --git a/src/main/java/com/xmomen/module/wx/module/cart/service/CartService.java b/src/main/java/com/xmomen/module/wx/module/cart/service/CartService.java new file mode 100644 index 0000000..9be053c --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/cart/service/CartService.java @@ -0,0 +1,362 @@ +package com.xmomen.module.wx.module.cart.service; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.product.model.ProductModel; +import com.xmomen.module.product.model.ProductQuery; +import com.xmomen.module.product.service.ProductService; +import com.xmomen.module.wx.module.cart.entity.TbCartItem; +import com.xmomen.module.wx.module.cart.mapper.CartMapper; +import com.xmomen.module.wx.module.cart.model.CartItemModel; +import com.xmomen.module.wx.module.cart.model.CartItemQuery; +import com.xmomen.module.wx.module.cart.model.CartMetadata; +import com.xmomen.module.wx.module.cart.model.CartModel; +import com.xmomen.module.wx.util.Constant; + +@Service +public class CartService { + + private ConcurrentHashMap cartCache = new ConcurrentHashMap(); + + @Autowired + private ProductService productService; + + @Autowired + private MybatisDao mybatisDao; + + public List getCartItemsByUserToken(String userToken) { + CartItemQuery cartItemQuery = new CartItemQuery(); + cartItemQuery.setUserToken(userToken); + return mybatisDao.getSqlSessionTemplate().selectList(CartMapper.CART_MAPPER_NAMESPACE + "getCartItemList", cartItemQuery); + } + + public List getProductsInCart(ProductQuery productQuery) { + List items = this.getCartItems(productQuery.getMemberCode()); + Map itemNumberMap = new HashMap(); + for(CartItemModel cartItem: items) { + itemNumberMap.put(String.valueOf(cartItem.getItemId()), cartItem.getItemQty()); + } + ArrayList productIds = new ArrayList(); + for(CartItemModel item: items) { + productIds.add(item.getItemId()); + } + productQuery.setProductIds(productIds); + List products = productService.getProducts(productIds); + + for(ProductModel product: products) { + String itemId = String.valueOf(product.getId()); + product.setItemQty(itemNumberMap.get(itemId)); + } + return products; + } + + public void removeItems(String userToken, List itemIds) { + CartModel cartModel = cartCache.get(userToken); + if(CollectionUtils.isEmpty(itemIds)) return; + if(cartModel != null && !CollectionUtils.isEmpty(cartModel.getItems())) { + List cartItems = cartModel.getItems(); + boolean changed = false; + for(CartMetadata item: cartItems) { + if(itemIds.contains(item.getItemId())) { + item.setItemQty(0); + changed = true; + } + } + if(changed) cartModel.setStatus(Constant.DIRTY); + this.syncToDB(userToken); + } + } + + public List getCartItems(String userToken, boolean alwaysSync) { + CartModel cartModel = cartCache.get(userToken); + ArrayList cartItems = new ArrayList(); + boolean needCreate = false; + + // 从数据库中那购物车信息,如果内存中没有则合并到内存中,否则以内存中为主(数目) + List persistentCartItems = null; + if(alwaysSync) { + persistentCartItems = this.getCartItemsByUserToken(userToken); + } else { + if(cartModel == null || CollectionUtils.isEmpty(cartModel.getItems())) { + persistentCartItems = this.getCartItemsByUserToken(userToken); + } + } + CopyOnWriteArrayList cartItemMetas = null; + Map memoryCartMap = new HashMap(); + if(cartModel != null && cartModel.getItems() != null) { + for(CartMetadata cartMetadata: cartModel.getItems()) { + memoryCartMap.put(String.valueOf(cartMetadata.getItemId()), cartMetadata); + } + } + if(cartModel != null) { + cartItemMetas = cartModel.getItems(); + } + if(!CollectionUtils.isEmpty(persistentCartItems)) { + //同步数据到内存中 + //TODO 当数据量很大的时候也要同步进内存吗?恶意大量数据可能会造成内存问题 + for(CartItemModel cartItem: persistentCartItems) { + String itemId = String.valueOf(cartItem.getItemId()); + if(!memoryCartMap.containsKey(itemId)) { + CartMetadata pCartItem = this.newCartMetadata(userToken, cartItem.getItemId(), cartItem.getItemQty()); + if(cartItemMetas == null) { + cartItemMetas = new CopyOnWriteArrayList(); + if(cartModel == null) { + needCreate = true; + } else { + cartModel.setItems(cartItemMetas); + } + } + cartItemMetas.add(pCartItem); + } + } + } + if(needCreate) { + CartModel newCartModel = new CartModel(); + newCartModel.setStatus(Constant.CLEAN); + newCartModel.setSyncTime(new Timestamp(new Date().getTime())); + newCartModel.setUserToken(userToken); + newCartModel.setItems(cartItemMetas); + cartCache.put(userToken, newCartModel); + } + if(cartItemMetas != null) { + for(CartMetadata metaData: cartItemMetas) { + if(!Constant.DELETE.equalsIgnoreCase(metaData.getStatus())) { + CartItemModel cartItem = new CartItemModel(); + cartItem.setItemId(metaData.getItemId()); + cartItem.setItemQty(metaData.getItemQty()); + cartItems.add(cartItem); + } + } + } + return cartItems; + } + + public List getCartItems(String userToken) { + return getCartItems(userToken, false); + } + public void modify(CartModel newCartModel) throws Exception { + String userToken = newCartModel.getUserToken(); + if(StringUtils.isEmpty(userToken)) throw new Exception("userToken不能为空!"); + CartModel sourceCart = cartCache.get(userToken); + if(CollectionUtils.isEmpty(newCartModel.getItems())) { + // 如果购物车被清空 + if(sourceCart != null) { + if(this.compareAndUpdate(sourceCart, newCartModel)) { + sourceCart.setStatus(Constant.DIRTY); + }; + } + return; + } + if(sourceCart == null) { + sourceCart = new CartModel(); + sourceCart.setUserToken(newCartModel.getUserToken()); + sourceCart.setItems(new CopyOnWriteArrayList()); + cartCache.put(userToken, sourceCart); + } + if(this.compareAndUpdate(sourceCart, newCartModel)) { + sourceCart.setStatus(Constant.DIRTY); + } + } + + public void change(String userToken, Integer itemId, Integer number) { + CartModel sourceCart = cartCache.get(userToken); + if(number == null) { + Integer newNumber = 1; + if(sourceCart != null && !CollectionUtils.isEmpty(sourceCart.getItems())) { + List cartItems = sourceCart.getItems(); + for(CartMetadata cartItem: cartItems) { + if(cartItem.getItemId().equals(itemId)) { + newNumber += cartItem.getItemQty(); + break; + } + } + } + this.change(userToken, itemId, newNumber); + } else if(number >= 0) { + if(sourceCart == null) { + CartModel cartModel = new CartModel(); + cartModel.setUserToken(userToken); + CopyOnWriteArrayList items = new CopyOnWriteArrayList(); + cartModel.setItems(items); + CartMetadata metadata = this.newCartMetadata(userToken, itemId, number); + items.add(metadata); + cartModel.setStatus(Constant.DIRTY); + cartCache.put(userToken, cartModel); + } else { + CopyOnWriteArrayList items = sourceCart.getItems(); + if(items == null) { + items = new CopyOnWriteArrayList(); + sourceCart.setItems(items); + } + boolean newAdd = true; + boolean updated = false; + for(CartMetadata item: items) { + if(item.getItemId().equals(itemId)) { + newAdd = false; + if(number >= 0) { + updated = item.setItemQty(number); + } + } + } + if(newAdd) { + CartMetadata metadata = this.newCartMetadata(userToken, itemId, number); + if(metadata != null) { + updated = items.add(metadata); + } + } + if(updated) { + sourceCart.setStatus(Constant.DIRTY); + } + } + } + } + + /** + * @param cartModel 缓存中的原始购物车信息 + * @param newCartModel 需要更新的购物车信息 + * @return + */ + private Boolean compareAndUpdate(CartModel cartModel, CartModel newCartModel) { + if(cartModel == null || newCartModel == null) return Boolean.FALSE; + if(cartModel.getItems() == null) { + cartModel.setItems(new CopyOnWriteArrayList()); + } + CopyOnWriteArrayList sourceItems = cartModel.getItems(); + CopyOnWriteArrayList newItems = newCartModel.getItems() == null ? new CopyOnWriteArrayList() : newCartModel.getItems(); + Map sourceItemMap = new HashMap(); + Map sourceItemModelMap = new HashMap(); + Boolean updated = Boolean.FALSE; + for(CartMetadata item: sourceItems) { + String itemId = String.valueOf(item.getItemId()); + sourceItemMap.put(itemId, item.getItemQty()); + sourceItemModelMap.put(itemId, item); + } + Set itemIds = new HashSet(); + for(CartMetadata item: newItems) { + itemIds.add(String.valueOf(item.getItemId())); + String itemId = String.valueOf(item.getItemId()); + CartMetadata sourceItem = sourceItemModelMap.get(itemId); + if(sourceItem == null) { + sourceItem = this.newCartMetadata(newCartModel.getUserToken(), item.getItemId(), item.getItemQty()); + if(sourceItem != null) { + updated = sourceItems.add(sourceItem); + } + } else { + updated = sourceItem.setItemQty(item.getItemQty()); + } + } + // 再检查哪些物品被删除了 + for(CartMetadata sourceItem : sourceItems) { + if(!itemIds.contains(String.valueOf(sourceItem.getItemId()))) { + updated = sourceItem.setItemQty(0); + } + } + return updated; + } + + public CartMetadata newCartMetadata(String userToken, Integer itemId, Integer number) { + if(number == null || number <= 0) return null; + CartMetadata metadata = new CartMetadata(); + metadata.setUserToken(userToken); + metadata.setItemId(itemId); + metadata.setItemQty(number); + return metadata; + } + + + /** + * 同步当前用户的购物车信息到购物车 + * @param userToken + */ + public void syncToDB(String userToken) { + if(StringUtils.isEmpty(userToken)) return; + CartModel cartModel = cartCache.get(userToken); + if(cartModel != null && Constant.DIRTY.equalsIgnoreCase(cartModel.getStatus())) { + List cartMetadatas = cartModel.getItems(); + List beRemovedList = new ArrayList(); + List beUpdatedList = new ArrayList(); + for(CartMetadata cartMetadata: cartMetadatas) { + if(Constant.DELETE.equalsIgnoreCase(cartMetadata.getStatus())) { + beRemovedList.add(cartMetadata); + } else if(Constant.MODIFY.equalsIgnoreCase(cartMetadata.getStatus())) { + beUpdatedList.add(cartMetadata); + } + } + // 删除标记为删除的物品,然后再从内存中删除 + if(beRemovedList.size() > 0) { + List itemIds = new ArrayList(); + for(CartMetadata cartItem: beRemovedList){ + itemIds.add(cartItem.getItemId()); + } + Map params = new HashMap(); + params.put("userToken", userToken); + params.put("itemIds", itemIds); + mybatisDao.getSqlSessionTemplate().delete(CartMapper.CART_MAPPER_NAMESPACE + "removeCartItems", params); + cartMetadatas.removeAll(beRemovedList); + } + + // 同步更新字段的DB,然后将状态设置为clean + for(CartMetadata updatedCartItem: beUpdatedList) { + // UPDATE to DB(saveOrUpdate) + CartItemQuery cartItemQuery = new CartItemQuery(); + cartItemQuery.setUserToken(userToken); + cartItemQuery.setItemId(updatedCartItem.getItemId()); + List persistentCartItems = mybatisDao.getSqlSessionTemplate().selectList(CartMapper.CART_MAPPER_NAMESPACE + "getCartItemList", cartItemQuery); + TbCartItem tbCartItem = new TbCartItem(); + tbCartItem.setItemId(updatedCartItem.getItemId()); + tbCartItem.setUserToken(updatedCartItem.getUserToken()); + tbCartItem.setItemNumber(updatedCartItem.getItemQty()); + if(!CollectionUtils.isEmpty(persistentCartItems)) { + tbCartItem.setId(persistentCartItems.get(0).getId()); + } + mybatisDao.getSqlSessionTemplate().insert(CartMapper.CART_MAPPER_NAMESPACE + "saveOrUpdateItem", tbCartItem); + updatedCartItem.setStatus(Constant.CLEAN); + updatedCartItem.setUpdateTime(null); + } + cartModel.setStatus(Constant.CLEAN); + cartModel.setSyncTime(new Timestamp(new Date().getTime())); + } + } + + /** + * 同步内存中的数据到数据库 + */ + public void batchSyncToDB() { + //TODO + } + + public void copyCartInfo(String oldMemberId, String newMemberId) { + if(StringUtils.isEmpty(oldMemberId) || StringUtils.isEmpty(newMemberId)) { + throw new IllegalArgumentException("memberId不能为空. oldMemberId:" + oldMemberId + ", newMemberId:" + newMemberId); + } + CartModel cartInfo = cartCache.get(oldMemberId); + if(cartInfo != null) { + cartInfo.setUserToken(newMemberId); + cartCache.put(newMemberId, cartInfo); + cartCache.remove(oldMemberId); + } + updateCartOwner(oldMemberId, newMemberId); + } + + public void updateCartOwner(String oldMemberId, String newMemberId) { + Map info = new HashMap(); + info.put("oldMemberId", oldMemberId); + info.put("newMemberId", newMemberId); + mybatisDao.getSqlSessionTemplate().update(CartMapper.CART_MAPPER_NAMESPACE + "copyCartItems", info); + } +} diff --git a/src/main/java/com/xmomen/module/wx/module/coupon/model/CouponQueryModel.java b/src/main/java/com/xmomen/module/wx/module/coupon/model/CouponQueryModel.java new file mode 100644 index 0000000..242c87f --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/coupon/model/CouponQueryModel.java @@ -0,0 +1,10 @@ +package com.xmomen.module.wx.module.coupon.model; + +import lombok.Data; + +public @Data class CouponQueryModel { + + private Integer couponType; + private Integer cdUserId; + private Boolean useable; +} diff --git a/src/main/java/com/xmomen/module/wx/module/order/controller/MyOrderController.java b/src/main/java/com/xmomen/module/wx/module/order/controller/MyOrderController.java new file mode 100644 index 0000000..b6decc9 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/order/controller/MyOrderController.java @@ -0,0 +1,123 @@ +package com.xmomen.module.wx.module.order.controller; + +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.xmomen.module.order.entity.TbOrder; +import com.xmomen.module.order.model.WxCreateOrder; +import com.xmomen.module.order.service.OrderService; +import com.xmomen.module.product.model.ProductModel; +import com.xmomen.module.wx.module.order.model.MyOrderQuery; +import com.xmomen.module.wx.module.order.model.OrderDetailModel; +import com.xmomen.module.wx.module.order.model.OrderModel; +import com.xmomen.module.wx.module.order.model.PayOrderModel; +import com.xmomen.module.wx.module.order.service.MyOrderService; + +@Controller +@RequestMapping(value = "/wx/order") +public class MyOrderController { + + @Autowired + MyOrderService myOrderService; + + @Autowired + OrderService orderService; + + /** + * + * @param memberId + * @param status 0-未支付 1 待收货 + * @param minCreateTime 昨日 + * @param maxCreateTime 今日 + * @return + */ + @RequestMapping(method = RequestMethod.GET) + @ResponseBody + public List myOrder(@RequestParam(value = "memberId") String memberId, + @RequestParam(value = "status", required = false) Integer status, + @RequestParam(value = "minOrderTime", required = false) Date minCreateTime, + @RequestParam(value = "maxOrderTime", required = false) Date maxCreateTime) { + MyOrderQuery myOrderQuery = new MyOrderQuery(); + myOrderQuery.setStatus(status); + myOrderQuery.setMinOrderTime(minCreateTime); + myOrderQuery.setMaxOrderTime(maxCreateTime); + myOrderQuery.setUserId(memberId); + return myOrderService.myOrder(myOrderQuery); + } + + @RequestMapping(value = "/{orderId:[0-9]+}", method = RequestMethod.GET) + @ResponseBody + public OrderDetailModel orderDetail(@PathVariable("orderId") Integer orderId) { + MyOrderQuery myOrderQuery = new MyOrderQuery(); + myOrderQuery.setOrderId(orderId); + return myOrderService.getOrderDetail(myOrderQuery); + } + + @RequestMapping(method = RequestMethod.POST) + @ResponseBody + public TbOrder createModel(@RequestBody @Valid WxCreateOrder createOrder) throws Exception { + return orderService.createWxOrder(createOrder); + } + + @RequestMapping(value = "/confirm", method = RequestMethod.POST) + @ResponseBody + public Boolean confirmOrder(@RequestParam("id") Integer orderId, @RequestParam("memberId") Integer memberId) throws Exception { + return myOrderService.confirmReceiveOrder(orderId, memberId); + } + + @RequestMapping(value = "/cancel", method = RequestMethod.POST) + @ResponseBody + public Boolean cancelOrder(@RequestParam("id") Integer orderId, @RequestParam("memberId") Integer memberId) throws Exception { + return myOrderService.cancelOrder(orderId, memberId); + } + + @RequestMapping(value = "/pay", method = RequestMethod.POST) + @ResponseBody + public Boolean payOrder(@RequestBody PayOrderModel payOrderModel) throws Exception { + return orderService.payWxOrder(payOrderModel); + } + + @RequestMapping(value = "/coupon", method = RequestMethod.GET) + @ResponseBody + public List getCouponItems(@RequestParam("couponNo") String couponNo) { + return orderService.getCouponItems(couponNo); + } + + /** + * + * @param memberId + * @return {"待装箱":7,"待付款":6,"待采购":2,"待配送":2,"配送中":1} + */ + @RequestMapping(value = "/statistic", method = RequestMethod.GET) + @ResponseBody + public Map getOrderStatistic(@RequestParam("memberId") Integer memberId) { + return myOrderService.getOrderStatistic(memberId); + } + + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() { + + @Override + public void setAsText(String text) throws IllegalArgumentException { + super.setValue(new Date(Long.valueOf(text))); + } + + }); + } +} diff --git a/src/main/java/com/xmomen/module/wx/module/order/mapper/MyOrderMapper.java b/src/main/java/com/xmomen/module/wx/module/order/mapper/MyOrderMapper.java new file mode 100644 index 0000000..10db494 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/order/mapper/MyOrderMapper.java @@ -0,0 +1,5 @@ +package com.xmomen.module.wx.module.order.mapper; + +public interface MyOrderMapper { + public static final String MY_ORDER_MAPPER_NAMESPACE = "com.xmomen.module.wx.module.order.mapper.MyOrderMapper."; +} diff --git a/src/main/java/com/xmomen/module/wx/module/order/mapper/MyOrderMapper.xml b/src/main/java/com/xmomen/module/wx/module/order/mapper/MyOrderMapper.xml new file mode 100644 index 0000000..350d113 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/order/mapper/MyOrderMapper.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wx/module/order/model/OrderStatisticModel.java b/src/main/java/com/xmomen/module/wx/module/order/model/OrderStatisticModel.java new file mode 100644 index 0000000..02d485e --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/order/model/OrderStatisticModel.java @@ -0,0 +1,12 @@ +package com.xmomen.module.wx.module.order.model; + +import lombok.Data; + +public @Data class OrderStatisticModel { + + private Integer orderStatus; + private String orderStatusDesc; + private Integer count; + private Integer payStatus; + private String payStatusDesc; +} diff --git a/src/main/java/com/xmomen/module/wx/module/order/service/MyOrderService.java b/src/main/java/com/xmomen/module/wx/module/order/service/MyOrderService.java new file mode 100644 index 0000000..5060051 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/order/service/MyOrderService.java @@ -0,0 +1,23 @@ +package com.xmomen.module.wx.module.order.service; + +import java.util.List; +import java.util.Map; + +import com.xmomen.module.wx.module.order.model.MyOrderQuery; +import com.xmomen.module.wx.module.order.model.OrderDetailModel; +import com.xmomen.module.wx.module.order.model.OrderModel; +import com.xmomen.module.wx.pay.model.PayResData; + +public interface MyOrderService { + + List myOrder(MyOrderQuery myOrderQuery); + OrderDetailModel getOrderDetail(MyOrderQuery myOrderQuery); + + Boolean confirmReceiveOrder(Integer orderId, Integer userId) throws Exception; + + Boolean cancelOrder(Integer orderId, Integer userId) throws Exception; + + Map getOrderStatistic(Integer userId); + + void payCallBack(PayResData payResData) throws Exception; +} diff --git a/src/main/java/com/xmomen/module/wx/module/order/service/impl/MyOrderServiceImpl.java b/src/main/java/com/xmomen/module/wx/module/order/service/impl/MyOrderServiceImpl.java new file mode 100644 index 0000000..a27bb2c --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/module/order/service/impl/MyOrderServiceImpl.java @@ -0,0 +1,274 @@ +package com.xmomen.module.wx.module.order.service.impl; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.alibaba.fastjson.JSON; +import com.xmomen.framework.exception.BusinessException; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.base.service.CouponService; +import com.xmomen.module.order.entity.TbOrder; +import com.xmomen.module.order.service.OrderService; +import com.xmomen.module.resource.service.ResourceUtilsService; +import com.xmomen.module.wx.model.PayAttachModel; +import com.xmomen.module.wx.module.order.mapper.MyOrderMapper; +import com.xmomen.module.wx.module.order.model.MyOrderQuery; +import com.xmomen.module.wx.module.order.model.OrderDetailModel; +import com.xmomen.module.wx.module.order.model.OrderModel; +import com.xmomen.module.wx.module.order.model.OrderProductItem; +import com.xmomen.module.wx.module.order.model.OrderStatisticModel; +import com.xmomen.module.wx.module.order.service.MyOrderService; +import com.xmomen.module.wx.pay.entity.TbPayRecord; +import com.xmomen.module.wx.pay.model.PayResData; +import com.xmomen.module.wx.pay.model.RefundResData; +import com.xmomen.module.wx.pay.model.WeixinPayRecord; +import com.xmomen.module.wx.pay.service.PayRecordService; +import com.xmomen.module.wx.service.WeixinApiService; + +@Service +public class MyOrderServiceImpl implements MyOrderService { + + static Logger log = LoggerFactory.getLogger(MyOrderServiceImpl.class); + + @Autowired + MybatisDao mybatisDao; + + @Autowired + OrderService orderService; + + @Autowired + CouponService couponService; + + @Autowired + PayRecordService payRecordService; + + @Autowired + WeixinApiService weixinApiService; + + @Override + public List myOrder(MyOrderQuery myOrderQuery) { + List orders = mybatisDao.getSqlSessionTemplate().selectList(MyOrderMapper.MY_ORDER_MAPPER_NAMESPACE + "selectOrders", myOrderQuery); + if (orders != null) { + for (OrderModel order : orders) { + List items = order.getProducts(); + if (items != null) { + for (OrderProductItem item : items) { + if (StringUtils.isEmpty(item.getPicUrl())) { + item.setPicUrl(ResourceUtilsService.getDefaultPicPath()); + } + else { + item.setPicUrl(ResourceUtilsService.getWholeHttpPath(item.getPicUrl())); + } + } + } + String orderStatus = order.getOrderStatus(); + if(orderCanCancel(orderStatus)) { + order.setCanCancel(true); + } else { + order.setCanCancel(false); + } + } + } + return orders; + } + + @Override + public OrderDetailModel getOrderDetail(MyOrderQuery myOrderQuery) { + if (myOrderQuery.getOrderId() == null && StringUtils.isEmpty(myOrderQuery.getOrderNo())) { + return null; + } + OrderDetailModel orderDetail = mybatisDao.getSqlSessionTemplate().selectOne(MyOrderMapper.MY_ORDER_MAPPER_NAMESPACE + "getOrderDetail", myOrderQuery); + if (orderDetail != null) { + List items = orderDetail.getProducts(); + for (OrderProductItem item : items) { + if (StringUtils.isEmpty(item.getPicUrl())) { + item.setPicUrl(ResourceUtilsService.getDefaultPicPath()); + } + else { + item.setPicUrl(ResourceUtilsService.getWholeHttpPath(item.getPicUrl())); + } + } + String orderStatus = orderDetail.getOrderStatus(); + if(orderCanCancel(orderStatus)) { + orderDetail.setCanCancel(true); + } else { + orderDetail.setCanCancel(false); + } + } + return orderDetail; + } + + @Override + public Boolean confirmReceiveOrder(Integer orderId, Integer userId) throws Exception { + TbOrder tbOrder = mybatisDao.selectByPrimaryKey(TbOrder.class, orderId); + if (tbOrder == null || userId == null || !String.valueOf(userId).equals(tbOrder.getMemberCode())) { + throw new BusinessException("订单不存在或者不属于当前用户!"); + } + tbOrder.setOrderStatus("6");//确认本人收货 + tbOrder.setShouHuoDate(new Date()); + mybatisDao.update(tbOrder); + return Boolean.TRUE; + } + + /** + * 未配送的订单才可以取消,如下 + * 0-等待付款 1-待采购 + */ + @Override + @Transactional + public Boolean cancelOrder(Integer orderId, Integer userId) throws Exception { + TbOrder tbOrder = mybatisDao.selectByPrimaryKey(TbOrder.class, orderId); + if (tbOrder == null || userId == null || !String.valueOf(userId).equals(tbOrder.getMemberCode())) { + throw new BusinessException("订单不存在或者不属于当前用户!"); + } + if(tbOrder.getOrderStatus() != null && tbOrder.getOrderStatus().equals(9)) { + throw new BusinessException("已取消的订单不能重复取消!"); + } + /*Integer payStatus = tbOrder.getPayStatus(); + if (payStatus == 1) throw new IllegalArgumentException("订单已支付,不能取消!");*/ + String orderStatus = tbOrder.getOrderStatus(); + List allowCancelStatus = new ArrayList(); + allowCancelStatus.add("0"); + allowCancelStatus.add("1"); + if(allowCancelStatus.contains(orderStatus)) { + if(tbOrder.getOrderType().equals(1) || tbOrder.getOrderType().equals(2)) { + //卡类和券类已经支付过了,卡类支付直接把钱退到卡里,券类订单则让券继续可用 + orderService.cancelOrder(orderId); + } else if(tbOrder.getOrderType().equals(0)) { + //如果为常规订单 + Integer payStatus = tbOrder.getPayStatus(); + if(payStatus != null && payStatus.equals(1)) { + Integer paymentMode = tbOrder.getPaymentMode(); + if(paymentMode != null && paymentMode.equals(4)) { + ////货到付款,即物流公司代收的付款方式,将支付状态回退为0 + tbOrder.setPayStatus(0); + } else if (paymentMode != null && paymentMode.equals(8)) { + //微信类支付 + String tradeNo = tbOrder.getOrderNo(); + RefundResData refundResData = weixinApiService.refund(tradeNo, tbOrder.getTotalAmount().multiply(new BigDecimal(100)).intValue()); + if(refundResData == null) { + throw new BusinessException("微信退款失败"); + } + } + //其他第三方的支付,标注为取消状态,由batch统一去处理 + } + tbOrder.setOrderStatus("9");//取消订单 + mybatisDao.update(tbOrder); + } + } else { + throw new BusinessException("已经处理的订单不能取消!"); + } + return Boolean.TRUE; + } + + @Override + public Map getOrderStatistic(Integer userId) { + Map result = new HashMap(); + List orderStatisticModels = mybatisDao.getSqlSessionTemplate().selectList(MyOrderMapper.MY_ORDER_MAPPER_NAMESPACE + "getOrderStatistic", userId); + int notPayCount = 0; + if(!CollectionUtils.isEmpty(orderStatisticModels)) { + for(OrderStatisticModel orderStatisticModel: orderStatisticModels) { + if(orderStatisticModel.getPayStatus() != 1) { + notPayCount += orderStatisticModel.getCount(); + } + String statusDesc = orderStatisticModel.getOrderStatusDesc(); + if(statusDesc != null && !orderStatisticModel.getOrderStatus().equals(0)) { + if(result.containsKey(statusDesc)) { + result.put(statusDesc, result.get(statusDesc) + orderStatisticModel.getCount()); + } else { + result.put(statusDesc, orderStatisticModel.getCount()); + } + } + } + } + if(notPayCount > 0) { + result.put("待付款", notPayCount); + } + return result; + } + + @Override + @Transactional + public void payCallBack(PayResData payResData) throws Exception { + String attachement = payResData.getAttach(); + PayAttachModel payAttachModel = JSON.parseObject(attachement, PayAttachModel.class); + String tradeId = payAttachModel.getTradeId(); + String tradeNo = payAttachModel.getTradeNo(); + int memberId = payAttachModel.getMemberId(); + TbPayRecord payRecordQuery = new TbPayRecord(); + payRecordQuery.setTradeNo(tradeNo); + List tbPayRecords = payRecordService.getTbpayRecordListByRecord(payRecordQuery); + if(!CollectionUtils.isEmpty(tbPayRecords)) { + for(TbPayRecord tbPayRecord: tbPayRecords) { + String thePayRecordId = tbPayRecord.getId(); + if(tradeId.equals(thePayRecordId)) { + //处理微信可能存在的重复通知 + return; + } + if(tbPayRecord.getTradeType()!=null && tbPayRecord.getTradeType().equals(1) + && tbPayRecord.getCompleteTime() != null) { + //同一个微信订单已支付(出现的请况很少) + log.error("出现订单重复支付的记录:tradeNo=" + tradeNo + ", tradeId=" + tradeId + + ", transactionId=" + payResData.getTransaction_id() + ", openId=" + payAttachModel.getOpenId()); + return; + } + } + } + + double totalFee = payResData.getTotal_fee(); + if(1 == payAttachModel.getType()) { + //微信支付 + String orderNo = payAttachModel.getTradeNo(); + TbOrder query = new TbOrder(); + query.setOrderNo(orderNo); + TbOrder tbOrder = mybatisDao.selectOneByModel(query); + if(tbOrder == null) { + log.error("订单不存在! --" + orderNo); + throw new BusinessException("订单不存在!"); + } + //设置为微信支付类型 + tbOrder.setPaymentMode(8); + tbOrder.setPayStatus(1); + tbOrder.setOrderStatus("1"); + mybatisDao.update(tbOrder); + } else if(2 == payAttachModel.getType()) { + //卡充值 + String couponNo = payAttachModel.getTradeNo(); + couponService.cardWxRecharge(couponNo, new BigDecimal(totalFee/100), memberId); + } else { + log.error("支付类型只能为1或2 -- type是" + payAttachModel.getType()); + throw new IllegalArgumentException("支付类型只能为1或2"); + } + //插入支付记录到tb_pay_record表 + TbPayRecord tbPayRecord = new TbPayRecord(); + tbPayRecord.setId(tradeId); + tbPayRecord.setTradeNo(payAttachModel.getTradeNo()); + tbPayRecord.setTradeType(payAttachModel.getType()); + tbPayRecord.setTotalFee(new BigDecimal(totalFee/100)); + tbPayRecord.setTransactionId(payResData.getTransaction_id()); + tbPayRecord.setTransactionTime(new Date()); + tbPayRecord.setCompleteTime(new Date()); + tbPayRecord.setOpenId(payAttachModel.getOpenId()); + + payRecordService.insert(tbPayRecord); + } + + private boolean orderCanCancel(String orderStatus) { + if("0".equals(orderStatus) || "1".equals(orderStatus)) { + return true; + } + return false; + } +} diff --git a/src/main/java/com/xmomen/module/wx/pay/common/RandomStringGenerator.java b/src/main/java/com/xmomen/module/wx/pay/common/RandomStringGenerator.java new file mode 100644 index 0000000..a00a2e7 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/common/RandomStringGenerator.java @@ -0,0 +1,39 @@ +package com.xmomen.module.wx.pay.common; + +import java.util.Random; + +/** + * User: rizenguo + * Date: 2014/10/29 + * Time: 14:18 + */ +public class RandomStringGenerator { + + /** + * 获取一定长度的随机字符串 + * @param length 指定字符串长度 + * @return 一定长度的字符串 + */ + public static String getRandomStringByLength(int length) { + String base = "abcdefghijklmnopqrstuvwxyz0123456789"; + Random random = new Random(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < length; i++) { + int number = random.nextInt(base.length()); + sb.append(base.charAt(number)); + } + return sb.toString(); + } + + public static String getRandomNumberStrByLength(int length) { + String base = "0123456789"; + Random random = new Random(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < length; i++) { + int number = random.nextInt(base.length()); + sb.append(base.charAt(number)); + } + return sb.toString(); + } + +} diff --git a/src/main/java/com/xmomen/module/wx/pay/common/Signature.java b/src/main/java/com/xmomen/module/wx/pay/common/Signature.java new file mode 100644 index 0000000..08bfb40 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/common/Signature.java @@ -0,0 +1,123 @@ +package com.xmomen.module.wx.pay.common; + +import org.apache.log4j.Logger; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Map; + +/** + * User: rizenguo + * Date: 2014/10/29 + * Time: 15:23 + */ +public class Signature { + //打log用 + private static final Logger logger = Logger.getLogger(Signature.class); + /** + * 签名算法 + * @param o 要参与签名的数据对象 + * @return 签名 + * @throws IllegalAccessException + */ + public static String getSign(Object o) throws IllegalAccessException { + ArrayList list = new ArrayList(); + Class cls = o.getClass(); + Field[] fields = cls.getDeclaredFields(); + for (Field f : fields) { + f.setAccessible(true); + if (f.get(o) != null && f.get(o) != "") { + list.add(f.getName() + "=" + f.get(o) + "&"); + } + } + int size = list.size(); + String [] arrayToSort = list.toArray(new String[size]); + Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER); + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < size; i ++) { + sb.append(arrayToSort[i]); + } + String result = sb.toString(); + result += "key=" + Configure.getKey(); + logger.info("Sign Before MD5:" + result); + result = MD5.MD5Encode(result).toUpperCase(); + logger.info("Sign Result:" + result); + return result; + } + + public static String getSign(Map map){ + ArrayList list = new ArrayList(); + for(Map.Entry entry:map.entrySet()){ + if(entry.getValue()!=""){ + list.add(entry.getKey() + "=" + entry.getValue() + "&"); + } + } + int size = list.size(); + String [] arrayToSort = list.toArray(new String[size]); + Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER); + StringBuilder sb = new StringBuilder(); + for(int i = 0; i < size; i ++) { + sb.append(arrayToSort[i]); + } + String result = sb.toString(); + result += "key=" + Configure.getKey(); + logger.info("Sign Before MD5:" + result); + result = MD5.MD5Encode(result,"UTF-8").toUpperCase(); + logger.info("Sign Result:" + result); + return result; + } + + /** + * 从API返回的XML数据里面重新计算一次签名 + * @param responseString API返回的XML数据 + * @return 新鲜出炉的签名 + * @throws ParserConfigurationException + * @throws IOException + * @throws SAXException + */ + public static String getSignFromResponseString(String responseString) throws IOException, SAXException, ParserConfigurationException { + Map map = XMLParser.getMapFromXML(responseString); + //清掉返回数据对象里面的Sign数据(不能把这个数据也加进去进行签名),然后用签名算法进行签名 + map.put("sign",""); + //将API返回的数据根据用签名算法进行计算新的签名,用来跟API返回的签名进行比较 + return Signature.getSign(map); + } + + /** + * 检验API返回的数据里面的签名是否合法,避免数据在传输的过程中被第三方篡改 + * @param responseString API返回的XML数据字符串 + * @return API签名是否合法 + * @throws ParserConfigurationException + * @throws IOException + * @throws SAXException + */ + public static boolean checkIsSignValidFromResponseString(String responseString) throws ParserConfigurationException, IOException, SAXException { + + Map map = XMLParser.getMapFromXML(responseString); + logger.info(map.toString()); + + String signFromAPIResponse = map.get("sign").toString(); + if(signFromAPIResponse=="" || signFromAPIResponse == null){ + logger.info("API返回的数据签名数据不存在,有可能被第三方篡改!!!"); + return false; + } + logger.info("服务器回包里面的签名是:" + signFromAPIResponse); + //清掉返回数据对象里面的Sign数据(不能把这个数据也加进去进行签名),然后用签名算法进行签名 + map.put("sign",""); + //将API返回的数据根据用签名算法进行计算新的签名,用来跟API返回的签名进行比较 + String signForAPIResponse = Signature.getSign(map); + + if(!signForAPIResponse.equals(signFromAPIResponse)){ + //签名验不过,表示这个API返回的数据有可能已经被篡改了 + logger.info("API返回的数据签名验证不通过,有可能被第三方篡改!!!"); + return false; + } + logger.info("恭喜,API返回的数据签名验证通过!!!"); + return true; + } + +} diff --git a/src/main/java/com/xmomen/module/wx/pay/common/XMLParser.java b/src/main/java/com/xmomen/module/wx/pay/common/XMLParser.java new file mode 100644 index 0000000..c6ef818 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/common/XMLParser.java @@ -0,0 +1,48 @@ +package com.xmomen.module.wx.pay.common; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +/** + * User: rizenguo + * Date: 2014/11/1 + * Time: 14:06 + */ +public class XMLParser { + public static Map getMapFromXML(String xmlString) throws ParserConfigurationException, IOException, SAXException { + + //这里用Dom的方式解析回包的最主要目的是防止API新增回包字段 + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputStream is = Util.getStringStream(xmlString); + Document document = builder.parse(is); + + //获取到document里面的全部结点 + NodeList allNodes = document.getFirstChild().getChildNodes(); + Node node; + Map map = new HashMap(); + int i = 0; + while (i < allNodes.getLength()) { + node = allNodes.item(i); + if (node instanceof Element) { + map.put(node.getNodeName(), node.getTextContent()); + } + i++; + } + return map; + + } + + +} diff --git a/src/main/java/com/xmomen/module/wx/pay/entity/TbPayRecord.java b/src/main/java/com/xmomen/module/wx/pay/entity/TbPayRecord.java new file mode 100644 index 0000000..7f51607 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/entity/TbPayRecord.java @@ -0,0 +1,172 @@ +package com.xmomen.module.wx.pay.entity; + +import java.math.BigDecimal; +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +import com.xmomen.framework.mybatis.model.BaseMybatisModel; + +@Entity +@Table(name = "tb_pay_record") +public class TbPayRecord extends BaseMybatisModel { + + + /** + * 标识符号,为UUID + */ + private String id; + + /** + * 支付的商品标识符 + */ + private String tradeNo; + + /** + * 支付用途 + * 1 - 支付商品价格 2 -卡券类充值 3-退款 + */ + private Integer tradeType; + + /** + * 交易金额,单位为元 + */ + private BigDecimal totalFee; + + /** + * 微信用户openId + */ + private String openId; + + /** + * 支付第三方生成的唯一交易单号标识符 + */ + private String transactionId; + + /** + * 开始交易时间 + */ + private Date transactionTime; + + /** + * 交易完成时间,如果为空,则说明交易失败 + */ + private Date completeTime; + + @Column(name = "ID") + @Id + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + if(id == null){ + removeValidField("id"); + return; + } + addValidField("id"); + } + + @Column(name = "TRADE_NO") + public String getTradeNo() { + return tradeNo; + } + + public void setTradeNo(String tradeNo) { + this.tradeNo = tradeNo; + if(tradeNo == null){ + removeValidField("tradeNo"); + return; + } + addValidField("tradeNo"); + } + + @Column(name = "TRADE_TYPE") + public Integer getTradeType() { + return tradeType; + } + + public void setTradeType(Integer tradeType) { + this.tradeType = tradeType; + if(tradeType == null){ + removeValidField("tradeType"); + return; + } + addValidField("tradeType"); + } + + @Column(name = "TOTAL_FEE") + public BigDecimal getTotalFee() { + return totalFee; + } + + public void setTotalFee(BigDecimal totalFee) { + this.totalFee = totalFee; + if(totalFee == null){ + removeValidField("totalFee"); + return; + } + addValidField("totalFee"); + } + + @Column(name = "OPEN_ID") + public String getOpenId() { + return openId; + } + + public void setOpenId(String openId) { + this.openId = openId; + if(openId == null){ + removeValidField("openId"); + return; + } + addValidField("openId"); + } + + @Column(name = "TRANSACTION_ID") + public String getTransactionId() { + return transactionId; + } + + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + if(transactionId == null){ + removeValidField("transactionId"); + return; + } + addValidField("transactionId"); + } + + @Column(name = "TRANSACTION_TIME") + public Date getTransactionTime() { + return transactionTime; + } + + + public void setTransactionTime(Date transactionTime) { + this.transactionTime = transactionTime; + if(transactionTime == null){ + removeValidField("transactionTime"); + return; + } + addValidField("transactionTime"); + } + + @Column(name = "COMPLETE_TIME") + public Date getCompleteTime() { + return completeTime; + } + + public void setCompleteTime(Date completeTime) { + this.completeTime = completeTime; + if(completeTime == null){ + removeValidField("completeTime"); + return; + } + addValidField("completeTime"); + } +} diff --git a/src/main/java/com/xmomen/module/wx/pay/entity/mapper/PayRecordMapper.xml b/src/main/java/com/xmomen/module/wx/pay/entity/mapper/PayRecordMapper.xml new file mode 100644 index 0000000..bc6b122 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/entity/mapper/PayRecordMapper.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + insert into tb_pay_record + + + ID, + + + TRADE_NO, + + + TRADE_TYPE, + + + TOTAL_FEE, + + + OPEN_ID, + + + TRANSACTION_ID, + + + TRANSACTION_TIME, + + + COMPLETE_TIME, + + + + + #{id,jdbcType=VARCHAR}, + + + #{tradeNo,jdbcType=VARCHAR}, + + + #{tradeType,jdbcType=VARCHAR}, + + + #{tradeType,jdbcType=DECIMAL}, + + + #{openId,jdbcType=VARCHAR}, + + + #{transactionId,jdbcType=VARCHAR}, + + + #{transactionTime,jdbcType=TIMESTAMP}, + + + #{completeTime,jdbcType=TIMESTAMP}, + + + + + + update tb_pay_record set COMPLETE_TIME = #{completeTime,jdbcType=TIMESTAMP}, + TRANSACTION_ID = #{transactionId,jdbcType=VARCHAR} + where ID = #{id,jdbcType=VARCHAR} + + + + \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wx/pay/model/PayReqData.java b/src/main/java/com/xmomen/module/wx/pay/model/PayReqData.java new file mode 100644 index 0000000..c0072fa --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/model/PayReqData.java @@ -0,0 +1,229 @@ +package com.xmomen.module.wx.pay.model; + +/** + * User: rizenguo + * Date: 2014/10/22 + * Time: 21:29 + */ + +import com.xmomen.module.wx.pay.common.Configure; +import com.xmomen.module.wx.pay.common.RandomStringGenerator; +import com.xmomen.module.wx.pay.common.Signature; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; + +/** + * 请求支付API需要提交的数据 + */ +public class PayReqData { + + //小程序id 必填 + private String appid = ""; + //商户号 必填 + private String mch_id = ""; + //设备号 否 +// private String device_info = ""; + //随机字符串 必填 + private String nonce_str = ""; + //签名 必填 + private String sign = ""; + //签名类型 否 +// private String sign_type = ""; + //商品描述 是 + private String body = ""; + //商品详情 否 +// private String detail = ""; + //附件数据 否 + private String attach; + //商品订单号 是 + private String out_trade_no = ""; + //货币类型 + private String fee_type; + //总费用 是 到分 + private int total_fee = 0; + //终端Ip + private String spbill_create_ip = ""; + //交易起始时间 +// private String time_start = ""; + //交易结束时间 +// private String time_expire = ""; + //商品标记 +// private String goods_tag = ""; + //通知地址 是 + private String notify_url = ""; + //交易类型 是 + private String trade_type = "JSAPI"; + //用户标识 是 + private String openid = ""; + + /** + * @param body + * @param outTradeNo + * @param totalFee + * @param spBillCreateIP + * @param openId + */ + public PayReqData(String body, String outTradeNo, int totalFee, String spBillCreateIP, String openId, String attach) { + + //微信分配的公众号ID(开通公众号之后可以获取到) + setAppid(Configure.getAppid()); + + //微信支付分配的商户号ID(开通公众号的微信支付功能之后可以获取到) + setMch_id(Configure.getMchid()); + + //要支付的商品的描述信息,用户会在支付成功页面里看到这个信息 + setBody(body); + + //商户系统内部的订单号,32个字符内可包含字母, 确保在商户系统唯一 + setOut_trade_no(outTradeNo); + + //附加数据 + setAttach(attach); + + //订单总金额,单位为“分”,只能整数 + setTotal_fee(totalFee); + + //通知地址 + setNotify_url(Configure.getNotify_url()); + + //订单生成的机器IP + setSpbill_create_ip(spBillCreateIP); + + //商品标记,微信平台配置的商品标记,用于优惠券或者满减使用 + setOpenid(openId); + + //随机字符串,不长于32 位 + setNonce_str(RandomStringGenerator.getRandomStringByLength(32)); + + //根据API给的签名规则进行签名 + String sign = Signature.getSign(toMap()); + + setSign(sign);//把签名数据设置到Sign这个属性中 + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getMch_id() { + return mch_id; + } + + public void setMch_id(String mch_id) { + this.mch_id = mch_id; + } + + public String getNonce_str() { + return nonce_str; + } + + public void setNonce_str(String nonce_str) { + this.nonce_str = nonce_str; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public String getOut_trade_no() { + return out_trade_no; + } + + public void setOut_trade_no(String out_trade_no) { + this.out_trade_no = out_trade_no; + } + + public int getTotal_fee() { + return total_fee; + } + + public void setTotal_fee(int total_fee) { + this.total_fee = total_fee; + } + + public String getSpbill_create_ip() { + return spbill_create_ip; + } + + public void setSpbill_create_ip(String spbill_create_ip) { + this.spbill_create_ip = spbill_create_ip; + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getFee_type() { + return fee_type; + } + + public void setFee_type(String fee_type) { + this.fee_type = fee_type; + } + + public String getNotify_url() { + return notify_url; + } + + public void setNotify_url(String notify_url) { + this.notify_url = notify_url; + } + + public String getTrade_type() { + return trade_type; + } + + public void setTrade_type(String trade_type) { + this.trade_type = trade_type; + } + + public String getAttach() { + return attach; + } + + public void setAttach(String attach) { + this.attach = attach; + } + + public Map toMap() { + Map map = new HashMap(); + Field[] fields = this.getClass().getDeclaredFields(); + for (Field field : fields) { + Object obj; + try { + obj = field.get(this); + if (obj != null && !obj.equals("")) { + map.put(field.getName(), obj); + } + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + return map; + } + +} diff --git a/src/main/java/com/xmomen/module/wx/pay/model/RefundResData.java b/src/main/java/com/xmomen/module/wx/pay/model/RefundResData.java new file mode 100644 index 0000000..d294942 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/model/RefundResData.java @@ -0,0 +1,129 @@ +package com.xmomen.module.wx.pay.model; + +public class RefundResData { + + private String return_code; + private String return_msg; + + /** + * 以下字段在return_code为SUCCESS的时候有返回 + */ + private String result_code; + private String err_code; + private String err_code_des; + private String appid; + private String mch_id; + private String device_info; + private String nonce_str; + private String sign; + private String transaction_id; + private String out_trade_no; + private String out_refund_no; + private String refund_id; + private int refund_fee; + private int total_fee; + private int cash_fee; + + public String getReturn_code() { + return return_code; + } + public void setReturn_code(String return_code) { + this.return_code = return_code; + } + public String getReturn_msg() { + return return_msg; + } + public void setReturn_msg(String return_msg) { + this.return_msg = return_msg; + } + public String getResult_code() { + return result_code; + } + public void setResult_code(String result_code) { + this.result_code = result_code; + } + public String getErr_code() { + return err_code; + } + public void setErr_code(String err_code) { + this.err_code = err_code; + } + public String getErr_code_des() { + return err_code_des; + } + public void setErr_code_des(String err_code_des) { + this.err_code_des = err_code_des; + } + public String getAppid() { + return appid; + } + public void setAppid(String appid) { + this.appid = appid; + } + public String getMch_id() { + return mch_id; + } + public void setMch_id(String mch_id) { + this.mch_id = mch_id; + } + public String getDevice_info() { + return device_info; + } + public void setDevice_info(String device_info) { + this.device_info = device_info; + } + public String getNonce_str() { + return nonce_str; + } + public void setNonce_str(String nonce_str) { + this.nonce_str = nonce_str; + } + public String getSign() { + return sign; + } + public void setSign(String sign) { + this.sign = sign; + } + public String getTransaction_id() { + return transaction_id; + } + public void setTransaction_id(String transaction_id) { + this.transaction_id = transaction_id; + } + public String getOut_trade_no() { + return out_trade_no; + } + public void setOut_trade_no(String out_trade_no) { + this.out_trade_no = out_trade_no; + } + public String getOut_refund_no() { + return out_refund_no; + } + public void setOut_refund_no(String out_refund_no) { + this.out_refund_no = out_refund_no; + } + public String getRefund_id() { + return refund_id; + } + public void setRefund_id(String refund_id) { + this.refund_id = refund_id; + } + public int getRefund_fee() { + return refund_fee; + } + public void setRefund_fee(int refund_fee) { + this.refund_fee = refund_fee; + } + public int getTotal_fee() { + return total_fee; + } + public void setTotal_fee(int total_fee) { + this.total_fee = total_fee; + } + public int getCash_fee() { + return cash_fee; + } + public void setCash_fee(int cash_fee) { + this.cash_fee = cash_fee; + } +} diff --git a/src/main/java/com/xmomen/module/wx/pay/model/WeixinPayRecord.java b/src/main/java/com/xmomen/module/wx/pay/model/WeixinPayRecord.java new file mode 100644 index 0000000..4082392 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/model/WeixinPayRecord.java @@ -0,0 +1,42 @@ +package com.xmomen.module.wx.pay.model; + +import lombok.Data; + +public @Data class WeixinPayRecord { + + private String tradeId; + + private Integer tradeType; + /** + * 商品订单号 + */ + private String tradeNo; + /** + * 支付总金额 + * 单位为分 + */ + private Integer totalFee; + + private String openId; + + private String transactionId; + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("WeixinPayRecord [tradeId="); + builder.append(tradeId); + builder.append(", tradeType="); + builder.append(tradeType); + builder.append(", tradeNo="); + builder.append(tradeNo); + builder.append(", totalFee="); + builder.append(totalFee); + builder.append(", openId="); + builder.append(openId); + builder.append(", transactionId="); + builder.append(transactionId); + builder.append("]"); + return builder.toString(); + } +} diff --git a/src/main/java/com/xmomen/module/wx/pay/service/BaseService.java b/src/main/java/com/xmomen/module/wx/pay/service/BaseService.java new file mode 100644 index 0000000..bf4890a --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/service/BaseService.java @@ -0,0 +1,43 @@ +package com.xmomen.module.wx.pay.service; + +import com.xmomen.module.wx.pay.common.Configure; + +import java.io.IOException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; + +/** + * User: rizenguo + * Date: 2014/12/10 + * Time: 15:44 + * 服务的基类 + */ +public class BaseService { + + //API的地址 + private String apiURL; + + //发请求的HTTPS请求器 + private IServiceRequest serviceRequest; + + public BaseService(String api) throws ClassNotFoundException, IllegalAccessException, InstantiationException { + apiURL = api; + Class c = Class.forName(Configure.HttpsRequestClassName); + serviceRequest = (IServiceRequest) c.newInstance(); + } + + protected String sendPost(Object xmlObj) throws UnrecoverableKeyException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException { + return serviceRequest.sendPost(apiURL, xmlObj); + } + + /** + * 供商户想自定义自己的HTTP请求器用 + * + * @param request 实现了IserviceRequest接口的HttpsRequest + */ + public void setServiceRequest(IServiceRequest request) { + serviceRequest = request; + } +} diff --git a/src/main/java/com/xmomen/module/wx/pay/service/PayRecordService.java b/src/main/java/com/xmomen/module/wx/pay/service/PayRecordService.java new file mode 100644 index 0000000..304ec3c --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/service/PayRecordService.java @@ -0,0 +1,69 @@ +package com.xmomen.module.wx.pay.service; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.module.wx.pay.entity.TbPayRecord; +import com.xmomen.module.wx.pay.entity.mapper.PayRecordMapper; +import com.xmomen.module.wx.pay.model.WeixinPayRecord; + +@Service +public class PayRecordService { + + @Autowired + MybatisDao mybatisDao; + + public TbPayRecord addPayRecord(WeixinPayRecord weixinPayRecord) { + TbPayRecord tbPayRecord = new TbPayRecord(); + tbPayRecord.setId(weixinPayRecord.getTradeId()); + tbPayRecord.setOpenId(weixinPayRecord.getOpenId()); + tbPayRecord.setTradeType(weixinPayRecord.getTradeType()); + tbPayRecord.setTradeNo(weixinPayRecord.getTradeNo()); + + tbPayRecord.setTotalFee(new BigDecimal(Double.valueOf(weixinPayRecord.getTotalFee())/100)); + tbPayRecord.setTransactionTime(new Date()); + mybatisDao.getSqlSessionTemplate().insert(PayRecordMapper.PAY_RECORD_MAPPER_NAMESPACE + "insertPayRecord", tbPayRecord); + return tbPayRecord; + } + + public void finishPayRecord(WeixinPayRecord weixinPayRecord) { + String id = weixinPayRecord.getTradeId(); + TbPayRecord tbPayRecord = mybatisDao.selectByPrimaryKey(TbPayRecord.class, id); + if(tbPayRecord != null) { + tbPayRecord.setTransactionId(weixinPayRecord.getTransactionId()); + tbPayRecord.setCompleteTime(new Date()); + mybatisDao.getSqlSessionTemplate().update(PayRecordMapper.PAY_RECORD_MAPPER_NAMESPACE + "markFinished", tbPayRecord); + //mybatisDao.update(tbPayRecord); + } + } + + public TbPayRecord getTbPayRecordById(String id) { + TbPayRecord tbPayRecord = mybatisDao.selectByPrimaryKey(TbPayRecord.class, id); + return tbPayRecord; + } + + public TbPayRecord getTbpayRecordByRecord(TbPayRecord tbPayRecord) { + List tbPayRecords = mybatisDao.getSqlSessionTemplate() + .selectList(PayRecordMapper.PAY_RECORD_MAPPER_NAMESPACE + "selectByQuery", tbPayRecord); + //List tbPayRecords = mybatisDao.selectByModel(tbPayRecord); + if(tbPayRecords == null || tbPayRecords.isEmpty()) { + return null; + } + return tbPayRecords.get(0); + } + + public List getTbpayRecordListByRecord(TbPayRecord tbPayRecord) { + List tbPayRecords = mybatisDao.getSqlSessionTemplate() + .selectList(PayRecordMapper.PAY_RECORD_MAPPER_NAMESPACE + "selectByQuery", tbPayRecord); + return tbPayRecords; + } + + public void insert(TbPayRecord tbPayRecord) { + mybatisDao.getSqlSessionTemplate().insert(PayRecordMapper.PAY_RECORD_MAPPER_NAMESPACE + "insertPayRecord", tbPayRecord); + } +} diff --git a/src/main/java/com/xmomen/module/wx/pay/service/PayService.java b/src/main/java/com/xmomen/module/wx/pay/service/PayService.java new file mode 100644 index 0000000..088111c --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/service/PayService.java @@ -0,0 +1,33 @@ +package com.xmomen.module.wx.pay.service; + +import com.xmomen.module.wx.pay.common.Configure; +import com.xmomen.module.wx.pay.model.PayReqData; + +/** + * User: rizenguo + * Date: 2014/10/29 + * Time: 16:03 + */ +public class PayService extends BaseService { + + public PayService() throws IllegalAccessException, InstantiationException, ClassNotFoundException { + super(Configure.PUBLIC_PAY); + } + + /** + * 请求支付服务 + * + * @param payReqData 这个数据对象里面包含了API要求提交的各种数据字段 + * @return API返回的数据 + * @throws Exception + */ + public String request(PayReqData payReqData) throws Exception { + + //-------------------------------------------------------------------- + //发送HTTPS的Post请求到API地址 + //-------------------------------------------------------------------- + String responseString = sendPost(payReqData); + + return responseString; + } +} diff --git a/src/main/java/com/xmomen/module/wx/pay/service/RefundService.java b/src/main/java/com/xmomen/module/wx/pay/service/RefundService.java new file mode 100644 index 0000000..1b7404b --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/pay/service/RefundService.java @@ -0,0 +1,33 @@ +package com.xmomen.module.wx.pay.service; + +import com.xmomen.module.wx.pay.common.Configure; +import com.xmomen.module.wx.pay.model.RefundReqData; + +/** + * 商家退款 + * @author xiao + * + */ +public class RefundService extends BaseService { + + public RefundService() throws ClassNotFoundException, IllegalAccessException, InstantiationException { + super(Configure.APPLY_REFUND); + } + + /** + * 申请退款服务 + * + * @param payReqData 这个数据对象里面包含了API要求提交的各种数据字段 + * @return API返回的数据 + * @throws Exception + */ + public String request(RefundReqData refundReqData) throws Exception { + + //-------------------------------------------------------------------- + //发送HTTPS的Post请求到API地址 + //-------------------------------------------------------------------- + String responseString = sendPost(refundReqData); + + return responseString; + } +} diff --git a/src/main/java/com/xmomen/module/wx/service/BindService.java b/src/main/java/com/xmomen/module/wx/service/BindService.java new file mode 100644 index 0000000..152da41 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/service/BindService.java @@ -0,0 +1,147 @@ +package com.xmomen.module.wx.service; + +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.base.entity.CdBind; +import com.xmomen.module.base.entity.CdExpressMember; +import com.xmomen.module.base.entity.CdMember; +import com.xmomen.module.order.entity.TbOrder; +import com.xmomen.module.wx.model.AjaxResult; +import com.xmomen.module.wx.util.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * Created by Jeng on 2016/3/30. + */ +@Service +public class BindService { + Logger logger = LoggerFactory.getLogger(BindService.class); + + @Autowired + MybatisDao mybatisDao; + + /** + * 绑定手机号 + * 如果之前绑定过则覆盖 + * + * @param openId 唯一号 + * @param phone 手机号 + * @param bindType 绑定类型 1-客户绑定 2-快递员绑定 + * @return + */ + @Transactional + public boolean bindAccount(String openId, String phone, String bindType) { + Integer userId = null; + if ("1".equals(bindType)) { + CdMember member = new CdMember(); + member.setPhoneNumber(phone); + List members = mybatisDao.selectByModel(member); + if (members == null || members.size() == 0) { + return false; + } + userId = members.get(0).getId(); + } + else if ("2".equals(bindType)) { + CdExpressMember expressMember = new CdExpressMember(); + expressMember.setPhone(phone); + List expressMembers = mybatisDao.selectByModel(expressMember); + if (expressMembers == null || expressMembers.size() == 0) { + return false; + } + userId = expressMembers.get(0).getId(); + } + CdBind bind = new CdBind(); + bind.setOpenId(openId); + List binds = mybatisDao.selectByModel(bind); + if (binds != null && binds.size() > 0) { + bind.setId(binds.get(0).getId()); + } + bind.setOpenId(openId); + bind.setUserId(userId); + bind.setPhone(phone); + mybatisDao.save(bind); + return true; + } + + /** + * 订单绑定快递员 + * + * @return + */ + @Transactional + public String bindExpressMember(Integer userId, String orderNo) { + //查找订单 + TbOrder order = new TbOrder(); + order.setOrderNo(orderNo); + order = mybatisDao.selectOneByModel(order); + //判断订单状态是否是待配送状态 + if (!"12".equals(order.getOrderStatus())) { + logger.error("订单" + orderNo + "状态不是待配送,不能扫描"); + return "订单" + orderNo + "状态不是待配送,不能扫描"; + } + + if (order == null) { + logger.error("订单" + orderNo + "不存在"); + return "订单<<" + orderNo + ">>不存在"; + } + //查找快递员信息 + CdExpressMember expressMember = new CdExpressMember(); + expressMember.setId(userId); + List expressMembers = mybatisDao.selectByModel(expressMember); + if (expressMembers == null || expressMembers.size() == 0) { + logger.error("快递员不存在"); + return "快递员不存在"; + } + expressMember = expressMembers.get(0); + //订单中的发运快递商是否是快递员所属快递商 + if (order.getDespatchExpressId().intValue() != expressMember.getCdExpressId().intValue()) { + logger.error("不属于你的包裹,不能扫描!"); + return "不属于你的包裹,不能扫描!"; + } + //更新订单 + order.setExpressMemberId(expressMember.getId()); + //更新订单状态 + //配送中 + order.setOrderStatus("5"); + mybatisDao.save(order); + return "扫描成功"; + } + + + /** + * 订单收货 + * + * @return + */ + @Transactional + public AjaxResult orderShouhuo(String openId, String orderNo, String shouhuoNo, AjaxResult ajaxResult) { + TbOrder order = new TbOrder(); + order.setOrderNo(orderNo); + order = mybatisDao.selectOneByModel(order); + //不等于配送中 不能再收货 + if (!order.getOrderStatus().equals("5")) { + ajaxResult.setResult(0); + ajaxResult.setMessage("订单状态不对,不能收货。"); + return ajaxResult; + } + + if (StringUtilsExt.isNotBlank(shouhuoNo)) { + order.setOrderStatus("7"); + } + else { + order.setOrderStatus("6"); + } + ajaxResult.setResult(1); + ajaxResult.setMessage("收货成功。"); + //设置收货时间 + order.setShouHuoDate(DateUtils.getNowDate()); + mybatisDao.save(order); + return ajaxResult; + } +} diff --git a/src/main/java/com/xmomen/module/wx/service/MessageHandlerService.java b/src/main/java/com/xmomen/module/wx/service/MessageHandlerService.java new file mode 100644 index 0000000..7247949 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/service/MessageHandlerService.java @@ -0,0 +1,173 @@ +package com.xmomen.module.wx.service; + +import com.alibaba.fastjson.JSONObject; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.wx.constants.AppCodeConsts; +import com.xmomen.module.wx.constants.RequestMsgTypeEnum; +import com.xmomen.module.wx.model.MessageBase; +import com.xmomen.module.wx.model.requestModel.RequestMessageBeanFactory; +import com.xmomen.module.wx.util.XMLUtils; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +/** + * 微信推送过来的消息处理类 + */ +@Service +public class MessageHandlerService { + static Logger log = LoggerFactory.getLogger(MessageHandlerService.class); + + /** + * 请求消息缓存map 用于排重 + */ + private static Map requestMessageMap = new HashMap(); + + @Autowired + ResponseMessageServiceFactory responseMessageStrategyFactory; + + /** + * 处理请求消息,并且返回回复信息 + * + * @return 回复的消息 + */ + public String execute(InputStream is) { + //得到请求的msg xml格式 + String xmlMsg = this.readInputStreamMsg(is); + + log.info("接收的到的XML格式请求消息:" + xmlMsg); + + //消息为空的话直接返回空串 + if (StringUtilsExt.isEmpty(xmlMsg)) { + return StringUtilsExt.EMPTY; + } + + JSONObject xmlJson = null; + try { + //xml格式转json + xmlJson = XMLUtils.xmlToJSONObject(xmlMsg); + + log.info("转化后的请求消息(JSON格式):" + xmlJson.toJSONString()); + } catch (Exception e) { + log.error("解析XML字符串失败:", e); + //直接回复空串 + return StringUtilsExt.EMPTY; + } + + //请求类型 + String msgType = (String) xmlJson.get(AppCodeConsts.MSG_TYPE); + + //重复校验用MessageKey + String messageKey = ""; + //请求是事件消息场景 没有msgid 取fromUserName + createTime为key + if (msgType.toLowerCase().equals(RequestMsgTypeEnum.event.toString().toLowerCase())) { + messageKey = (String) xmlJson.get(AppCodeConsts.FROM_USER_NAME) + xmlJson.get(AppCodeConsts.CREATE_TIME).toString(); + } + //消息类型 取msgId未key + else { + messageKey = xmlJson.get(AppCodeConsts.MSG_ID).toString(); + } + + //重复消息场景 + if (this.isRepeatMessage(xmlJson, messageKey)) { + log.info("微信请求消息重复。"); + return StringUtilsExt.EMPTY; + } + + //请求model + MessageBase requestMessageBase = null; + try { + String msgKey = msgType; + + //请求是事件消息场景 + if (msgType.toLowerCase().equals(RequestMsgTypeEnum.event.toString().toLowerCase())) { + //具体的事件类型 + msgKey = RequestMessageBeanFactory.EVENT_PREFIX + xmlJson.get(RequestMsgTypeEnum.event.toString()); + } + + log.info("微信请求消息类型:" + msgKey); + + //将请求的消息封装成实体对象 + requestMessageBase = (MessageBase) JSONObject.parseObject(xmlJson.toJSONString(), RequestMessageBeanFactory.createInstance(msgKey).getClass()); + } catch (Exception e) { + log.error("微信消息对象解析失败:", e); + + //将处理后的msg从缓存中移除 + requestMessageMap.remove(messageKey); + + //直接回复空串 + return StringUtilsExt.EMPTY; + } + + try { + //通过消息类型获取对应的响应处理类 + ResponseMessageBaseService responseMessageStrategy = responseMessageStrategyFactory.createInstance(msgType); + + + //返回的回复消息 + String responseXml = responseMessageStrategy.handleRequestMessage(requestMessageBase); + + return responseXml; + } catch (Exception e) { + log.error("请求回复处理异常:", e); + } finally { + //将处理后的msg从缓存中移除 + requestMessageMap.remove(messageKey); + } + return StringUtilsExt.EMPTY; + } + + + /** + * 消息重复判断 普通消息用msgid排重 事件消息用fromUserName+createTime排重 + * + * @return true:重复/false:未重复 + */ + private boolean isRepeatMessage(JSONObject map, String key) { + //不存在场景 + if (!requestMessageMap.containsKey(key)) { + //放入缓存 + requestMessageMap.put(key, map); + return false; + } + return true; + } + + /** + * 从流中读取微信消息 + * + * @param is 微信请求消息输入流 + * @return 微信消息字符串(XML格式) + */ + private String readInputStreamMsg(InputStream is) { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = null; + try { + //获取输入流 + reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + String line = null; + + //循环读取 + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + log.error("从流中读取微信消息失败:", e); + } finally { + IOUtils.closeQuietly(reader); + IOUtils.closeQuietly(is); + } + return sb.toString(); + } +} diff --git a/src/main/java/com/xmomen/module/wx/service/ResponseMessageBaseService.java b/src/main/java/com/xmomen/module/wx/service/ResponseMessageBaseService.java new file mode 100644 index 0000000..39079fe --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/service/ResponseMessageBaseService.java @@ -0,0 +1,21 @@ +package com.xmomen.module.wx.service; + +import com.xmomen.module.wx.model.MessageBase; + +import com.xmomen.module.wx.model.MessageBase; + +/** + * 微信服务响应公共接口类 + */ +public interface ResponseMessageBaseService { + /** + * 对微信的请求消息做出响应 + * + * @param requestMessage 请求的消息内容 + * @param requestMessageExt 请求内容封装类 + * @return 回复给微信的消息 (xml格式) + * @throws IllegalAccessException + * @throws InstantiationException + */ + public String handleRequestMessage(MessageBase requestMessage) throws InstantiationException, IllegalAccessException, Exception; +} diff --git a/src/main/java/com/xmomen/module/wx/service/ResponseMessageVideoService.java b/src/main/java/com/xmomen/module/wx/service/ResponseMessageVideoService.java new file mode 100644 index 0000000..fdb78b5 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/service/ResponseMessageVideoService.java @@ -0,0 +1,35 @@ +package com.xmomen.module.wx.service; + + +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.wx.model.MessageBase; +import com.xmomen.module.wx.model.requestModel.message.RequestMessageVideo; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; + +/** + * 微信视频消息响应类 + */ +@Service +public class ResponseMessageVideoService implements ResponseMessageBaseService { + + Logger log = LoggerFactory.getLogger(ResponseMessageVideoService.class); + + /** + * 对微信视频请求消息做出响应 + * + * @param requestMessage 请求的消息内容 + * @param requestMessageExt 请求内容封装类 + * @return 回复给微信的消息 (xml格式) + * @throws InstantiationException + * @throws IllegalAccessException + */ + public String handleRequestMessage(MessageBase requestMessage) throws InstantiationException, IllegalAccessException { + return StringUtilsExt.EMPTY; + } +} diff --git a/src/main/java/com/xmomen/module/wx/service/ResponseMessageVoiceService.java b/src/main/java/com/xmomen/module/wx/service/ResponseMessageVoiceService.java new file mode 100644 index 0000000..5d0c4a3 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/service/ResponseMessageVoiceService.java @@ -0,0 +1,35 @@ +package com.xmomen.module.wx.service; + + +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.wx.model.MessageBase; +import com.xmomen.module.wx.model.requestModel.message.RequestMessageVoice; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.io.File; + +/** + * 微信语音消息响应类 + */ +@Service +public class ResponseMessageVoiceService implements ResponseMessageBaseService { + + Logger log = LoggerFactory.getLogger(ResponseMessageVoiceService.class); + + /** + * 对微信的语音请求消息做出响应 + * + * @param requestMessage 请求的消息内容 + * @param requestMessageExt 请求内容封装类 + * @return 回复给微信的消息 (xml格式) + * @throws InstantiationException + * @throws IllegalAccessException + */ + public String handleRequestMessage(MessageBase requestMessage) throws InstantiationException, IllegalAccessException { + return StringUtilsExt.EMPTY; + } +} diff --git a/src/main/java/com/xmomen/module/wx/service/WeixinApiService.java b/src/main/java/com/xmomen/module/wx/service/WeixinApiService.java new file mode 100644 index 0000000..3efdf33 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/service/WeixinApiService.java @@ -0,0 +1,409 @@ +package com.xmomen.module.wx.service; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.shiro.util.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import com.alibaba.fastjson.JSON; +import com.xmomen.framework.mybatis.dao.MybatisDao; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.wx.constants.WeixinConsts; +import com.xmomen.module.wx.entity.WxAppSetting; +import com.xmomen.module.wx.model.AccessToken; +import com.xmomen.module.wx.model.AccessTokenOAuth; +import com.xmomen.module.wx.model.JsApiTicket; +import com.xmomen.module.wx.model.PayAttachModel; +import com.xmomen.module.wx.model.WeixinUserInfo; +import com.xmomen.module.wx.module.order.service.MyOrderService; +import com.xmomen.module.wx.pay.common.Configure; +import com.xmomen.module.wx.pay.common.MD5; +import com.xmomen.module.wx.pay.common.RandomStringGenerator; +import com.xmomen.module.wx.pay.common.Util; +import com.xmomen.module.wx.pay.entity.TbPayRecord; +import com.xmomen.module.wx.pay.model.PayReqData; +import com.xmomen.module.wx.pay.model.PayResData; +import com.xmomen.module.wx.pay.model.RefundReqData; +import com.xmomen.module.wx.pay.model.RefundResData; +import com.xmomen.module.wx.pay.model.WeixinPayRecord; +import com.xmomen.module.wx.pay.service.PayRecordService; +import com.xmomen.module.wx.pay.service.PayService; +import com.xmomen.module.wx.pay.service.RefundService; +import com.xmomen.module.wx.util.DateUtils; +import com.xmomen.module.wx.util.HttpUtils; +import com.xmomen.module.wx.util.JsonUtils; +import com.xmomen.module.wx.util.SignUtil; + +/** + * 微信认证处理类 + */ +@Component +public class WeixinApiService { + static Logger log = LoggerFactory.getLogger(WeixinApiService.class); + + @Autowired + AppSettingService appSettingService; + + @Autowired + MybatisDao mybatisDao; + + @Autowired + MyOrderService myOrderService; + + @Autowired + PayRecordService payRecordService; + + /** + * 取得微信用户信息 + * + * @param accessToken 访问令牌 + * @param openid OpenID + * @return 信息用户信息 + */ + public static WeixinUserInfo getWeixinUserInfo(String accessToken, String openid) { + try { + String url = WeixinConsts.GET_WEIXIN_USER_INFO.replace("{ACCESS_TOKEN}", accessToken).replace("{OPENID}", openid); + + String result = HttpUtils.doGet(url); + + log.info("获取用户信息结果字符串:" + result); + + if (StringUtilsExt.isNotEmpty(result)) { + return JsonUtils.parseJSON(StringEscapeUtils.unescapeJson(result), WeixinUserInfo.class); + } + } catch (Exception e) { + log.error("获取用户信息失败:", e); + } + return null; + } + + /** + * 获得accessToken + * + * @return + */ + public String getAccessToken(String publicUid) { + //获取公众号的配置 + WxAppSetting appSettingExt = appSettingService.getAppSetting(publicUid); + + if (appSettingExt == null) { + return StringUtils.EMPTY; + } + //获取缓存的access_token + AccessToken accessToken = new AccessToken(appSettingExt.getAccessToken(), String.valueOf(appSettingExt.getExpiresIn()), appSettingExt.getLastGetTime()); + + //判断是否access_token是否过期 + if (accessToken.getAccess_token() == null || accessToken.isExpired()) { + //过期重新获取accessToken + String url = WeixinConsts.GET_ACCESS_TOKEN_URL.replace("{APPID}", appSettingExt.getAppId()).replace("{APPSECRET}", appSettingExt.getAppSecret()); + + //get请求微信服务器获取到accessToken + String result = HttpUtils.doGet(url); + if (!StringUtils.isEmpty(result)) { + try { + accessToken = JsonUtils.parseJSON(StringEscapeUtils.unescapeJson(result), AccessToken.class); + + log.info("最新的accessToken:" + accessToken.getAccess_token()); + + appSettingExt.setAccessToken(accessToken.getAccess_token()); + appSettingExt.setExpiresIn(Integer.parseInt(accessToken.getExpires_in())); + appSettingExt.setLastGetTime(DateUtils.getNowDate()); + + mybatisDao.update(appSettingExt); + + return accessToken.getAccess_token(); + } catch (Exception e) { + log.error("AccessToken获得异常:", e); + } + } + return StringUtilsExt.EMPTY; + } + //未过期 + else { + return accessToken.getAccess_token(); + } + } + + /** + * 获取网页授权的access_token + * + * @param code + * @return + */ + public AccessTokenOAuth getAccessToken(String code, String publicUid) { + //获取微信配置信息 + WxAppSetting appSettingExt = appSettingService.getAppSetting(publicUid); + AccessTokenOAuth accessToken = null; + try { + //获取网页授权URL拼装 + String url = WeixinConsts.GET_ACCESS_TOKEN_OAUTH.replace("{APPID}", appSettingExt.getAppId()).replace("{SECRET}", appSettingExt.getAppSecret()).replace("{CODE}", code); + log.info("授权URL:" + url); + + //get请求微信服务器 + String result = HttpUtils.doGet(url); + log.info("授权结果:" + result); + + //反馈信息存在 + if (StringUtilsExt.isNotEmpty(result)) { + accessToken = JsonUtils.parseJSON(StringEscapeUtils.unescapeJson(result), AccessTokenOAuth.class); + } + } catch (Exception e) { + log.error("获取accessToken失败", e); + } + return accessToken; + } + + /** + * 获取jsapi-ticket + * + * @param publicUid + * @return JsApiTicket + */ + public JsApiTicket getJsApiTicket(String publicUid) { + String accessToken = getAccessToken(publicUid); + String url = WeixinConsts.JS_API_TICKET.replace("{ACCESS_TOKEN}", accessToken); + JsApiTicket jsApiTicket = null; + //get请求微信服务器 + String result = HttpUtils.doGet(url); + log.info("微信[js_api_ticket]请求结果:" + result); + if (StringUtils.isNotEmpty(result)) { + jsApiTicket = JsonUtils.parseJSON(StringEscapeUtils.unescapeJson(result), JsApiTicket.class); + } + return jsApiTicket; + } + + /** + * 获取jsapi-sdk签名信息 + * + * @param publicUid + * @param url + * @return + */ + public Map getJsSDKConfig(String publicUid, String url) { + getAccessToken(publicUid); + JsApiTicket jsApiTicket = getJsApiTicket(publicUid); + Map map = SignUtil.sign(jsApiTicket.getTicket(), url); + //获取公众号的配置 + WxAppSetting appSettingExt = appSettingService.getAppSetting(publicUid); + map.put("appId", appSettingExt.getAppId()); + return map; + } + + /** + * 处理回调函数 + * + * @param notityXml + * @return + */ + @Transactional + public String notify(String notityXml) { + if (org.apache.commons.lang3.StringUtils.isNotEmpty(notityXml)) { + //将从API返回的XML数据映射到Java对象 + PayResData payResData = (PayResData) Util.getObjectFromXML(notityXml, PayResData.class); + log.info("returnCode:" + payResData.getResult_code()); + log.info("return_code:" + payResData.getReturn_code()); + log.info("out_trade_no:" + payResData.getOut_trade_no()); + if (StringUtils.equals("SUCCESS", payResData.getReturn_code())) { + //进行业务处理 + try { + if (StringUtils.equals("SUCCESS", payResData.getResult_code())) { + synchronized (this) { + //考虑微信的重复通知的可能性,所以加锁控制 + myOrderService.payCallBack(payResData); + } + } + else { + log.error("微信支付失败:" + payResData.getErr_code_des()); + return returnFail(); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("业务逻辑处理失败:" + payResData); + return returnFail(); + } + } + else { + return returnFail(); + } + return returnSussess(); + } + else { + log.info("回调处理失败"); + return returnFail(); + } + } + + private String returnSussess() { + return ""; + } + + private String returnFail() { + return ""; + } + + /** + * 支付 + * + * @param outTradeNo 订单号 + * @param totalFee 总金额(元) + * @param request + * @return + */ + public PayResData payOrder(String outTradeNo, Double totalFee, String openId, Integer type, Integer memberId, HttpServletRequest request) { + PayAttachModel attachModel = null; + String tradeId = UUID.randomUUID().toString().replaceAll("-", ""); + if (!type.equals(2) && !type.equals(1)) { + log.info("不合法的交易类型:" + type + ",合法的值为[1, 2]"); + return null; + } + + log.info("outTradeNo:" + outTradeNo + ",totalFee:" + totalFee + ",openId:" + openId + ",type:" + type + ",request:" + request.toString()); + //如果订单已经支付(不是充值类型),则不能再申请微信支付 + if (type.equals(1)) { + TbPayRecord payRecordQuery = new TbPayRecord(); + payRecordQuery.setTradeNo(outTradeNo); + payRecordQuery.setTradeType(1); + payRecordQuery.setCompleteTime(new Date());//支付完成时间不为空 + List tbPayRecords = payRecordService.getTbpayRecordListByRecord(payRecordQuery); + if (!CollectionUtils.isEmpty(tbPayRecords)) { + log.error("已经支付成功的订单,不能重复提交支付申请"); + return null; + } + } + + attachModel = new PayAttachModel(type, outTradeNo, tradeId, "", memberId); + String attachement = JSON.toJSONString(attachModel); + totalFee = totalFee * 100; + PayReqData payReqData = new PayReqData("订单付费", tradeId, totalFee.intValue(), getIp2(request), openId, attachement); + + try { + String result = new PayService().request(payReqData); + log.info("请求返回的结果:" + result); + + //将从API返回的XML数据映射到Java对象 + PayResData payResData = (PayResData) Util.getObjectFromXML(result, PayResData.class); + //统一下单失败 + if (payResData.getReturn_code().equals("FAIL")) { + log.info("统一下单失败:" + payResData.getReturn_msg()); + return null; + } + //再次签名 + long timeStamp = System.currentTimeMillis() / 1000; + String nonceStr = RandomStringGenerator.getRandomStringByLength(32); + String packageStr = "prepay_id=" + payResData.getPrepay_id(); + //待签名字符串 + //根据API给的签名规则进行签名 appId,nonceStr,package,signType,timeStamp + String signStr = "appId=" + Configure.getAppid() + "&nonceStr=" + nonceStr + "&package=" + packageStr + "&signType=MD5&timeStamp=" + timeStamp + "&key=" + Configure.getKey(); + log.info("Sign Before MD5:" + signStr); + String sign = MD5.MD5Encode(signStr).toUpperCase(); + + log.info("SIGN签名:" + sign); + + payResData.setSign(sign); + payResData.setTimeStamp(String.valueOf(timeStamp)); + payResData.setNonce_str(nonceStr); + payResData.setPackageStr(packageStr); + payResData.setAppid(Configure.getAppid()); + payResData.setMch_id(null); + + return payResData; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public RefundResData refund(String tradeNo, int refundFee) { + TbPayRecord queryModel = new TbPayRecord(); + queryModel.setTradeNo(tradeNo); + queryModel.setTradeType(1); + queryModel.setCompleteTime(new Date());//交易完成时间不为空 + TbPayRecord tbPayRecord = payRecordService.getTbpayRecordByRecord(queryModel); + if (tbPayRecord == null) { + log.error("支付记录不存在或者支付未完成:" + tradeNo); + throw new IllegalArgumentException("支付记录不存在"); + } + String transactionId = tbPayRecord.getTransactionId(); + if (StringUtils.isEmpty(transactionId)) { + throw new IllegalArgumentException("未找到订单" + tradeNo + "关联的微信支付订单号"); + } + TbPayRecord refundPayRecordQuery = new TbPayRecord(); + refundPayRecordQuery.setTradeType(3); + refundPayRecordQuery.setTransactionId(transactionId); + List refundRecords = payRecordService.getTbpayRecordListByRecord(refundPayRecordQuery); + if (!refundRecords.isEmpty()) { + //这里限定一个订单只能退款一次 + throw new IllegalArgumentException("该订单已经提交过退款请求"); + } + String outRefundNo = UUID.randomUUID().toString().replaceAll("-", ""); + int totalFee = tbPayRecord.getTotalFee().multiply(new BigDecimal(100)).intValue(); + RefundReqData refundReqData = new RefundReqData(transactionId, totalFee, refundFee, outRefundNo); + try { + String result = new RefundService().request(refundReqData); + log.info("请求返回的结果:" + result); + //将从API返回的XML数据映射到Java对象 + RefundResData refundResData = (RefundResData) Util.getObjectFromXML(result, RefundResData.class); + if (StringUtils.equals("SUCCESS", refundResData.getReturn_code())) { + if (StringUtils.equals("SUCCESS", refundResData.getResult_code())) { + // 申请退款成功,设置completeTime + TbPayRecord refundRecord = new TbPayRecord(); + refundRecord.setId(outRefundNo); + refundRecord.setOpenId(tbPayRecord.getOpenId()); + refundRecord.setTradeType(3);//退款类型 + refundRecord.setTransactionId(tbPayRecord.getTransactionId()); + refundRecord.setTransactionTime(tbPayRecord.getTransactionTime()); + refundRecord.setCompleteTime(new Date()); + refundRecord.setTotalFee(new BigDecimal(Double.valueOf(refundFee) % 100)); + refundRecord.setTradeNo(tbPayRecord.getTradeNo()); + payRecordService.insert(tbPayRecord); + } + else { + log.info("请求退款失败" + refundResData.getErr_code_des()); + return null; + } + } + else { + return null; + } + return refundResData; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 获取客户端IP + * + * @param request + * @return + */ + public static String getIp2(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + if (ip.equals("0:0:0:0:0:0:0:1")) { + ip = "127.0.0.1"; + } + return ip; + } +} diff --git a/src/main/java/com/xmomen/module/wx/util/Auth2Handler.java b/src/main/java/com/xmomen/module/wx/util/Auth2Handler.java new file mode 100644 index 0000000..dca7c9c --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/Auth2Handler.java @@ -0,0 +1,98 @@ +package com.xmomen.module.wx.util; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +import com.xmomen.module.wx.model.WeixinUserInfo; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.wx.constants.AuthorizeScope; +import com.xmomen.module.wx.constants.WechatUrlConstants; +import com.xmomen.module.wx.model.AccessTokenOAuth; + +public class Auth2Handler { + + static Logger logger = LoggerFactory.getLogger(Auth2Handler.class); + + private static final String STATE = "WJHYORDER"; + + private static final String APPID = "wx6e25cbce77bacdff"; + private static final String APPSECRET = "df1d3165ce5ac50dd355f66369a6503e"; + + public static String getOauthUrl(String redirectUrl) { + String url = ""; + try { + url = WechatUrlConstants.OAUTH.replace("APPID", APPID) + .replace("REDIRECT_URI", URLEncoder.encode(redirectUrl, "UTF-8")) + .replace("SCOPE", AuthorizeScope.snsapi_userinfo.toString()) + .replace("STATE", STATE); + } catch (UnsupportedEncodingException e) { + logger.error("获取oauthURL失败,可能是redirectUrl进行urlencoder时出错,请检查此参数:" + redirectUrl, e); + e.printStackTrace(); + } + return url; + } + + /** + * @param code + * @return + */ + public static AccessTokenOAuth getAccessToken(String code) { + String url = WechatUrlConstants.GET_ACCESS_TOKEN_OAUTH.replace("APPID", APPID) + .replace("SECRET", APPSECRET) + .replace("CODE", code); + logger.info("auth openid url --->" + url); + HttpRequest shc = new HttpClient(); + String result = shc.doPost(url, ""); + logger.info("request result -->" + result); + AccessTokenOAuth accessToken = null; + if (StringUtilsExt.isNotEmpty(result)) { + JSONObject json = JSON.parseObject(result); + if (null != json) { + if (StringUtilsExt.isNotEmpty(json.getString("errcode")) && json.getIntValue("errcode") != 0) { + logger.error("oauth 获取access_token失败,code=" + json.getIntValue("errcode") + ",msg=" + json.getIntValue("errmsg")); + } + else { + accessToken = new AccessTokenOAuth(); + accessToken.setAccessToken(json.getString("access_token")); + accessToken.setExpiresIn(json.getIntValue("expires_in")); + accessToken.setRefreshToken(json.getString("refresh_token")); + accessToken.setOpenid(json.getString("openid")); + accessToken.setScope(json.getString("scope")); + } + } + } + return accessToken; + } + + /** + * 获取未关注公众号用户信息 + * + * @param accessToken 访问令牌 + * @param openid OpenID + * @return 信息用户信息 + */ + public static WeixinUserInfo getNoGuanzhuWeixinUserInfo(String accessToken, String openid) { + try { + String url = WechatUrlConstants.GET_NO_GUANZHU_USER_INFO.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openid); + + String result = HttpUtils.doGet(url); + WeixinUserInfo weixinUserInfo = JSON.parseObject(result, WeixinUserInfo.class); + if (StringUtils.isNotEmpty(weixinUserInfo.getErrcode())) { + logger.info("获取用户信息出错,错误码:" + weixinUserInfo.getErrcode()); + return null; + } + logger.info("获取用户信息结果字符串:" + result); + return weixinUserInfo; + } catch (Exception e) { + logger.error("获取用户信息失败:", e); + } + return null; + } +} diff --git a/src/main/java/com/xmomen/module/wx/util/Constant.java b/src/main/java/com/xmomen/module/wx/util/Constant.java new file mode 100644 index 0000000..7037369 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/Constant.java @@ -0,0 +1,11 @@ +package com.xmomen.module.wx.util; + +public class Constant { + + //public static final String ADD = "ADD"; + public static final String MODIFY = "MODIFY"; + public static final String DELETE = "DELETE"; + + public static final String CLEAN = "CLEAN"; + public static final String DIRTY = "DIRTY"; +} diff --git a/src/main/java/com/xmomen/module/wx/util/DateUtils.java b/src/main/java/com/xmomen/module/wx/util/DateUtils.java new file mode 100644 index 0000000..207e706 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/DateUtils.java @@ -0,0 +1,29 @@ +package com.xmomen.module.wx.util; + + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +public class DateUtils{ + + /** + * 取当前时间 + * + * @return 当前时间对象 + */ + public static Date getNowDate() { + return Calendar.getInstance().getTime(); + } + + /** + * 取当前时间 + * + * @return 当前时间字符串 + */ + public static String getNowDateString(String patten) { + SimpleDateFormat formatter = new SimpleDateFormat(patten); + return formatter.format(getNowDate()); + } +} diff --git a/src/main/java/com/xmomen/module/wx/util/EmojiFilter.java b/src/main/java/com/xmomen/module/wx/util/EmojiFilter.java new file mode 100644 index 0000000..81a9e7f --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/EmojiFilter.java @@ -0,0 +1,88 @@ +package com.xmomen.module.wx.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.xmomen.framework.utils.StringUtilsExt; + +/** + * 过滤emoji 或者 其他非文字类型的字符 + */ +public class EmojiFilter { + static Logger log = LoggerFactory.getLogger(EmojiFilter.class); + + + /** + * 检测是否有emoji字符 + * + * @param source 源字符串 + * @return true:有/false:无 + */ + public static boolean containsEmoji(String source) { + //源字符串为空场景 + if (StringUtilsExt.isBlank(source)) { + return false; + } + + int len = source.length(); + + //判断是否包含emoji字符 + for (int i = 0; i < len; i++) { + char codePoint = source.charAt(i); + //包含emoji + if (isEmojiCharacter(codePoint)) { + return true; + } + } + + return false; + } + + /** + * 判断是否是emoji字符(表情字符) + * + * @param codePoint 对象字符 + * @return true:是/false:否 + */ + private static boolean isEmojiCharacter(char codePoint) { + return !((codePoint == 0x0) || + (codePoint == 0x9) || + (codePoint == 0xA) || + (codePoint == 0xD) || + ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || + ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || + ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))); + } + + /** + * 过滤emoji 或者 其他非文字类型的字符 + * + * @param source 字符串 + * @return 过滤后的字符串 + */ + public static String filterEmoji(String source) { + log.info("待过滤的源字符串:" + source); + + //不包含场景 + if (!containsEmoji(source)) { + return source; + } + + StringBuilder buf = new StringBuilder(source.length()); + + int len = source.length(); + + for (int i = 0; i < len; i++) { + char codePoint = source.charAt(i); + + //非表情字符的场合 + if (!isEmojiCharacter(codePoint)) { + buf.append(codePoint); + } + } + + log.info("过滤后的字符串:" + buf.toString()); + + return buf.toString(); + } +} \ No newline at end of file diff --git a/src/main/java/com/xmomen/module/wx/util/HttpClient.java b/src/main/java/com/xmomen/module/wx/util/HttpClient.java new file mode 100644 index 0000000..c44eb6e --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/HttpClient.java @@ -0,0 +1,483 @@ +package com.xmomen.module.wx.util; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.net.SocketTimeoutException; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.commons.httpclient.ConnectTimeoutException; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.XMLWriter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; + + +public class HttpClient implements HttpRequest { + + private ThreadLocal httpClient = new ThreadLocal(); + + private Logger logger = LoggerFactory.getLogger(HttpClient.class); + + private static final int REQUEST_TIME_OUT = 10 * 1000; // 请求超时时间 + private static final int CONN_TIME_OUT = 60 * 1000; // 连接超时时间 + private static final int SO_TIME_OUT = 60 * 1000; // 数据传输时间 + + public HttpClient() { + CloseableHttpClient client = HttpConnectionManager.getHttpClient(); + + httpClient.set(client); + } + + /** + * 使用ResponseHandler接口处理响应,HttpClient使用ResponseHandler会自动管理连接的释放,解决了对连接的释放管理 + */ + private ResponseHandler responseHandler = new ResponseHandler() { + + @SuppressWarnings("deprecation") + public String handleResponse(HttpResponse response) + throws ClientProtocolException, IOException { + HttpEntity entity = response.getEntity(); + if (entity != null) { + String charset = EntityUtils.getContentCharSet(entity) == null ? "UTF-8" + : EntityUtils.getContentCharSet(entity); + return new String(EntityUtils.toByteArray(entity), charset); + } else { + return null; + } + } + + }; + + public void close() throws IOException { + httpClient.get().close(); + } + + /** + * @todo 请求头设置 + * + **/ + private void setHeader(HttpRequestBase hg, String url) { + if (null != hg) { + hg.addHeader("Referer", url); + hg.addHeader("Accept", + "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + hg.addHeader("Connection", "keep-alive"); + hg.addHeader("Cache-Control", "max-age=0"); + hg.addHeader("Accept-Language", "zh-CN,zh;q=0.8"); + hg.addHeader("Accept-Charset", "zh-GBK,utf-8;q=0.7,*;q=0.3"); +// hg.addHeader("content-type","application/json"); + } + } + + /** + * 指定参数名GET方式请求数据 + * + * @param url + * @param paramsMap + * QueryString + * @return + */ + public String doGet(String url, Map paramsMap) { + return doGet(invokeUrl(url, paramsMap)); + } + + /** + * 带参数的 get method + * @param url + * @param paramsMap + * @return + */ + public JSONObject doGetToJsonObject(String url,Map paramsMap) { + String result = doGet(invokeUrl(url,paramsMap)); + return JSON.parseObject(result); + } + + /** + * get method + * @param url + * @return + */ + public JSONObject doGetToJsonObject(String url) { + String result = doGet(url); + return JSON.parseObject(result); + } + + /** + * GET方式请求数据 + * + * @param url + */ + public String doGet(String url) { + HttpGet httpGet = new HttpGet(url); + // set header + setHeader(httpGet, url); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(SO_TIME_OUT).setConnectTimeout(CONN_TIME_OUT) + .setConnectionRequestTimeout(REQUEST_TIME_OUT).build(); + httpGet.setConfig(requestConfig); + + // long responseLength = 0; // 响应长度 + String responseContent = ""; // 响应内容 + try { + // 执行get请求 + responseContent = httpClient.get() + .execute(httpGet, responseHandler); + } catch (ClientProtocolException e) { + logger.error("ClientProtocolException,GET请求URL:" + url + + "地址发生异常,异常信息:", e); + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + logger.error("UnsupportedEncodingException,GET请求URL:" + url + + "地址发生异常,异常信息:", e); + e.printStackTrace(); + } catch (ConnectTimeoutException e) { + logger.error("ConnectTimeoutException,GET请求URL:" + url + + "地址发生异常,异常信息:", e); + e.printStackTrace(); + } catch (SocketTimeoutException e) { + logger.error("SocketTimeoutException,GET请求URL:" + url + + "地址发生异常,异常信息:", e); + e.printStackTrace(); + } catch (Exception e) { + logger.error("Exception,GET请求URL:" + url + "地址发生异常,异常信息:", e); + } finally { + httpGet.abort(); + httpGet.releaseConnection(); + } + + return responseContent; + } + + /** + * 不指定参数名的方式来POST数据 + * + * @param url + * @param jsonXMLString + * @return + */ + public String doPost(String url, String jsonXMLString) { + return doPost(url, null, jsonXMLString); + } + + /** + * post method return JSONObject + * @param url + * @param jsonXmlString + * @return + */ + public JSONObject doPostToJsonObject(String url,String jsonXmlString) { + String result = doPost(url,null,jsonXmlString); + return JSON.parseObject(result); + } + + /** + * post method return JSONObject + * @param url + * @param paramsMap + * @return + */ + public JSONObject doPostToJsonObject(String url,Map paramsMap) { + String result = doPost(url,paramsMap,null); + return JSON.parseObject(result); + } + + /** + * 指定参数名POST方式请求数据 + * + * @param url + */ + public String doPost(String url, Map paramsMap) { + return doPost(url, paramsMap, null); + } + + public String doPostParamsSetBody(String url,String data) { + HttpPost httpPost = new HttpPost(url); + setHeader(httpPost, url); + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(SO_TIME_OUT).setConnectTimeout(CONN_TIME_OUT) + .setConnectionRequestTimeout(REQUEST_TIME_OUT) + .setExpectContinueEnabled(false).build(); + httpPost.setConfig(requestConfig);// RequestConfig.DEFAULT + String responseContent = null; // 响应内容 + String strRep = null; + try { + httpPost.setEntity(new StringEntity(data,"UTF-8")); + + // 执行post请求 + HttpResponse httpResponse = httpClient.get().execute(httpPost); + + // 获取响应消息实体 + HttpEntity entityRep = httpResponse.getEntity(); + if (entityRep != null) { + //responseLength = entityRep.getContentLength(); + responseContent = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + + // 获取HTTP响应的状态码 + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (statusCode == HttpStatus.SC_OK) { + strRep = responseContent; // EntityUtils.toString(httpResponse.getEntity()); + + } else if ((statusCode == HttpStatus.SC_MOVED_TEMPORARILY) + || (statusCode == HttpStatus.SC_MOVED_PERMANENTLY) + || (statusCode == HttpStatus.SC_SEE_OTHER) + || (statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) { + // 重定向处理,获得跳转的网址 + // Header locationHeader = + // httpResponse.getFirstHeader("Location"); + // if(locationHeader != null) { + // String successUrl = locationHeader.getValue(); + // } + } + + // Consume response content + EntityUtils.consume(entityRep); + // Do not need the rest + httpPost.abort(); + } + } catch (ClientProtocolException e) { + logger.error("ClientProtocolException", e); + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + logger.error("UnsupportedEncodingException", e); + e.printStackTrace(); + } catch (ConnectTimeoutException e) { + logger.error("ConnectTimeoutException", e); + e.printStackTrace(); + } catch (SocketTimeoutException e) { + logger.error("SocketTimeoutException", e); + e.printStackTrace(); + } catch (Exception e) { + logger.error("Exception", e); + e.printStackTrace(); + } finally { + httpPost.releaseConnection(); + } + + return strRep; + } + + /** + * + * @param url + * @param paramsMap + * @param jsonXMLString + * @return + */ + private String doPost(String url, Map paramsMap,String jsonXMLString) { + HttpPost httpPost = new HttpPost(url); + + // set header + setHeader(httpPost, url); + + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(SO_TIME_OUT).setConnectTimeout(CONN_TIME_OUT) + .setConnectionRequestTimeout(REQUEST_TIME_OUT) + .setExpectContinueEnabled(false).build(); + + httpPost.setConfig(requestConfig);// RequestConfig.DEFAULT + + //long responseLength = 0; // 响应长度 + String responseContent = null; // 响应内容 + String strRep = null; + try { + if (paramsMap != null && jsonXMLString == null) { + UrlEncodedFormEntity entity = new UrlEncodedFormEntity( + getParamsList(paramsMap), "UTF-8"); + httpPost.setEntity(entity); + } else { + httpPost.setEntity(new StringEntity(jsonXMLString, + "UTF-8")); + } + + // 执行post请求 + HttpResponse httpResponse = httpClient.get().execute(httpPost); + + // 获取响应消息实体 + HttpEntity entityRep = httpResponse.getEntity(); + if (entityRep != null) { + //responseLength = entityRep.getContentLength(); + responseContent = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + + // 获取HTTP响应的状态码 + int statusCode = httpResponse.getStatusLine().getStatusCode(); + if (statusCode == HttpStatus.SC_OK) { + strRep = responseContent; // EntityUtils.toString(httpResponse.getEntity()); + + } else if ((statusCode == HttpStatus.SC_MOVED_TEMPORARILY) + || (statusCode == HttpStatus.SC_MOVED_PERMANENTLY) + || (statusCode == HttpStatus.SC_SEE_OTHER) + || (statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) { + // 重定向处理,获得跳转的网址 + // Header locationHeader = + // httpResponse.getFirstHeader("Location"); + // if(locationHeader != null) { + // String successUrl = locationHeader.getValue(); + // } + } + + // Consume response content + EntityUtils.consume(entityRep); + // Do not need the rest + httpPost.abort(); + } + } catch (ClientProtocolException e) { + logger.error("ClientProtocolException", e); + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + logger.error("UnsupportedEncodingException", e); + e.printStackTrace(); + } catch (ConnectTimeoutException e) { + logger.error("ConnectTimeoutException", e); + e.printStackTrace(); + } catch (SocketTimeoutException e) { + logger.error("SocketTimeoutException", e); + e.printStackTrace(); + } catch (Exception e) { + logger.error("Exception", e); + e.printStackTrace(); + } finally { + httpPost.releaseConnection(); + } + + return strRep; + } + + /** + * 读取内容 + * @param in + * @return + * @throws Exception + */ + protected static String readContent(InputStream in) throws Exception { + BufferedInputStream buffer = new BufferedInputStream(in); + StringBuilder builder = new StringBuilder(); + byte[] bytes = new byte[1024]; + int line = 0; + while ((line = buffer.read(bytes)) != -1) { + builder.append(new String(bytes, 0, line, "UTF-8")); + } + + return builder.toString(); + } + + /** + * GET方式传参 + * + * @param url + * @param paramsMap + * @return + */ + public static String invokeUrl(String url, Map paramsMap) { + StringBuilder sb = new StringBuilder(); + sb.append(url); + int i = 0; + if (paramsMap != null && paramsMap.size() > 0) { + for (Map.Entry entry : paramsMap.entrySet()) { + if (i == 0 && !url.contains("?")) { + sb.append("?"); + } else { + sb.append("&"); + } + sb.append(entry.getKey()); + sb.append("="); + String value = entry.getValue(); + try { + sb.append(URLEncoder.encode(value, "UTF-8")); + } catch (UnsupportedEncodingException e) { + try { + sb.append(URLEncoder.encode(value, null)); + } catch (UnsupportedEncodingException e1) { + e1.printStackTrace(); + } + } + + i++; + } + } + + return sb.toString(); + } + + /** + * 将传入的键/值对参数转换为NameValuePair参数集 + * + * @param paramsMap + * 参数集, 键/值对 + * @return NameValuePair参数集 + */ + private static List getParamsList( + Map paramsMap) { + if (paramsMap == null || paramsMap.size() == 0) { + return null; + } + + // 创建参数队列 + List params = new ArrayList(); + for (Map.Entry map : paramsMap.entrySet()) { + params.add(new BasicNameValuePair(map.getKey(), map.getValue())); + } + + return params; + } + + /** + * 格式化XML + * + * @param inputXML + * @return + * @throws Exception + */ + public static String formatXML(String inputXML) throws Exception { + Document doc = DocumentHelper.parseText(inputXML); + StringWriter out = null; + if (doc != null) { + try { + OutputFormat format = OutputFormat.createPrettyPrint(); + out = new StringWriter(); + XMLWriter writer = new XMLWriter(out, format); + writer.write(doc); + writer.flush(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + out.close(); + } + + return out.toString(); + } + + return inputXML; + } + + @Override + public String doPost(String url) { + // TODO Auto-generated method stub + return null; + } +} diff --git a/src/main/java/com/xmomen/module/wx/util/HttpConnectionManager.java b/src/main/java/com/xmomen/module/wx/util/HttpConnectionManager.java new file mode 100644 index 0000000..7989e9c --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/HttpConnectionManager.java @@ -0,0 +1,141 @@ +package com.xmomen.module.wx.util; + +import java.io.IOException; +import java.io.InterruptedIOException; +import java.net.UnknownHostException; +import java.nio.charset.CodingErrorAction; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLException; + +import org.apache.commons.httpclient.ConnectTimeoutException; +import org.apache.http.Consts; +import org.apache.http.HttpEntityEnclosingRequest; +import org.apache.http.HttpRequest; +import org.apache.http.client.HttpRequestRetryHandler; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.config.ConnectionConfig; +import org.apache.http.config.MessageConstraints; +import org.apache.http.config.Registry; +import org.apache.http.config.RegistryBuilder; +import org.apache.http.config.SocketConfig; +import org.apache.http.conn.socket.ConnectionSocketFactory; +import org.apache.http.conn.socket.PlainConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContextBuilder; +import org.apache.http.conn.ssl.TrustStrategy; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.apache.http.protocol.HttpContext; + +/** + * @Title: HttpRequestUtils.java + * @Package com.udf.wechat.util.http + * @Description: TODO() + * @author jizong.li 85150225@qq.com + * @date 2014年10月11日 下午12:10:38 + * @version V1.0 + */ +public final class HttpConnectionManager { + + + private static final int MAX_TOTAL_CONNECTIONS = 800; //每个主机的最大并行链接数 + private static final int MAX_ROUTE_CONNECTIONS = 400; //客户端总并行链接最大数 + + + private static PoolingHttpClientConnectionManager connManager = null; + + static{ + SSLContextBuilder scb = new SSLContextBuilder(); + scb.useTLS(); + try { + SSLContext sslContext = scb.loadTrustMaterial(null,new TrustStrategy(){ + + //信任所有 + public boolean isTrusted(X509Certificate[] arg0, String arg1) + throws CertificateException { + return true; + } + + }).build(); + + Registry socketFactoryRegistry = RegistryBuilder. create() + .register("http", PlainConnectionSocketFactory.INSTANCE) + .register("https", new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER)).build(); + + //create connectionManager + connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); + + // Create socket configuration + SocketConfig socketConfig = SocketConfig.custom().setTcpNoDelay(true).build(); + connManager.setDefaultSocketConfig(socketConfig); + + // Create message constraints + MessageConstraints messageConstraints = MessageConstraints.custom().setMaxHeaderCount(200).setMaxLineLength(2000).build(); + + // Create connection configuration + ConnectionConfig connectionConfig = ConnectionConfig.custom() + .setMalformedInputAction(CodingErrorAction.IGNORE) + .setUnmappableInputAction(CodingErrorAction.IGNORE) + .setCharset(Consts.UTF_8) + .setMessageConstraints(messageConstraints).build(); + + connManager.setDefaultConnectionConfig(connectionConfig); + connManager.setMaxTotal(MAX_TOTAL_CONNECTIONS); + connManager.setDefaultMaxPerRoute(MAX_ROUTE_CONNECTIONS); + } catch (KeyManagementException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (KeyStoreException e) { + e.printStackTrace(); + } + } + + /** + * 异常自动处理,使用httpRequestRetryHandler接口实现请求的异常恢复 + */ + private static HttpRequestRetryHandler requestRetry = new HttpRequestRetryHandler() { + + /** + * 自定义的恢复策略 + */ + public boolean retryRequest(IOException exception, int exceptionCount, + HttpContext context) { + if (exceptionCount >= 3) + return false; + if (exception instanceof InterruptedIOException) { + return false; + } + if (exception instanceof UnknownHostException) { + return false; + } + if (exception instanceof ConnectTimeoutException) { + return false; + } + if (exception instanceof SSLException) { + return false; + } + HttpClientContext clientContext = HttpClientContext.adapt(context); + HttpRequest request = clientContext.getRequest(); + boolean idempotent = !(request instanceof HttpEntityEnclosingRequest); + if (idempotent) { + return true; + } + return false; + } + + }; + + public static CloseableHttpClient getHttpClient(){ + return HttpClients.custom().setConnectionManager(connManager) + .setRetryHandler(requestRetry).build(); + } + +} diff --git a/src/main/java/com/xmomen/module/wx/util/HttpUtils.java b/src/main/java/com/xmomen/module/wx/util/HttpUtils.java new file mode 100644 index 0000000..c4b10cb --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/HttpUtils.java @@ -0,0 +1,355 @@ +package com.xmomen.module.wx.util; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.params.HttpConnectionManagerParams; +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class HttpUtils { + // 请求超时时间 + private static final int REQUEST_TIME_OUT = 1 * 60 * 1000; + + // 连接超时时间 + private static final int CONN_TIME_OUT = 5 * 60 * 1000; + + // 数据传输时间 + private static final int SO_TIME_OUT = 10 * 60 * 1000; + + static Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 取得远程地址IP + * + * @param request HttpServletRequest + * @return 远程地址IP + */ + public static String getRemoteIp(HttpServletRequest request) { + String remoteIp = request.getHeader("x-forwarded-for"); + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getHeader("X-Real-IP"); + } + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getHeader("X-Forwarded-For"); + } + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getHeader("Proxy-Client-IP"); + } + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getHeader("WL-Proxy-Client-IP"); + } + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getHeader("HTTP_CLIENT_IP"); + } + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getRemoteAddr(); + } + if (remoteIp == null || remoteIp.isEmpty() || "unknown".equalsIgnoreCase(remoteIp)) { + remoteIp = request.getRemoteHost(); + } + return remoteIp; + } + + /** + * Post 请求 + * + * @param url URL地址 + * @param encode 编码格式 + * @param params 参数键值列表 + * @return 响应结果 + */ + public static String httpPost(String url, String encode, Map params) { + HttpURLConnection con = null; + OutputStreamWriter osw = null; + BufferedReader br = null; + + //读取返回内容 + StringBuffer buffer = new StringBuffer(); + + //尝试发送请求 + try { + URL u = new URL(url); + + //建立连接 + con = (HttpURLConnection) u.openConnection(); + + //设置请求方式 POST + con.setRequestMethod("POST"); + con.setDoOutput(true); + con.setDoInput(true); + con.setUseCaches(false); + con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + osw = new OutputStreamWriter(con.getOutputStream(), encode); + con.setConnectTimeout(3000); + con.setReadTimeout(3000); + //构建请求参数 + osw.write(getParams(params).toString()); + osw.flush(); + + //按照encode获取返回内容 + br = new BufferedReader(new InputStreamReader(con.getInputStream(), encode)); + + String temp; + while ((temp = br.readLine()) != null) { + buffer.append(temp); + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(br); + IOUtils.closeQuietly(osw); + closeConnect(con); + } + return buffer.toString(); + } + + /** + * @param url URL地址 + * @param encode 编码格式 + * @param params 参数键值列表 + * @return 响应结果 + */ + public static String httpGet(String url, String encode, Map params) { + HttpURLConnection con = null; + BufferedReader br = null; + // 读取返回内容 + StringBuffer buffer = new StringBuffer(); + + // 尝试发送请求 + try { + //构建带请求参数的URL + URL u = new URL(url + "?" + getParams(params).toString()); + + //建立连接 + con = (HttpURLConnection) u.openConnection(); + + //设置请求方式 GET + con.setRequestMethod("GET"); + + con.setDoOutput(true); + con.setDoInput(true); + con.setUseCaches(false); + con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + con.setConnectTimeout(3000); + con.setReadTimeout(3000); + + //按照encode获取返回内容 + br = new BufferedReader(new InputStreamReader(con.getInputStream(), encode)); + + String temp; + while ((temp = br.readLine()) != null) { + buffer.append(temp); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + IOUtils.closeQuietly(br); + closeConnect(con); + } + return buffer.toString(); + } + + /** + * GET请求 + * + * @param url 请求url + * @return 返回请求结果 + */ + public static String doGet(String url) { + HttpClient client = new HttpClient(); + HttpMethod method = new GetMethod(url); + String result = ""; + try { + method.setRequestHeader("Content-Type", "text/html;charset=utf-8"); + + //设置页面编码 + method.getParams().setContentCharset("UTF-8"); + + HttpConnectionManagerParams managerParams = client.getHttpConnectionManager().getParams(); + + // 设置连接超时时间(单位毫秒) + managerParams.setConnectionTimeout(CONN_TIME_OUT); + + // 设置读数据超时时间(单位毫秒) + managerParams.setSoTimeout(SO_TIME_OUT); + + client.executeMethod(method); + + //获取返回的JSON数据 + result = method.getResponseBodyAsString(); + } catch (Exception e) { + log.error("GET请求发生系统异常:", e); + } finally { + try { + // 释放连接 + method.releaseConnection(); + } catch (Exception ex) { + } + } + return result; + } + + /** + * 获取参数 + * + * @param params 键值对参数集合 + * @return 参数键值字符串 + */ + public static StringBuffer getParams(Map params) { + StringBuffer sb = new StringBuffer(); + + //拼装参数 + if (params != null) { + for (Map.Entry e : params.entrySet()) { + sb.append(e.getKey()); + sb.append("="); + sb.append(e.getValue()); + sb.append("&"); + } + sb.substring(0, sb.length() - 1); + } + + return sb; + } + + /** + * POST请求 + * + * @param url 请求url + * @param paramsMap 请求参数MAP + * @param jsonXMLString body json字符串 + * @return + */ + public static String doPost(String url, Map paramsMap, String jsonXMLString) { + HttpPost httpPost = new HttpPost(url); + // set header + setHeader(httpPost, url); + + RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(SO_TIME_OUT).setConnectTimeout(CONN_TIME_OUT).setConnectionRequestTimeout(REQUEST_TIME_OUT).setExpectContinueEnabled(false).build(); + + // RequestConfig.DEFAULT + httpPost.setConfig(requestConfig); + + // 响应内容 + String responseContent = null; + String strRep = null; + ThreadLocal httpClient = new ThreadLocal(); + try { + if (paramsMap != null && jsonXMLString == null) { + UrlEncodedFormEntity entity = new UrlEncodedFormEntity(getParamsList(paramsMap), "UTF-8"); + httpPost.setEntity(entity); + } + else { + httpPost.setEntity(new StringEntity(jsonXMLString, "UTF-8")); + } + + // 执行post请求 + CloseableHttpClient client = HttpConnectionManager.getHttpClient(); + httpClient.set(client); + HttpResponse httpResponse = httpClient.get().execute(httpPost); + + // 获取响应消息实体 + HttpEntity entityRep = httpResponse.getEntity(); + if (entityRep != null) { + responseContent = EntityUtils.toString(httpResponse.getEntity(), "UTF-8"); + + // 获取HTTP响应的状态码 + int statusCode = httpResponse.getStatusLine().getStatusCode(); + + if (statusCode == HttpStatus.SC_OK) { + strRep = responseContent; + } + else if ((statusCode == HttpStatus.SC_MOVED_TEMPORARILY) + || (statusCode == HttpStatus.SC_MOVED_PERMANENTLY) + || (statusCode == HttpStatus.SC_SEE_OTHER) + || (statusCode == HttpStatus.SC_TEMPORARY_REDIRECT)) { + } + // Consume response content + EntityUtils.consume(entityRep); + // Do not need the rest + httpPost.abort(); + } + } catch (Exception e) { + log.error("POST请求发生系统异常:", e); + } finally { + httpPost.releaseConnection(); + } + return strRep; + } + + /** + * 将传入的键/值对参数转换为NameValuePair参数集 + * + * @param paramsMap 参数集, 键/值对 + * @return NameValuePair参数集 + */ + private static List getParamsList( + Map paramsMap) { + if (paramsMap == null || paramsMap.size() == 0) { + return null; + } + // 创建参数队列 + List params = new ArrayList(); + for (Map.Entry map : paramsMap.entrySet()) { + params.add(new BasicNameValuePair(map.getKey(), map.getValue())); + } + return params; + } + + /** + * 请求头设置 + **/ + private static void setHeader(HttpRequestBase hg, String url) { + if (null != hg) { + hg.addHeader("Referer", url); + hg.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); + hg.addHeader("Connection", "keep-alive"); + hg.addHeader("Cache-Control", "max-age=0"); + hg.addHeader("Accept-Language", "zh-CN,zh;q=0.8"); + hg.addHeader("Accept-Charset", "zh-GBK,utf-8;q=0.7,*;q=0.3"); + } + } + + /** + * 关闭HTTP连接 + * + * @param con http连接 + */ + private static void closeConnect(HttpURLConnection con) { + try { + if (con != null) { + con.disconnect(); + } + } catch (Exception ex) { + log.error("HttpURLConnection连接关闭失败:", ex); + } + } +} diff --git a/src/main/java/com/xmomen/module/wx/util/MessageUtils.java b/src/main/java/com/xmomen/module/wx/util/MessageUtils.java new file mode 100644 index 0000000..925ca6b --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/MessageUtils.java @@ -0,0 +1,86 @@ +package com.xmomen.module.wx.util; + +import com.xmomen.module.wx.model.responseModel.ResponseMessageBase; +import com.xmomen.module.wx.model.responseModel.ResponseMessageNews; +import com.xmomen.module.wx.model.responseModel.ResponseMessageText; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.core.util.QuickWriter; +import com.thoughtworks.xstream.io.HierarchicalStreamWriter; +import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; +import com.thoughtworks.xstream.io.xml.XppDriver; + +import java.io.Writer; + +/** + * 微信消息解析 + */ +public class MessageUtils { + /** + * 回复消息封装微信格式 + */ + private static XStream xstream = new XStream(new XppDriver() { + @Override + public HierarchicalStreamWriter createWriter(Writer out) { + return new PrettyPrintWriter(out) { + @Override + @SuppressWarnings("rawtypes") + public void startNode(String name, Class clazz) { + //节点属性 首字母大写 排除xml item + if (!"xml".equals(name) && !"item".equals(name)) { + name = name.substring(0, 1).toUpperCase() + name.substring(1); + } + super.startNode(name, clazz); + } + + @Override + protected void writeText(QuickWriter writer, String text) { + // 对所有xml节点的转换都增加CDATA标记 + writer.write(""); + } + }; + } + }); + + /** + * 图文消息转换成xml + * + * @param newsMessage + * @return + */ + public static String newsMessageToXml(ResponseMessageNews newsMessage) { + xstream.alias("xml", newsMessage.getClass()); + xstream.alias("item", newsMessage.new Article().getClass()); + return xstream.toXML(newsMessage); + } + + /** + * 文本消息转换成xml + * + * @param textMessage + * @return + */ + public static String textMessageToXml(ResponseMessageText textMessage) { + xstream.alias("xml", textMessage.getClass()); + return xstream.toXML(textMessage); + } + + /** + * 将ResponseMessageBase实体转换成xml + * + * @param entity 封装好的消息 + * @return 解析组装之后的xml + */ + public static String convertEntityToXml(ResponseMessageBase entity) { + //回复文本消息 + if (entity instanceof ResponseMessageText) { + return textMessageToXml((ResponseMessageText) entity); + } + //回复图文消息 + if (entity instanceof ResponseMessageNews) { + return newsMessageToXml((ResponseMessageNews) entity); + } + return null; + } +} diff --git a/src/main/java/com/xmomen/module/wx/util/PropertiesUtils.java b/src/main/java/com/xmomen/module/wx/util/PropertiesUtils.java new file mode 100644 index 0000000..c767567 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/PropertiesUtils.java @@ -0,0 +1,98 @@ +package com.xmomen.module.wx.util; + +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Properties; + +/** + * @Title: PropertiesUtils.java + * @Package com.udf.wechat.util + * @Description: TODO() + * @author jizong.li 85150225@qq.com + * @date 2014年10月11日 下午4:05:10 + * @version V1.0 + */ +public class PropertiesUtils { + + /** + * 获取属性文件的数据 根据key获取值 + * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上) + * @param key + * @return + */ + public static String findPropertiesKey(String key) { + + try { + Properties prop = getProperties(); + return prop.getProperty(key); + } catch (Exception e) { + return ""; + } + + } + + + public static void main(String[] args) { + Properties prop = new Properties(); + InputStream in = PropertiesUtils.class + .getResourceAsStream("/properties/config.properties"); + try { + prop.load(in); + Iterator> itr = prop.entrySet().iterator(); + while (itr.hasNext()) { + Entry e = (Entry) itr.next(); + System.err.println((e.getKey().toString() + "" + e.getValue() + .toString())); + } + } catch (Exception e) { + + } + } + + /** + * 返回 Properties + * @param fileName 文件名 (注意:加载的是src下的文件,如果在某个包下.请把包名加上) + * @param + * @return + */ + public static Properties getProperties(){ + Properties prop = new Properties(); + String savePath = PropertiesUtils.class.getResource("/properties/config.properties").getPath(); + //以下方法读取属性文件会缓存问题 +// InputStream in = PropertiesUtils.class +// .getResourceAsStream("/config.properties"); + try { + InputStream in =new BufferedInputStream(new FileInputStream(savePath)); + prop.load(in); + } catch (Exception e) { + return null; + } + return prop; + } + /** + * 写入properties信息 + * + * @param key + * 名称 + * @param value + * 值 + */ + public static void modifyProperties(String key, String value) { + try { + // 从输入流中读取属性列表(键和元素对) + Properties prop = getProperties(); + prop.setProperty(key, value); + String path = PropertiesUtils.class.getResource("/properties/config.properties").getPath(); + FileOutputStream outputFile = new FileOutputStream(path); + prop.store(outputFile, "modify"); + outputFile.close(); + outputFile.flush(); + } catch (Exception e) { + } + } + +} diff --git a/src/main/java/com/xmomen/module/wx/util/WeixinMediaUtils.java b/src/main/java/com/xmomen/module/wx/util/WeixinMediaUtils.java new file mode 100644 index 0000000..4a17512 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/WeixinMediaUtils.java @@ -0,0 +1,79 @@ +package com.xmomen.module.wx.util; + +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.xmomen.framework.utils.StringUtilsExt; +import com.xmomen.module.wx.constants.WeixinConsts; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +/** + * 微信上传下载多媒体文件工具类 + */ +public class WeixinMediaUtils { + + static Logger log = LoggerFactory.getLogger(WeixinMediaUtils.class); + + /** + * 获取媒体文件 + * + * @param accessToken 访问令牌 + * @param mediaId 媒体ID + * @param file 存储文件 + * @return 媒体文件类型 + */ + public static String downloadMedia(String accessToken, String mediaId, File file) { + String requestUrl = WeixinConsts.GET_MEDIA_FILE.replace("{ACCESS_TOKEN}", accessToken).replace("{MEDIA_ID}", mediaId); + + HttpURLConnection conn = null; + BufferedInputStream bis = null; + FileOutputStream fos = null; + try { + URL url = new URL(requestUrl); + conn = (HttpURLConnection) url.openConnection(); + conn.setDoInput(true); + conn.setRequestMethod("GET"); + + //类型 + String contentType = conn.getHeaderField("Content-Type"); + + bis = new BufferedInputStream(conn.getInputStream()); + fos = new FileOutputStream(file); + byte[] buf = new byte[8096]; + int size = 0; + while ((size = bis.read(buf)) != -1) { + fos.write(buf, 0, size); + } + return contentType; + + } catch (Exception e) { + log.error(e.getMessage(), e); + } finally { + IOUtils.closeQuietly(fos); + IOUtils.closeQuietly(bis); + try { + conn.disconnect(); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + return StringUtilsExt.EMPTY; + } + + /** + * 通过类型获取文件后缀 + * + * @param contentType + * @return + */ + private static String getFileEndWitsh(String contentType) { + String witsh = contentType.split("/")[1]; + return "." + witsh; + } +} diff --git a/src/main/java/com/xmomen/module/wx/util/XMLUtils.java b/src/main/java/com/xmomen/module/wx/util/XMLUtils.java new file mode 100644 index 0000000..fa7f161 --- /dev/null +++ b/src/main/java/com/xmomen/module/wx/util/XMLUtils.java @@ -0,0 +1,201 @@ +package com.xmomen.module.wx.util; + +import org.json.JSONException; +import org.json.JSONObject; +import org.json.XML; +import org.json.XMLTokener; + +/** + * 将XML的toJSONObject 方法改写下 以便满足微信的xml解析 + */ +public class XMLUtils extends XML { + + public static com.alibaba.fastjson.JSONObject xmlToJSONObject(String string) throws JSONException { + + JSONObject jo = new JSONObject(); + + XMLTokener x = new XMLTokener(string); + + while (x.more() && x.skipPast("<")) { + parse(x, jo, (String) null); + } + com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(jo.toString()); + return jsonObject; + } + + /** + * XML内置parse方法(定制化) + * + * @param x + * @param context + * @param name + * @return + * @throws JSONException + */ + private static boolean parse(XMLTokener x, JSONObject context, String name) throws JSONException { + JSONObject jsonobject = null; + Object token = x.nextToken(); + String string; + if (token == BANG) { + char c = x.next(); + if (c == 45) { + if (x.next() == 45) { + x.skipPast("-->"); + return false; + } + + x.back(); + } + else if (c == 91) { + token = x.nextToken(); + if ("CDATA".equals(token) && x.next() == 91) { + string = x.nextCDATA(); + if (string.length() > 0) { + context.accumulate("content", string); + } + + return false; + } + + throw x.syntaxError("Expected \'CDATA[\'"); + } + + int i = 1; + + do { + token = x.nextMeta(); + if (token == null) { + throw x.syntaxError("Missing \'>\' after \' 0); + + return false; + } + else if (token == QUEST) { + x.skipPast("?>"); + return false; + } + else if (token == SLASH) { + token = x.nextToken(); + String endTagName = (String) token; + //xml剔除 + if ("xml".equals(endTagName)) { + return true; + } + //将微信的请求消息的首字母改为小写 + endTagName = endTagName.substring(0, 1).toLowerCase() + endTagName.substring(1); + if (name == null) { + throw x.syntaxError("Mismatched close tag " + token); + } + else if (!endTagName.equals(name)) { + throw x.syntaxError("Mismatched " + name + " and " + token); + } + else if (x.nextToken() != GT) { + throw x.syntaxError("Misshaped close tag"); + } + else { + return true; + } + } + else if (token instanceof Character) { + throw x.syntaxError("Misshaped tag"); + } + else { + String tagName = (String) token; + //剔除xml节点 + if ("xml".equals(tagName)) { + return true; + } + //将微信的请求消息的首字母改为小写 + tagName = tagName.substring(0, 1).toLowerCase() + tagName.substring(1); + + token = null; + jsonobject = new JSONObject(); + + while (true) { + if (token == null) { + token = x.nextToken(); + } + + if (!(token instanceof String)) { + if (token == SLASH) { + if (x.nextToken() != GT) { + throw x.syntaxError("Misshaped tag"); + } + + if (jsonobject.length() > 0) { + context.accumulate(tagName, jsonobject); + } + else { + context.accumulate(tagName, ""); + } + + return false; + } + + if (token != GT) { + throw x.syntaxError("Misshaped tag"); + } + + while (true) { + token = x.nextContent(); + if (token == null) { + if (tagName != null) { + throw x.syntaxError("Unclosed tag " + tagName); + } + + return false; + } + + if (token instanceof String) { + string = (String) token; + //剔除xml节点 + if (!"xml".equals(string)) { + //将微信的请求消息的首字母改为小写 + string = string.substring(0, 1).toLowerCase() + string.substring(1); + if (string.length() > 0) { + jsonobject.accumulate("content", JSONObject.stringToValue(string)); + } + } + } + else if (token == LT && parse(x, jsonobject, tagName)) { + if (jsonobject.length() == 0) { + context.accumulate(tagName, ""); + } + else if (jsonobject.length() == 1 && jsonobject.opt("content") != null) { + context.accumulate(tagName, jsonobject.opt("content")); + } + else { + context.accumulate(tagName, jsonobject); + } + + return false; + } + } + } + + string = (String) token; + token = x.nextToken(); + if (token == EQ) { + token = x.nextToken(); + if (!(token instanceof String)) { + throw x.syntaxError("Missing value"); + } + + jsonobject.accumulate(string, JSONObject.stringToValue((String) token)); + token = null; + } + else { + jsonobject.accumulate(string, ""); + } + } + } + } +} diff --git a/src/main/java/org/csource/common/MyException.java b/src/main/java/org/csource/common/MyException.java new file mode 100644 index 0000000..346ff3c --- /dev/null +++ b/src/main/java/org/csource/common/MyException.java @@ -0,0 +1,26 @@ +/* +* Copyright (C) 2008 Happy Fish / YuQing +* +* FastDFS Java Client may be copied only under the terms of the GNU Lesser +* General Public License (LGPL). +* Please visit the FastDFS Home Page http://www.csource.org/ for more detail. +*/ + +package org.csource.common; + +/** +* My Exception +* @author Happy Fish / YuQing +* @version Version 1.0 +*/ +public class MyException extends Exception +{ + public MyException() + { + } + + public MyException(String message) + { + super(message); + } +} diff --git a/src/main/java/org/csource/fastdfs/DownloadCallback.java b/src/main/java/org/csource/fastdfs/DownloadCallback.java new file mode 100644 index 0000000..0acbe35 --- /dev/null +++ b/src/main/java/org/csource/fastdfs/DownloadCallback.java @@ -0,0 +1,31 @@ +/** +* Copyright (C) 2008 Happy Fish / YuQing +* +* FastDFS Java Client may be copied only under the terms of the GNU Lesser +* General Public License (LGPL). +* Please visit the FastDFS Home Page http://www.csource.org/ for more detail. +*/ + +package org.csource.fastdfs; + +import java.io.*; +import java.util.*; +import java.net.*; +import org.csource.common.*; + +/** +* Download file callback interface +* @author Happy Fish / YuQing +* @version Version 1.4 +*/ +public interface DownloadCallback +{ + /** + * recv file content callback function, may be called more than once when the file downloaded + * @param file_size file size + * @param data data buff + * @param bytes data bytes + * @return 0 success, return none zero(errno) if fail + */ + public int recv(long file_size, byte[] data, int bytes); +} diff --git a/src/main/java/org/csource/fastdfs/DownloadStream.java b/src/main/java/org/csource/fastdfs/DownloadStream.java new file mode 100644 index 0000000..d1eb8ce --- /dev/null +++ b/src/main/java/org/csource/fastdfs/DownloadStream.java @@ -0,0 +1,50 @@ +package org.csource.fastdfs; + +import java.io.IOException; +import java.io.OutputStream; +import org.csource.fastdfs.DownloadCallback; + +/** +* Download file by stream (download callback class) +* @author zhouzezhong & Happy Fish / YuQing +* @version Version 1.11 +*/ +public class DownloadStream implements DownloadCallback +{ + private OutputStream out; + private long currentBytes = 0; + + public DownloadStream(OutputStream out) + { + super(); + this.out = out; + } + + /** + * recv file content callback function, may be called more than once when the file downloaded + * @param fileSize file size + * @param data data buff + * @param bytes data bytes + * @return 0 success, return none zero(errno) if fail + */ + public int recv(long fileSize, byte[] data, int bytes) + { + try + { + out.write(data, 0, bytes); + } + catch(IOException ex) + { + ex.printStackTrace(); + return -1; + } + + currentBytes += bytes; + if (this.currentBytes == fileSize) + { + this.currentBytes = 0; + } + + return 0; + } +} diff --git a/src/main/java/org/csource/fastdfs/FileInfo.java b/src/main/java/org/csource/fastdfs/FileInfo.java new file mode 100644 index 0000000..b1280e9 --- /dev/null +++ b/src/main/java/org/csource/fastdfs/FileInfo.java @@ -0,0 +1,125 @@ +/** +* Copyright (C) 2008 Happy Fish / YuQing +* +* FastDFS Java Client may be copied only under the terms of the GNU Lesser +* General Public License (LGPL). +* Please visit the FastDFS Home Page http://www.csource.org/ for more detail. +*/ + +package org.csource.fastdfs; + +import java.util.Date; +import java.text.SimpleDateFormat; + +/** +* Server Info +* @author Happy Fish / YuQing +* @version Version 1.23 +*/ +public class FileInfo +{ + protected String source_ip_addr; + protected long file_size; + protected Date create_timestamp; + protected int crc32; + +/** +* Constructor +* @param file_size the file size +* @param create_timestamp create timestamp in seconds +* @param crc32 the crc32 signature +* @param source_ip_addr the source storage ip address +*/ + public FileInfo(long file_size, int create_timestamp, int crc32, String source_ip_addr) + { + this.file_size = file_size; + this.create_timestamp = new Date(create_timestamp * 1000L); + this.crc32 = crc32; + this.source_ip_addr = source_ip_addr; + } + +/** +* set the source ip address of the file uploaded to +* @param source_ip_addr the source ip address +*/ + public void setSourceIpAddr(String source_ip_addr) + { + this.source_ip_addr = source_ip_addr; + } + +/** +* get the source ip address of the file uploaded to +* @return the source ip address of the file uploaded to +*/ + public String getSourceIpAddr() + { + return this.source_ip_addr; + } + +/** +* set the file size +* @param file_size the file size +*/ + public void setFileSize(long file_size) + { + this.file_size = file_size; + } + +/** +* get the file size +* @return the file size +*/ + public long getFileSize() + { + return this.file_size; + } + +/** +* set the create timestamp of the file +* @param create_timestamp create timestamp in seconds +*/ + public void setCreateTimestamp(int create_timestamp) + { + this.create_timestamp = new Date(create_timestamp * 1000L); + } + +/** +* get the create timestamp of the file +* @return the create timestamp of the file +*/ + public Date getCreateTimestamp() + { + return this.create_timestamp; + } + +/** +* set the create timestamp of the file +* @param crc32 the crc32 signature +*/ + public void setCrc32(int crc32) + { + this.crc32 = crc32; + } + +/** +* get the file CRC32 signature +* @return the file CRC32 signature +*/ + public long getCrc32() + { + return this.crc32; + } + +/** +* to string +* @return string +*/ + public String toString() + { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return "source_ip_addr = " + this.source_ip_addr + ", " + + "file_size = " + this.file_size + ", " + + "create_timestamp = " + df.format(this.create_timestamp) + ", " + + "crc32 = " + this.crc32; + } +} diff --git a/src/main/java/org/csource/fastdfs/ProtoCommon.java b/src/main/java/org/csource/fastdfs/ProtoCommon.java new file mode 100644 index 0000000..abfe860 --- /dev/null +++ b/src/main/java/org/csource/fastdfs/ProtoCommon.java @@ -0,0 +1,553 @@ +/** +* Copyright (C) 2008 Happy Fish / YuQing +* +* FastDFS Java Client may be copied only under the terms of the GNU Lesser +* General Public License (LGPL). +* Please visit the FastDFS Home Page http://www.csource.org/ for more detail. +**/ + +package org.csource.fastdfs; + +import java.io.InputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.net.Socket; +import org.csource.common.MyException; +import org.csource.common.NameValuePair; + +/** +* protocol common functions +* @author Happy Fish / YuQing +* @version Version 1.18 +*/ +public class ProtoCommon +{ + /** + * receive package info + */ + public static class RecvPackageInfo + { + public byte errno; + public byte[] body; + + public RecvPackageInfo(byte errno, byte[] body) + { + this.errno = errno; + this.body = body; + } + } + + /** + * receive header info + */ + public static class RecvHeaderInfo + { + public byte errno; + public long body_len; + + public RecvHeaderInfo(byte errno, long body_len) + { + this.errno = errno; + this.body_len = body_len; + } + } + + public static final byte FDFS_PROTO_CMD_QUIT = 82; + public static final byte TRACKER_PROTO_CMD_SERVER_LIST_GROUP = 91; + public static final byte TRACKER_PROTO_CMD_SERVER_LIST_STORAGE = 92; + public static final byte TRACKER_PROTO_CMD_SERVER_DELETE_STORAGE = 93; + + public static final byte TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ONE = 101; + public static final byte TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ONE = 102; + public static final byte TRACKER_PROTO_CMD_SERVICE_QUERY_UPDATE = 103; + public static final byte TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ONE = 104; + public static final byte TRACKER_PROTO_CMD_SERVICE_QUERY_FETCH_ALL = 105; + public static final byte TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ALL = 106; + public static final byte TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ALL = 107; + public static final byte TRACKER_PROTO_CMD_RESP = 100; + public static final byte FDFS_PROTO_CMD_ACTIVE_TEST = 111; + public static final byte STORAGE_PROTO_CMD_UPLOAD_FILE = 11; + public static final byte STORAGE_PROTO_CMD_DELETE_FILE = 12; + public static final byte STORAGE_PROTO_CMD_SET_METADATA = 13; + public static final byte STORAGE_PROTO_CMD_DOWNLOAD_FILE = 14; + public static final byte STORAGE_PROTO_CMD_GET_METADATA = 15; + public static final byte STORAGE_PROTO_CMD_UPLOAD_SLAVE_FILE = 21; + public static final byte STORAGE_PROTO_CMD_QUERY_FILE_INFO = 22; + public static final byte STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE= 23; //create appender file + public static final byte STORAGE_PROTO_CMD_APPEND_FILE = 24; //append file + public static final byte STORAGE_PROTO_CMD_MODIFY_FILE = 34; //modify appender file + public static final byte STORAGE_PROTO_CMD_TRUNCATE_FILE = 36; //truncate appender file + + public static final byte STORAGE_PROTO_CMD_RESP = TRACKER_PROTO_CMD_RESP; + + public static final byte FDFS_STORAGE_STATUS_INIT = 0; + public static final byte FDFS_STORAGE_STATUS_WAIT_SYNC = 1; + public static final byte FDFS_STORAGE_STATUS_SYNCING = 2; + public static final byte FDFS_STORAGE_STATUS_IP_CHANGED = 3; + public static final byte FDFS_STORAGE_STATUS_DELETED = 4; + public static final byte FDFS_STORAGE_STATUS_OFFLINE = 5; + public static final byte FDFS_STORAGE_STATUS_ONLINE = 6; + public static final byte FDFS_STORAGE_STATUS_ACTIVE = 7; + public static final byte FDFS_STORAGE_STATUS_NONE = 99; + + /** + * for overwrite all old metadata + */ + public static final byte STORAGE_SET_METADATA_FLAG_OVERWRITE = 'O'; + + /** + * for replace, insert when the meta item not exist, otherwise update it + */ + public static final byte STORAGE_SET_METADATA_FLAG_MERGE = 'M'; + + public static final int FDFS_PROTO_PKG_LEN_SIZE = 8; + public static final int FDFS_PROTO_CMD_SIZE = 1; + public static final int FDFS_GROUP_NAME_MAX_LEN = 16; + public static final int FDFS_IPADDR_SIZE = 16; + public static final int FDFS_DOMAIN_NAME_MAX_SIZE = 128; + public static final int FDFS_VERSION_SIZE = 6; + public static final int FDFS_STORAGE_ID_MAX_SIZE = 16; + + public static final String FDFS_RECORD_SEPERATOR = "\u0001"; + public static final String FDFS_FIELD_SEPERATOR = "\u0002"; + + public static final int TRACKER_QUERY_STORAGE_FETCH_BODY_LEN = FDFS_GROUP_NAME_MAX_LEN + + FDFS_IPADDR_SIZE - 1 + FDFS_PROTO_PKG_LEN_SIZE; + public static final int TRACKER_QUERY_STORAGE_STORE_BODY_LEN = FDFS_GROUP_NAME_MAX_LEN + + FDFS_IPADDR_SIZE + FDFS_PROTO_PKG_LEN_SIZE; + + protected static final int PROTO_HEADER_CMD_INDEX = FDFS_PROTO_PKG_LEN_SIZE; + protected static final int PROTO_HEADER_STATUS_INDEX = FDFS_PROTO_PKG_LEN_SIZE+1; + + public static final byte FDFS_FILE_EXT_NAME_MAX_LEN = 6; + public static final byte FDFS_FILE_PREFIX_MAX_LEN = 16; + public static final byte FDFS_FILE_PATH_LEN = 10; + public static final byte FDFS_FILENAME_BASE64_LENGTH = 27; + public static final byte FDFS_TRUNK_FILE_INFO_LEN = 16; + + public static final byte ERR_NO_ENOENT = 2; + public static final byte ERR_NO_EIO = 5; + public static final byte ERR_NO_EBUSY = 16; + public static final byte ERR_NO_EINVAL = 22; + public static final byte ERR_NO_ENOSPC = 28; + public static final byte ECONNREFUSED = 61; + public static final byte ERR_NO_EALREADY = 114; + + public static final long INFINITE_FILE_SIZE = 256 * 1024L * 1024 * 1024 * 1024 * 1024L; + public static final long APPENDER_FILE_SIZE = INFINITE_FILE_SIZE; + public static final long TRUNK_FILE_MARK_SIZE = 512 * 1024L * 1024 * 1024 * 1024 * 1024L; + public static final long NORMAL_LOGIC_FILENAME_LENGTH = FDFS_FILE_PATH_LEN + FDFS_FILENAME_BASE64_LENGTH + FDFS_FILE_EXT_NAME_MAX_LEN + 1; + public static final long TRUNK_LOGIC_FILENAME_LENGTH = NORMAL_LOGIC_FILENAME_LENGTH + FDFS_TRUNK_FILE_INFO_LEN; + + private ProtoCommon() + { + } + + public static String getStorageStatusCaption(byte status) + { + switch(status) + { + case FDFS_STORAGE_STATUS_INIT: + return "INIT"; + case FDFS_STORAGE_STATUS_WAIT_SYNC: + return "WAIT_SYNC"; + case FDFS_STORAGE_STATUS_SYNCING: + return "SYNCING"; + case FDFS_STORAGE_STATUS_IP_CHANGED: + return "IP_CHANGED"; + case FDFS_STORAGE_STATUS_DELETED: + return "DELETED"; + case FDFS_STORAGE_STATUS_OFFLINE: + return "OFFLINE"; + case FDFS_STORAGE_STATUS_ONLINE: + return "ONLINE"; + case FDFS_STORAGE_STATUS_ACTIVE: + return "ACTIVE"; + case FDFS_STORAGE_STATUS_NONE: + return "NONE"; + default: + return "UNKOWN"; + } +} + +/** +* pack header by FastDFS transfer protocol +* @param cmd which command to send +* @param pkg_len package body length +* @param errno status code, should be (byte)0 +* @return packed byte buffer +*/ + public static byte[] packHeader(byte cmd, long pkg_len, byte errno) throws UnsupportedEncodingException + { + byte[] header; + byte[] hex_len; + + header = new byte[FDFS_PROTO_PKG_LEN_SIZE + 2]; + Arrays.fill(header, (byte)0); + + hex_len = ProtoCommon.long2buff(pkg_len); + System.arraycopy(hex_len, 0, header, 0, hex_len.length); + header[PROTO_HEADER_CMD_INDEX] = cmd; + header[PROTO_HEADER_STATUS_INDEX] = errno; + return header; + } + +/** +* receive pack header +* @param in input stream +* @param expect_cmd expect response command +* @param expect_body_len expect response package body length +* @return RecvHeaderInfo: errno and pkg body length +*/ + public static RecvHeaderInfo recvHeader(InputStream in, byte expect_cmd, long expect_body_len) throws IOException + { + byte[] header; + int bytes; + long pkg_len; + + header = new byte[FDFS_PROTO_PKG_LEN_SIZE + 2]; + + if ((bytes=in.read(header)) != header.length) + { + throw new IOException("recv package size " + bytes + " != " + header.length); + } + + if (header[PROTO_HEADER_CMD_INDEX] != expect_cmd) + { + throw new IOException("recv cmd: " + header[PROTO_HEADER_CMD_INDEX] + " is not correct, expect cmd: " + expect_cmd); + } + + if (header[PROTO_HEADER_STATUS_INDEX] != 0) + { + return new RecvHeaderInfo(header[PROTO_HEADER_STATUS_INDEX], 0); + } + + pkg_len = ProtoCommon.buff2long(header, 0); + if (pkg_len < 0) + { + throw new IOException("recv body length: " + pkg_len + " < 0!"); + } + + if (expect_body_len >= 0 && pkg_len != expect_body_len) + { + throw new IOException("recv body length: " + pkg_len + " is not correct, expect length: " + expect_body_len); + } + + return new RecvHeaderInfo((byte)0, pkg_len); + } + +/** +* receive whole pack +* @param in input stream +* @param expect_cmd expect response command +* @param expect_body_len expect response package body length +* @return RecvPackageInfo: errno and reponse body(byte buff) +*/ + public static RecvPackageInfo recvPackage(InputStream in, byte expect_cmd, long expect_body_len) throws IOException + { + RecvHeaderInfo header = recvHeader(in, expect_cmd, expect_body_len); + if (header.errno != 0) + { + return new RecvPackageInfo(header.errno, null); + } + + byte[] body = new byte[(int)header.body_len]; + int totalBytes = 0; + int remainBytes = (int)header.body_len; + int bytes; + + while (totalBytes < header.body_len) + { + if ((bytes=in.read(body, totalBytes, remainBytes)) < 0) + { + break; + } + + totalBytes += bytes; + remainBytes -= bytes; + } + + if (totalBytes != header.body_len) + { + throw new IOException("recv package size " + totalBytes + " != " + header.body_len); + } + + return new RecvPackageInfo((byte)0, body); + } + +/** +* split metadata to name value pair array +* @param meta_buff metadata +* @return name value pair array +*/ + public static NameValuePair[] split_metadata(String meta_buff) + { + return split_metadata(meta_buff, FDFS_RECORD_SEPERATOR, FDFS_FIELD_SEPERATOR); + } + +/** +* split metadata to name value pair array +* @param meta_buff metadata +* @param recordSeperator record/row seperator +* @param filedSeperator field/column seperator +* @return name value pair array +*/ + public static NameValuePair[] split_metadata(String meta_buff, + String recordSeperator, String filedSeperator) + { + String[] rows; + String[] cols; + NameValuePair[] meta_list; + + rows = meta_buff.split(recordSeperator); + meta_list = new NameValuePair[rows.length]; + for (int i=0; i> 56) & 0xFF); + bs[1] = (byte)((n >> 48) & 0xFF); + bs[2] = (byte)((n >> 40) & 0xFF); + bs[3] = (byte)((n >> 32) & 0xFF); + bs[4] = (byte)((n >> 24) & 0xFF); + bs[5] = (byte)((n >> 16) & 0xFF); + bs[6] = (byte)((n >> 8) & 0xFF); + bs[7] = (byte)(n & 0xFF); + + return bs; + } + +/** +* buff convert to long +* @param bs the buffer (big-endian) +* @param offset the start position based 0 +* @return long number +*/ + public static long buff2long(byte[] bs, int offset) + { + return (((long)(bs[offset] >= 0 ? bs[offset] : 256+bs[offset])) << 56) | + (((long)(bs[offset+1] >= 0 ? bs[offset+1] : 256+bs[offset+1])) << 48) | + (((long)(bs[offset+2] >= 0 ? bs[offset+2] : 256+bs[offset+2])) << 40) | + (((long)(bs[offset+3] >= 0 ? bs[offset+3] : 256+bs[offset+3])) << 32) | + (((long)(bs[offset+4] >= 0 ? bs[offset+4] : 256+bs[offset+4])) << 24) | + (((long)(bs[offset+5] >= 0 ? bs[offset+5] : 256+bs[offset+5])) << 16) | + (((long)(bs[offset+6] >= 0 ? bs[offset+6] : 256+bs[offset+6])) << 8) | + ((long)(bs[offset+7] >= 0 ? bs[offset+7] : 256+bs[offset+7])); + } + +/** +* buff convert to int +* @param bs the buffer (big-endian) +* @param offset the start position based 0 +* @return int number +*/ + public static int buff2int(byte[] bs, int offset) + { + return (((int)(bs[offset] >= 0 ? bs[offset] : 256+bs[offset])) << 24) | + (((int)(bs[offset+1] >= 0 ? bs[offset+1] : 256+bs[offset+1])) << 16) | + (((int)(bs[offset+2] >= 0 ? bs[offset+2] : 256+bs[offset+2])) << 8) | + ((int)(bs[offset+3] >= 0 ? bs[offset+3] : 256+bs[offset+3])); + } + +/** +* buff convert to ip address +* @param bs the buffer (big-endian) +* @param offset the start position based 0 +* @return ip address +*/ + public static String getIpAddress(byte[] bs, int offset) + { + if (bs[0] == 0 || bs[3] == 0) //storage server ID + { + return ""; + } + + int n; + StringBuilder sbResult = new StringBuilder(16); + for (int i=offset; i= 0) ? bs[i] : 256 + bs[i]; + if (sbResult.length() > 0) + { + sbResult.append("."); + } + sbResult.append(String.valueOf(n)); + } + + return sbResult.toString(); + } + + /** +* md5 function +* @param source the input buffer +* @return md5 string +*/ + public static String md5(byte[] source) throws NoSuchAlgorithmException + { + char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5"); + md.update(source); + byte tmp[] = md.digest(); + char str[] = new char[32]; + int k = 0; + for (int i = 0; i < 16; i++) + { + str[k++] = hexDigits[tmp[i] >>> 4 & 0xf]; + str[k++] = hexDigits[tmp[i] & 0xf]; + } + + return new String(str); + } + + /** +* get token for file URL +* @param remote_filename the filename return by FastDFS server +* @param ts unix timestamp, unit: second +* @param secret_key the secret key +* @return token string +*/ + public static String getToken(String remote_filename, int ts, String secret_key) throws UnsupportedEncodingException, NoSuchAlgorithmException, MyException + { + byte[] bsFilename = remote_filename.getBytes(ClientGlobal.g_charset); + byte[] bsKey = secret_key.getBytes(ClientGlobal.g_charset); + byte[] bsTimestamp = (new Integer(ts)).toString().getBytes(ClientGlobal.g_charset); + + byte[] buff = new byte[bsFilename.length + bsKey.length + bsTimestamp.length]; + System.arraycopy(bsFilename, 0, buff, 0, bsFilename.length); + System.arraycopy(bsKey, 0, buff, bsFilename.length, bsKey.length); + System.arraycopy(bsTimestamp, 0, buff, bsFilename.length + bsKey.length, bsTimestamp.length); + + return md5(buff); + } + + /** +* generate slave filename +* @param master_filename the master filename to generate the slave filename +* @param prefix_name the prefix name to generate the slave filename +* @param ext_name the extension name of slave filename, null for same as the master extension name +* @return slave filename string +*/ + public static String genSlaveFilename(String master_filename, + String prefix_name, String ext_name) throws MyException + { + String true_ext_name; + int dotIndex; + + if (master_filename.length() < 28 + FDFS_FILE_EXT_NAME_MAX_LEN) + { + throw new MyException("master filename \"" + master_filename + "\" is invalid"); + } + + dotIndex = master_filename.indexOf('.', master_filename.length() - (FDFS_FILE_EXT_NAME_MAX_LEN + 1)); + if (ext_name != null) + { + if (ext_name.length() == 0) + { + true_ext_name = ""; + } + else if (ext_name.charAt(0) == '.') + { + true_ext_name = ext_name; + } + else + { + true_ext_name = "." + ext_name; + } + } + else + { + if (dotIndex < 0) + { + true_ext_name = ""; + } + else + { + true_ext_name = master_filename.substring(dotIndex); + } + } + + if (true_ext_name.length() == 0 && prefix_name.equals("-m")) + { + throw new MyException("prefix_name \"" + prefix_name + "\" is invalid"); + } + + if (dotIndex < 0) + { + return master_filename + prefix_name + true_ext_name; + } + else + { + return master_filename.substring(0, dotIndex) + prefix_name + true_ext_name; + } + } +} diff --git a/src/main/java/org/csource/fastdfs/ProtoStructDecoder.java b/src/main/java/org/csource/fastdfs/ProtoStructDecoder.java new file mode 100644 index 0000000..c30cb6a --- /dev/null +++ b/src/main/java/org/csource/fastdfs/ProtoStructDecoder.java @@ -0,0 +1,55 @@ +/** +* Copyright (C) 2008 Happy Fish / YuQing +* +* FastDFS Java Client may be copied only under the terms of the GNU Lesser +* General Public License (LGPL). +* Please visit the FastDFS Home Page http://www.csource.org/ for more detail. +*/ + +package org.csource.fastdfs; + +import java.io.*; +import java.util.*; +import java.net.*; +import java.lang.reflect.Array; +import org.csource.common.*; + +/** +* C struct body decoder +* @author Happy Fish / YuQing +* @version Version 1.17 +*/ +public class ProtoStructDecoder +{ +/** +* Constructor +*/ + public ProtoStructDecoder() + { + } + +/** +* decode byte buffer +*/ + public T[] decode(byte[] bs, Class clazz, int fieldsTotalSize) throws Exception + { + if (bs.length % fieldsTotalSize != 0) + { + throw new IOException("byte array length: " + bs.length + " is invalid!"); + } + + int count = bs.length / fieldsTotalSize; + int offset; + T[] results = (T[])Array.newInstance(clazz, count); + + offset = 0; + for (int i=0; i= this.tracker_servers.length) + { + this.tracker_server_index = 0; + } + + current_index = this.tracker_server_index; + } + + try + { + return this.getConnection(current_index); + } + catch(IOException ex) + { + System.err.println("connect to server " + this.tracker_servers[current_index].getAddress().getHostAddress() + ":" + this.tracker_servers[current_index].getPort() + " fail"); + ex.printStackTrace(System.err); + } + + for (int i=0; i 0) + { + try + { + if ((bytes=inputStream.read(buff, 0, remainBytes > buff.length ? buff.length : (int)remainBytes)) < 0) + { + return -1; + } + } + catch(IOException ex) + { + ex.printStackTrace(); + return -1; + } + + out.write(buff, 0, bytes); + remainBytes -= bytes; + } + + return 0; + } +} diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdAttachmentMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdAttachmentMapper.xml new file mode 100644 index 0000000..9c681e5 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdAttachmentMapper.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, business_id, type, file_name, file_extend, file_path, upload_date, upload_user + + + + delete from cd_attachment + + + + + + insert into cd_attachment + + + id, + + + business_id, + + + type, + + + file_name, + + + file_extend, + + + file_path, + + + upload_date, + + + upload_user, + + + + + #{id,jdbcType=INTEGER}, + + + #{businessId,jdbcType=VARCHAR}, + + + #{type,jdbcType=VARCHAR}, + + + #{fileName,jdbcType=VARCHAR}, + + + #{fileExtend,jdbcType=VARCHAR}, + + + #{filePath,jdbcType=VARCHAR}, + + + #{uploadDate,jdbcType=TIMESTAMP}, + + + #{uploadUser,jdbcType=VARCHAR}, + + + + + + update cd_attachment + + + id = #{record.id,jdbcType=INTEGER}, + + + business_id = #{record.businessId,jdbcType=VARCHAR}, + + + type = #{record.type,jdbcType=VARCHAR}, + + + file_name = #{record.fileName,jdbcType=VARCHAR}, + + + file_extend = #{record.fileExtend,jdbcType=VARCHAR}, + + + file_path = #{record.filePath,jdbcType=VARCHAR}, + + + upload_date = #{record.uploadDate,jdbcType=TIMESTAMP}, + + + upload_user = #{record.uploadUser,jdbcType=VARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdBindMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdBindMapper.xml new file mode 100644 index 0000000..3f8188e --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdBindMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, user_id, PHONE, OPEN_ID + + + + delete from cd_bind + + + + + + insert into cd_bind + + + ID, + + + user_id, + + + PHONE, + + + OPEN_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{userId,jdbcType=INTEGER}, + + + #{phone,jdbcType=VARCHAR}, + + + #{openId,jdbcType=VARCHAR}, + + + + + + update cd_bind + + + ID = #{record.id,jdbcType=INTEGER}, + + + user_id = #{record.userId,jdbcType=INTEGER}, + + + PHONE = #{record.phone,jdbcType=VARCHAR}, + + + OPEN_ID = #{record.openId,jdbcType=VARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdCategoryMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdCategoryMapper.xml new file mode 100644 index 0000000..7b66716 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdCategoryMapper.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CATEGORY_NAME, PARENT_ID + + + + delete from cd_category + + + + + + insert into cd_category + + + ID, + + + CATEGORY_NAME, + + + PARENT_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{categoryName,jdbcType=VARCHAR}, + + + #{parentId,jdbcType=INTEGER}, + + + + + + update cd_category + + + ID = #{record.id,jdbcType=INTEGER}, + + + CATEGORY_NAME = #{record.categoryName,jdbcType=VARCHAR}, + + + PARENT_ID = #{record.parentId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdContractItemMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdContractItemMapper.xml new file mode 100644 index 0000000..18378c4 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdContractItemMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CD_CONTRACT_ID, CONTRACT_TYPE, CD_ITEM_ID, DISCOUNT, CONTRACT_VALUE + + + + delete from cd_contract_item + + + + + + insert into cd_contract_item + + + ID, + + + CD_CONTRACT_ID, + + + CONTRACT_TYPE, + + + CD_ITEM_ID, + + + DISCOUNT, + + + CONTRACT_VALUE, + + + + + #{id,jdbcType=INTEGER}, + + + #{cdContractId,jdbcType=INTEGER}, + + + #{contractType,jdbcType=INTEGER}, + + + #{cdItemId,jdbcType=INTEGER}, + + + #{discount,jdbcType=DOUBLE}, + + + #{contractValue,jdbcType=DECIMAL}, + + + + + + update cd_contract_item + + + ID = #{record.id,jdbcType=INTEGER}, + + + CD_CONTRACT_ID = #{record.cdContractId,jdbcType=INTEGER}, + + + CONTRACT_TYPE = #{record.contractType,jdbcType=INTEGER}, + + + CD_ITEM_ID = #{record.cdItemId,jdbcType=INTEGER}, + + + DISCOUNT = #{record.discount,jdbcType=DOUBLE}, + + + CONTRACT_VALUE = #{record.contractValue,jdbcType=DECIMAL}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdContractMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdContractMapper.xml new file mode 100644 index 0000000..47ffda8 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdContractMapper.xml @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CONTRACT_CODE, CONTRACT_NAME, CD_MEMBER_ID, CD_COMPANY_ID, SCOPE, CONTRACT_PRICE, + BEGIN_TIME, END_TIME, IS_DEL, IS_AUDITOR + + + + delete from cd_contract + + + + + + insert into cd_contract + + + ID, + + + CONTRACT_CODE, + + + CONTRACT_NAME, + + + CD_MEMBER_ID, + + + CD_COMPANY_ID, + + + SCOPE, + + + CONTRACT_PRICE, + + + BEGIN_TIME, + + + END_TIME, + + + IS_DEL, + + + IS_AUDITOR, + + + + + #{id,jdbcType=INTEGER}, + + + #{contractCode,jdbcType=VARCHAR}, + + + #{contractName,jdbcType=VARCHAR}, + + + #{cdMemberId,jdbcType=INTEGER}, + + + #{cdCompanyId,jdbcType=INTEGER}, + + + #{scope,jdbcType=INTEGER}, + + + #{contractPrice,jdbcType=DECIMAL}, + + + #{beginTime,jdbcType=TIMESTAMP}, + + + #{endTime,jdbcType=TIMESTAMP}, + + + #{isDel,jdbcType=INTEGER}, + + + #{isAuditor,jdbcType=INTEGER}, + + + + + + update cd_contract + + + ID = #{record.id,jdbcType=INTEGER}, + + + CONTRACT_CODE = #{record.contractCode,jdbcType=VARCHAR}, + + + CONTRACT_NAME = #{record.contractName,jdbcType=VARCHAR}, + + + CD_MEMBER_ID = #{record.cdMemberId,jdbcType=INTEGER}, + + + CD_COMPANY_ID = #{record.cdCompanyId,jdbcType=INTEGER}, + + + SCOPE = #{record.scope,jdbcType=INTEGER}, + + + CONTRACT_PRICE = #{record.contractPrice,jdbcType=DECIMAL}, + + + BEGIN_TIME = #{record.beginTime,jdbcType=TIMESTAMP}, + + + END_TIME = #{record.endTime,jdbcType=TIMESTAMP}, + + + IS_DEL = #{record.isDel,jdbcType=INTEGER}, + + + IS_AUDITOR = #{record.isAuditor,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdCouponCategoryMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdCouponCategoryMapper.xml new file mode 100644 index 0000000..3ab8e37 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdCouponCategoryMapper.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CATEGORY_TYPE, CATEGORY_NAME + + + + delete from cd_coupon_category + + + + + + insert into cd_coupon_category + + + ID, + + + CATEGORY_TYPE, + + + CATEGORY_NAME, + + + + + #{id,jdbcType=INTEGER}, + + + #{categoryType,jdbcType=INTEGER}, + + + #{categoryName,jdbcType=VARCHAR}, + + + + + + update cd_coupon_category + + + ID = #{record.id,jdbcType=INTEGER}, + + + CATEGORY_TYPE = #{record.categoryType,jdbcType=INTEGER}, + + + CATEGORY_NAME = #{record.categoryName,jdbcType=VARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdCouponRefMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdCouponRefMapper.xml new file mode 100644 index 0000000..8eb50b3 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdCouponRefMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CD_COUPON_ID, COUPON_NUMBER, REF_TYPE, REF_NAME, REF_VALUE + + + + delete from cd_coupon_ref + + + + + + insert into cd_coupon_ref + + + ID, + + + CD_COUPON_ID, + + + COUPON_NUMBER, + + + REF_TYPE, + + + REF_NAME, + + + REF_VALUE, + + + + + #{id,jdbcType=INTEGER}, + + + #{cdCouponId,jdbcType=INTEGER}, + + + #{couponNumber,jdbcType=VARCHAR}, + + + #{refType,jdbcType=VARCHAR}, + + + #{refName,jdbcType=VARCHAR}, + + + #{refValue,jdbcType=VARCHAR}, + + + + + + update cd_coupon_ref + + + ID = #{record.id,jdbcType=INTEGER}, + + + CD_COUPON_ID = #{record.cdCouponId,jdbcType=INTEGER}, + + + COUPON_NUMBER = #{record.couponNumber,jdbcType=VARCHAR}, + + + REF_TYPE = #{record.refType,jdbcType=VARCHAR}, + + + REF_NAME = #{record.refName,jdbcType=VARCHAR}, + + + REF_VALUE = #{record.refValue,jdbcType=VARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdItemDetailMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdItemDetailMapper.xml new file mode 100644 index 0000000..be2ca34 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdItemDetailMapper.xml @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, cd_item_id + + + item_detail_content + + + + delete from cd_item_detail + + + + + + insert into cd_item_detail + + + id, + + + cd_item_id, + + + item_detail_content, + + + + + #{id,jdbcType=INTEGER}, + + + #{cdItemId,jdbcType=INTEGER}, + + + #{itemDetailContent,jdbcType=LONGVARCHAR}, + + + + + + update cd_item_detail + + + id = #{record.id,jdbcType=INTEGER}, + + + cd_item_id = #{record.cdItemId,jdbcType=INTEGER}, + + + item_detail_content = #{record.itemDetailContent,jdbcType=LONGVARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdManagerCompanyMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdManagerCompanyMapper.xml new file mode 100644 index 0000000..cc29ba9 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdManagerCompanyMapper.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CD_COMPANY_ID, CD_MANAGER_ID + + + + delete from cd_manager_company + + + + + + insert into cd_manager_company + + + ID, + + + CD_COMPANY_ID, + + + CD_MANAGER_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{cdCompanyId,jdbcType=INTEGER}, + + + #{cdManagerId,jdbcType=INTEGER}, + + + + + + update cd_manager_company + + + ID = #{record.id,jdbcType=INTEGER}, + + + CD_COMPANY_ID = #{record.cdCompanyId,jdbcType=INTEGER}, + + + CD_MANAGER_ID = #{record.cdManagerId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdMemberMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdMemberMapper.xml new file mode 100644 index 0000000..e433da4 --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdMemberMapper.xml @@ -0,0 +1,290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, NAME, PASSWORD, PHONE_NUMBER, ADDRESS, CD_COMPANY_ID, CD_USER_ID, SPARE_NAME, + SPARE_NAME2, SPARE_TEL, SPARE_TEL2, TEL_NUMBER, OFFICE_TEL, SPARE_ADDRESS, SPARE_ADDRESS2, + FLAG, MEMBER_TYPE, email + + + + delete from cd_member + + + + + + insert into cd_member + + + ID, + + + NAME, + + + PASSWORD, + + + PHONE_NUMBER, + + + ADDRESS, + + + CD_COMPANY_ID, + + + CD_USER_ID, + + + SPARE_NAME, + + + SPARE_NAME2, + + + SPARE_TEL, + + + SPARE_TEL2, + + + TEL_NUMBER, + + + OFFICE_TEL, + + + SPARE_ADDRESS, + + + SPARE_ADDRESS2, + + + FLAG, + + + MEMBER_TYPE, + + + email, + + + + + #{id,jdbcType=INTEGER}, + + + #{name,jdbcType=VARCHAR}, + + + #{password,jdbcType=VARCHAR}, + + + #{phoneNumber,jdbcType=VARCHAR}, + + + #{address,jdbcType=VARCHAR}, + + + #{cdCompanyId,jdbcType=INTEGER}, + + + #{cdUserId,jdbcType=INTEGER}, + + + #{spareName,jdbcType=VARCHAR}, + + + #{spareName2,jdbcType=VARCHAR}, + + + #{spareTel,jdbcType=VARCHAR}, + + + #{spareTel2,jdbcType=VARCHAR}, + + + #{telNumber,jdbcType=VARCHAR}, + + + #{officeTel,jdbcType=VARCHAR}, + + + #{spareAddress,jdbcType=VARCHAR}, + + + #{spareAddress2,jdbcType=VARCHAR}, + + + #{flag,jdbcType=VARCHAR}, + + + #{memberType,jdbcType=INTEGER}, + + + #{email,jdbcType=VARCHAR}, + + + + + + update cd_member + + + ID = #{record.id,jdbcType=INTEGER}, + + + NAME = #{record.name,jdbcType=VARCHAR}, + + + PASSWORD = #{record.password,jdbcType=VARCHAR}, + + + PHONE_NUMBER = #{record.phoneNumber,jdbcType=VARCHAR}, + + + ADDRESS = #{record.address,jdbcType=VARCHAR}, + + + CD_COMPANY_ID = #{record.cdCompanyId,jdbcType=INTEGER}, + + + CD_USER_ID = #{record.cdUserId,jdbcType=INTEGER}, + + + SPARE_NAME = #{record.spareName,jdbcType=VARCHAR}, + + + SPARE_NAME2 = #{record.spareName2,jdbcType=VARCHAR}, + + + SPARE_TEL = #{record.spareTel,jdbcType=VARCHAR}, + + + SPARE_TEL2 = #{record.spareTel2,jdbcType=VARCHAR}, + + + TEL_NUMBER = #{record.telNumber,jdbcType=VARCHAR}, + + + OFFICE_TEL = #{record.officeTel,jdbcType=VARCHAR}, + + + SPARE_ADDRESS = #{record.spareAddress,jdbcType=VARCHAR}, + + + SPARE_ADDRESS2 = #{record.spareAddress2,jdbcType=VARCHAR}, + + + FLAG = #{record.flag,jdbcType=VARCHAR}, + + + MEMBER_TYPE = #{record.memberType,jdbcType=INTEGER}, + + + email = #{record.email,jdbcType=VARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/base/entity/mapper/CdPlanItemMapper.xml b/src/main/resources/com/xmomen/module/base/entity/mapper/CdPlanItemMapper.xml new file mode 100644 index 0000000..f11626c --- /dev/null +++ b/src/main/resources/com/xmomen/module/base/entity/mapper/CdPlanItemMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CD_PLAN_ID, CD_ITEM_ID, COUNT_VALUE + + + + delete from cd_plan_item + + + + + + insert into cd_plan_item + + + ID, + + + CD_PLAN_ID, + + + CD_ITEM_ID, + + + COUNT_VALUE, + + + + + #{id,jdbcType=INTEGER}, + + + #{cdPlanId,jdbcType=INTEGER}, + + + #{cdItemId,jdbcType=INTEGER}, + + + #{countValue,jdbcType=INTEGER}, + + + + + + update cd_plan_item + + + ID = #{record.id,jdbcType=INTEGER}, + + + CD_PLAN_ID = #{record.cdPlanId,jdbcType=INTEGER}, + + + CD_ITEM_ID = #{record.cdItemId,jdbcType=INTEGER}, + + + COUNT_VALUE = #{record.countValue,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/job/entity/mapper/TbJobMapper.xml b/src/main/resources/com/xmomen/module/job/entity/mapper/TbJobMapper.xml new file mode 100644 index 0000000..ff80a54 --- /dev/null +++ b/src/main/resources/com/xmomen/module/job/entity/mapper/TbJobMapper.xml @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, PURCHASE_CODE, PURCHASE_ID, JOB_TYPE, JOB_STATUS, JOB_USER, JOB_CREATE_TIME, + CD_ITEM_ID, COUNT_VALUE, JOB_BEGIN_TIME, FINISH_VALUE, FINISH_TIME, JOB_CREATE_USER + + + + delete from tb_job + + + + + + insert into tb_job + + + id, + + + PURCHASE_CODE, + + + PURCHASE_ID, + + + JOB_TYPE, + + + JOB_STATUS, + + + JOB_USER, + + + JOB_CREATE_TIME, + + + CD_ITEM_ID, + + + COUNT_VALUE, + + + JOB_BEGIN_TIME, + + + FINISH_VALUE, + + + FINISH_TIME, + + + JOB_CREATE_USER, + + + + + #{id,jdbcType=INTEGER}, + + + #{purchaseCode,jdbcType=VARCHAR}, + + + #{purchaseId,jdbcType=INTEGER}, + + + #{jobType,jdbcType=INTEGER}, + + + #{jobStatus,jdbcType=INTEGER}, + + + #{jobUser,jdbcType=INTEGER}, + + + #{jobCreateTime,jdbcType=TIMESTAMP}, + + + #{cdItemId,jdbcType=INTEGER}, + + + #{countValue,jdbcType=INTEGER}, + + + #{jobBeginTime,jdbcType=TIMESTAMP}, + + + #{finishValue,jdbcType=INTEGER}, + + + #{finishTime,jdbcType=TIMESTAMP}, + + + #{jobCreateUser,jdbcType=INTEGER}, + + + + + + update tb_job + + + id = #{record.id,jdbcType=INTEGER}, + + + PURCHASE_CODE = #{record.purchaseCode,jdbcType=VARCHAR}, + + + PURCHASE_ID = #{record.purchaseId,jdbcType=INTEGER}, + + + JOB_TYPE = #{record.jobType,jdbcType=INTEGER}, + + + JOB_STATUS = #{record.jobStatus,jdbcType=INTEGER}, + + + JOB_USER = #{record.jobUser,jdbcType=INTEGER}, + + + JOB_CREATE_TIME = #{record.jobCreateTime,jdbcType=TIMESTAMP}, + + + CD_ITEM_ID = #{record.cdItemId,jdbcType=INTEGER}, + + + COUNT_VALUE = #{record.countValue,jdbcType=INTEGER}, + + + JOB_BEGIN_TIME = #{record.jobBeginTime,jdbcType=TIMESTAMP}, + + + FINISH_VALUE = #{record.finishValue,jdbcType=INTEGER}, + + + FINISH_TIME = #{record.finishTime,jdbcType=TIMESTAMP}, + + + JOB_CREATE_USER = #{record.jobCreateUser,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/job/entity/mapper/TbJobOperationLogMapper.xml b/src/main/resources/com/xmomen/module/job/entity/mapper/TbJobOperationLogMapper.xml new file mode 100644 index 0000000..d4db254 --- /dev/null +++ b/src/main/resources/com/xmomen/module/job/entity/mapper/TbJobOperationLogMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, job_id, job_user, job_time, bar_code, item_code + + + + delete from tb_job_operation_log + + + + + + insert into tb_job_operation_log + + + id, + + + job_id, + + + job_user, + + + job_time, + + + bar_code, + + + item_code, + + + + + #{id,jdbcType=INTEGER}, + + + #{jobId,jdbcType=INTEGER}, + + + #{jobUser,jdbcType=INTEGER}, + + + #{jobTime,jdbcType=TIMESTAMP}, + + + #{barCode,jdbcType=VARCHAR}, + + + #{itemCode,jdbcType=VARCHAR}, + + + + + + update tb_job_operation_log + + + id = #{record.id,jdbcType=INTEGER}, + + + job_id = #{record.jobId,jdbcType=INTEGER}, + + + job_user = #{record.jobUser,jdbcType=INTEGER}, + + + job_time = #{record.jobTime,jdbcType=TIMESTAMP}, + + + bar_code = #{record.barCode,jdbcType=VARCHAR}, + + + item_code = #{record.itemCode,jdbcType=VARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderItemMapper.xml b/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderItemMapper.xml new file mode 100644 index 0000000..a988419 --- /dev/null +++ b/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderItemMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, ORDER_NO, ITEM_ID, ITEM_CODE, ITEM_NAME, ITEM_PRICE, ITEM_QTY, ITEM_UNIT, CREATE_DATE, + CREATE_USER_ID, UPDATE_DATE, UPDATE_USER_ID + + + + delete from tb_order_item + + + + + + insert into tb_order_item + + + ID, + + + ORDER_NO, + + + ITEM_ID, + + + ITEM_CODE, + + + ITEM_NAME, + + + ITEM_PRICE, + + + ITEM_QTY, + + + ITEM_UNIT, + + + CREATE_DATE, + + + CREATE_USER_ID, + + + UPDATE_DATE, + + + UPDATE_USER_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{itemId,jdbcType=INTEGER}, + + + #{itemCode,jdbcType=VARCHAR}, + + + #{itemName,jdbcType=VARCHAR}, + + + #{itemPrice,jdbcType=DECIMAL}, + + + #{itemQty,jdbcType=DECIMAL}, + + + #{itemUnit,jdbcType=VARCHAR}, + + + #{createDate,jdbcType=TIMESTAMP}, + + + #{createUserId,jdbcType=INTEGER}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + #{updateUserId,jdbcType=INTEGER}, + + + + + + update tb_order_item + + + ID = #{record.id,jdbcType=INTEGER}, + + + ORDER_NO = #{record.orderNo,jdbcType=VARCHAR}, + + + ITEM_ID = #{record.itemId,jdbcType=INTEGER}, + + + ITEM_CODE = #{record.itemCode,jdbcType=VARCHAR}, + + + ITEM_NAME = #{record.itemName,jdbcType=VARCHAR}, + + + ITEM_PRICE = #{record.itemPrice,jdbcType=DECIMAL}, + + + ITEM_QTY = #{record.itemQty,jdbcType=DECIMAL}, + + + ITEM_UNIT = #{record.itemUnit,jdbcType=VARCHAR}, + + + CREATE_DATE = #{record.createDate,jdbcType=TIMESTAMP}, + + + CREATE_USER_ID = #{record.createUserId,jdbcType=INTEGER}, + + + UPDATE_DATE = #{record.updateDate,jdbcType=TIMESTAMP}, + + + UPDATE_USER_ID = #{record.updateUserId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderMapper.xml b/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderMapper.xml new file mode 100644 index 0000000..a04de1b --- /dev/null +++ b/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderMapper.xml @@ -0,0 +1,473 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, ORDER_NO, ORDER_TYPE, ORDER_SOURCE, PAYMENT_MODE, OTHER_PAYMENT_MODE, MEMBER_CODE, + ORDER_STATUS, PAY_STATUS, CONSIGNEE_PHONE, CONSIGNEE_NAME, CONSIGNEE_ADDRESS, POSTCODE, + TRANSPORT_MODE, REMARK, DISCOUNT_PRICE, TOTAL_AMOUNT, CREATE_TIME, APPOINTMENT_TIME, + CREATE_USER_ID, DESPATCH_EXPRESS_ID, EXPRESS_MEMBER_ID, COMPANY_ID, MANAGER_ID, BATCH_NO, + TOTAL_BOX_NUM, EXPRESS_SCAN_BOX_NUM, XIAJIA, IS_TWO_SEND, TWO_SEND_AUDIT_DATE, TWO_SEND_AUDIT_USER_ID, + OUT_DATE, SHOU_HUO_DATE, IS_REJECT, UPDATE_DATE, UPDATE_USER_ID + + + + delete from tb_order + + + + + + insert into tb_order + + + ID, + + + ORDER_NO, + + + ORDER_TYPE, + + + ORDER_SOURCE, + + + PAYMENT_MODE, + + + OTHER_PAYMENT_MODE, + + + MEMBER_CODE, + + + ORDER_STATUS, + + + PAY_STATUS, + + + CONSIGNEE_PHONE, + + + CONSIGNEE_NAME, + + + CONSIGNEE_ADDRESS, + + + POSTCODE, + + + TRANSPORT_MODE, + + + REMARK, + + + DISCOUNT_PRICE, + + + TOTAL_AMOUNT, + + + CREATE_TIME, + + + APPOINTMENT_TIME, + + + CREATE_USER_ID, + + + DESPATCH_EXPRESS_ID, + + + EXPRESS_MEMBER_ID, + + + COMPANY_ID, + + + MANAGER_ID, + + + BATCH_NO, + + + TOTAL_BOX_NUM, + + + EXPRESS_SCAN_BOX_NUM, + + + XIAJIA, + + + IS_TWO_SEND, + + + TWO_SEND_AUDIT_DATE, + + + TWO_SEND_AUDIT_USER_ID, + + + OUT_DATE, + + + SHOU_HUO_DATE, + + + IS_REJECT, + + + UPDATE_DATE, + + + UPDATE_USER_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{orderType,jdbcType=INTEGER}, + + + #{orderSource,jdbcType=INTEGER}, + + + #{paymentMode,jdbcType=INTEGER}, + + + #{otherPaymentMode,jdbcType=INTEGER}, + + + #{memberCode,jdbcType=VARCHAR}, + + + #{orderStatus,jdbcType=VARCHAR}, + + + #{payStatus,jdbcType=INTEGER}, + + + #{consigneePhone,jdbcType=VARCHAR}, + + + #{consigneeName,jdbcType=VARCHAR}, + + + #{consigneeAddress,jdbcType=VARCHAR}, + + + #{postcode,jdbcType=VARCHAR}, + + + #{transportMode,jdbcType=INTEGER}, + + + #{remark,jdbcType=VARCHAR}, + + + #{discountPrice,jdbcType=DECIMAL}, + + + #{totalAmount,jdbcType=DECIMAL}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{appointmentTime,jdbcType=TIMESTAMP}, + + + #{createUserId,jdbcType=INTEGER}, + + + #{despatchExpressId,jdbcType=INTEGER}, + + + #{expressMemberId,jdbcType=INTEGER}, + + + #{companyId,jdbcType=INTEGER}, + + + #{managerId,jdbcType=INTEGER}, + + + #{batchNo,jdbcType=VARCHAR}, + + + #{totalBoxNum,jdbcType=INTEGER}, + + + #{expressScanBoxNum,jdbcType=INTEGER}, + + + #{xiajia,jdbcType=INTEGER}, + + + #{isTwoSend,jdbcType=INTEGER}, + + + #{twoSendAuditDate,jdbcType=TIMESTAMP}, + + + #{twoSendAuditUserId,jdbcType=INTEGER}, + + + #{outDate,jdbcType=TIMESTAMP}, + + + #{shouHuoDate,jdbcType=TIMESTAMP}, + + + #{isReject,jdbcType=INTEGER}, + + + #{updateDate,jdbcType=TIMESTAMP}, + + + #{updateUserId,jdbcType=INTEGER}, + + + + + + update tb_order + + + ID = #{record.id,jdbcType=INTEGER}, + + + ORDER_NO = #{record.orderNo,jdbcType=VARCHAR}, + + + ORDER_TYPE = #{record.orderType,jdbcType=INTEGER}, + + + ORDER_SOURCE = #{record.orderSource,jdbcType=INTEGER}, + + + PAYMENT_MODE = #{record.paymentMode,jdbcType=INTEGER}, + + + OTHER_PAYMENT_MODE = #{record.otherPaymentMode,jdbcType=INTEGER}, + + + MEMBER_CODE = #{record.memberCode,jdbcType=VARCHAR}, + + + ORDER_STATUS = #{record.orderStatus,jdbcType=VARCHAR}, + + + PAY_STATUS = #{record.payStatus,jdbcType=INTEGER}, + + + CONSIGNEE_PHONE = #{record.consigneePhone,jdbcType=VARCHAR}, + + + CONSIGNEE_NAME = #{record.consigneeName,jdbcType=VARCHAR}, + + + CONSIGNEE_ADDRESS = #{record.consigneeAddress,jdbcType=VARCHAR}, + + + POSTCODE = #{record.postcode,jdbcType=VARCHAR}, + + + TRANSPORT_MODE = #{record.transportMode,jdbcType=INTEGER}, + + + REMARK = #{record.remark,jdbcType=VARCHAR}, + + + DISCOUNT_PRICE = #{record.discountPrice,jdbcType=DECIMAL}, + + + TOTAL_AMOUNT = #{record.totalAmount,jdbcType=DECIMAL}, + + + CREATE_TIME = #{record.createTime,jdbcType=TIMESTAMP}, + + + APPOINTMENT_TIME = #{record.appointmentTime,jdbcType=TIMESTAMP}, + + + CREATE_USER_ID = #{record.createUserId,jdbcType=INTEGER}, + + + DESPATCH_EXPRESS_ID = #{record.despatchExpressId,jdbcType=INTEGER}, + + + EXPRESS_MEMBER_ID = #{record.expressMemberId,jdbcType=INTEGER}, + + + COMPANY_ID = #{record.companyId,jdbcType=INTEGER}, + + + MANAGER_ID = #{record.managerId,jdbcType=INTEGER}, + + + BATCH_NO = #{record.batchNo,jdbcType=VARCHAR}, + + + TOTAL_BOX_NUM = #{record.totalBoxNum,jdbcType=INTEGER}, + + + EXPRESS_SCAN_BOX_NUM = #{record.expressScanBoxNum,jdbcType=INTEGER}, + + + XIAJIA = #{record.xiajia,jdbcType=INTEGER}, + + + IS_TWO_SEND = #{record.isTwoSend,jdbcType=INTEGER}, + + + TWO_SEND_AUDIT_DATE = #{record.twoSendAuditDate,jdbcType=TIMESTAMP}, + + + TWO_SEND_AUDIT_USER_ID = #{record.twoSendAuditUserId,jdbcType=INTEGER}, + + + OUT_DATE = #{record.outDate,jdbcType=TIMESTAMP}, + + + SHOU_HUO_DATE = #{record.shouHuoDate,jdbcType=TIMESTAMP}, + + + IS_REJECT = #{record.isReject,jdbcType=INTEGER}, + + + UPDATE_DATE = #{record.updateDate,jdbcType=TIMESTAMP}, + + + UPDATE_USER_ID = #{record.updateUserId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderSendLogMapper.xml b/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderSendLogMapper.xml new file mode 100644 index 0000000..0112286 --- /dev/null +++ b/src/main/resources/com/xmomen/module/order/entity/mapper/TbOrderSendLogMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, order_id, order_no, old_express_member_id, new_express_member_id, insert_date + + + + delete from tb_order_send_log + + + + + + insert into tb_order_send_log + + + id, + + + order_id, + + + order_no, + + + old_express_member_id, + + + new_express_member_id, + + + insert_date, + + + + + #{id,jdbcType=INTEGER}, + + + #{orderId,jdbcType=INTEGER}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{oldExpressMemberId,jdbcType=INTEGER}, + + + #{newExpressMemberId,jdbcType=INTEGER}, + + + #{insertDate,jdbcType=TIMESTAMP}, + + + + + + update tb_order_send_log + + + id = #{record.id,jdbcType=INTEGER}, + + + order_id = #{record.orderId,jdbcType=INTEGER}, + + + order_no = #{record.orderNo,jdbcType=VARCHAR}, + + + old_express_member_id = #{record.oldExpressMemberId,jdbcType=INTEGER}, + + + new_express_member_id = #{record.newExpressMemberId,jdbcType=INTEGER}, + + + insert_date = #{record.insertDate,jdbcType=TIMESTAMP}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/order/entity/mapper/TbPackingRecordMapper.xml b/src/main/resources/com/xmomen/module/order/entity/mapper/TbPackingRecordMapper.xml new file mode 100644 index 0000000..1aedc84 --- /dev/null +++ b/src/main/resources/com/xmomen/module/order/entity/mapper/TbPackingRecordMapper.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, UPC, ORDER_ITEM_ID, SCAN_TIME, PACKING_ID + + + + delete from tb_packing_record + + + + + + insert into tb_packing_record + + + ID, + + + UPC, + + + ORDER_ITEM_ID, + + + SCAN_TIME, + + + PACKING_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{upc,jdbcType=VARCHAR}, + + + #{orderItemId,jdbcType=INTEGER}, + + + #{scanTime,jdbcType=TIMESTAMP}, + + + #{packingId,jdbcType=INTEGER}, + + + + + + update tb_packing_record + + + ID = #{record.id,jdbcType=INTEGER}, + + + UPC = #{record.upc,jdbcType=VARCHAR}, + + + ORDER_ITEM_ID = #{record.orderItemId,jdbcType=INTEGER}, + + + SCAN_TIME = #{record.scanTime,jdbcType=TIMESTAMP}, + + + PACKING_ID = #{record.packingId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/order/entity/mapper/TbReturnOrderMapper.xml b/src/main/resources/com/xmomen/module/order/entity/mapper/TbReturnOrderMapper.xml new file mode 100644 index 0000000..9223663 --- /dev/null +++ b/src/main/resources/com/xmomen/module/order/entity/mapper/TbReturnOrderMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, ORDER_NO, RETURN_TIME, RETURN_STATUS, AUDIT_STATUS, AUDIT_DATE, AUDIT_USER_ID, + TAKE_GOODS_DATE, TAKE_GOODS_USER_ID, TAKE_GOODS_PHONE, RETURN_TOTAL_AMOUNT, IS_NORMAL + + + + delete from tb_return_order + + + + + + insert into tb_return_order + + + ID, + + + ORDER_NO, + + + RETURN_TIME, + + + RETURN_STATUS, + + + AUDIT_STATUS, + + + AUDIT_DATE, + + + AUDIT_USER_ID, + + + TAKE_GOODS_DATE, + + + TAKE_GOODS_USER_ID, + + + TAKE_GOODS_PHONE, + + + RETURN_TOTAL_AMOUNT, + + + IS_NORMAL, + + + + + #{id,jdbcType=INTEGER}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{returnTime,jdbcType=TIMESTAMP}, + + + #{returnStatus,jdbcType=INTEGER}, + + + #{auditStatus,jdbcType=INTEGER}, + + + #{auditDate,jdbcType=TIMESTAMP}, + + + #{auditUserId,jdbcType=INTEGER}, + + + #{takeGoodsDate,jdbcType=TIMESTAMP}, + + + #{takeGoodsUserId,jdbcType=INTEGER}, + + + #{takeGoodsPhone,jdbcType=VARCHAR}, + + + #{returnTotalAmount,jdbcType=DECIMAL}, + + + #{isNormal,jdbcType=INTEGER}, + + + + + + update tb_return_order + + + ID = #{record.id,jdbcType=INTEGER}, + + + ORDER_NO = #{record.orderNo,jdbcType=VARCHAR}, + + + RETURN_TIME = #{record.returnTime,jdbcType=TIMESTAMP}, + + + RETURN_STATUS = #{record.returnStatus,jdbcType=INTEGER}, + + + AUDIT_STATUS = #{record.auditStatus,jdbcType=INTEGER}, + + + AUDIT_DATE = #{record.auditDate,jdbcType=TIMESTAMP}, + + + AUDIT_USER_ID = #{record.auditUserId,jdbcType=INTEGER}, + + + TAKE_GOODS_DATE = #{record.takeGoodsDate,jdbcType=TIMESTAMP}, + + + TAKE_GOODS_USER_ID = #{record.takeGoodsUserId,jdbcType=INTEGER}, + + + TAKE_GOODS_PHONE = #{record.takeGoodsPhone,jdbcType=VARCHAR}, + + + RETURN_TOTAL_AMOUNT = #{record.returnTotalAmount,jdbcType=DECIMAL}, + + + IS_NORMAL = #{record.isNormal,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/order/entity/mapper/TbTradeRecordMapper.xml b/src/main/resources/com/xmomen/module/order/entity/mapper/TbTradeRecordMapper.xml new file mode 100644 index 0000000..21a866c --- /dev/null +++ b/src/main/resources/com/xmomen/module/order/entity/mapper/TbTradeRecordMapper.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, AMOUNT, TRADE_NO, CREATE_TIME, TRADE_TYPE, REMARK, RECORD_USER + + + + delete from tb_trade_record + + + + + + insert into tb_trade_record + + + ID, + + + AMOUNT, + + + TRADE_NO, + + + CREATE_TIME, + + + TRADE_TYPE, + + + REMARK, + + + RECORD_USER, + + + + + #{id,jdbcType=INTEGER}, + + + #{amount,jdbcType=DECIMAL}, + + + #{tradeNo,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{tradeType,jdbcType=VARCHAR}, + + + #{remark,jdbcType=VARCHAR}, + + + #{recordUser,jdbcType=INTEGER}, + + + + + + update tb_trade_record + + + ID = #{record.id,jdbcType=INTEGER}, + + + AMOUNT = #{record.amount,jdbcType=DECIMAL}, + + + TRADE_NO = #{record.tradeNo,jdbcType=VARCHAR}, + + + CREATE_TIME = #{record.createTime,jdbcType=TIMESTAMP}, + + + TRADE_TYPE = #{record.tradeType,jdbcType=VARCHAR}, + + + REMARK = #{record.remark,jdbcType=VARCHAR}, + + + RECORD_USER = #{record.recordUser,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/pick/entity/mapper/TbExchangeCardLogMapper.xml b/src/main/resources/com/xmomen/module/pick/entity/mapper/TbExchangeCardLogMapper.xml new file mode 100644 index 0000000..80edde6 --- /dev/null +++ b/src/main/resources/com/xmomen/module/pick/entity/mapper/TbExchangeCardLogMapper.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, OLD_COUPON_ID, OLD_COUPON_NO, NEW_COUPON_ID, NEW_COUPON_NO, RECHARGE_USER, RECHARGE_PLACE + + + + delete from tb_exchange_card_log + + + + + + insert into tb_exchange_card_log + + + ID, + + + OLD_COUPON_ID, + + + OLD_COUPON_NO, + + + NEW_COUPON_ID, + + + NEW_COUPON_NO, + + + RECHARGE_USER, + + + RECHARGE_PLACE, + + + + + #{id,jdbcType=INTEGER}, + + + #{oldCouponId,jdbcType=INTEGER}, + + + #{oldCouponNo,jdbcType=VARCHAR}, + + + #{newCouponId,jdbcType=INTEGER}, + + + #{newCouponNo,jdbcType=VARCHAR}, + + + #{rechargeUser,jdbcType=INTEGER}, + + + #{rechargePlace,jdbcType=INTEGER}, + + + + + + update tb_exchange_card_log + + + ID = #{record.id,jdbcType=INTEGER}, + + + OLD_COUPON_ID = #{record.oldCouponId,jdbcType=INTEGER}, + + + OLD_COUPON_NO = #{record.oldCouponNo,jdbcType=VARCHAR}, + + + NEW_COUPON_ID = #{record.newCouponId,jdbcType=INTEGER}, + + + NEW_COUPON_NO = #{record.newCouponNo,jdbcType=VARCHAR}, + + + RECHARGE_USER = #{record.rechargeUser,jdbcType=INTEGER}, + + + RECHARGE_PLACE = #{record.rechargePlace,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/pick/entity/mapper/TbRechargeLogMapper.xml b/src/main/resources/com/xmomen/module/pick/entity/mapper/TbRechargeLogMapper.xml new file mode 100644 index 0000000..40a910c --- /dev/null +++ b/src/main/resources/com/xmomen/module/pick/entity/mapper/TbRechargeLogMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, COUPON_NO, RECHARGE_PRICE, RECHARGE_DATE, RECHARGE_USER, RECHARGE_PLACE + + + + delete from tb_recharge_log + + + + + + insert into tb_recharge_log + + + ID, + + + COUPON_NO, + + + RECHARGE_PRICE, + + + RECHARGE_DATE, + + + RECHARGE_USER, + + + RECHARGE_PLACE, + + + + + #{id,jdbcType=INTEGER}, + + + #{couponNo,jdbcType=VARCHAR}, + + + #{rechargePrice,jdbcType=DECIMAL}, + + + #{rechargeDate,jdbcType=TIMESTAMP}, + + + #{rechargeUser,jdbcType=INTEGER}, + + + #{rechargePlace,jdbcType=INTEGER}, + + + + + + update tb_recharge_log + + + ID = #{record.id,jdbcType=INTEGER}, + + + COUPON_NO = #{record.couponNo,jdbcType=VARCHAR}, + + + RECHARGE_PRICE = #{record.rechargePrice,jdbcType=DECIMAL}, + + + RECHARGE_DATE = #{record.rechargeDate,jdbcType=TIMESTAMP}, + + + RECHARGE_USER = #{record.rechargeUser,jdbcType=INTEGER}, + + + RECHARGE_PLACE = #{record.rechargePlace,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/plan/entity/mapper/TbTablePlanMapper.xml b/src/main/resources/com/xmomen/module/plan/entity/mapper/TbTablePlanMapper.xml new file mode 100644 index 0000000..7dc65bc --- /dev/null +++ b/src/main/resources/com/xmomen/module/plan/entity/mapper/TbTablePlanMapper.xml @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, CD_PLAN_ID, AUDIT_STATUS, IS_STOP, CD_MEMBER_ID, COUPON_NUMBER, MEMBER_CODE, + CONSIGNEE_PHONE, CONSIGNEE_NAME, CONSIGNEE_ADDRESS, POSTCODE, SEND_WEEK_DAY, TOTAL_SEND_VALUE, + SEND_VALUE, LAST_SEND_DATE, NEXT_SEND_DATE, BEGIN_TIME + + + + delete from tb_table_plan + + + + + + insert into tb_table_plan + + + ID, + + + CD_PLAN_ID, + + + AUDIT_STATUS, + + + IS_STOP, + + + CD_MEMBER_ID, + + + COUPON_NUMBER, + + + MEMBER_CODE, + + + CONSIGNEE_PHONE, + + + CONSIGNEE_NAME, + + + CONSIGNEE_ADDRESS, + + + POSTCODE, + + + SEND_WEEK_DAY, + + + TOTAL_SEND_VALUE, + + + SEND_VALUE, + + + LAST_SEND_DATE, + + + NEXT_SEND_DATE, + + + BEGIN_TIME, + + + + + #{id,jdbcType=INTEGER}, + + + #{cdPlanId,jdbcType=INTEGER}, + + + #{auditStatus,jdbcType=INTEGER}, + + + #{isStop,jdbcType=INTEGER}, + + + #{cdMemberId,jdbcType=INTEGER}, + + + #{couponNumber,jdbcType=VARCHAR}, + + + #{memberCode,jdbcType=VARCHAR}, + + + #{consigneePhone,jdbcType=VARCHAR}, + + + #{consigneeName,jdbcType=VARCHAR}, + + + #{consigneeAddress,jdbcType=VARCHAR}, + + + #{postcode,jdbcType=VARCHAR}, + + + #{sendWeekDay,jdbcType=VARCHAR}, + + + #{totalSendValue,jdbcType=INTEGER}, + + + #{sendValue,jdbcType=INTEGER}, + + + #{lastSendDate,jdbcType=DATE}, + + + #{nextSendDate,jdbcType=DATE}, + + + #{beginTime,jdbcType=DATE}, + + + + + + update tb_table_plan + + + ID = #{record.id,jdbcType=INTEGER}, + + + CD_PLAN_ID = #{record.cdPlanId,jdbcType=INTEGER}, + + + AUDIT_STATUS = #{record.auditStatus,jdbcType=INTEGER}, + + + IS_STOP = #{record.isStop,jdbcType=INTEGER}, + + + CD_MEMBER_ID = #{record.cdMemberId,jdbcType=INTEGER}, + + + COUPON_NUMBER = #{record.couponNumber,jdbcType=VARCHAR}, + + + MEMBER_CODE = #{record.memberCode,jdbcType=VARCHAR}, + + + CONSIGNEE_PHONE = #{record.consigneePhone,jdbcType=VARCHAR}, + + + CONSIGNEE_NAME = #{record.consigneeName,jdbcType=VARCHAR}, + + + CONSIGNEE_ADDRESS = #{record.consigneeAddress,jdbcType=VARCHAR}, + + + POSTCODE = #{record.postcode,jdbcType=VARCHAR}, + + + SEND_WEEK_DAY = #{record.sendWeekDay,jdbcType=VARCHAR}, + + + TOTAL_SEND_VALUE = #{record.totalSendValue,jdbcType=INTEGER}, + + + SEND_VALUE = #{record.sendValue,jdbcType=INTEGER}, + + + LAST_SEND_DATE = #{record.lastSendDate,jdbcType=DATE}, + + + NEXT_SEND_DATE = #{record.nextSendDate,jdbcType=DATE}, + + + BEGIN_TIME = #{record.beginTime,jdbcType=DATE}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/receipt/entity/mapper/TbReceivingCodeRequestMapper.xml b/src/main/resources/com/xmomen/module/receipt/entity/mapper/TbReceivingCodeRequestMapper.xml new file mode 100644 index 0000000..6e9a26c --- /dev/null +++ b/src/main/resources/com/xmomen/module/receipt/entity/mapper/TbReceivingCodeRequestMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + id, order_no, request_user, request_time, request_phone, request_express_id + + + + delete from tb_receiving_code_request + + + + + + insert into tb_receiving_code_request + + + id, + + + order_no, + + + request_user, + + + request_time, + + + request_phone, + + + request_express_id, + + + + + #{id,jdbcType=INTEGER}, + + + #{orderNo,jdbcType=VARCHAR}, + + + #{requestUser,jdbcType=VARCHAR}, + + + #{requestTime,jdbcType=TIMESTAMP}, + + + #{requestPhone,jdbcType=VARCHAR}, + + + #{requestExpressId,jdbcType=INTEGER}, + + + + + + update tb_receiving_code_request + + + id = #{record.id,jdbcType=INTEGER}, + + + order_no = #{record.orderNo,jdbcType=VARCHAR}, + + + request_user = #{record.requestUser,jdbcType=VARCHAR}, + + + request_time = #{record.requestTime,jdbcType=TIMESTAMP}, + + + request_phone = #{record.requestPhone,jdbcType=VARCHAR}, + + + request_express_id = #{record.requestExpressId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/schedule/entity/mapper/ScheduleJobMapper.xml b/src/main/resources/com/xmomen/module/schedule/entity/mapper/ScheduleJobMapper.xml new file mode 100644 index 0000000..898b848 --- /dev/null +++ b/src/main/resources/com/xmomen/module/schedule/entity/mapper/ScheduleJobMapper.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, JOB_NAME, JOB_GROUP, JOB_STATUS, JOB_DESCRIPTION, CRON_EXPRESSION, TRIGGER_ID + + + + delete from schedule_job + + + + + + insert into schedule_job + + + ID, + + + JOB_NAME, + + + JOB_GROUP, + + + JOB_STATUS, + + + JOB_DESCRIPTION, + + + CRON_EXPRESSION, + + + TRIGGER_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{jobName,jdbcType=VARCHAR}, + + + #{jobGroup,jdbcType=VARCHAR}, + + + #{jobStatus,jdbcType=BIT}, + + + #{jobDescription,jdbcType=VARCHAR}, + + + #{cronExpression,jdbcType=VARCHAR}, + + + #{triggerId,jdbcType=VARCHAR}, + + + + + + update schedule_job + + + ID = #{record.id,jdbcType=INTEGER}, + + + JOB_NAME = #{record.jobName,jdbcType=VARCHAR}, + + + JOB_GROUP = #{record.jobGroup,jdbcType=VARCHAR}, + + + JOB_STATUS = #{record.jobStatus,jdbcType=BIT}, + + + JOB_DESCRIPTION = #{record.jobDescription,jdbcType=VARCHAR}, + + + CRON_EXPRESSION = #{record.cronExpression,jdbcType=VARCHAR}, + + + TRIGGER_ID = #{record.triggerId,jdbcType=VARCHAR}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/system/entity/mapper/SysDictionaryMapper.xml b/src/main/resources/com/xmomen/module/system/entity/mapper/SysDictionaryMapper.xml new file mode 100644 index 0000000..d91b727 --- /dev/null +++ b/src/main/resources/com/xmomen/module/system/entity/mapper/SysDictionaryMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, DICTIONARY_CODE, DICTIONARY_DESC, AVAILABLE + + + + delete from sys_dictionary + + + + + + insert into sys_dictionary + + + ID, + + + DICTIONARY_CODE, + + + DICTIONARY_DESC, + + + AVAILABLE, + + + + + #{id,jdbcType=INTEGER}, + + + #{dictionaryCode,jdbcType=VARCHAR}, + + + #{dictionaryDesc,jdbcType=VARCHAR}, + + + #{available,jdbcType=INTEGER}, + + + + + + update sys_dictionary + + + ID = #{record.id,jdbcType=INTEGER}, + + + DICTIONARY_CODE = #{record.dictionaryCode,jdbcType=VARCHAR}, + + + DICTIONARY_DESC = #{record.dictionaryDesc,jdbcType=VARCHAR}, + + + AVAILABLE = #{record.available,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/system/entity/mapper/SysDictionaryParameterMapper.xml b/src/main/resources/com/xmomen/module/system/entity/mapper/SysDictionaryParameterMapper.xml new file mode 100644 index 0000000..7155d9d --- /dev/null +++ b/src/main/resources/com/xmomen/module/system/entity/mapper/SysDictionaryParameterMapper.xml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, SYS_DICTIONARY_ID, SHOW_VALUE, REAL_VALUE, SORT_VALUE, AVAILABLE + + + + delete from sys_dictionary_parameter + + + + + + insert into sys_dictionary_parameter + + + ID, + + + SYS_DICTIONARY_ID, + + + SHOW_VALUE, + + + REAL_VALUE, + + + SORT_VALUE, + + + AVAILABLE, + + + + + #{id,jdbcType=INTEGER}, + + + #{sysDictionaryId,jdbcType=INTEGER}, + + + #{showValue,jdbcType=VARCHAR}, + + + #{realValue,jdbcType=VARCHAR}, + + + #{sortValue,jdbcType=INTEGER}, + + + #{available,jdbcType=INTEGER}, + + + + + + update sys_dictionary_parameter + + + ID = #{record.id,jdbcType=INTEGER}, + + + SYS_DICTIONARY_ID = #{record.sysDictionaryId,jdbcType=INTEGER}, + + + SHOW_VALUE = #{record.showValue,jdbcType=VARCHAR}, + + + REAL_VALUE = #{record.realValue,jdbcType=VARCHAR}, + + + SORT_VALUE = #{record.sortValue,jdbcType=INTEGER}, + + + AVAILABLE = #{record.available,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/system/entity/mapper/SysOrganizationMapper.xml b/src/main/resources/com/xmomen/module/system/entity/mapper/SysOrganizationMapper.xml new file mode 100644 index 0000000..6083d86 --- /dev/null +++ b/src/main/resources/com/xmomen/module/system/entity/mapper/SysOrganizationMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, NAME, DESCRIPTION, PARENT_ID + + + + delete from sys_organization + + + + + + insert into sys_organization + + + ID, + + + NAME, + + + DESCRIPTION, + + + PARENT_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{name,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{parentId,jdbcType=INTEGER}, + + + + + + update sys_organization + + + ID = #{record.id,jdbcType=INTEGER}, + + + NAME = #{record.name,jdbcType=VARCHAR}, + + + DESCRIPTION = #{record.description,jdbcType=VARCHAR}, + + + PARENT_ID = #{record.parentId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/system/entity/mapper/SysUserOrganizationMapper.xml b/src/main/resources/com/xmomen/module/system/entity/mapper/SysUserOrganizationMapper.xml new file mode 100644 index 0000000..a0073da --- /dev/null +++ b/src/main/resources/com/xmomen/module/system/entity/mapper/SysUserOrganizationMapper.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, ORGANIZATION_ID, USER_ID + + + + delete from sys_user_organization + + + + + + insert into sys_user_organization + + + ID, + + + ORGANIZATION_ID, + + + USER_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{organizationId,jdbcType=INTEGER}, + + + #{userId,jdbcType=INTEGER}, + + + + + + update sys_user_organization + + + ID = #{record.id,jdbcType=INTEGER}, + + + ORGANIZATION_ID = #{record.organizationId,jdbcType=INTEGER}, + + + USER_ID = #{record.userId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/user/entity/mapper/SysRolesMapper.xml b/src/main/resources/com/xmomen/module/user/entity/mapper/SysRolesMapper.xml new file mode 100644 index 0000000..52e16b8 --- /dev/null +++ b/src/main/resources/com/xmomen/module/user/entity/mapper/SysRolesMapper.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, ROLE, DESCRIPTION, AVAILABLE + + + + delete from sys_roles + + + + + + insert into sys_roles + + + ID, + + + ROLE, + + + DESCRIPTION, + + + AVAILABLE, + + + + + #{id,jdbcType=INTEGER}, + + + #{role,jdbcType=VARCHAR}, + + + #{description,jdbcType=VARCHAR}, + + + #{available,jdbcType=BIT}, + + + + + + update sys_roles + + + ID = #{record.id,jdbcType=INTEGER}, + + + ROLE = #{record.role,jdbcType=VARCHAR}, + + + DESCRIPTION = #{record.description,jdbcType=VARCHAR}, + + + AVAILABLE = #{record.available,jdbcType=BIT}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/user/entity/mapper/SysRolesPermissionsMapper.xml b/src/main/resources/com/xmomen/module/user/entity/mapper/SysRolesPermissionsMapper.xml new file mode 100644 index 0000000..40e2317 --- /dev/null +++ b/src/main/resources/com/xmomen/module/user/entity/mapper/SysRolesPermissionsMapper.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, ROLE_ID, PERMISSION_ID + + + + delete from sys_roles_permissions + + + + + + insert into sys_roles_permissions + + + ID, + + + ROLE_ID, + + + PERMISSION_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{roleId,jdbcType=INTEGER}, + + + #{permissionId,jdbcType=INTEGER}, + + + + + + update sys_roles_permissions + + + ID = #{record.id,jdbcType=INTEGER}, + + + ROLE_ID = #{record.roleId,jdbcType=INTEGER}, + + + PERMISSION_ID = #{record.permissionId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/user/entity/mapper/SysUsersMapper.xml b/src/main/resources/com/xmomen/module/user/entity/mapper/SysUsersMapper.xml new file mode 100644 index 0000000..e918a62 --- /dev/null +++ b/src/main/resources/com/xmomen/module/user/entity/mapper/SysUsersMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, USERNAME, REALNAME, SALT, PASSWORD, AGE, SEX, EMAIL, QQ, PHONE_NUMBER, OFFICE_TEL, + LOCKED + + + + delete from sys_users + + + + + + insert into sys_users + + + ID, + + + USERNAME, + + + REALNAME, + + + SALT, + + + PASSWORD, + + + AGE, + + + SEX, + + + EMAIL, + + + QQ, + + + PHONE_NUMBER, + + + OFFICE_TEL, + + + LOCKED, + + + + + #{id,jdbcType=INTEGER}, + + + #{username,jdbcType=VARCHAR}, + + + #{realname,jdbcType=VARCHAR}, + + + #{salt,jdbcType=VARCHAR}, + + + #{password,jdbcType=VARCHAR}, + + + #{age,jdbcType=INTEGER}, + + + #{sex,jdbcType=INTEGER}, + + + #{email,jdbcType=VARCHAR}, + + + #{qq,jdbcType=VARCHAR}, + + + #{phoneNumber,jdbcType=VARCHAR}, + + + #{officeTel,jdbcType=VARCHAR}, + + + #{locked,jdbcType=INTEGER}, + + + + + + update sys_users + + + ID = #{record.id,jdbcType=INTEGER}, + + + USERNAME = #{record.username,jdbcType=VARCHAR}, + + + REALNAME = #{record.realname,jdbcType=VARCHAR}, + + + SALT = #{record.salt,jdbcType=VARCHAR}, + + + PASSWORD = #{record.password,jdbcType=VARCHAR}, + + + AGE = #{record.age,jdbcType=INTEGER}, + + + SEX = #{record.sex,jdbcType=INTEGER}, + + + EMAIL = #{record.email,jdbcType=VARCHAR}, + + + QQ = #{record.qq,jdbcType=VARCHAR}, + + + PHONE_NUMBER = #{record.phoneNumber,jdbcType=VARCHAR}, + + + OFFICE_TEL = #{record.officeTel,jdbcType=VARCHAR}, + + + LOCKED = #{record.locked,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/com/xmomen/module/user/entity/mapper/SysUsersRolesMapper.xml b/src/main/resources/com/xmomen/module/user/entity/mapper/SysUsersRolesMapper.xml new file mode 100644 index 0000000..f302747 --- /dev/null +++ b/src/main/resources/com/xmomen/module/user/entity/mapper/SysUsersRolesMapper.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + + + + + + + + and ${criterion.condition} + + + and ${criterion.condition} #{criterion.value} + + + and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} + + + and ${criterion.condition} + + #{listItem} + + + + + + + + + + + ID, USER_ID, ROLE_ID + + + + delete from sys_users_roles + + + + + + insert into sys_users_roles + + + ID, + + + USER_ID, + + + ROLE_ID, + + + + + #{id,jdbcType=INTEGER}, + + + #{userId,jdbcType=INTEGER}, + + + #{roleId,jdbcType=INTEGER}, + + + + + + update sys_users_roles + + + ID = #{record.id,jdbcType=INTEGER}, + + + USER_ID = #{record.userId,jdbcType=INTEGER}, + + + ROLE_ID = #{record.roleId,jdbcType=INTEGER}, + + + + + + + \ No newline at end of file diff --git a/src/main/resources/config/mybatis-config.xml b/src/main/resources/config/mybatis-config.xml new file mode 100644 index 0000000..f68c20a --- /dev/null +++ b/src/main/resources/config/mybatis-config.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/config/spring-core.xml b/src/main/resources/config/spring-core.xml new file mode 100644 index 0000000..b88de73 --- /dev/null +++ b/src/main/resources/config/spring-core.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + classpath:application.properties + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/config/spring-jdbc.xml b/src/main/resources/config/spring-jdbc.xml new file mode 100644 index 0000000..b9cf124 --- /dev/null +++ b/src/main/resources/config/spring-jdbc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/config/spring-mybatis.xml b/src/main/resources/config/spring-mybatis.xml new file mode 100644 index 0000000..0202976 --- /dev/null +++ b/src/main/resources/config/spring-mybatis.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/deploy/env-dev.properties b/src/main/resources/deploy/env-dev.properties new file mode 100644 index 0000000..828cb23 --- /dev/null +++ b/src/main/resources/deploy/env-dev.properties @@ -0,0 +1,17 @@ +profile.env=dev +# log config +log.home=/opt/logs +log.name=dms-webapp +log.level=DEBUG +log.only_sql=true + +## jdbc.properties configuration +dataSource.url=jdbc:mysql://121.40.156.26:3306/dms_dev?useUnicode=true&characterEncoding=utf8 +dataSource.username=root +dataSource.password=fuckyoumysql + +wx.domain=http://www.j9soft.com + +wx.scanning=http://www.j9soft.com/bind/auth?url=/wx/scanning¶m={ORDER_NO} + +wx.receipt=http://www.j9soft.com/bind/auth?url=/wx/receipt¶m={ORDER_NO} \ No newline at end of file diff --git a/src/main/resources/deploy/env-local.properties b/src/main/resources/deploy/env-local.properties new file mode 100644 index 0000000..d6e7643 --- /dev/null +++ b/src/main/resources/deploy/env-local.properties @@ -0,0 +1,17 @@ +profile.env=dev +# log config +log.home=/opt/logs +log.name=dms-webapp +log.level=DEBUG +log.only_sql=true + +## jdbc.properties configuration +dataSource.url=jdbc:mysql://localhost:3306/dms_dev?useUnicode=true&characterEncoding=utf8 +dataSource.username=root +dataSource.password=rootroot + +wx.domain=http://www.j9soft.com + +wx.scanning=http://www.j9soft.com/bind/auth?url=/wx/scanning¶m={ORDER_NO} + +wx.receipt=http://www.j9soft.com/bind/auth?url=/wx/receipt¶m={ORDER_NO} \ No newline at end of file diff --git a/src/main/resources/deploy/env-prd.properties b/src/main/resources/deploy/env-prd.properties new file mode 100644 index 0000000..1b402e6 --- /dev/null +++ b/src/main/resources/deploy/env-prd.properties @@ -0,0 +1,18 @@ +profile.env=rls +# log config +log.home=/opt/logs +log.name=dms-webapp +log.level=INFO +log.only_sql=true + + +## jdbc.properties configuration +dataSource.url=jdbc:mysql://101.200.51.63:3306/dms_c?useUnicode=true&characterEncoding=utf8 +dataSource.username=root +dataSource.password=/;p0.lo9 + +wx.domain=http://system.1g3h.com + +wx.scanning=http://system.1g3h.com/bind/auth?url=/wx/scanning¶m={ORDER_NO} + +wx.receipt=http://system.1g3h.com/bind/auth?url=/wx/receipt¶m={ORDER_NO} \ No newline at end of file diff --git a/src/main/resources/ehcache/ehcache.xml b/src/main/resources/ehcache/ehcache.xml new file mode 100644 index 0000000..d342173 --- /dev/null +++ b/src/main/resources/ehcache/ehcache.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/properties/config.properties b/src/main/resources/properties/config.properties new file mode 100644 index 0000000..9c3fd2b --- /dev/null +++ b/src/main/resources/properties/config.properties @@ -0,0 +1,10 @@ +#\u5FAE\u4FE1\u670D\u52A1\u53F7\u4FE1\u606F +WeiXinServiceID=${WeiXinServiceID} +appID=${appID} +appsecret=${appsecret} +token=${token} + +#\u672C\u673A\u57DF\u540D domain name +wx.domain=${wx.domain} +wx.scanning=${wx.scanning} +wx.receipt=${wx.receipt} \ No newline at end of file diff --git a/src/main/resources/template/order.xls b/src/main/resources/template/order.xls new file mode 100644 index 0000000..1795451 Binary files /dev/null and b/src/main/resources/template/order.xls differ diff --git a/src/main/resources/tools/generatorConfig-member.xml b/src/main/resources/tools/generatorConfig-member.xml new file mode 100644 index 0000000..0d85c5b --- /dev/null +++ b/src/main/resources/tools/generatorConfig-member.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
\ No newline at end of file diff --git a/src/main/resources/tools/template/header.ftl b/src/main/resources/tools/template/header.ftl new file mode 100644 index 0000000..c2d2717 --- /dev/null +++ b/src/main/resources/tools/template/header.ftl @@ -0,0 +1,5 @@ +/** + * @author tanxinzheng + * @date ${.now} + * @version 1.0.0 + */ diff --git a/src/main/resources/tools/template/list-js.ftl b/src/main/resources/tools/template/list-js.ftl new file mode 100644 index 0000000..3980270 --- /dev/null +++ b/src/main/resources/tools/template/list-js.ftl @@ -0,0 +1,172 @@ +/** + * Created by tanxinzheng on 16/7/3. + */ +define(function(){ + return ["$scope", "$modal", "${domainObjectClassName}API", "$dialog", function($scope, $modal, ${domainObjectClassName}API, $dialog){ + $scope.pageSetting = { + checkAll : false, + queryBtnLoading : false + }; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + // 重置 + $scope.reset = function(){ + $scope.queryParam={}; + $scope.get${domainObjectClassName}List(); + }; + $scope.queryParam = {}; + // 查询列表 + $scope.get${domainObjectClassName}List = function(){ + $scope.pageSetting.queryBtnLoading = true; + ${domainObjectClassName}API.query({ + keyword: $scope.queryParam.keyword, + limit: $scope.pageInfoSetting.pageSize, + offset: $scope.pageInfoSetting.pageNum + }, function(data){ + $scope.${domainObjectName}List = data.data; + $scope.pageInfoSetting = data.pageInfo; + }).$promise.finally(function(){ + $scope.pageSetting.queryBtnLoading = false; + });; + }; + // 全选 + $scope.checkAll = function(){ + if(!$scope.${domainObjectName}List){ + return; + } + for (var i = 0; i < $scope.${domainObjectName}List.length; i++) { + $scope.${domainObjectName}List[i].checked = $scope.pageSetting.checkAll; + } + }; + // 子集控制全选 + $scope.changeItemChecked = function(){ + if(!$scope.${domainObjectName}List){ + return; + } + var num = 0; + for (var i = 0; i < $scope.${domainObjectName}List.length; i++) { + if($scope.${domainObjectName}List[i].checked){ + num++; + } + } + // 子集勾选数量等于集合总数则勾选全选,否则取消全选 + if(num == $scope.${domainObjectName}List.length){ + $scope.pageSetting.checkAll = true; + }else{ + $scope.pageSetting.checkAll = false; + } + }; + // 新增 + $scope.add = function(index){ + $scope.openModal("ADD", index); + }; + // 查看 + $scope.view = function(index){ + $scope.openModal("VIEW", index); + }; + // 修改 + $scope.update = function(index){ + $scope.openModal("UPDATE", index); + }; + // 弹出 + $scope.openModal = function(action, index){ + $modal.open({ + templateUrl: '${domainObjectName}_detail.html', + modal:true, + resolve: { + Params: function () { + var params = { + action: action + }; + if(index >= 0 && $scope.${domainObjectName}List[index] && $scope.${domainObjectName}List[index].id){ + params.id = $scope.${domainObjectName}List[index].id; + } + return params; + } + }, + controller: ['$scope', '$modalInstance', "$modal", "${domainObjectClassName}API", "Params", "$dialog", function($scope, $modalInstance, $modal, ${domainObjectClassName}API, Params, $dialog){ + //$scope.${domainObjectName} = null; + $scope.pageSetting = { + formDisabled : true, + saveBtnLoading : false + }; + if(Params.action == "UPDATE" || Params.action == "ADD"){ + $scope.pageSetting.formDisabled = false; + } + if(Params && Params.id){ + $scope.${domainObjectName} = ${domainObjectClassName}API.get({ + id: Params.id + }); + } + $scope.${domainObjectName}DetailForm = {}; + $scope.save${domainObjectClassName} = function(){ + if($scope.${domainObjectName}DetailForm.validator.form()){ + $dialog.confirm("是否保存数据?").then(function(){ + $scope.pageSetting.saveBtnLoading = true; + if ( !$scope.${domainObjectName}.id ) { + ${domainObjectClassName}API.create($scope.${domainObjectName}, function(data,headers){ + $dialog.success("新增成功"); + $modalInstance.close(); + }).$promise.finally(function(){ + $scope.pageSetting.saveBtnLoading = false; + }); + }else { + ${domainObjectClassName}API.update($scope.${domainObjectName}, function(data,headers){ + $dialog.success("更新成功"); + $modalInstance.close(); + }).$promise.finally(function(){ + $scope.pageSetting.saveBtnLoading = false; + }); + } + }); + } + }; + $scope.cancel = function(){ + $modalInstance.dismiss(); + }; + }] + }).result.then(function () { + $scope.get${domainObjectClassName}List(); + }); + }; + // 删除 + $scope.delete = function(index){ + $dialog.confirm("请确认是否删除").then(function(){ + ${domainObjectClassName}API.delete({id:$scope.${domainObjectName}List[index].id}, function(){ + $scope.get${domainObjectClassName}List(); + }); + }); + }; + // 批量删除 + $scope.batchDelete = function(){ + var choiceItems = []; + for (var i = 0; i < $scope.${domainObjectName}List.length; i++) { + var obj = $scope.${domainObjectName}List[i]; + if(obj.checked){ + choiceItems.push(obj.id); + } + } + if(choiceItems && choiceItems.length > 0){ + $dialog.confirm("已勾选记录数:" + choiceItems.length + ",请确认是否删除已勾选数据").then(function(){ + ${domainObjectClassName}API.delete({ids:choiceItems}, function(){ + $scope.get${domainObjectClassName}List(); + }); + }) + }else{ + $dialog.alert("请勾选需要删除的数据"); + } + }; + // 导出 + $scope.batchExport = function(){ + ${domainObjectClassName}API.export({ + data:{keyword: $scope.queryParam.keyword} + }); + }; + var init = function(){ + $scope.get${domainObjectClassName}List(); + }; + init(); + }] +}); \ No newline at end of file diff --git a/src/main/resources/tools/template/mapper-xml.ftl b/src/main/resources/tools/template/mapper-xml.ftl new file mode 100644 index 0000000..31003f2 --- /dev/null +++ b/src/main/resources/tools/template/mapper-xml.ftl @@ -0,0 +1,50 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/tools/template/mapper.ftl b/src/main/resources/tools/template/mapper.ftl new file mode 100644 index 0000000..8d8f2f8 --- /dev/null +++ b/src/main/resources/tools/template/mapper.ftl @@ -0,0 +1,8 @@ +package ${targetPackage}; + +<#include "header.ftl"> +public interface ${domainObjectClassName}MapperExt { + + public static final String ${domainObjectClassName}MapperNameSpace = "${targetPackage}.${domainObjectClassName}MapperExt."; + +} diff --git a/src/main/resources/tools/template/updateModel.ftl b/src/main/resources/tools/template/updateModel.ftl new file mode 100644 index 0000000..24e4063 --- /dev/null +++ b/src/main/resources/tools/template/updateModel.ftl @@ -0,0 +1,30 @@ +package ${targetPackage}; + +import lombok.Data; +import ${modulePackage}.entity.${domainObjectClassName}; +import org.springframework.beans.BeanUtils; + +<#if importClassList?exists> + <#list importClassList?keys as mykey> + import ${mykey}; + + +import java.io.Serializable; + +<#include "header.ftl"> +public @Data class ${domainObjectClassName}Update implements Serializable { + +<#if fieldList?exists> + <#list fieldList as field> + /** ${field['fieldComment']} */ + private ${field['fieldType']} ${field['fieldName']}; + + + + + public ${domainObjectClassName} getEntity(){ + ${domainObjectClassName} ${domainObjectName} = new ${domainObjectClassName}(); + BeanUtils.copyProperties(this, ${domainObjectName}); + return ${domainObjectName}; + } +} diff --git a/src/main/webapp/WEB-INF/excelFile/couponExcel.xlsx b/src/main/webapp/WEB-INF/excelFile/couponExcel.xlsx new file mode 100644 index 0000000..5fd19bf Binary files /dev/null and b/src/main/webapp/WEB-INF/excelFile/couponExcel.xlsx differ diff --git a/src/main/webapp/WEB-INF/views/404.jsp b/src/main/webapp/WEB-INF/views/404.jsp new file mode 100644 index 0000000..65432b4 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/404.jsp @@ -0,0 +1,10 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + 404 + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/500.jsp b/src/main/webapp/WEB-INF/views/500.jsp new file mode 100644 index 0000000..25cbfb7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/500.jsp @@ -0,0 +1,10 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + 500 + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/login.jsp b/src/main/webapp/WEB-INF/views/login.jsp new file mode 100644 index 0000000..4b479d5 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/login.jsp @@ -0,0 +1,212 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> + + + + + + + 个人礼品市场后台管理系统 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+ + +
+
+
+
+
+
+ 登录 - 个人礼品市场后台管理系统 +
+
+
+ ${error} +
+
+ + +
+ +
+ + + +
+ +
+ +
+
+
+ +
+
+ +
+ + <%--
- Or sign in using -
--%> + + <%--
    --%> + <%--
  • --%> + <%----%> + <%--
  • --%> + <%--
  • --%> + <%----%> + <%--
  • --%> + <%--
  • --%> + <%----%> + <%--
  • --%> + <%--
--%> + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/register.jsp b/src/main/webapp/WEB-INF/views/register.jsp new file mode 100644 index 0000000..c4e0722 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/register.jsp @@ -0,0 +1,475 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + SmartAdmin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ 注册 +
+
+ ${error} +
+
+
+ +
+ + <%--
--%> + <%----%> + <%--
--%> + +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ +
+ +

+ 感谢你的注册 +

+
+
+ +
+

*FREE Registration ends on October 2015.

+
- Or sign in using -
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
+
+
+ +
+ + + + + + + + <%----%> + + + <%----%> + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/.bowerrc b/src/main/webapp/WEB-INF/views/src/.bowerrc new file mode 100644 index 0000000..bcb4b7e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/.bowerrc @@ -0,0 +1,4 @@ +{ + "directory": "js/components", + "analytics": false +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/MP_verify_jWIslpvFiCq3GKYd.txt b/src/main/webapp/WEB-INF/views/src/MP_verify_jWIslpvFiCq3GKYd.txt new file mode 100644 index 0000000..ef6d32f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/MP_verify_jWIslpvFiCq3GKYd.txt @@ -0,0 +1 @@ +jWIslpvFiCq3GKYd \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/README.md b/src/main/webapp/WEB-INF/views/src/README.md new file mode 100644 index 0000000..905648e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/README.md @@ -0,0 +1,6 @@ +smartadmin-1.4-angular-version +============================== + +基于Angularjs框架的smartadmin风格后台模板 + +演示地址:[http://tanxinzheng.github.io/smartadmin-1.4-angular-version-master](http://tanxinzheng.github.io/smartadmin-1.4-angular-version-master) \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/bower.json b/src/main/webapp/WEB-INF/views/src/bower.json new file mode 100644 index 0000000..59f9f8e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/bower.json @@ -0,0 +1,20 @@ +{ + "name": "src", + "version": "1.0.0", + "homepage": "https://github.com/xmomen/dms-webapp", + "authors": [ + "Jeng Tam " + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "js/components", + "test", + "tests" + ], + "dependencies": { + "require-css": "~0.1.8" + } +} diff --git a/src/main/webapp/WEB-INF/views/src/css/demo.min.css b/src/main/webapp/WEB-INF/views/src/css/demo.min.css new file mode 100644 index 0000000..6b9515c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/css/demo.min.css @@ -0,0 +1 @@ +.toggle-demo{position:absolute;top:10px;right:-8px;display:block;width:150px;height:auto;z-index:99;opacity:.9}.toggle-demo:hover{opacity:1}.toggle-demo .btn-group{width:100px;float:left}.toggle-demo>span{display:inline-block;float:left;margin-right:5px;line-height:21px;color:#757575}.demo-vertical-uislider{box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.demo-vertical-uislider>div{height:200px;margin:0 0 0 10px;display:inline-block}.demo-vertical-uislider >:first-child{margin-left:15px}.knobs-demo>div{display:inline-block;margin-left:30px}.knobs-demo >:first-child{margin-left:0}.demo label input[type=checkbox].checkbox+span:before,.demo label input[type=radio].radiobox+span:before{border:1px solid #5E5E5E}.demo label:hover input[type=checkbox].checkbox+span:before{border-color:#E77317}.demo label{margin-bottom:4!important}.demo .checkbox i{border-color:#7A7A7A}.demo .checkbox,.demo .radio{padding-left:22px}.demo.activate{right:0!important;box-shadow:-11px 12px 23px rgba(0,0,0,.2);padding:5px 10px 10px}.demo #demo-setting+form{display:none}.demo.activate #demo-setting+form{display:block}.demo{position:absolute;top:5px;right:0;width:160px;z-index:11;background:#F1DA91}.demo>span{position:absolute;right:0;top:0;display:block;height:30px;width:30px;border-radius:5px 0 0 5px;background:#F1DA91;padding:2px;text-align:center;line-height:28px;cursor:pointer}.demo>span i{font-size:17px}.demo.activate>span i:before{content:"\f00d"}.demo.activate>span{left:-30px}.demo>span:hover i{color:#333!important}.demo form section{margin:0!important}.demo .btn{font-size:13px!important;line-height:1.5!important;border-radius:3px!important;padding:3px 7px!important;height:auto!important}.demo-liveupdate-1{font-size:12px!important;position:absolute!important;left:33px;top:15px;display:block;z-index:2;font-weight:700;padding:1px 61px 3px 7px}.demo-btns{margin:0;padding:0;list-style:none}.demo-btns>li{display:inline-block;margin-bottom:7px}.demo-icon-font{font-size:14px;margin-bottom:6px;padding-top:4px;padding-bottom:4px}.demo-icon-font:hover{background-color:rgba(86,61,124,.1);text-decoration:none}.demo-modal{width:auto;max-width:600px;z-index:1}.demo-red{color:#DF413E}.demo-orange{color:#DAA03E}.demo-border{border:1px solid rgba(0,0,0,.2)} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/css/font-awesome.min.css b/src/main/webapp/WEB-INF/views/src/css/font-awesome.min.css new file mode 100644 index 0000000..29a75bf --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.1.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff?v=4.1.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.1.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-square:before,.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/css/invoice.min.css b/src/main/webapp/WEB-INF/views/src/css/invoice.min.css new file mode 100644 index 0000000..e4db1cb --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/css/invoice.min.css @@ -0,0 +1 @@ +#invoice-bar{text-align:right}.invoice{border:1px solid #d3d3d3;margin-bottom:30px;display:block}.no-padding .invoice{margin:0;border:none}.invoice h3,.invoice h4,.invoice h5{margin:0}.invoice-footer{width:100%;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.client-info,.invoice-info,.invoice-sum-total,.payment-methods{margin:0;display:inline-block;vertical-align:top}.invoice-info,.invoice-sum-total{text-align:right}.client-info,.invoice-info{font-size:12px}.invoice-sum-total{margin-top:30px}.client-info li{font-weight:400}.client-info li span{display:block;margin-bottom:3px;font-size:14px}.invoice-body table{border-top:none;border-bottom:none;margin:0}.invoice,.invoice-body table thead tr{background:#fff}.invoice-body table thead tr{border-top:none}.invoice-body table th,.invoice-body table tr{line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #DDD;font-size:13px}.invoice-body table td,.invoice-body table th{padding:10px 32px!important}.invoice-body table th.item{width:18%}.invoice-body table th.desc{width:38%}.invoice-body table th.price,.invoice-body table th.qtn{width:15%}.invoice-body table th.sub{width:15}.invoice table td.invoice-sub{text-align:right;font-weight:700}.invoice td a{font-weight:700;color:#2D67A3}.invoice-footer{border-bottom:none;border-top:1px dotted #AAA}@media print{#header,#left-panel,#ribbon,#shortcut,#sparks,.page-title,.panel-heading{display:none!important}.invoice-body table th,.invoice-body table tr,table{border-bottom:1px dotted #333;border-top:1px dotted #333!important}.invoice{border:none}.invoice td a{font-weight:400}.invoice-body table td,.invoice-body table th,.invoice-client-info,.invoice-footer,.invoice-header{font-family:'Segoe UI',Tahoma,sans-serif!important}} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/css/smartadmin-production.min.css b/src/main/webapp/WEB-INF/views/src/css/smartadmin-production.min.css new file mode 100644 index 0000000..3ef861a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/css/smartadmin-production.min.css @@ -0,0 +1,51 @@ +/*! + * SmartAdmin - Responsive WebApp + * + * Copyright 2014 bootstraphunter.com + * Designed and built with all the love in the world by @bootstraphunt. + */.md-editor{display:block;border:1px solid #ddd}.md-editor .md-footer,.md-editor>.md-header{display:block;padding:6px 4px;background:#f5f5f5;margin:0}.md-editor>.md-header>:first-child{margin-left:0}.md-editor>.md-preview{background:#fff;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;min-height:10px;padding:10px}.md-editor>textarea{font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:13px;outline:0;margin:0;display:block;width:100%;border:0;padding:10px;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;border-radius:0;box-shadow:none;background:#eee}.md-editor>textarea:focus{box-shadow:none;background:#fff}.md-editor.active{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}/*! + * Slider for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.slider{display:inline-block;vertical-align:middle;position:relative}.slider.slider-horizontal{width:100%!important;height:20px}.slider.slider-horizontal .slider-track{height:10px;width:100%;margin-top:-5px;top:50%;left:0}.slider.slider-horizontal .slider-selection{height:100%;top:0;bottom:0}.slider.slider-horizontal .slider-handle{margin-left:-10px;margin-top:-5px}.slider.slider-horizontal .slider-handle.triangle{width:20px;height:20px;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg);border:none;line-height:21px;color:#797777;text-shadow:0 1px 0 rgba(255,255,255,.8)}.slider.slider-horizontal .slider-handle.triangle:before{content:"\f0da";font-size:34px}.slider-horizontal .slider-selection+.slider-handle.triangle+.slider-handle.triangle:before{content:"\f0d9"}.slider.slider-vertical{height:210px;width:20px}.slider.slider-vertical .slider-track{width:10px;height:100%;margin-left:-5px;left:50%;top:0}.slider.slider-vertical .slider-selection{width:100%;left:0;top:0;bottom:0}.slider.slider-vertical .slider-handle{margin-left:-5px;margin-top:-10px}.slider.slider-vertical .slider-handle.triangle{width:20px;height:20px;filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg);border:none;line-height:21px;color:#797777;text-shadow:0 -1px 0 rgba(255,255,255,.8)}.slider.slider-vertical .slider-handle.triangle:before{content:"\f0d7";font-size:32px;text-shadow:0 1px 0 rgba(255,255,255,.8)}.slider.slider-vertical .slider-selection+.slider-handle.triangle+.slider-handle.triangle:before{content:"\f0d8";text-shadow:0 -1px 0 rgba(255,255,255,.8)}.slider input{display:none}.slider .tooltip-inner{white-space:nowrap}.slider-track{position:absolute;cursor:pointer;background:#E5E5E5}.slider-selection{position:absolute;background:#3276b1}.slider-handle{position:absolute;width:20px;height:20px;border:1px solid #FFF;background:#858585;display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;line-height:18px;font-size:10px;color:#BDBDBD;text-shadow:0 1px 0 rgba(77,77,77,.5);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.slider-handle:before{content:"\f0c9"}.slider-handle.round{-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;width:20px;height:20px}.slider-handle.triangle{background:transparent none}.slider-danger+.slider-track>.slider-selection{background:#a90329}.slider-warning+.slider-track>.slider-selection{background:#c79121}.slider-info+.slider-track>.slider-selection{background:#57889c}.slider-success+.slider-track>.slider-selection{background:#739e73}.bootstrap-tagsinput{display:block;width:100%;min-height:32px;padding:1px 3px;font-size:13px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#FFF;border:1px solid #CCC;border-radius:0}.bootstrap-tagsinput>span{border-radius:0!important;font-weight:400;padding:3px 28px 4px 8px;font-size:13px;border:1px solid #285E8E;background:#3276B1}.bootstrap-tagsinput input{border:none;box-shadow:none;outline:0;background-color:transparent;padding:0;margin:0;width:auto!important;max-width:inherit}.bootstrap-tagsinput input:focus{border:none;box-shadow:none}.bootstrap-tagsinput .tag{color:#FFF;position:relative;margin:3px 0 3px 2px;display:inline-block}.bootstrap-tagsinput .tag [data-role=remove]{display:block;top:-1px;right:0;padding:3px 4px 3px 5px;width:23px;height:22px;position:absolute;cursor:pointer}.bootstrap-tagsinput .tag [data-role=remove]:hover{background:rgba(0,0,0,.3)}.bootstrap-tagsinput .tag [data-role=remove]:after{content:"\f057";font-family:fontAwesome;padding:2px 1px;line-height:17px;font-size:15px;text-align:center}.bootstrap-tagsinput .tag [data-role=remove]:hover{box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.bootstrap-tagsinput .tag [data-role=remove]:hover:active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}/*! + * Timepicker Component for Twitter Bootstrap + * + * Copyright 2013 Joris de Wit + * + * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:4px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;position:absolute}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #FFF;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;position:absolute}.bootstrap-timepicker-widget.timepicker-orient-left:before{left:6px}.bootstrap-timepicker-widget.timepicker-orient-left:after{left:7px}.bootstrap-timepicker-widget.timepicker-orient-right:before{right:6px}.bootstrap-timepicker-widget.timepicker-orient-right:after{right:7px}.bootstrap-timepicker-widget.timepicker-orient-top:before{top:-7px}.bootstrap-timepicker-widget.timepicker-orient-top:after{top:-6px}.bootstrap-timepicker-widget.timepicker-orient-bottom:before{bottom:-7px;border-bottom:0;border-top:7px solid #999}.bootstrap-timepicker-widget.timepicker-orient-bottom:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td:not(.separator){min-width:30px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px transparent solid;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px;font-size:18px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media (min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media (max-width:767px){.bootstrap-timepicker,.bootstrap-timepicker .dropdown-menu{width:100%}}/*! + * ClockPicker v{package.version} for Bootstrap (http://weareoutman.github.io/clockpicker/) + * Copyright 2014 Wang Shenwei. + * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/master/LICENSE) + */.clockpicker .input-group-addon{cursor:pointer}.clockpicker-moving{cursor:move}.clockpicker-align-left.popover>.arrow{left:25px}.clockpicker-align-top.popover>.arrow{top:17px}.clockpicker-align-right.popover>.arrow{left:auto;right:25px}.clockpicker-align-bottom.popover>.arrow{top:auto;bottom:6px}.clockpicker-popover .popover-title{background-color:#fff;color:#999;font-size:24px;font-weight:700;line-height:30px;text-align:center}.clockpicker-popover .popover-title span{cursor:pointer}.clockpicker-popover .popover-content{background-color:#f8f8f8;padding:12px}.popover-content:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.clockpicker-plate{background-color:#fff;border:1px solid #ccc;border-radius:50%;width:200px;height:200px;overflow:visible;position:relative;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.clockpicker-canvas,.clockpicker-dial{width:200px;height:200px;position:absolute;left:-1px;top:-1px}.clockpicker-minutes{visibility:hidden}.clockpicker-tick{border-radius:50%;color:#666;line-height:26px;text-align:center;width:26px;height:26px;position:absolute;cursor:pointer}.clockpicker-tick.active,.clockpicker-tick:hover{background-color:#c0e5f7;background-color:rgba(0,149,221,.25)}.clockpicker-button{background-image:none;background-color:#fff;border-width:1px 0 0;border-top-left-radius:0;border-top-right-radius:0;margin:0;padding:10px 0}.clockpicker-button:hover{background-image:none;background-color:#ebebeb}.clockpicker-button:focus{outline:0!important}.clockpicker-dial{-webkit-transition:-webkit-transform 350ms,opacity 350ms;-moz-transition:-moz-transform 350ms,opacity 350ms;-ms-transition:-ms-transform 350ms,opacity 350ms;-o-transition:-o-transform 350ms,opacity 350ms;transition:transform 350ms,opacity 350ms}.clockpicker-dial-out{opacity:0}.clockpicker-hours.clockpicker-dial-out{-webkit-transform:scale(1.2,1.2);-moz-transform:scale(1.2,1.2);-ms-transform:scale(1.2,1.2);-o-transform:scale(1.2,1.2);transform:scale(1.2,1.2)}.clockpicker-minutes.clockpicker-dial-out{-webkit-transform:scale(0.8,.8);-moz-transform:scale(0.8,.8);-ms-transform:scale(0.8,.8);-o-transform:scale(0.8,.8);transform:scale(0.8,.8)}.clockpicker-canvas{-webkit-transition:opacity 175ms;-moz-transition:opacity 175ms;-ms-transition:opacity 175ms;-o-transition:opacity 175ms;transition:opacity 175ms}.clockpicker-canvas-out{opacity:.25}.clockpicker-canvas-bearing,.clockpicker-canvas-fg{stroke:none;fill:#0095dd}.clockpicker-canvas-bg{stroke:none;fill:#c0e5f7}.clockpicker-canvas-bg-trans{fill:rgba(0,149,221,.25)}.clockpicker-canvas line{stroke:#0095dd;stroke-width:1;stroke-linecap:round}/*! + * Colorpicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.colorpicker-saturation{width:100px;height:100px;background-image:url(../img/saturation.png);cursor:crosshair;float:left}.colorpicker-saturation i{display:block;height:5px;width:5px;border:1px solid #000;position:absolute;top:0;left:0;margin:-4px 0 0 -4px}.colorpicker-saturation i b{display:block;height:5px;width:5px;border:1px solid #fff}.colorpicker-alpha,.colorpicker-hue{width:15px;height:100px;float:left;cursor:row-resize;margin-left:4px;margin-bottom:4px}.colorpicker-alpha i,.colorpicker-hue i{display:block;height:1px;background:#000;border-top:1px solid #fff;position:absolute;top:0;left:0;width:100%;margin-top:-1px}.colorpicker-hue{background-image:url(../img/hue.png)}.colorpicker-alpha{background-image:url(../img/alpha.png);display:none}.colorpicker{zoom:1;top:0;left:0;padding:4px;min-width:120px;margin-top:1px;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.colorpicker:after{clear:both}.colorpicker:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.colorpicker:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.colorpicker div{position:relative}.colorpicker.alpha{min-width:140px}.colorpicker.alpha .colorpicker-alpha{display:block}.colorpicker-color{height:10px;margin-top:5px;clear:both;background-image:url(../img/alpha.png);background-position:0 100%}.colorpicker-color div{height:10px}.input-append.color .add-on i,.input-prepend.color .add-on i{display:block;cursor:pointer;width:16px;height:16px}div.dataTables_length label{font-weight:400;float:left;text-align:left}div.dataTables_length select{width:75px}div.dataTables_filter label{font-weight:400;float:right}div.dataTables_filter input{width:16em}div.dataTables_paginate{float:right;margin:0}div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable{clear:both;margin-top:6px!important;margin-bottom:6px!important;max-width:none!important}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer}table.dataTable thead>tr>th{padding-right:18px}table.dataTable th:active{outline:0}div.dataTables_scrollHead table{margin-bottom:0!important;border-bottom-left-radius:0;border-bottom-right-radius:0}div.dataTables_scrollHead table thead tr:last-child td:first-child,div.dataTables_scrollHead table thead tr:last-child th:first-child{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.dataTables_scrollBody table{border-top:none;margin-top:0!important;margin-bottom:0!important}div.dataTables_scrollBody tbody tr:first-child td,div.dataTables_scrollBody tbody tr:first-child th{border-top:none}div.dataTables_scrollFoot table{margin-top:0!important;border-top:none}table.table-bordered.dataTable{border-collapse:separate!important}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th{border-left-width:0;border-bottom-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.DTTT .btn{color:#333!important;font-size:12px}div.DTTT .btn:hover{text-decoration:none!important}ul.DTTT_dropdown.dropdown-menu{z-index:2003}ul.DTTT_dropdown.dropdown-menu a{color:#333!important}ul.DTTT_dropdown.dropdown-menu li{position:relative}ul.DTTT_dropdown.dropdown-menu li:hover a{background-color:#08c;color:#fff!important}div.DTTT_print_info.modal{height:150px;margin-top:-75px;text-align:center}div.DTTT_print_info h6{font-weight:400;font-size:28px;line-height:28px;margin:1em}div.DTTT_print_info p{font-size:14px;line-height:20px}div.DTFC_LeftFootWrapper table,div.DTFC_LeftHeadWrapper table,div.DTFC_RightFootWrapper table,div.DTFC_RightHeadWrapper table,table.DTFC_Cloned tr.even{background-color:#fff;margin-bottom:0}div.DTFC_LeftHeadWrapper table,div.DTFC_RightHeadWrapper table{margin-bottom:0!important;border-top-right-radius:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child,div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}div.DTFC_LeftBodyWrapper table,div.DTFC_RightBodyWrapper table{border-top:none;margin:0!important}div.DTFC_LeftBodyWrapper tbody tr:first-child td,div.DTFC_LeftBodyWrapper tbody tr:first-child th,div.DTFC_LeftFootWrapper table,div.DTFC_RightBodyWrapper tbody tr:first-child td,div.DTFC_RightBodyWrapper tbody tr:first-child th,div.DTFC_RightFootWrapper table{border-top:none}div.FixedHeader_Cloned table{margin:0!important}table.DTCR_clonedTable{background-color:rgba(255,255,255,.7);z-index:202}div.DTCR_pointer{width:1px;background-color:#0259C4;z-index:201}div.ColVis{float:right}button.ColVis_Button,ul.ColVis_collection li{position:relative;float:left;margin-right:3px;padding:5px 8px;border:1px solid #999;cursor:pointer;*cursor:hand;font-size:.88em;color:#000!important;white-space:nowrap;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:1px 1px 3px #ccc;-moz-box-shadow:1px 1px 3px #ccc;-ms-box-shadow:1px 1px 3px #ccc;-o-box-shadow:1px 1px 3px #ccc;box-shadow:1px 1px 3px #ccc;background:#fff;background:-webkit-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-moz-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-ms-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-o-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f9f9f9', GradientType=0)}.ColVis_Button:hover,ul.ColVis_collection li:hover{border:1px solid #666;text-decoration:none!important;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;background:#f3f3f3;background:-webkit-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:-moz-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:-ms-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:-o-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#f4f4f4', GradientType=0)}button.ColVis_Button{height:30px;padding:3px 8px}button.ColVis_Button::-moz-focus-inner{border:none!important;padding:0}button.ColVis_Button:active{outline:0}div.ColVis_collectionBackground{position:fixed;top:0;left:0;height:100%;width:100%;background-color:#000;z-index:1100}ul.ColVis_collection{padding:8px 8px 4px;margin:0;border:1px solid #ccc;border:1px solid rgba(0,0,0,.4);background-color:#f3f3f3;background-color:rgba(255,255,255,.3);overflow:hidden;z-index:2002;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:3px 3px 5px rgba(0,0,0,.3);-moz-box-shadow:3px 3px 5px rgba(0,0,0,.3);-ms-box-shadow:3px 3px 5px rgba(0,0,0,.3);-o-box-shadow:3px 3px 5px rgba(0,0,0,.3);box-shadow:3px 3px 5px rgba(0,0,0,.3)}ul.ColVis_collection li{position:relative;height:auto;left:0;right:0;padding:.5em;display:block;float:none;margin-bottom:4px;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;text-align:left}ul.ColVis_collection li.ColVis_Button:hover{border:1px solid #999;background-color:#f0f0f0}ul.ColVis_collection li span{display:inline-block;padding-left:.5em;cursor:pointer}ul.ColVis_collection li.ColVis_Special{border-color:#555;background:#ededed;background:-webkit-linear-gradient(top,#ededed 0,#d6d6d6 77%,#e8e8e8 100%);background:-moz-linear-gradient(top,#ededed 0,#d6d6d6 77%,#e8e8e8 100%);background:-ms-linear-gradient(top,#ededed 0,#d6d6d6 77%,#e8e8e8 100%);background:-o-linear-gradient(top,#ededed 0,#d6d6d6 77%,#e8e8e8 100%);background:linear-gradient(to bottom,#ededed 0,#d6d6d6 77%,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#e8e8e8', GradientType=0)}ul.ColVis_collection li.ColVis_Special:hover{background:#e2e2e2;background:-webkit-linear-gradient(top,#d0d0d0 0,#d5d5d5 89%,#e2e2e2 100%);background:-moz-linear-gradient(top,#d0d0d0 0,#d5d5d5 89%,#e2e2e2 100%);background:-ms-linear-gradient(top,#d0d0d0 0,#d5d5d5 89%,#e2e2e2 100%);background:-o-linear-gradient(top,#d0d0d0 0,#d5d5d5 89%,#e2e2e2 100%);background:linear-gradient(top,#d0d0d0 0,#d5d5d5 89%,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#e2e2e2', GradientType=0)}span.ColVis_radio{display:inline-block;width:20px}div.ColVis_catcher{position:absolute;z-index:1101}div.DTTT_container{position:relative;float:right;margin-bottom:1em}@media screen and (max-width:640px){div.DTTT_container{float:none!important;text-align:center}div.DTTT_container:after{visibility:hidden;display:block;content:"";clear:both;height:0}}a.DTTT_button,button.DTTT_button,div.DTTT_button{position:relative;display:inline-block;margin-right:3px;padding:5px 8px;border:1px solid #999;cursor:pointer;*cursor:hand;font-size:.88em;color:#000!important;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:1px 1px 3px #ccc;-moz-box-shadow:1px 1px 3px #ccc;-ms-box-shadow:1px 1px 3px #ccc;-o-box-shadow:1px 1px 3px #ccc;box-shadow:1px 1px 3px #ccc;background:#fff;background:-webkit-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-moz-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-ms-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-o-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f9f9f9', GradientType=0)}button.DTTT_button{height:30px;padding:3px 8px}.DTTT_button embed{outline:0}a.DTTT_button:hover,button.DTTT_button:hover,div.DTTT_button:hover{border:1px solid #666;text-decoration:none!important;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999;background:#f3f3f3;background:-webkit-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:-moz-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:-ms-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:-o-linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);background:linear-gradient(top,#f3f3f3 0,#e2e2e2 89%,#f4f4f4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3f3f3', endColorstr='#f4f4f4', GradientType=0)}a.DTTT_disabled,button.DTTT_disabled,div.DTTT_disabled{color:#999;border:1px solid #d0d0d0;background:#fff;background:-webkit-linear-gradient(top,#fff 0,#f9f9f9 89%,#fafafa 100%);background:-moz-linear-gradient(top,#fff 0,#f9f9f9 89%,#fafafa 100%);background:-ms-linear-gradient(top,#fff 0,#f9f9f9 89%,#fafafa 100%);background:-o-linear-gradient(top,#fff 0,#f9f9f9 89%,#fafafa 100%);background:linear-gradient(top,#fff 0,#f9f9f9 89%,#fafafa 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#fafafa', GradientType=0)}button.DTTT_button_collection span{padding-right:17px;background:url(../images/collection.png) no-repeat center right}button.DTTT_button_collection:hover span{padding-right:17px;background:#f0f0f0 url(../images/collection_hover.png) no-repeat center right}table.DTTT_selectable tbody tr{cursor:pointer;*cursor:hand}table.dataTable tr.DTTT_selected.odd,table.dataTable tr.DTTT_selected.odd td.sorting_1,table.dataTable tr.DTTT_selected.odd td.sorting_2,table.dataTable tr.DTTT_selected.odd td.sorting_3{background-color:#9FAFD1}table.dataTable tr.DTTT_selected.even,table.dataTable tr.DTTT_selected.even td.sorting_1,table.dataTable tr.DTTT_selected.even td.sorting_2,table.dataTable tr.DTTT_selected.even td.sorting_3{background-color:#B0BED9}div.DTTT_collection{width:150px;padding:8px 8px 4px;border:1px solid #ccc;border:1px solid rgba(0,0,0,.4);background-color:#f3f3f3;background-color:rgba(255,255,255,.3);overflow:hidden;z-index:2002;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:3px 3px 5px rgba(0,0,0,.3);-moz-box-shadow:3px 3px 5px rgba(0,0,0,.3);-ms-box-shadow:3px 3px 5px rgba(0,0,0,.3);-o-box-shadow:3px 3px 5px rgba(0,0,0,.3);box-shadow:3px 3px 5px rgba(0,0,0,.3)}div.DTTT_collection_background{background:transparent url(../images/background.png) repeat top left;z-index:2001}div.DTTT_collection a.DTTT_button,div.DTTT_collection button.DTTT_button,div.DTTT_collection div.DTTT_button{position:relative;left:0;right:0;display:block;float:none;margin-bottom:4px;-webkit-box-shadow:1px 1px 3px #999;-moz-box-shadow:1px 1px 3px #999;-ms-box-shadow:1px 1px 3px #999;-o-box-shadow:1px 1px 3px #999;box-shadow:1px 1px 3px #999}.DTTT_print_info{position:fixed;top:50%;left:50%;width:400px;height:150px;margin-left:-200px;margin-top:-75px;text-align:center;color:#333;padding:10px 30px;background:#fff;background:-webkit-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-moz-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-ms-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:-o-linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);background:linear-gradient(top,#fff 0,#f3f3f3 89%,#f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f9f9f9', GradientType=0);opacity:.95;border:1px solid #000;border:1px solid rgba(0,0,0,.5);-webkit-border-radius:6px;-moz-border-radius:6px;-ms-border-radius:6px;-o-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0,0,0,.5);-moz-box-shadow:0 3px 7px rgba(0,0,0,.5);-ms-box-shadow:0 3px 7px rgba(0,0,0,.5);-o-box-shadow:0 3px 7px rgba(0,0,0,.5);box-shadow:0 3px 7px rgba(0,0,0,.5)}.DTTT_print_info h6{font-weight:400;font-size:28px;line-height:28px;margin:1em}.DTTT_print_info p{font-size:14px;line-height:20px}.dt-toolbar{display:block;position:relative;padding:6px 7px 1px;width:100%;float:left;border-bottom:1px solid #ccc;background:#fafafa}.dt-toolbar-footer{background:#fafafa;font-size:11px;overflow:hidden;padding:5px 10px;border-top:1px solid #ccc;-webkit-box-shadow:inset 0 1px #fff;-moz-box-shadow:inset 0 1px #fff;-ms-box-shadow:inset 0 1px #fff;box-shadow:inset 0 1px #fff}.dt-toolbar-footer>:first-child,.dt-toolbar>:first-child{padding-left:0!important}.dt-toolbar-footer>:last-child,.dt-toolbar>:last-child{padding-right:0!important}table.dataTable thead .sorting{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAgMAAAAPPt5fAAAACVBMVEUAAADIyMjl5eVIBBP/AAAAAXRSTlMAQObYZgAAAClJREFUCNdjwAYEwGQKiGDsBJFsTA5AUoJhAqZaiDhEDVg9RC/MHEwAANsMA91AQfd/AAAAAElFTkSuQmCC) no-repeat center right}table.dataTable thead .sorting_asc{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABVVVUT3Vn+AAAAAXRSTlMAQObYZgAAAB1JREFUCNdjwAkcgPgBAwPjBwYG5h8MDOx/GAgBAKRJBBCQbHkwAAAAAElFTkSuQmCC) no-repeat center right}table.dataTable thead .sorting_desc{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABVVVUT3Vn+AAAAAXRSTlMAQObYZgAAABxJREFUCNdjIATY/zAwMP9gYGD8AOQ8AGIHnEoBkNkEEEbbutQAAAAASUVORK5CYII=) no-repeat center right}table.dataTable thead .sorting_asc_disabled{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABUVFR8AzIeAAAAAnRSTlMAf7YpoZUAAAAdSURBVAjXY8AJHID4AQMD4wcGBuYfDAzsfxgIAQCkSQQQkGx5MAAAAABJRU5ErkJggg==) no-repeat center right}table.dataTable thead .sorting_desc_disabled{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATAQMAAABInqSPAAAABlBMVEUAAABUVFR8AzIeAAAAAnRSTlMAf7YpoZUAAAAcSURBVAjXYyAE2P8wMDD/YGBg/ADkPABiB5xKAZDZBBBG27rUAAAAAElFTkSuQmCC) no-repeat center right}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{background-color:#eee}.dataTables_empty{padding:20px 10px!important;font-size:14px;text-align:center;color:#575757}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px 10px}table.dataTable tfoot>tr>th,table.dataTable thead>tr>th{padding-left:9px!important}table.dataTable tfoot>tr>th input,table.dataTable thead>tr>th input{width:100%!important;font-weight:400}table.dataTable thead>tr>th.hasinput{padding:6px!important}div.dataTables_info{padding-top:9px;font-size:13px;font-weight:700;font-style:italic;color:#969696}.dataTable thead>tr>th{border-left:none!important}.dataTable input[type=checkbox].checkbox,.dataTable input[type=radio].radiobox{position:relative!important}table.dataTable thead>tr>th.sorting_disabled{padding-right:9px!important}.dataTables_filter{float:left;width:100%}.dataTables_filter .input-group-addon{width:32px;margin-top:0;float:left;height:32px;padding-top:8px}.dataTables_filter .input-group-addon+.form-control{float:left}.dt-toolbar>:first-child .DTTT,.dt-toolbar>:first-child .dataTables_filter>:only-child,.dt-toolbar>:first-child .dataTables_length,.dt-toolbar>:first-child .pagination{float:left!important}.dt-toolbar>:last-child .DTTT,.dt-toolbar>:last-child .dataTables_filter>:only-child,.dt-toolbar>:last-child .dataTables_length,.dt-toolbar>:last-child .pagination{float:right}.dt-toolbar-footer>:first-child .DTTT,.dt-toolbar-footer>:first-child .dataTables_filter>:only-child,.dt-toolbar-footer>:first-child .dataTables_length,.dt-toolbar-footer>:first-child .pagination{float:left}.dt-toolbar-footer>:last-child .DTTT,.dt-toolbar-footer>:last-child .dataTables_filter>:only-child,.dt-toolbar-footer>:last-child .dataTables_length,.dt-toolbar-footer>:last-child .pagination{float:right}body.DTTT_Print{background:#fff!important}.DTTT_Print #main{margin:0!important}.DTTT_PrintMessage{font-size:20px;display:block;width:100%;text-align:center;padding-top:10px;font-weight:700}.DTTT_Print table.dataTable{margin-top:0!important}.DTTT_Print .dataTables_wrapper table{border:1px solid #C7C7C7!important}div.ColVis{margin-bottom:0!important}ul.ColVis_collection{width:127px}ul.ColVis_collection li span{vertical-align:3px}ul.ColVis_collection li label{margin-bottom:0!important}.dropzone.dz-drag-hover{border:5px dashed #ccc}.dropzone{min-height:360px;-webkit-border-radius:3px;border-radius:3px}.dropzone .dz-default.dz-message{opacity:1;-ms-filter:none;filter:none;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out;background-image:url(../img/dropzone/spritemap.png);background-repeat:no-repeat;background-position:0 0;position:absolute;width:428px;height:123px;margin-left:-214px;margin-top:-61.5px;top:50%;left:50%}.dropzone .dz-default.dz-message span{display:none}.dropzone.dz-square .dz-default.dz-message{background-position:0 -123px;width:268px;margin-left:-134px;height:174px;margin-top:-87px}.dropzone.dz-drag-hover .dz-message{opacity:.15;-ms-filter:"alpha(Opacity=15)";filter:alpha(opacity=15)}.dropzone.dz-started .dz-message{opacity:0;-ms-filter:"alpha(Opacity=0)";filter:alpha(opacity=0)}.dropzone .dz-preview,.dropzone-previews .dz-preview{-webkit-box-shadow:1px 1px 4px rgba(0,0,0,.16);box-shadow:1px 1px 4px rgba(0,0,0,.16);font-size:14px}.dropzone .dz-preview.dz-image-preview:hover .dz-details img,.dropzone-previews .dz-preview.dz-image-preview:hover .dz-details img{display:block;opacity:.1;-ms-filter:"alpha(Opacity=10)";filter:alpha(opacity=10)}.dropzone .dz-preview.dz-error .dz-error-mark,.dropzone .dz-preview.dz-success .dz-success-mark,.dropzone-previews .dz-preview.dz-error .dz-error-mark,.dropzone-previews .dz-preview.dz-success .dz-success-mark{opacity:1;-ms-filter:none;filter:none}.dropzone .dz-preview.dz-error .dz-progress .dz-upload,.dropzone-previews .dz-preview.dz-error .dz-progress .dz-upload{background:#ee1e2d}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark,.dropzone-previews .dz-preview .dz-error-mark,.dropzone-previews .dz-preview .dz-success-mark{opacity:0;-ms-filter:"alpha(Opacity=0)";filter:alpha(opacity=0);-webkit-transition:opacity .4s ease-in-out;-moz-transition:opacity .4s ease-in-out;-o-transition:opacity .4s ease-in-out;-ms-transition:opacity .4s ease-in-out;transition:opacity .4s ease-in-out;background-image:url(../img/dropzone/spritemap.png);background-repeat:no-repeat}.dropzone .dz-preview .dz-error-mark span,.dropzone .dz-preview .dz-success-mark span,.dropzone-previews .dz-preview .dz-error-mark span,.dropzone-previews .dz-preview .dz-success-mark span{display:none}.dropzone .dz-preview .dz-error-mark,.dropzone-previews .dz-preview .dz-error-mark{background-position:-268px -123px}.dropzone .dz-preview .dz-success-mark,.dropzone-previews .dz-preview .dz-success-mark{background-position:-268px -163px}.dropzone .dz-preview .dz-progress .dz-upload,.dropzone-previews .dz-preview .dz-progress .dz-upload{-webkit-animation:loading .4s linear infinite;-moz-animation:loading .4s linear infinite;-o-animation:loading .4s linear infinite;-ms-animation:loading .4s linear infinite;animation:loading .4s linear infinite;-webkit-transition:width .3s ease-in-out;-moz-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;-ms-transition:width .3s ease-in-out;transition:width .3s ease-in-out;-webkit-border-radius:2px;border-radius:2px;height:100%;background-image:url(../img/dropzone/spritemap.png);background-repeat:repeat-x;background-position:0 -400px}.dropzone .dz-preview.dz-success .dz-progress,.dropzone-previews .dz-preview.dz-success .dz-progress{display:block;opacity:0;-ms-filter:"alpha(Opacity=0)";filter:alpha(opacity=0);-webkit-transition:opacity .4s ease-in-out;-moz-transition:opacity .4s ease-in-out;-o-transition:opacity .4s ease-in-out;-ms-transition:opacity .4s ease-in-out;transition:opacity .4s ease-in-out}.dropzone .dz-preview .dz-error-message,.dropzone-previews .dz-preview .dz-error-message{opacity:0;-ms-filter:"alpha(Opacity=0)";filter:alpha(opacity=0);-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;-o-transition:opacity .3s ease-in-out;-ms-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.dropzone .dz-preview:hover.dz-error .dz-error-message,.dropzone-previews .dz-preview:hover.dz-error .dz-error-message{opacity:1;-ms-filter:none;filter:none}.dropzone a.dz-remove,.dropzone-previews a.dz-remove{background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fafafa),color-stop(1,#eee));background-image:-webkit-linear-gradient(top,#fafafa 0,#eee 100%);background-image:-moz-linear-gradient(top,#fafafa 0,#eee 100%);background-image:-o-linear-gradient(top,#fafafa 0,#eee 100%);background-image:-ms-linear-gradient(top,#fafafa 0,#eee 100%);background-image:linear-gradient(top,#fafafa 0,#eee 100%);-webkit-border-radius:2px;border-radius:2px;border:1px solid #eee;text-decoration:none;display:block;padding:4px 5px;text-align:center;color:#aaa;margin-top:26px}.dropzone a.dz-remove:hover,.dropzone-previews a.dz-remove:hover{color:#666}@-moz-keyframes loading{0%{background-position:0 -400px}100%{background-position:-7px -400px}}@-webkit-keyframes loading{0%{background-position:0 -400px}100%{background-position:-7px -400px}}@-o-keyframes loading{0%{background-position:0 -400px}100%{background-position:-7px -400px}}@-ms-keyframes loading{0%{background-position:0 -400px}100%{background-position:-7px -400px}}@keyframes loading{0%{background-position:0 -400px}100%{background-position:-7px -400px}}.dropzone,.dropzone *,.dropzone-previews,.dropzone-previews *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.dropzone{position:relative;border:1px solid rgba(0,0,0,.08);background:rgba(0,0,0,.02);padding:1em}.dropzone.dz-clickable,.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message span{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone .dz-message{opacity:1;-ms-filter:none;filter:none}.dropzone.dz-drag-hover{border-color:rgba(0,0,0,.15);background:rgba(0,0,0,.04)}.dropzone.dz-started .dz-message{display:none}.dropzone .dz-preview,.dropzone-previews .dz-preview{background:rgba(255,255,255,.8);position:relative;display:inline-block;margin:17px;vertical-align:top;border:1px solid #acacac;padding:6px}.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail],.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail]{display:none}.dropzone .dz-preview .dz-details,.dropzone-previews .dz-preview .dz-details{width:100px;height:100px;position:relative;background:#ebebeb;padding:5px;margin-bottom:22px}.dropzone .dz-preview .dz-details .dz-filename,.dropzone-previews .dz-preview .dz-details .dz-filename{overflow:hidden;height:100%}.dropzone .dz-preview .dz-details img,.dropzone-previews .dz-preview .dz-details img{position:absolute;top:0;left:0;width:100px;height:100px}.dropzone .dz-preview .dz-details .dz-size,.dropzone-previews .dz-preview .dz-details .dz-size{position:absolute;bottom:-28px;left:3px;height:28px;line-height:28px}.dropzone .dz-preview.dz-error .dz-error-mark,.dropzone .dz-preview.dz-success .dz-success-mark,.dropzone-previews .dz-preview.dz-error .dz-error-mark,.dropzone-previews .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview:hover .dz-details img,.dropzone-previews .dz-preview:hover .dz-details img{display:none}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark,.dropzone-previews .dz-preview .dz-error-mark,.dropzone-previews .dz-preview .dz-success-mark{display:none;position:absolute;width:40px;height:40px;font-size:30px;text-align:center;right:-10px;top:-10px}.dropzone .dz-preview .dz-success-mark,.dropzone-previews .dz-preview .dz-success-mark{color:#8cc657}.dropzone .dz-preview .dz-error-mark,.dropzone-previews .dz-preview .dz-error-mark{color:#ee162d}.dropzone .dz-preview .dz-progress,.dropzone-previews .dz-preview .dz-progress{position:absolute;top:100px;left:6px;right:6px;height:6px;background:#d7d7d7;display:none}.dropzone .dz-preview .dz-progress .dz-upload,.dropzone-previews .dz-preview .dz-progress .dz-upload{position:absolute;top:0;bottom:0;left:0;width:0;background-color:#8cc657}.dropzone .dz-preview.dz-processing .dz-progress,.dropzone-previews .dz-preview.dz-processing .dz-progress{display:block}.dropzone .dz-preview .dz-error-message,.dropzone-previews .dz-preview .dz-error-message{display:none;position:absolute;top:-5px;left:-20px;background:rgba(245,245,245,.8);padding:8px 10px;color:#800;min-width:140px;max-width:500px;z-index:500}.dropzone .dz-preview:hover.dz-error .dz-error-message,.dropzone-previews .dz-preview:hover.dz-error .dz-error-message{display:block}.fd-form-element-hidden{display:none}.fd-slider{width:100%;height:20px;margin:0}.fd-slider-vertical{width:20px;height:100%;margin:0 10px 10px 0}.fd-slider,.fd-slider-vertical{display:block;position:relative;text-decoration:none;border:0 none;-moz-user-select:none;-khtml-user-select:none;-webkit-touch-callout:none;user-select:none}.fd-slider-inner{display:none}.fd-slider-bar{position:absolute;display:block;z-index:2;height:6px;width:100%;border:1px solid #bbb;border-bottom:1px solid #fff;border-right:1px solid #fff;margin:0;padding:0;overflow:hidden;line-height:4px;top:8px;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background-color:#333}.fd-slider-range{position:absolute;display:block;z-index:3;height:6px;margin:0;padding:0 2px 0 0;overflow:hidden;top:9px;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;background-color:#eee}.fd-slider-handle{position:absolute;display:block;padding:0;margin:0 0 0 1px;z-index:3;top:5px;left:0;width:12px;height:12px;line-height:1px!important;outline:0 none;background:#eee;border:1px solid #aaa;border-radius:12px;-webkit-user-select:none;-webkit-touch-callout:none;-moz-user-select:none;-moz-user-focus:none;-moz-outline:0 none;user-select:none}.fd-slider-handle:focus{outline:0 none;border:0 none;-moz-user-focus:normal}button.fd-slider-handle:focus::-moz-focus-inner{border-color:transparent}body.fd-slider-drag-horizontal,body.fd-slider-drag-horizontal *,body.fd-slider-drag-vertical,body.fd-slider-drag-vertical *{-moz-user-select:none;-webkit-user-select:none;user-select:none}.fd-slider-handle:after,.fd-slider-handle:before{opacity:0;-moz-transition-property:opacity;-moz-transition-duration:1s;-moz-transition-delay:1s;-webkit-transition-property:opacity;-webkit-transition-duration:1s;-webkit-transition-delay:1s;-o-transition-property:opacity;-o-transition-duration:1s;-o-transition-delay:1s;transition-property:opacity;transition-duration:1s;transition-delay:1s}.fd-slider-active .fd-slider-handle:before,.fd-slider-focused .fd-slider-handle:before,.fd-slider-hover .fd-slider-handle:before{display:block;position:absolute;top:-21px;left:-8px;margin:0;width:20px;padding:3px;height:14px;line-height:12px;text-align:center;font-size:10px;font-weight:700;color:#fff;text-shadow:1px 1px 1px #1a3a95;background:#2f6ee0;z-index:1;content:attr(aria-valuetext);-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;-moz-box-shadow:0 0 4px #aaa;-webkit-box-shadow:0 0 4px #aaa;box-shadow:0 0 4px #999;opacity:1}.fd-slider-active .fd-slider-handle:after,.fd-slider-focused .fd-slider-handle:after,.fd-slider-hover .fd-slider-handle:after{outline:0;content:"";display:block;position:absolute;top:-9px;left:50%;margin:0 0 0 -5px;background:#2f6ee0;z-index:2;width:10px;height:10px;overflow:hidden;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);-moz-box-shadow:0 0 4px #aaa;-webkit-box-shadow:0 0 4px #aaa;box-shadow:0 0 4px #aaa;clip:rect(4px,14px,14px,4px);opacity:1}.oldie .fd-slider-handle:after,.oldie .fd-slider-handle:before{display:none}.fc{direction:ltr;text-align:left}.fc table{border-collapse:collapse;border-spacing:0}.fc td,.fc th{padding:0;vertical-align:top}.fc-header td{white-space:nowrap}.fc-header-left{width:25%;text-align:left}.fc-header-center{text-align:center}.fc-header-right{width:25%;text-align:right}.fc-header-title{display:inline-block;vertical-align:top}.fc-header-title h2{margin-top:0;white-space:nowrap}.fc .fc-header-space{padding-left:10px}.fc-header .fc-button{margin-bottom:1em;vertical-align:top;margin-right:-1px}.fc-header .fc-corner-right{margin-right:1px}.fc-header .ui-corner-right{margin-right:0}.fc-header .fc-state-hover,.fc-header .ui-state-hover{z-index:2}.fc-header .fc-state-down{z-index:3}.fc-header .fc-state-active,.fc-header .ui-state-active{z-index:4}.fc-content{clear:both}.fc-view{width:100%;overflow:hidden}.fc-widget-content,.fc-widget-header{border:1px solid #ccc}.fc-state-highlight{background:#ffc}.fc-cell-overlay{background:#9cf;opacity:.2;filter:alpha(opacity=20)}.fc-button{position:relative;display:inline-block;cursor:pointer}.fc-state-default{border-width:1px 0}.fc-button-inner{position:relative;float:left;overflow:hidden}.fc-state-default .fc-button-inner{border-width:0 1px}.fc-button-content{position:relative;float:left;height:1.9em;line-height:1.9em;padding:0 .6em;white-space:nowrap}.fc-button-content .fc-icon-wrap{position:relative;float:left;top:50%}.fc-button-content .ui-icon{position:relative;float:left;margin-top:-50%;*margin-top:0;*top:-50%}.fc-state-default .fc-button-effect{position:absolute;top:50%;left:0}.fc-state-default .fc-button-effect span{position:absolute;top:-100px;left:0;width:500px;height:100px;border-width:100px 0 0 1px;border-style:solid;border-color:#fff;background:#444;opacity:.09;filter:alpha(opacity=9)}.fc-state-default,.fc-state-default .fc-button-inner{border-style:solid;border-color:#ccc #bbb #aaa;background:#F3F3F3;color:#000}.fc-state-hover,.fc-state-hover .fc-button-inner{border-color:#999}.fc-state-down,.fc-state-down .fc-button-inner{border-color:#555;background:#777}.fc-state-active,.fc-state-active .fc-button-inner{border-color:#555;background:#777;color:#fff}.fc-state-disabled,.fc-state-disabled .fc-button-inner{color:#999;border-color:#ddd}.fc-state-disabled{cursor:default}.fc-state-disabled .fc-button-effect{display:none}.fc-event{border-style:solid;border-width:0;font-size:.85em;cursor:default}.fc-event-draggable,a.fc-event{cursor:pointer}a.fc-event{text-decoration:none}.fc-rtl .fc-event{text-align:right}.fc-event-skin{color:#FFF;border-right:none!important;cursor:move}.fc-event-inner{position:relative;width:100%;height:100%;border-style:solid;border-width:0;overflow:hidden}.fc .ui-resizable-handle{display:block;position:absolute;z-index:99999;overflow:hidden;font-size:300%;line-height:50%}.fc-event-hori{border-width:1px 0;margin-bottom:1px}.fc-event-hori .ui-resizable-e{top:0!important;right:-3px!important;width:7px!important;height:100%!important;cursor:e-resize}.fc-event-hori .ui-resizable-w{top:0!important;left:-3px!important;width:7px!important;height:100%!important;cursor:w-resize}.fc-event-hori .ui-resizable-handle{_padding-bottom:14px}.fc-corner-left{margin-left:1px}.fc-corner-left .fc-button-inner,.fc-corner-left .fc-event-inner{margin-left:-1px}.fc-corner-right{margin-right:1px}.fc-corner-right .fc-button-inner,.fc-corner-right .fc-event-inner{margin-right:-1px}.fc-corner-top{margin-top:1px}.fc-corner-top .fc-event-inner{margin-top:-1px}.fc-corner-bottom{margin-bottom:1px}.fc-corner-bottom .fc-event-inner{margin-bottom:-1px}.fc-corner-left .fc-event-inner{border-left:6px solid rgba(0,0,0,.15);padding-left:2px}.fc-corner-right .fc-event-inner{padding-left:2px}.fc-corner-top .fc-event-inner{border-top-width:1px}.fc-corner-bottom .fc-event-inner{border-bottom-width:1px}.fc-event-skin .fa:before{display:block;font-size:14px;position:absolute;right:4px;top:3px}table.fc-border-separate{border-collapse:separate}.fc-border-separate td,.fc-border-separate th{border-width:1px 0 0 1px}.fc-border-separate td.fc-last,.fc-border-separate th.fc-last{border-right-width:1px}.fc-border-separate tr.fc-last td,.fc-border-separate tr.fc-last th{border-bottom-width:1px}.fc-border-separate tbody tr.fc-first td,.fc-border-separate tbody tr.fc-first th{border-top-width:0}.fc-grid th{text-align:center}.fc-grid .fc-day-number{float:right;padding:0 2px}.fc-grid .fc-other-month .fc-day-number{opacity:.3;filter:alpha(opacity=30)}.fc-grid .fc-day-content{clear:both;padding:2px 2px 1px}.fc-grid .fc-event-time{font-weight:700}.fc-rtl .fc-grid .fc-day-number{float:left}.fc-rtl .fc-grid .fc-event-time{float:right}.fc-agenda table{border-collapse:separate}.fc-agenda-days th{text-align:center}.fc-agenda .fc-agenda-axis{width:50px;padding:0 4px;vertical-align:middle;text-align:right;white-space:nowrap;font-weight:400}.fc-agenda .fc-day-content{padding:2px 2px 1px}.fc-agenda-days .fc-agenda-axis{border-right-width:1px}.fc-agenda-days .fc-col0{border-left-width:0}.fc-agenda-allday th{border-width:0 1px}.fc-agenda-allday .fc-day-content{min-height:34px;_height:34px}.fc-agenda-divider-inner{height:2px;overflow:hidden}.fc-widget-header .fc-agenda-divider-inner{background:#eee}.fc-agenda-slots th{border-width:1px 1px 0}.fc-agenda-slots td{border-width:1px 0 0;background:0 0}.fc-agenda-slots td div{height:20px}.fc-agenda-slots tr.fc-slot0 td,.fc-agenda-slots tr.fc-slot0 th{border-top-width:0}.fc-agenda-slots tr.fc-minor td,.fc-agenda-slots tr.fc-minor th{border-top-style:dotted}.fc-agenda-slots tr.fc-minor th.ui-widget-header{*border-top-style:solid}.fc-event-vert{border-width:0 1px}.fc-event-vert .fc-event-content,.fc-event-vert .fc-event-head{position:relative;z-index:2;width:100%;overflow:hidden}.fc-event-vert .fc-event-time{white-space:nowrap;font-size:10px}.fc-event-vert .fc-event-bg{position:absolute;z-index:1;top:0;left:0;width:100%;height:100%;background:#fff;opacity:.3;filter:alpha(opacity=30)}.fc-event-vert .ui-resizable-s{bottom:0!important;width:100%!important;height:8px!important;overflow:hidden!important;line-height:8px!important;font-size:11px!important;font-family:monospace;text-align:center;cursor:s-resize}.fc-agenda .ui-resizable-resizing{_overflow:hidden}.irs{position:relative;display:block}.irs-line{position:relative;display:block;overflow:hidden}.irs-line-left,.irs-line-mid,.irs-line-right{position:absolute;display:block;top:0}.irs-line-left{left:0;width:10%}.irs-line-mid{left:10%;width:80%}.irs-line-right{right:0;width:10%}.irs-diapason{position:absolute;display:block;left:0;width:100%}.irs-slider{position:absolute;display:block;cursor:default;z-index:1}.irs-slider.single{left:10px}.irs-slider.single:before{position:absolute;display:block;content:"";top:-50%;left:-150%;width:400%;height:200%;background:rgba(0,0,0,0)}.irs-slider.from{left:100px}.irs-slider.from:before{position:absolute;display:block;content:"";top:-50%;left:-300%;width:400%;height:200%;background:rgba(0,0,0,0)}.irs-slider.to{left:300px}.irs-slider.to:before{position:absolute;display:block;content:"";top:-50%;left:0;width:400%;height:200%;background:rgba(0,0,0,0)}.irs-slider.last{z-index:2}.irs-min{position:absolute;display:block;left:0;cursor:default}.irs-max{position:absolute;display:block;right:0;cursor:default}.irs-from,.irs-single,.irs-to{position:absolute;display:block;top:0;left:0;cursor:default;white-space:nowrap}.irs-grid{position:absolute;display:none;bottom:0;left:0;width:100%;height:20px}.irs-with-grid .irs-grid{display:block}.irs-grid-pol{position:absolute;top:0;left:0;width:1px;height:8px}.irs-grid-pol.small{height:4px}.irs-grid-text{position:absolute;bottom:0;left:0;width:100px;white-space:nowrap;text-align:center;font-size:9px;line-height:9px}.irs{height:40px}.irs-with-grid{height:60px}.irs-line{height:8px;top:25px;background:#eee}.irs-line-left,.irs-line-mid,.irs-line-right{height:8px}.irs-diapason{height:8px;top:25px}.irs-slider{width:10px;height:22px;top:17px;border:1px solid #fff;background:#858585}.irs-slider:hover{background:#6c6c6c}#irs-active-slider{background:#686868;box-shadow:rgba(0,0,0,.3)1px 1px 1px 0;width:12px;height:24px;top:16px}.irs-max,.irs-min{color:#999;font-size:12px;line-height:1.333;text-shadow:none;top:0;padding:1px 3px;background:rgba(0,0,0,.1);border-radius:0}.lt-ie9 .irs-max,.lt-ie9 .irs-min{background:#bfbfbf}.irs-from,.irs-single,.irs-to{color:#fff;font-size:10px;line-height:1.333;text-shadow:none;padding:1px 5px;background:rgba(0,0,0,.4);border-radius:0}.lt-ie9 .irs-from,.lt-ie9 .irs-single,.lt-ie9 .irs-to{background:#999}.irs-grid-pol{background:#99a4ac}.irs-grid-text{color:#99a4ac}.irs-diapason{background:#3276b1}article.sortable-grid{min-height:30px}.jarviswidget{margin:0 0 30px;position:relative;-moz-border-radius:0;-khtml-border-radius:0;-webkit-border-radius:0;border-radius:0;padding:0}.widget-content-padding{padding:20px}.widget-content-padding .well{margin-bottom:0}.jarviswidget>header{height:34px;padding:0;line-height:40px}.ui-sortable .jarviswidget-sortable>header{cursor:move;-moz-border-radius:0;-khtml-border-radius:0;-webkit-border-radius:0;border-radius:0;line-height:normal;box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05)}.jarviswidget>header>.widget-icon{display:block;width:30px;height:32px;position:relative;float:left;font-size:111%;line-height:32px;text-align:center;margin-right:-10px}.ui-sortable .jarviswidget-sortable.jarviswidget-collapsed>header{-moz-border-radius:0;-khtml-border-radius:0;-webkit-border-radius:0;border-radius:0}.jarviswidget>header h2{height:100%;width:auto;display:inline-block;font-size:14px;position:relative;margin:0;line-height:34px;font-weight:400;letter-spacing:0}.jarviswidget>header>h2{margin-left:10px;float:left}.jarviswidget>header>:first-child.widget-icon{margin-left:0}.jarviswidget>header .jarviswidget-icon{width:16px;height:16px;float:left;margin:12px 10px 0 0;display:block;zoom:1;z-index:4000}.jarviswidget-ctrls{width:auto;float:right;padding:0;margin:0}.jarviswidget-ctrls .button-icon{min-width:30px;height:32px;float:left;position:relative;font-family:Arial,Helvetica,sans-serif;border-left:1px solid rgba(0,0,0,.09)}.jarviswidget-ctrls .button-icon:hover{background-color:rgba(0,0,0,.05)}.jarviswidget-loader{width:32px;height:32px;margin:0;float:right;background-repeat:no-repeat;background-position:center center;display:none;text-align:center;line-height:32px;font-size:111%}.jarviswidget>div{float:left;width:100%;position:relative;font-size:13px;-moz-border-radius:0;-khtml-border-radius:0;-webkit-border-radius:0;border-radius:0;margin:0;border-width:1px 1px 2px;border-style:solid;border-top:none;border-right-color:#CCC!important;border-bottom-color:#CCC!important;border-left-color:#CCC!important;padding:13px 13px 0;overflow:visible}.jarviswidget .widget-body{min-height:100px;position:relative;padding-bottom:13px}.jarviswidget .widget-body.widget-hide-overflow{overflow:hidden}.widget-toolbar.no-border{border-left:none}.widget-body.no-padding{margin:-13px -13px 0}.jarviswidget.well.transparent .widget-body.no-padding{margin:0!important}.widget-body>table{margin-bottom:0}.widget-body.no-padding .alert{margin:0 0 10px;padding:10px;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;border-width:0 0 1px!important;border-radius:0!important;-webkit-border-radius:0!important;-moz-border-radius:0!important}.no-padding .md-editor,.widget-body.no-padding .cke_chrome{border:none}.widget-toolbar>.smart-form{margin-top:2px}.widget-toolbar>.smart-form .toggle:last-child{font-size:12px;line-height:29px}.widget-toolbar>.smart-form .checkbox input+i,.widget-toolbar>.smart-form .radio input+i,.widget-toolbar>.smart-form .toggle input+i{border-width:1px;border-color:#C7C7C7!important;margin-top:1px;box-shadow:0 1px 1px #FFF,0 1px 1px #858585 inset;-webkit-box-shadow:0 1px 1px #FFF,0 1px 1px #858585 inset;-moz-box-shadow:0 1px 1px #FFF,0 1px 1px #858585 inset}.jarviswidget.well{margin:0 0 30px}.jarviswidget.well>div{border:none!important;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.jarviswidget.well header{display:none}.widget-footer{display:block;min-height:32px;vertical-align:middle;position:relative;background-color:#F8F7F7;padding:5px;border-top:1px solid #E4E4E4;text-align:right;margin:0 -13px -13px}.no-padding .widget-footer{margin:0}.widget-footer.smart-form>label{margin-top:4px;display:block}.jarviswidget-editbox{display:none;padding:10px}.jarviswidget-timestamp{font-size:12px;color:#868686;font-style:italic;margin:10px 0 0}.jarviswidget-placeholder{-moz-border-radius:0;-khtml-border-radius:0;-webkit-border-radius:0;border-radius:0;margin-bottom:28px;padding:0;-webkit-box-sizing:border-box;-khtml-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}body.nooverflow{overflow:hidden;position:fixed;width:100%}#jarviswidget-fullscreen-mode{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999}#jarviswidget-fullscreen-mode .jarviswidget{margin:0;-moz-border-radius:0;-khtml-border-radius:0;-webkit-border-radius:0;border-radius:0}#jarviswidget-fullscreen-mode .jarviswidget>div{overflow-y:scroll;-moz-border-radius:0;-khtml-border-radius:0;-webkit-border-radius:0;border-radius:0}#jarviswidget-fullscreen-mode>div>header{cursor:default}.smart-form.widget-body-toolbar,.widget-body-toolbar{display:block;padding:8px 10px;margin:-13px -13px 13px;min-height:42px;border-bottom:1px solid #ccc;background:#fafafa}.no-padding .smart-form.widget-body-toolbar,.no-padding .widget-body-toolbar,.no-padding.widget-body-toolbar{display:block;margin:0}.smart-form .widget-body-toolbar .inline-group,.widget-body-toolbar.smart-form .inline-group{float:left;margin-top:4px}.widget-body-toolbar .btn{vertical-align:middle}.widget-body-toolbar .btn-xs{margin-top:5px}.widget-body-ajax-loading::before{content:url(../img/ajax-loader.gif);padding-top:18%;text-align:center;font-weight:700;font-size:16px;color:#fff;display:block;background:rgba(255,255,255,.4);height:100%;z-index:1;width:100%;position:absolute}.widget-body-ajax-loading:hover{cursor:wait!important}.jarviswidget>header{color:#333;border:1px solid #C2C2C2;background:#fafafa}.jarviswidget>div{background-color:#fff!important}.jarviswidget-editbox{border-bottom:1px solid #B1B1B1;background-color:#fff;margin:-13px -13px 13px}.no-padding .jarviswidget-editbox{margin:0 0 10px}.jarviswidget-placeholder{background-color:#FFC;border:1px dashed #A7A7A7}.jarviswidget-remove-colors{color:#333!important;padding:0!important;background:none!important}.jarviswidget-color-magenta>header{background:#6E3671;color:#FFF}.jarviswidget-color-magenta .nav-tabs li:not(.active) a,.jarviswidget-color-magenta>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-magenta .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-magenta>header{border-color:#6E3671!important}.jarviswidget-color-pink>header{background:#AC5287;color:#FFF}.jarviswidget-color-pink .nav-tabs li:not(.active) a,.jarviswidget-color-pink>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-pink .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-pink>header{border-color:#AC5287!important}.jarviswidget-color-pinkDark>header{background:#A8829F;color:#FFF}.jarviswidget-color-pinkDark .nav-tabs li:not(.active) a,.jarviswidget-color-pinkDark>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-pinkDark .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-pinkDark>header{border-color:#A8829F!important}.jarviswidget-color-yellow>header{background:#B09B5B;color:#FFF}.jarviswidget-color-yellow .nav-tabs li:not(.active) a,.jarviswidget-color-yellow>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-yellow .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-yellow>header{border-color:#B09B5B!important}.jarviswidget-color-orange>header{background:#C79121;color:#FFF}.jarviswidget-color-orange .nav-tabs li:not(.active) a,.jarviswidget-color-orange>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-orange .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-orange>header{border-color:#C79121!important}.jarviswidget-color-orangeDark>header{background:#A57225;color:#FFF}.jarviswidget-color-orangeDark .nav-tabs li:not(.active) a,.jarviswidget-color-orangeDark>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-orangeDark .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-orangeDark>header{border-color:#A57225!important}.jarviswidget-color-darken>header{background:#404040;color:#FFF}.jarviswidget-color-darken>.nav-tabs>li:not(.active)>a,.jarviswidget-color-darken>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-darken .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-darken>header{border-color:#404040!important}.jarviswidget-color-purple>header{background:#65596B;color:#FFF}.jarviswidget-color-purple .nav-tabs li:not(.active) a,.jarviswidget-color-purple>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-purple .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-purple>header{border-color:#65596B!important}.jarviswidget-color-teal>header{background:#568A89;color:#FFF}.jarviswidget-color-teal .nav-tabs li:not(.active) a,.jarviswidget-color-teal>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-teal .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-teal>header{border-color:#568A89!important}.jarviswidget-color-blueDark>header{background:#4C4F53;color:#FFF}.jarviswidget-color-blueDark .nav-tabs li:not(.active) a,.jarviswidget-color-blueDark>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-blueDark .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-blueDark>header{border-color:#4C4F53!important}.jarviswidget-color-blue>header{background:#60747C;color:#FFF}.jarviswidget-color-blue .nav-tabs li:not(.active) a,.jarviswidget-color-blue>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-blue .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-blue>header{border-color:#60747C!important}.jarviswidget-color-blueLight>header{background:#CCDADF;color:#2b363c}.jarviswidget-color-blueLight .nav-tabs li a:hover,.jarviswidget-color-blueLight .nav-tabs li:not(.active) a,.jarviswidget-color-blueLight>header>.jarviswidget-ctrls a{color:#2b363c!important}.jarviswidget-color-blueLight>header{border-color:#92A2A8!important}.jarviswidget-color-red>header{background:#931313;color:#FFF}.jarviswidget-color-red .nav-tabs li:not(.active) a,.jarviswidget-color-red>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-red .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-red>header{border-color:#931313!important}.jarviswidget-color-redLight>header{background:#A65858;color:#FFF}.jarviswidget-color-redLight .nav-tabs li:not(.active) a,.jarviswidget-color-redLight>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-redLight .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-redLight>header{border-color:#A65858!important}.jarviswidget-color-white>header{background:#fff;color:#838383}.jarviswidget-color-white .nav-tabs li a:hover,.jarviswidget-color-white .nav-tabs li:not(.active) a,.jarviswidget-color-white>header>.jarviswidget-ctrls a{color:#838383!important}.jarviswidget-color-white>header{border-color:#C8C8C8!important}.jarviswidget-color-greenDark>header{background:#496949;color:#FFF}.jarviswidget-color-greenDark .nav-tabs li:not(.active) a,.jarviswidget-color-greenDark>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-greenDark .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-greenDark>header{border-color:#638167!important}.jarviswidget-color-green>header{background:#356E35;color:#FFF}.jarviswidget-color-green .nav-tabs li:not(.active) a,.jarviswidget-color-green>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-green .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-green>header{border-color:#638167!important}.jarviswidget-color-greenLight>header{background:#71843F;color:#FFF}.jarviswidget-color-greenLight .nav-tabs li:not(.active) a,.jarviswidget-color-greenLight>header>.jarviswidget-ctrls a{color:#fff!important}.jarviswidget-color-greenLight .nav-tabs li a:hover{color:#333!important}.jarviswidget-color-greenLight>header{border-color:#638167!important}.color-select{list-style:none;margin:0;padding:4px;min-width:166px;max-width:156px;right:-3px}.color-select li{display:block;margin:2px;float:left}.color-box,.color-select li span{display:block;width:22px;height:22px;padding:0;background:#333;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid rgba(0,0,0,.1);cursor:pointer}.color-select li span:hover{border:3px solid rgba(0,0,0,.2)}.color-box{position:relative;vertical-align:middle;border:1px solid rgba(255,255,255,.3)!important;outline:1px solid rgba(0,0,0,.1);background:rgba(255,255,255,.3)!important}.color-box:hover,.open .color-box{outline:1px solid rgba(0,0,0,.1)!important}.color-box:hover{-webkit-transform:scale(1.07);-moz-transform:scale(1.07)}.color-box:active{top:1px;left:1px}.widget-toolbar>.color-box{margin-top:7px;width:18px;height:18px;outline:1px solid rgba(0,0,0,.2)}.widget-toolbar>.color-box:active,.widget-toolbar>.color-box:focus,.widget-toolbar>.color-box:hover{outline:1px solid rgba(0,0,0,.25)!important}.widget-toolbar .dropdown-menu.color-select{right:-1px}.jarviswidget-ctrls a{text-decoration:none;font-size:14px;text-align:center;display:inline-block;line-height:32px;padding:0;margin:0;color:#333}.rtl .jarviswidget>header{padding:0 7px 0 0}.rtl .jarviswidget>header h2{float:right;text-align:right}.rtl .jarviswidget>header .jarviswidget-icon{float:right;margin:12px 0 0 7px}.rtl .jarviswidget-ctrls{float:left;padding:10px 0 0 3px;margin:0}.rtl .jarviswidget-ctrls .button-icon{margin:0 0 5px 5px}.rtl .jarviswidget-loader{float:left}.clearfix:after,.clearfix:before,.inner-spacer:after,.inner-spacer:before,.jarviswidget-editbox:after,.jarviswidget-editbox:before,.jarviswidget:after,.jarviswidget:before,.jarviswidget>div:after,.jarviswidget>div:before{content:"\0020";display:block;height:0;overflow:hidden;font-size:0;line-height:0;visibility:hidden}.clearfix:after,.inner-spacer:after,.jarviswidget-editbox:after,.jarviswidget:after,.jarviswidget>div:after{clear:both}.clearfix,.inner-spacer:after,.jarviswidget,.jarviswidget-editbox,.jarviswidget>div{zoom:1}.widget-toolbar{display:inline-block;float:right;width:auto;height:32px;line-height:32px;position:relative;border-left:1px solid rgba(0,0,0,.09);cursor:pointer;padding:0 8px;text-align:center}.widget-toolbar>:first-child{text-align:left}.jarviswidget header .nav-tabs{border-bottom-color:transparent}.jarviswidget header .nav-tabs>li>a{border-radius:0;border:none;padding:7px 15px 6px}.jarviswidget header .nav-tabs>li.active>a,.jarviswidget header .nav-tabs>li.active>a:focus,.jarviswidget header .nav-tabs>li.active>a:hover{color:#555;background-color:#FFF;border:1px solid #C2C2C2;border-bottom-color:transparent;border-top:none;cursor:default}.jarviswidget header:first-child .nav-tabs{float:left}.jarviswidget header:first-child .nav-tabs li{padding-left:0}.jarviswidget header:first-child .nav-tabs li a{color:#333}.jarviswidget header:first-child .nav-tabs.pull-right li:last-child a{margin-right:0!important;border-right:none!important}.jarviswidget header .nav-pills{margin:3px}.jarviswidget header .nav-pills>li>a{padding:3px 5px 4px}.widget-toolbar .btn-group{margin-top:-3px}.widget-toolbar>.btn{margin-top:-3px;font-size:12px!important;padding:1px 8px!important}.widget-toolbar .smart-form label.checkbox,.widget-toolbar .smart-form label.radio{line-height:29px}.widget-toolbar>.label{vertical-align:middle;margin-top:-3px;display:inline-block;text-align:center;font-size:12px;padding:4px 7px}.widget-toolbar>.badge{padding:5px;font-size:14px;border-radius:50%;font-weight:400;min-width:24px;text-align:center!important}.widget-toolbar .progress{width:130px;margin:7px 0 0;height:18px!important;font-size:12px;box-shadow:0 1px 0 rgba(0,0,0,0),0 0 0 1px #d1d1d1 inset;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0),0 0 0 1px #d1d1d1 inset;-moz-box-shadow:0 1px 0 transparent,0 0 0 1px #d1d1d1 inset}.widget-toolbar .progress-bar{font-size:12px}.widget-toolbar .pagination{margin:4px 0}.widget-toolbar .pagination>li>a{padding:2px 7px}.widget-toolbar .widget-text-input{max-width:220px}.widget-toolbar input[type=text]{height:28px!important;margin-top:2px}.widget-toolbar .smart-form .icon-append,.widget-toolbar .smart-form .icon-prepend,.widget-toolbar.smart-form .icon-append,.widget-toolbar.smart-form .icon-prepend{top:3px!important}.jcrop-holder{direction:ltr;text-align:left}.jcrop-hline,.jcrop-vline{background:#fff url(../img/jcrop/Jcrop.gif);font-size:0;position:absolute}.jcrop-vline{height:100%;width:1px!important}.jcrop-vline.right{right:0}.jcrop-hline{height:1px!important;width:100%}.jcrop-hline.bottom{bottom:0}.jcrop-tracker{height:100%;width:100%;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none}.jcrop-handle{background-color:#333;border:1px #eee solid;width:7px;height:7px;font-size:1px}.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px}.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%}.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%}.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0}.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0}.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0}.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px}.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%}.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px}.jcrop-dragbar.ord-n{margin-top:-4px}.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px}.jcrop-dragbar.ord-e{margin-right:-4px;right:0}.jcrop-dragbar.ord-w{margin-left:-4px}.jcrop-light .jcrop-hline,.jcrop-light .jcrop-vline{background:#fff;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-light .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#000;border-color:#fff;border-radius:3px}.jcrop-dark .jcrop-hline,.jcrop-dark .jcrop-vline{background:#000;filter:alpha(opacity=70)!important;opacity:.7!important}.jcrop-dark .jcrop-handle{-moz-border-radius:3px;-webkit-border-radius:3px;background-color:#fff;border-color:#000;border-radius:3px}.solid-line .jcrop-hline,.solid-line .jcrop-vline{background:#fff}.jcrop-holder{display:inline-block;float:left;margin-bottom:20px}.modal .jcrop-holder{display:block;float:none!important;margin:0!important}.jcrop-holder img,img.jcrop-preview{max-width:none}.ui-jqgrid .ui-jqgrid-view{position:relative;left:0;top:0;padding:0;font-size:11px}.ui-jqgrid .ui-jqgrid-titlebar{padding:12px 13px;position:relative;font-size:12px;border-left:0 none;border-right:0 none;border-top:0 none;background-color:#f3f3f3;background-image:-moz-linear-gradient(top,#f3f3f3,#e2e2e2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f3f3f3),to(#e2e2e2));background-image:-webkit-linear-gradient(top,#f3f3f3,#e2e2e2);background-image:-o-linear-gradient(top,#f3f3f3,#e2e2e2);background-image:linear-gradient(to bottom,#f3f3f3,#e2e2e2);background-repeat:repeat-x}.ui-jqgrid .ui-jqgrid-caption{text-align:left}.ui-jqgrid .ui-jqgrid-title{font-size:15px;color:#333}.ui-jqgrid .ui-jqgrid-titlebar-close{position:absolute;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;right:10px!important;cursor:pointer}.ui-jqgrid .ui-jqgrid-titlebar-close span{display:block;margin:1px}.ui-jqgrid .ui-jqgrid-titlebar-close:hover{padding:0}.ui-jqgrid .ui-jqgrid-hdiv{position:relative;margin:0;padding:0;overflow-x:hidden;border-left:0 none!important;border-top:0 none!important;border-right:0 none!important}.ui-jqgrid .ui-jqgrid-hbox{float:left;padding-right:20px}.ui-jqgrid .ui-jqgrid-htable{table-layout:fixed;margin:0}.ui-jqgrid .ui-jqgrid-htable th{padding:0 2px}.ui-jqgrid .ui-jqgrid-htable th div{overflow:hidden;position:relative}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{background:0 0}tr.ui-jqgrid-labels{background-color:#eee;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#fafafa));background-image:-webkit-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-moz-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-ms-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-o-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-linear-gradient(top,#f2f2f2 0,#fafafa 100%);font-size:12px}.ui-jqgrid .ui-jqgrid-htable th.ui-th-column,.ui-th-column{overflow:hidden;white-space:nowrap;text-align:center;border-top:0 none;border-bottom:0 none}.ui-jqgrid .ui-jqgrid-htable th.ui-th-ltr,.ui-th-ltr{border-left:0 none}.ui-jqgrid .ui-jqgrid-htable th.ui-th-rtl,.ui-th-rtl{border-right:0 none}.ui-first-th-ltr{border-right:1px solid}.ui-first-th-rtl{border-left:1px solid}.ui-jqgrid .ui-th-div-ie{white-space:nowrap;zoom:1}.ui-jqgrid .ui-jqgrid-resize{height:20px!important;position:relative;cursor:e-resize;display:inline;overflow:hidden}.ui-jqgrid .ui-grid-ico-sort{overflow:hidden;position:absolute;display:inline;cursor:pointer!important;right:0}.ui-jqgrid .ui-icon-asc{margin-top:-4px;right:-1px}.ui-jqgrid .ui-icon-desc{margin-top:3px;height:12px}.ui-jqgrid .ui-i-asc{margin-top:0;height:16px}.ui-jqgrid .ui-i-desc{margin-top:0;margin-left:13px;height:16px}.ui-jqgrid .ui-jqgrid-sortable{cursor:pointer}.ui-jqgrid tr.ui-search-toolbar th{border-top-width:1px!important;border-top-color:inherit!important;border-top-style:ridge!important}tr.ui-search-toolbar input,tr.ui-search-toolbar select{margin:1px 0 0}.ui-jqgrid .ui-jqgrid-bdiv{position:relative;margin:0;padding:0;overflow:auto;text-align:left}.ui-jqgrid .ui-jqgrid-btable{table-layout:fixed;margin:0;outline-style:none}.ui-jqgrid tr.jqgroup,.ui-jqgrid tr.jqgrow{outline-style:none}.ui-jqgrid tr.jqgrow td{font-weight:400;overflow:hidden;white-space:pre}.ui-jqgrid tr.jqgfirstrow td{padding:0 2px;border-right-width:1px;border-right-style:solid}.ui-jqgrid tr.jqgroup td{font-weight:400;overflow:hidden;white-space:pre}.ui-jqgrid tr.jqfoot td{font-weight:700;overflow:hidden;white-space:pre}.ui-jqgrid tr.ui-row-ltr td{text-align:left}.ui-jqgrid tr.ui-row-rtl td{text-align:right}.ui-jqgrid td.jqgrid-rownum{padding:0 2px;margin:0;border:0 none}.ui-jqgrid .ui-jqgrid-resize-mark{width:2px;left:0;background-color:#777;cursor:e-resize;cursor:col-resize;position:absolute;top:0;height:100px;overflow:hidden;display:none;border:0 none;z-index:99999}.ui-jqgrid .ui-jqgrid-sdiv{position:relative;margin:0;padding:0;overflow:hidden;border-left:0 none!important;border-top:0 none!important;border-right:0 none!important}.ui-jqgrid .ui-jqgrid-ftable{table-layout:fixed;margin-bottom:0}.ui-jqgrid tr.footrow td{font-weight:700;overflow:hidden;white-space:nowrap;height:21px;padding:0 2px}.ui-jqgrid tr.footrow-ltr td{text-align:left;border-right-width:1px;border-right-color:inherit;border-right-style:solid}.ui-jqgrid tr.footrow-rtl td{text-align:right;border-left-width:1px;border-left-color:inherit;border-left-style:solid}.ui-jqgrid .ui-jqgrid-pager{border-left:0 none!important;border-right:0 none!important;border-bottom:0 none!important;margin:0!important;position:relative;white-space:nowrap;overflow:hidden;border-top:1px solid #D3D3D3}.ui-jqgrid .ui-pager-control{position:relative}.ui-jqgrid .ui-pg-table{position:relative;padding-bottom:2px;width:auto;margin:0}.ui-jqgrid .ui-pg-table td{font-weight:400;vertical-align:middle;padding:1px}.ui-jqgrid .ui-pg-button span{display:block;margin:1px;float:left}.ui-jqgrid .ui-state-disabled:hover{padding:1px}.ui-jqgrid .ui-pg-input{margin:0}.ui-jqgrid .ui-pg-selbox{line-height:18px;display:block;margin:0}.ui-jqgrid .ui-separator{height:18px;border-left:1px solid #ccc;border-right:1px solid #ccc;margin:1px;float:right}.ui-jqgrid .ui-paging-info{font-weight:400;height:19px;margin-top:3px;margin-right:4px}.ui-jqgrid .ui-jqgrid-pager .ui-pg-div{padding:1px 0;float:left;position:relative}.ui-jqgrid .ui-jqgrid-pager .ui-pg-button{cursor:pointer}.ui-jqgrid .ui-jqgrid-pager .ui-pg-div span.ui-icon{float:left;margin:0 2px}.ui-jqgrid td input,.ui-jqgrid td select .ui-jqgrid td textarea{margin:0}.ui-jqgrid td textarea{width:auto;height:auto}.ui-jqgrid .ui-jqgrid-toppager{border-left:0 none!important;border-right:0 none!important;border-top:0 none!important;margin:0!important;padding:0!important;position:relative;height:25px!important;white-space:nowrap;overflow:hidden}.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div{padding:1px 0;float:left;position:relative}.ui-jqgrid .ui-jqgrid-toppager .ui-pg-button{cursor:pointer}.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div span.ui-icon{float:left;margin:0 2px}.ui-jqgrid .ui-jqgrid-btable .ui-sgcollapsed span{display:block}.ui-jqgrid .ui-subgrid{margin:0;padding:0;width:100%}.ui-jqgrid .ui-subgrid table{table-layout:fixed}.ui-jqgrid .ui-subgrid tr.ui-subtblcell td{height:18px;border-right-width:1px;border-right-color:inherit;border-right-style:solid;border-bottom-width:1px;border-bottom-color:inherit;border-bottom-style:solid}.ui-jqgrid .ui-subgrid td.subgrid-data{border-top:0 none!important}.ui-jqgrid .ui-subgrid td.subgrid-cell{border-width:0 0 1px}.ui-jqgrid .ui-th-subgrid{height:20px}.ui-jqgrid .loading{position:absolute;top:45%;left:45%;width:auto;z-index:101;padding:6px;margin:5px;text-align:center;font-weight:700;display:none;border-width:2px!important;font-size:11px}.ui-jqgrid .jqgrid-overlay{display:none;z-index:100}* .jqgrid-overlay iframe{position:absolute;top:0;left:0;z-index:-1}.ui-jqgrid .ui-userdata{border-left:0 none;border-right:0 none;height:21px;overflow:hidden}.ui-jqdialog{display:none;width:300px;position:absolute;padding:.2em;font-size:11px;overflow:visible}.ui-jqdialog .ui-jqdialog-titlebar{padding:.3em .2em;position:relative}.ui-jqdialog .ui-jqdialog-title{margin:.1em 0 .2em}.ui-jqdialog .ui-jqdialog-titlebar-close{position:absolute;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px;cursor:pointer}.ui-jqdialog .ui-jqdialog-titlebar-close span{display:block;margin:1px}.ui-jqdialog .ui-jqdialog-titlebar-close:focus,.ui-jqdialog .ui-jqdialog-titlebar-close:hover{padding:0}.ui-jqdialog .ui-jqdialog-content,.ui-jqdialog-content{border:0;background:0 0;height:auto}.ui-jqdialog .ui-jqconfirm{padding:.4em 1em;border-width:3px;position:absolute;bottom:10px;right:10px;overflow:visible;display:none;height:80px;width:220px;text-align:center}.ui-jqdialog>.ui-resizable-se,.ui-jqgrid>.ui-resizable-se{bottom:-3px;right:-3px}.ui-jqdialog-content .FormGrid{margin:0}.ui-jqdialog-content .DelTable,.ui-jqdialog-content .EditTable{width:100%;margin-bottom:0}.EditTable td input,.EditTable td select,.EditTable td textarea{margin:0}.EditTable td textarea{width:auto;height:auto}.ui-jqdialog-content td.EditButton{text-align:right;border-top:0 none;border-left:0 none;border-right:0 none;padding-bottom:5px;padding-top:5px}.ui-jqdialog-content td.navButton{text-align:center;border-left:0 none;border-top:0 none;border-right:0 none;padding-bottom:5px;padding-top:5px}.ui-jqdialog-content input.FormElement,.ui-jqdialog-content select.FormElement{padding:.3em}.ui-jqdialog-content .data-line{padding-top:.1em;border:0 none}.ui-jqdialog-content .CaptionTD{vertical-align:middle;border:0 none;padding:2px;white-space:nowrap}.ui-jqdialog-content .DataTD{padding:2px;border:0 none;vertical-align:top}.ui-jqdialog-content .form-view-data{white-space:pre}.fm-button{display:inline-block;margin:0 4px 0 0;padding:.4em .5em;text-decoration:none!important;cursor:pointer;position:relative;text-align:center;zoom:1}.fm-button-icon-left{padding-left:1.9em}.fm-button-icon-right{padding-right:1.9em}.fm-button-icon-left .ui-icon{right:auto;left:.2em;margin-left:0;position:absolute;top:50%;margin-top:-8px}.fm-button-icon-right .ui-icon{left:auto;right:.2em;margin-left:0;position:absolute;top:50%;margin-top:-8px}#nData,#pData{float:left;margin:3px;padding:0;width:15px}.ui-jqgrid .selected-row,div.ui-jqgrid .selected-row td{font-style:normal;border-left:0 none}.ui-inline-cancel.ui-state-hover span,.ui-inline-del.ui-state-hover span,.ui-inline-edit.ui-state-hover span,.ui-inline-save.ui-state-hover span{margin:-1px}.ui-jqgrid .tree-wrap{float:left;position:relative;height:18px;white-space:nowrap;overflow:hidden}.ui-jqgrid .tree-leaf,.ui-jqgrid .tree-minus,.ui-jqgrid .tree-plus{position:absolute;height:18px;width:18px;overflow:hidden}.ui-jqgrid .treeclick{cursor:pointer}* iframe.jqm{position:absolute;top:0;left:0;z-index:-1}.ui-jqgrid-dnd tr td{border-right-width:1px;border-right-color:inherit;border-right-style:solid;height:20px}.ui-jqgrid .ui-jqgrid-caption-rtl{text-align:right}.ui-jqgrid .ui-jqgrid-hbox-rtl{float:right;padding-left:20px}.ui-jqgrid .ui-jqgrid-resize-ltr{float:right;margin:-2px -2px -2px 0}.ui-jqgrid .ui-jqgrid-resize-rtl{float:left;margin:-2px 0 -1px -3px}.ui-jqgrid .ui-sort-rtl{left:0}.ui-jqgrid .tree-wrap-ltr{float:left}.ui-jqgrid .tree-wrap-rtl{float:right}.ui-jqgrid .ui-ellipsis{-moz-text-overflow:ellipsis;text-overflow:ellipsis}.ui-search-menu{position:absolute;padding:2px 5px}.ui-jqgrid .ui-search-table{padding:0;border:0 none;height:20px;width:100%}.ui-jqgrid .ui-search-table .ui-search-oper{width:20px}a.clearsearchclass,a.g-menu-item,a.soptclass{cursor:pointer}.ui-jqgrid .ui-search-table .ui-search-input>input,.ui-jqgrid .ui-search-table .ui-search-input>select{display:block;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.ui-jqgrid .ui-jqgrid-view button,.ui-jqgrid .ui-jqgrid-view input,.ui-jqgrid .ui-jqgrid-view select,.ui-jqgrid .ui-jqgrid-view textarea{font-size:11px}.ui-jqgrid{position:relative;border:1px solid #ccc!important;margin:0;overflow:hidden}.ui-jqgrid table,.ui-jqgrid tr.ui-row-ltr,.ui-jqgrid tr.ui-row-ltr td{border-left:none!important}.ui-jqgrid tr.ui-row-ltr td{padding:6px 4px;font-size:13px!important}.ui-jqgrid .ui-jqgrid-titlebar{border-bottom:1px solid #BEBEBE}.ui-jqgrid .ui-jqgrid-view input{margin:0!important}.ui-jqgrid .ui-jqgrid-htable th{background-color:#eee;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#fafafa));background-image:-webkit-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-moz-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-ms-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-o-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-linear-gradient(top,#f2f2f2 0,#fafafa 100%)}.ui-jqgrid .ui-jqgrid-htable th div{padding-right:0;padding-top:5px;padding-bottom:5px;font-weight:700;background:0 0}.ui-jqgrid .ui-jqgrid-pager{font-size:12px;height:auto;padding:4px!important}.ui-jqgrid tr.jqgrow{height:30px;font-size:12px}.jqgrid-new-row{color:#1B641B!important;background-color:#A8E798!important;border-color:#7E9E64!important}.ui-jqdialog-content .DataTD{padding-bottom:5px}.ui-jqdialog-content .DataTD:last-child{padding-bottom:10px}.ui-jqgrid .ui-jqgrid-bdiv{overflow-x:hidden;height:300px!important;background:#fff}.ui-jqgrid .ui-state-hover td{background:#ecf3f8!important}.ui-jqgrid .ui-pg-button{height:auto!important}.ui-jqgrid .ui-pg-input,.ui-jqgrid .ui-pg-selbox{height:auto;font-size:inherit}.ui-jqgrid .ui-state-highlight td{color:#3a87ad!important;background-color:#d9edf7!important;border-color:#bce8f1!important}.ui-jqgrid .ui-state-highlight+.ui-widget-content>td{border-top-color:#bce8f1}.select2-container{margin:0;position:relative;display:inline-block;zoom:1;*display:inline;vertical-align:middle}.select2-container,.select2-drop,.select2-search,.select2-search input{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.select2-container .select2-choice{display:block;height:32px;padding:0 0 0 8px;overflow:hidden;position:relative;border:1px solid #ccc;white-space:nowrap;line-height:32px;color:#444;text-decoration:none;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#ccc}.select2-container.select2-allowclear .select2-choice .select2-chosen{margin-right:42px}.select2-container .select2-choice>.select2-chosen{margin-right:26px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.select2-container .select2-choice abbr{display:none;width:12px;height:12px;position:absolute;right:24px;top:8px;font-size:1px;text-decoration:none;border:0;cursor:pointer;outline:0}.select2-container.select2-allowclear .select2-choice abbr{display:inline-block}.select2-container .select2-choice abbr:hover{cursor:pointer}.select2-drop-mask{border:0;margin:0;padding:0;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:9998;background:#fff;filter:alpha(opacity=0)}.select2-drop{margin-top:-1px;width:100%;position:absolute;z-index:9999;top:100%;background:#fff;color:#000;border:1px solid #ccc;border-top:0;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15)}.select2-drop-auto-width{border-top:1px solid #ccc;width:auto}.select2-drop-auto-width .select2-search{padding-top:4px}.select2-drop.select2-drop-above{margin-bottom:0;border-top:1px solid #5D98CC;border-top-width:3px;border-bottom:0;-webkit-box-shadow:0 -4px 5px rgba(0,0,0,.15);box-shadow:0 -4px 5px rgba(0,0,0,.15)}.select2-drop-active{border:1px solid #5D98CC;border-top:none;border-bottom-width:3px}.select2-drop.select2-drop-above.select2-drop-active{border-top-width:3px}.select2-container .select2-choice .select2-arrow{display:inline-block;width:34px;height:100%;position:absolute;right:0;top:0;border-left:1px solid #ccc;background:#eee}.select2-container .select2-choice .select2-arrow b{width:100%;height:100%;display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:relative;font-size:14px}.select2-container .select2-choice .select2-arrow b:before{content:"\f107";width:100%;height:100%;text-align:center;display:block}.select2-search{display:inline-block;width:100%;min-height:26px;margin:0;padding-left:4px;padding-right:4px;position:relative;z-index:10000;white-space:nowrap}.select2-search input{width:100%;height:auto!important;min-height:29px;padding:6px 20px 5px 10px;margin:0;outline:0;font-family:sans-serif;font-size:1em;border:1px solid #aaa;-webkit-box-shadow:none;box-shadow:none;background:#fff;background:-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:linear-gradient(top,#fff 85%,#eee 99%)}.select2-search:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;content:"\f002";top:25%;right:10px;color:#686868!important}.select2-drop.select2-drop-above .select2-search input{margin-top:4px}.select2-drop.select2-drop-above .select2-search:before{top:34%}.select2-search input.select2-active{background:#fff url(../img/select2-spinner.gif) no-repeat 100%;background:url(../img/select2-spinner.gif) no-repeat 100%,-webkit-gradient(linear,left bottom,left top,color-stop(0.85,#fff),color-stop(0.99,#eee));background:url(../img/select2-spinner.gif) no-repeat 100%,-webkit-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(../img/select2-spinner.gif) no-repeat 100%,-moz-linear-gradient(center bottom,#fff 85%,#eee 99%);background:url(../img/select2-spinner.gif) no-repeat 100%,linear-gradient(top,#fff 85%,#eee 99%)}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #5D98CC;outline:0}.select2-dropdown-open .select2-choice{border-bottom-color:transparent;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;border-bottom-left-radius:0;border-bottom-right-radius:0;background-color:#fff}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #5D98CC;border-top-color:transparent}.select2-dropdown-open .select2-choice .select2-arrow{background:0 0;border-left:none;filter:none}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}.select2-results{max-height:200px;padding:0 0 0 4px;margin:4px 4px 4px 0;position:relative;overflow-x:hidden;overflow-y:auto;-webkit-tap-highlight-color:rgba(0,0,0,0)}.select2-results ul.select2-result-sub{margin:0;padding-left:0}.select2-results ul.select2-result-sub>li .select2-result-label{padding-left:20px}.select2-results ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:40px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:60px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:80px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:100px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:110px}.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub>li .select2-result-label{padding-left:120px}.select2-results li{list-style:none;display:list-item;background-image:none}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:700}.select2-results .select2-result-label{padding:3px 7px 4px;margin:0;cursor:pointer;min-height:1em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-results .select2-highlighted{background:#3276b1;color:#fff}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:0 0}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{background:#f4f4f4;display:list-item;padding:3px 5px}.select2-no-results{padding-left:20px}.select2-no-results:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f05a";margin-right:5px}.select2-results .select2-disabled.select2-highlighted{color:#666;background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-disabled{background:#f4f4f4;display:list-item;cursor:default}.select2-results .select2-selected{display:none}.select2-more-results.select2-active{background:#f4f4f4 url(../img/select2-spinner.gif) no-repeat 100%}.select2-more-results{background:#f4f4f4;display:list-item}.select2-container.select2-container-disabled .select2-choice{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container.select2-container-disabled .select2-choice .select2-arrow{background-color:#f4f4f4;background-image:none;border-left:0}.select2-container.select2-container-disabled .select2-choice abbr{display:none}.select2-container-multi .select2-choices{height:auto!important;height:1%;margin:0;padding:0;position:relative;border:1px solid #ccc;cursor:text;overflow:hidden;background-color:#fff}.select2-locked{padding:3px 5px!important}.select2-container-multi .select2-choices{min-height:26px}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #5D98CC;outline:0}.select2-container-multi .select2-choices li{float:left;list-style:none}.select2-container-multi .select2-choices .select2-search-field{margin:0;padding:0;white-space:nowrap}.select2-container-multi .select2-choices .select2-search-field input{padding:5px;margin:1px 0;font-family:sans-serif;font-size:100%;color:#666;outline:0;border:0;-webkit-box-shadow:none;box-shadow:none;background:transparent!important}.select2-container-multi .select2-choices .select2-search-field input.select2-active{background:#fff url(../img/select2-spinner.gif) no-repeat 100%!important}.select2-default{color:#999!important}.select2-container-multi .select2-choices .select2-search-choice{padding:1px 28px 1px 8px;margin:4px 0 3px 5px;position:relative;line-height:18px;color:#fff;cursor:default;border:1px solid #2a6395;-webkit-background-clip:padding-box;background-clip:padding-box;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#3276b1}.select2-container-multi .select2-choices .select2-search-choice .select2-chosen{cursor:default}.select2-container-multi .select2-choices .select2-search-choice-focus{opacity:.8}.select2-search-choice-close{display:block;min-width:21px;min-height:20px;position:absolute;right:3px;top:3px;margin:0;padding:0;font-size:15px;text-decoration:none!important;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.select2-search-choice-close:before{color:#fff;content:"\f057"}.select2-container-multi .select2-search-choice-close{display:block;top:0;right:0;padding:3px 4px 3px 6px}.select2-container-multi .select2-search-choice-close:hover{background:rgba(0,0,0,.3)}.select2-container-multi.select2-container-disabled .select2-choices{background-color:#f4f4f4;background-image:none;border:1px solid #ddd;cursor:default}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice{padding:3px 5px;border:1px solid #4a90cc;background-image:none;background-color:#86b4dd;cursor:not-allowed}.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close{display:none;background:0 0}.select2-result-selectable .select2-match,.select2-result-unselectable .select2-match{text-decoration:underline}.select2-offscreen,.select2-offscreen:focus{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:0!important;top:0!important}.select2-display-none{display:none}.select2-measure-scrollbar{position:absolute;top:-10000px;left:-10000px;width:100px;height:100px;overflow:scroll}/*! X-editable - v1.5.0 +* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery +* http://github.com/vitalets/x-editable +* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */.editableform{margin-bottom:0}.editableform .control-group{margin-bottom:0;white-space:nowrap}.editable-buttons{display:inline-block;vertical-align:top;margin-left:7px;zoom:1;*display:inline}.editable-buttons.editable-buttons-bottom{display:block;margin-top:7px;margin-left:0}.editable-input{vertical-align:top;display:inline-block;width:auto;white-space:normal;zoom:1;*display:inline}.editable-buttons .editable-cancel{margin-left:7px}.editable-buttons button.ui-button-icon-only{height:24px;width:30px}.editableform-loading{background:url(../img/loading.gif) center center no-repeat;height:25px;width:auto;min-width:25px}.editable-inline .editableform-loading{background-position:left 5px}.editable-error-block{max-width:300px;margin:5px 0 0;width:auto;white-space:normal}.editable-error-block.ui-state-error{padding:3px}.editable-error{color:red}.editableform .editable-date{padding:0;margin:0;float:left}.editable-inline .add-on .icon-th{margin-top:3px;margin-left:1px}.editable-checklist label input[type=checkbox],.editable-checklist label span{vertical-align:middle;margin:0}.editable-checklist label{white-space:nowrap}.editable-wysihtml5{width:566px;height:250px}.editable-clear{clear:both;font-size:.9em;text-decoration:none;text-align:right}.editable-clear-x{background:url(../img/clear.png) center center no-repeat;display:block;width:13px;height:13px;position:absolute;opacity:.6;z-index:100;top:50%;right:6px;margin-top:-6px}.editable-clear-x:hover{opacity:1}.editable-pre-wrapped{white-space:pre-wrap}.editable-container.editable-popup{max-width:none!important}.editable-container.popover{width:auto}.editable-container.editable-inline{display:inline-block;vertical-align:middle;width:auto;zoom:1;*display:inline}.editable-container.ui-widget{font-size:inherit;z-index:9990}.editable-click,a.editable-click,a.editable-click:hover{text-decoration:none;border-bottom:dashed 1px #08c}.editable-click.editable-disabled,a.editable-click.editable-disabled,a.editable-click.editable-disabled:hover{color:#585858;cursor:default;border-bottom:none}.editable-empty,.editable-empty:focus,.editable-empty:hover{font-style:italic;color:#D14;text-decoration:none}.editable-unsaved{font-weight:700}.editable-bg-transition{-webkit-transition:background-color 1400ms ease-out;-moz-transition:background-color 1400ms ease-out;-o-transition:background-color 1400ms ease-out;-ms-transition:background-color 1400ms ease-out;transition:background-color 1400ms ease-out}.form-horizontal .editable{padding-top:5px;display:inline-block}.editable-address{display:block;margin-bottom:5px}.editable-address span{width:70px;display:inline-block}/*! + * Datepicker for Bootstrap + * + * Copyright 2012 Stefan Petre + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + */.editable-input .datepicker{top:0;left:0;padding:4px}.editable-input .datepicker:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:6px}.editable-input .datepicker:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:7px}.editable-input .datepicker>div{display:none}.editable-input .datepicker table{width:100%;min-width:214px;margin:0}.editable-input .datepicker td,.editable-input .datepicker th{text-align:center;width:24px;height:20px}.editable-input .datepicker td.day:hover{background:#eee;cursor:pointer}.editable-input .datepicker td.day.disabled,.editable-input .datepicker td.new,.editable-input .datepicker td.old{color:#555}.editable-input .datepicker td.active,.editable-input .datepicker td.active:hover{background:#3276b1;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);border-radius:3px}.editable-input .datepicker td span{display:block;width:47px;height:54px;line-height:54px;float:left;margin:2px;cursor:pointer}.editable-input .datepicker td span:hover{background:#eee}.editable-input .datepicker td span.active{background:#3276b1;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25);border-radius:3px}.editable-input .datepicker td span.old{color:#555}.editable-input .datepicker th.switch{width:145px}.editable-input .datepicker th.next,.editable-input .datepicker th.prev{font-size:19.5px}.editable-input .datepicker thead tr:first-child th{cursor:pointer}.editable-input .datepicker thead tr:first-child th:hover{background:#eee}.input-append.date .add-on i,.input-prepend.date .add-on i{display:block;cursor:pointer;width:16px;height:16px}.datepicker .prev i,.editable-input .datepicker .next i{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px}.editable-input .datepicker .prev i:before{content:"\f060"}.editable-input .datepicker .next i:before{content:"\f061"}.divMessageBox{width:100%;height:100%;position:fixed;top:0;left:0;background:rgba(0,0,0,.6);z-index:100000}.MessageBoxContainer{top:35%;color:#fff;position:relative;width:100%;background-color:#232323;background-color:rgba(0,0,0,.8);padding:20px}.MessageBoxMiddle{position:relative;left:20%;width:60%}.MessageBoxMiddle .MsgTitle{letter-spacing:-1px;font-size:24px;font-weight:300}.MessageBoxMiddle .pText{font-style:30px}.MessageBoxContainer input,.MessageBoxContainer select{width:50%;padding:5px}.MessageBoxButtonSection{width:100%;height:30px}.MessageBoxButtonSection button{float:right;margin-right:7px;padding-left:15px;padding-right:15px;font-size:14px;font-weight:700}.LoadingBoxContainer{top:20%;color:#fff;position:relative;width:100%;background-color:#232323}.LoadingBoxMiddle{position:relative;left:20%;width:50%;padding:10px}.LoadingBoxContainer .MsgTitle{font-size:26px}.LoadingBoxContainer .pText{font-style:30px}#LoadingPoints{position:absolute}.bigBox{position:fixed;right:10px;bottom:10px;background-color:#004d60;padding-left:10px;padding-top:10px;padding-right:10px;padding-bottom:5px;width:390px;height:150px;color:#fff;z-index:99999;box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;border-left:5px solid rgba(0,0,0,.15);overflow:hidden}.bigBox span{font-size:17px;font-weight:300;letter-spacing:-1px;padding:5px 0!important;display:block}.bigBox p{font-size:13px;margin-top:10px}#divMiniIcons{position:fixed;width:415px;right:10px;bottom:180px;z-index:9999;float:right}.botClose{position:absolute;right:10px;height:16px;width:15px;cursor:pointer;font-size:18px;opacity:.5;display:block;top:15px}.botClose:hover{opacity:1}#divMiniIcons .cajita{text-align:center;vertical-align:middle;padding:4px 6px;color:#FFF;float:right;cursor:pointer;display:block;background-color:red;font-size:17px;margin-left:4px;margin-top:5px}#divMiniIcons .cajita:active{top:1px;left:1px;position:relative}.cajita img{width:23px;height:23px;padding-left:3px;padding-top:3px}.bigBox .bigboxicon{font-size:30px;text-align:left;position:absolute;top:120px;left:6px;z-index:0}.bigBox .bigboxnumber{width:100%;text-align:right;font-size:25px}#divSmallBoxes{position:fixed;right:0;top:0;z-index:9999}.SmallBox{position:absolute;right:5px;top:20px;width:420px;color:#fff;z-index:9999;overflow:hidden;border:1px solid transparent}.SmallBox:hover{border:1px solid #fff;cursor:pointer}.SmallBox .foto{font-size:50px;position:absolute;left:17px}.SmallBox .textoFull{width:93%;float:left;padding-left:20px}.SmallBox .textoFoto{width:78%;margin:3px 20px 3px 80px;float:left}.miniPic{position:absolute;bottom:8px;right:9px}.miniIcono{height:100%;font-size:20px}.SmallBox span{font-size:17px;font-weight:300;letter-spacing:-1px;display:block;margin:4px 0}.SmallBox p{font-size:13px;margin-top:2px}#pageslide{display:none;position:absolute;position:fixed;top:0;height:100%;z-index:999999;width:305px;padding:20px;background-color:#004d60;color:#FFF;-webkit-box-shadow:inset 0 0 5px 5px #222;-moz-shadow:inset 0 0 0 0 #222;box-shadow:inset 0 0 0 0 #222}.purehtml{color:#fff;font-size:16px}@media screen and (max-width:450px) and (max-width:767px){#divSmallBoxes{position:fixed;width:90%;right:0;top:0}.SmallBox{width:95%}.SmallBox:hover{box-shadow:0 0 10px #888;cursor:pointer}.SmallBox span{font-size:16px}.SmallBox p{font-size:12px;margin-top:2px}.SmallBox .textoFull{width:93%;float:left;padding-left:20px}.SmallBox .textoFoto{width:55%;margin:3px 20px 3px 80px;float:left}.bigBox{position:fixed;right:10px;bottom:10px;background-color:#004d60;padding-left:10px;padding-top:10px;padding-right:10px;padding-bottom:5px;width:88%;height:150px;color:#fff;z-index:99999}.divMessageBox{width:100%;height:100%;position:fixed;top:0;left:0;background:rgba(0,0,0,.6);z-index:100000}.MessageBoxContainer{top:25%;color:#fff;position:relative;width:100%;background-color:#232323}.MessageBoxMiddle{position:relative;left:0;width:100%;padding:3px}.MessageBoxMiddle .MsgTitle{font-size:22px}.MessageBoxMiddle .pText{font-style:10px}.MessageBoxContainer input,.MessageBoxContainer select{width:50%;padding:5px}.MessageBoxButtonSection{width:100%;height:30px}.MessageBoxButtonSection button{float:right;margin-right:5px;padding-left:15px;padding-right:15px}}.animated.fast{-ms-animation-duration:.4s}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;-o-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInRight{0%{opacity:0;-moz-transform:translateX(20px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInRight{0%{opacity:0;-o-transform:translateX(20px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;transform:translateX(20px)}100%{opacity:1;transform:translateX(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;-moz-animation-name:fadeInRight;-o-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-moz-transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-o-transform:translateY(20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}100%{opacity:1;transform:translateY(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-o-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;-moz-animation-name:fadeOut;-o-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px)}}@-moz-keyframes fadeOutLeft{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(-20px)}}@-o-keyframes fadeOutLeft{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(-20px)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;-moz-animation-name:fadeOutLeft;-o-animation-name:fadeOutLeft;animation-name:fadeOutLeft}.note-editor{border:1px solid #a9a9a9}.note-editor.fullscreen{position:fixed;top:0;left:0;z-index:1050;width:100%}.note-editor.fullscreen .note-editable{background-color:#fff}.note-editor.codeview .note-editable,.note-editor.fullscreen .note-resizebar{display:none}.note-editor.codeview .note-codeable{display:block}.note-editor .note-toolbar{padding-bottom:5px;padding-left:5px;margin:0;background-color:#f5f5f5;border-bottom:1px solid #a9a9a9}.note-editor .note-toolbar>.btn-group{margin-top:5px;margin-right:5px;margin-left:0}.note-editor .note-toolbar .note-table .dropdown-menu{min-width:0;padding:5px}.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker{font-size:18px}.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker .note-dimension-picker-mousecatcher{position:absolute!important;z-index:3;width:10em;height:10em;cursor:pointer}.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker .note-dimension-picker-unhighlighted{position:relative!important;z-index:1;width:5em;height:5em;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC) repeat}.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker .note-dimension-picker-highlighted{position:absolute!important;z-index:2;width:1em;height:1em;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC) repeat}.note-editor .note-toolbar .note-style blockquote,.note-editor .note-toolbar .note-style h1,.note-editor .note-toolbar .note-style h2,.note-editor .note-toolbar .note-style h3,.note-editor .note-toolbar .note-style h4,.note-editor .note-toolbar .note-style h5,.note-editor .note-toolbar .note-style h6{margin:0}.note-editor .note-toolbar .note-color .dropdown-toggle{width:20px;padding-left:5px}.note-editor .note-toolbar .note-color .dropdown-menu{min-width:290px}.note-editor .note-toolbar .note-color .dropdown-menu .btn-group{margin:0}.note-editor .note-toolbar .note-color .dropdown-menu .btn-group:first-child{margin:0 5px}.note-editor .note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title{margin:2px 7px;font-size:12px;text-align:center;border-bottom:1px solid #eee}.note-editor .note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset{padding:0 3px;margin:5px;font-size:12px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.note-editor .note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover{background:#eee}.note-editor .note-toolbar .note-para .dropdown-menu{min-width:165px;padding:5px}.note-editor .note-toolbar .note-para li:first-child{margin-bottom:5px}.note-editor .note-statusbar{background-color:#f5f5f5}.note-editor .note-statusbar .note-resizebar{width:100%;height:8px;cursor:s-resize}.note-editor .note-statusbar .note-resizebar .note-icon-bar{width:20px;margin:1px auto;border-top:1px solid #a9a9a9}.note-editor .note-popover .popover{max-width:none}.note-editor .note-popover .popover .popover-content{padding:5px}.note-editor .note-popover .popover .popover-content a{display:inline-block;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}.note-editor .note-popover .popover .popover-content .btn-group+.btn-group{margin-left:5px}.note-editor .note-popover .popover .arrow{left:20px}.note-editor .note-handle .note-control-selection{position:absolute;display:none;border:1px solid #000}.note-editor .note-handle .note-control-selection>div{position:absolute}.note-editor .note-handle .note-control-selection .note-control-selection-bg{width:100%;height:100%;background-color:#000;-webkit-opacity:.3;-khtml-opacity:.3;-moz-opacity:.3;opacity:.3;-ms-filter:alpha(opacity=30);filter:alpha(opacity=30)}.note-editor .note-handle .note-control-selection .note-control-handle,.note-editor .note-handle .note-control-selection .note-control-holder{width:7px;height:7px;border:1px solid #000}.note-editor .note-handle .note-control-selection .note-control-sizing{width:7px;height:7px;background-color:#fff;border:1px solid #000}.note-editor .note-handle .note-control-selection .note-control-nw{top:-5px;left:-5px;border-right:0;border-bottom:0}.note-editor .note-handle .note-control-selection .note-control-ne{top:-5px;right:-5px;border-bottom:0;border-left:none}.note-editor .note-handle .note-control-selection .note-control-sw{bottom:-5px;left:-5px;border-top:0;border-right:0}.note-editor .note-handle .note-control-selection .note-control-se{right:-5px;bottom:-5px;cursor:se-resize}.note-editor .note-handle .note-control-selection .note-control-selection-info{right:0;bottom:0;padding:5px;margin:5px;font-size:12px;color:#fff;background-color:#000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-opacity:.7;-khtml-opacity:.7;-moz-opacity:.7;opacity:.7;-ms-filter:alpha(opacity=70);filter:alpha(opacity=70)}.note-editor .note-dialog>div{display:none}.note-editor .note-dialog .note-image-dialog .note-dropzone{min-height:200px;font-size:30px;line-height:6;color:#d3d3d3;text-align:center;border:4px dashed #d3d3d3}.note-editor .note-dialog .note-help-dialog{font-size:12px;color:#ccc;background:0 0;background-color:#222!important;border:0;-webkit-opacity:.9;-khtml-opacity:.9;-moz-opacity:.9;opacity:.9;-ms-filter:alpha(opacity=90);filter:alpha(opacity=90)}.note-editor .note-dialog .note-help-dialog .modal-content{background:0 0;border:1px solid #fff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.note-editor .note-dialog .note-help-dialog a{font-size:12px;color:#fff}.note-editor .note-dialog .note-help-dialog .title{padding-bottom:5px;font-size:14px;font-weight:700;color:#fff;border-bottom:#fff 1px solid}.note-editor .note-dialog .note-help-dialog .modal-close{font-size:14px;color:#dd0;cursor:pointer}.note-editor .note-dialog .note-help-dialog .note-shortcut-layout{width:100%}.note-editor .note-dialog .note-help-dialog .note-shortcut-layout td{vertical-align:top}.note-editor .note-dialog .note-help-dialog .note-shortcut{margin-top:8px}.note-editor .note-dialog .note-help-dialog .note-shortcut th{font-size:13px;color:#dd0;text-align:left}.note-editor .note-dialog .note-help-dialog .note-shortcut td:first-child{min-width:110px;padding-right:10px;font-family:"Courier New";color:#dd0;text-align:right}.note-editor .note-editable{padding:10px;overflow:scroll;outline:0}.note-editor .note-codeable{display:none;width:100%;padding:10px;margin-bottom:0;font-family:Menlo,Monaco,monospace,sans-serif;font-size:14px;color:#ccc;background-color:#222;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;resize:none}.note-editor .dropdown-menu{min-width:90px}.note-editor .dropdown-menu.right{right:0;left:auto}.note-editor .dropdown-menu.right::before{right:9px;left:auto!important}.note-editor .dropdown-menu.right::after{right:10px;left:auto!important}.note-editor .dropdown-menu li a i{color:#00bfff;visibility:hidden}.note-editor .dropdown-menu li a.checked i{visibility:visible}.note-editor .note-color-palette{line-height:1}.note-editor .note-color-palette div .note-color-btn{width:17px;height:17px;padding:0;margin:0;border:1px solid #fff}.note-editor .note-color-palette div .note-color-btn:hover{border:1px solid #000}.no-padding .note-editor{border:none}.note-editor .note-editable{background-color:rgba(48,126,204,.05)}.note-editor .note-editable:focus{background-color:#fff}.note-editor .note-statusbar .note-resizebar{border-top:1px solid #DBDBDB}.note-editor .note-statusbar:hover{background:#EEE}.note-editor .note-statusbar:active{background:#eaeaea}.superbox *,.superbox :after,.superbox :before{margin:0;padding:0;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-font-smoothing:antialiased;-o-font-smoothing:antialiased;font-smoothing:antialiased;text-rendering:optimizeLegibility}.superbox-list{display:inline-block;*display:inline;zoom:1;width:12.5%;padding:5px;position:relative}.superbox-list.active:before{content:"\f0d8";font-family:FontAwesome;display:block;position:absolute;left:43%;bottom:-34px;z-index:2;text-align:center;font-size:45px;color:#222}.superbox-img{max-width:100%;width:100%;cursor:pointer}.superbox-show{text-align:left;position:relative;background-color:#222;width:100%;float:left;padding:25px 0 12px 25px;display:none;margin:5px 0}.superbox-current-img{max-width:100%;float:left;padding-right:25px;padding-bottom:13px}.superbox-img:hover{opacity:.8}.superbox-float{float:left}.superbox-close{opacity:.7;cursor:pointer;position:absolute;top:15px;right:15px;transition:all .1s linear 0s}.superbox-close:hover{opacity:1}.superbox-imageinfo{display:inline-block;max-width:500px;color:#fff;padding:0 25px 0 0}.superbox-imageinfo span{font-size:13px;color:#a19994;margin-right:-2px;padding-top:10px;display:inline-block;padding-bottom:13px}.superbox-imageinfo>:first-child{margin-bottom:10px;font-weight:700}.superbox-imageinfo span p:last-child{margin-top:30px}@media only screen and (min-width:320px){.superbox-list{width:50%}}@media only screen and (min-width:486px){.superbox-list{width:25%}}@media only screen and (min-width:768px){.superbox-list{width:16.66666667%}}@media only screen and (min-width:1025px){.superbox-list{width:12.5%}}@media only screen and (min-width:1824px){.superbox-list{width:12.5%}}.voice-command-active #speech-btn>span>a{background:url(../img/voicecommand/active-btn.gif) no-repeat center center #0e70ca;border:1px solid #125A9C;color:rgba(255,255,255,.9)}.animated{-webkit-animation-duration:1s;-moz-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.animated.fast{-webkit-animation-duration:.5s;-moz-animation-duration:.5s;-o-animation-duration:.5s;animation-duration:.5s}.animated.hinge{-webkit-animation-duration:2s;-moz-animation-duration:2s;-o-animation-duration:2s;animation-duration:2s}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@-moz-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@-o-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.animated.flash{-webkit-animation-name:flash;-moz-animation-name:flash;-o-animation-name:flash;animation-name:flash}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px)}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0)}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px)}20%,40%,60%,80%{-moz-transform:translateX(10px)}}@-o-keyframes shake{0%,100%{-o-transform:translateX(0)}10%,30%,50%,70%,90%{-o-transform:translateX(-10px)}20%,40%,60%,80%{-o-transform:translateX(10px)}}@keyframes shake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}.animated.shake{-webkit-animation-name:shake;-moz-animation-name:shake;-o-animation-name:shake;animation-name:shake}@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0)}40%{-webkit-transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px)}}@-moz-keyframes bounce{0%,100%,20%,50%,80%{-moz-transform:translateY(0)}40%{-moz-transform:translateY(-30px)}60%{-moz-transform:translateY(-15px)}}@-o-keyframes bounce{0%,100%,20%,50%,80%{-o-transform:translateY(0)}40%{-o-transform:translateY(-30px)}60%{-o-transform:translateY(-15px)}}@keyframes bounce{0%,100%,20%,50%,80%{transform:translateY(0)}40%{transform:translateY(-30px)}60%{transform:translateY(-15px)}}.animated.bounce{-webkit-animation-name:bounce;-moz-animation-name:bounce;-o-animation-name:bounce;animation-name:bounce}@-webkit-keyframes tada{0%{-webkit-transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0)}}@-moz-keyframes tada{0%{-moz-transform:scale(1)}10%,20%{-moz-transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-moz-transform:scale(1.1) rotate(3deg)}40%,60%,80%{-moz-transform:scale(1.1) rotate(-3deg)}100%{-moz-transform:scale(1) rotate(0)}}@-o-keyframes tada{0%{-o-transform:scale(1)}10%,20%{-o-transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-o-transform:scale(1.1) rotate(3deg)}40%,60%,80%{-o-transform:scale(1.1) rotate(-3deg)}100%{-o-transform:scale(1) rotate(0)}}@keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}100%{transform:scale(1) rotate(0)}}.animated.tada{-webkit-animation-name:tada;-moz-animation-name:tada;-o-animation-name:tada;animation-name:tada}@-webkit-keyframes swing{100%,20%,40%,60%,80%{-webkit-transform-origin:top center}20%{-webkit-transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg)}100%{-webkit-transform:rotate(0deg)}}@-moz-keyframes swing{20%{-moz-transform:rotate(15deg)}40%{-moz-transform:rotate(-10deg)}60%{-moz-transform:rotate(5deg)}80%{-moz-transform:rotate(-5deg)}100%{-moz-transform:rotate(0deg)}}@-o-keyframes swing{20%{-o-transform:rotate(15deg)}40%{-o-transform:rotate(-10deg)}60%{-o-transform:rotate(5deg)}80%{-o-transform:rotate(-5deg)}100%{-o-transform:rotate(0deg)}}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}100%{transform:rotate(0deg)}}.animated.swing{-webkit-transform-origin:top center;-moz-transform-origin:top center;-o-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;-moz-animation-name:swing;-o-animation-name:swing;animation-name:swing}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0%)}15%{-webkit-transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0%)}}@-moz-keyframes wobble{0%{-moz-transform:translateX(0%)}15%{-moz-transform:translateX(-25%) rotate(-5deg)}30%{-moz-transform:translateX(20%) rotate(3deg)}45%{-moz-transform:translateX(-15%) rotate(-3deg)}60%{-moz-transform:translateX(10%) rotate(2deg)}75%{-moz-transform:translateX(-5%) rotate(-1deg)}100%{-moz-transform:translateX(0%)}}@-o-keyframes wobble{0%{-o-transform:translateX(0%)}15%{-o-transform:translateX(-25%) rotate(-5deg)}30%{-o-transform:translateX(20%) rotate(3deg)}45%{-o-transform:translateX(-15%) rotate(-3deg)}60%{-o-transform:translateX(10%) rotate(2deg)}75%{-o-transform:translateX(-5%) rotate(-1deg)}100%{-o-transform:translateX(0%)}}@keyframes wobble{0%{transform:translateX(0%)}15%{transform:translateX(-25%) rotate(-5deg)}30%{transform:translateX(20%) rotate(3deg)}45%{transform:translateX(-15%) rotate(-3deg)}60%{transform:translateX(10%) rotate(2deg)}75%{transform:translateX(-5%) rotate(-1deg)}100%{transform:translateX(0%)}}.animated.wobble{-webkit-animation-name:wobble;-moz-animation-name:wobble;-o-animation-name:wobble;animation-name:wobble}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.1)}100%{-webkit-transform:scale(1)}}@-moz-keyframes pulse{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.1)}100%{-moz-transform:scale(1)}}@-o-keyframes pulse{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.1)}100%{-o-transform:scale(1)}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.1)}100%{transform:scale(1)}}.animated.pulse{-webkit-animation-name:pulse;-moz-animation-name:pulse;-o-animation-name:pulse;animation-name:pulse}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-webkit-animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-webkit-animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-webkit-animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(0.95);-webkit-animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-webkit-animation-timing-function:ease-in}}@-moz-keyframes flip{0%{-moz-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-moz-animation-timing-function:ease-out}40%{-moz-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-moz-animation-timing-function:ease-out}50%{-moz-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-moz-animation-timing-function:ease-in}80%{-moz-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(0.95);-moz-animation-timing-function:ease-in}100%{-moz-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-moz-animation-timing-function:ease-in}}@-o-keyframes flip{0%{-o-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-o-animation-timing-function:ease-out}40%{-o-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-o-animation-timing-function:ease-out}50%{-o-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-o-animation-timing-function:ease-in}80%{-o-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(0.95);-o-animation-timing-function:ease-in}100%{-o-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-o-animation-timing-function:ease-in}}@keyframes flip{0%{transform:perspective(400px) translateZ(0) rotateY(0) scale(1);animation-timing-function:ease-out}40%{transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);animation-timing-function:ease-out}50%{transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);animation-timing-function:ease-in}80%{transform:perspective(400px) translateZ(0) rotateY(360deg) scale(0.95);animation-timing-function:ease-in}100%{transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible!important;-webkit-animation-name:flip;-moz-backface-visibility:visible!important;-moz-animation-name:flip;-o-backface-visibility:visible!important;-o-animation-name:flip;backface-visibility:visible!important;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0deg);opacity:1}}@-moz-keyframes flipInX{0%{-moz-transform:perspective(400px) rotateX(90deg);opacity:0}40%{-moz-transform:perspective(400px) rotateX(-10deg)}70%{-moz-transform:perspective(400px) rotateX(10deg)}100%{-moz-transform:perspective(400px) rotateX(0deg);opacity:1}}@-o-keyframes flipInX{0%{-o-transform:perspective(400px) rotateX(90deg);opacity:0}40%{-o-transform:perspective(400px) rotateX(-10deg)}70%{-o-transform:perspective(400px) rotateX(10deg)}100%{-o-transform:perspective(400px) rotateX(0deg);opacity:1}}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);opacity:0}40%{transform:perspective(400px) rotateX(-10deg)}70%{transform:perspective(400px) rotateX(10deg)}100%{transform:perspective(400px) rotateX(0deg);opacity:1}}.animated.flipInX{-webkit-backface-visibility:visible!important;-webkit-animation-name:flipInX;-moz-backface-visibility:visible!important;-moz-animation-name:flipInX;-o-backface-visibility:visible!important;-o-animation-name:flipInX;backface-visibility:visible!important;animation-name:flipInX}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0}}@-moz-keyframes flipOutX{0%{-moz-transform:perspective(400px) rotateX(0deg);opacity:1}100%{-moz-transform:perspective(400px) rotateX(90deg);opacity:0}}@-o-keyframes flipOutX{0%{-o-transform:perspective(400px) rotateX(0deg);opacity:1}100%{-o-transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{transform:perspective(400px) rotateX(0deg);opacity:1}100%{transform:perspective(400px) rotateX(90deg);opacity:0}}.animated.flipOutX{-webkit-animation-name:flipOutX;-webkit-backface-visibility:visible!important;-moz-animation-name:flipOutX;-moz-backface-visibility:visible!important;-o-animation-name:flipOutX;-o-backface-visibility:visible!important;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0deg);opacity:1}}@-moz-keyframes flipInY{0%{-moz-transform:perspective(400px) rotateY(90deg);opacity:0}40%{-moz-transform:perspective(400px) rotateY(-10deg)}70%{-moz-transform:perspective(400px) rotateY(10deg)}100%{-moz-transform:perspective(400px) rotateY(0deg);opacity:1}}@-o-keyframes flipInY{0%{-o-transform:perspective(400px) rotateY(90deg);opacity:0}40%{-o-transform:perspective(400px) rotateY(-10deg)}70%{-o-transform:perspective(400px) rotateY(10deg)}100%{-o-transform:perspective(400px) rotateY(0deg);opacity:1}}@keyframes flipInY{0%{transform:perspective(400px) rotateY(90deg);opacity:0}40%{transform:perspective(400px) rotateY(-10deg)}70%{transform:perspective(400px) rotateY(10deg)}100%{transform:perspective(400px) rotateY(0deg);opacity:1}}.animated.flipInY{-webkit-backface-visibility:visible!important;-webkit-animation-name:flipInY;-moz-backface-visibility:visible!important;-moz-animation-name:flipInY;-o-backface-visibility:visible!important;-o-animation-name:flipInY;backface-visibility:visible!important;animation-name:flipInY}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0}}@-moz-keyframes flipOutY{0%{-moz-transform:perspective(400px) rotateY(0deg);opacity:1}100%{-moz-transform:perspective(400px) rotateY(90deg);opacity:0}}@-o-keyframes flipOutY{0%{-o-transform:perspective(400px) rotateY(0deg);opacity:1}100%{-o-transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{transform:perspective(400px) rotateY(0deg);opacity:1}100%{transform:perspective(400px) rotateY(90deg);opacity:0}}.animated.flipOutY{-webkit-backface-visibility:visible!important;-webkit-animation-name:flipOutY;-moz-backface-visibility:visible!important;-moz-animation-name:flipOutY;-o-backface-visibility:visible!important;-o-animation-name:flipOutY;backface-visibility:visible!important;animation-name:flipOutY}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.animated.fadeIn{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;-o-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-moz-transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-o-transform:translateY(20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}100%{opacity:1;transform:translateY(0)}}.animated.fadeInUp{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInDown{0%{opacity:0;-moz-transform:translateY(-20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInDown{0%{opacity:0;-o-transform:translateY(-20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-20px)}100%{opacity:1;transform:translateY(0)}}.animated.fadeInDown{-webkit-animation-name:fadeInDown;-moz-animation-name:fadeInDown;-o-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInLeft{0%{opacity:0;-moz-transform:translateX(-20px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInLeft{0%{opacity:0;-o-transform:translateX(-20px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;transform:translateX(-20px)}100%{opacity:1;transform:translateX(0)}}.animated.fadeInLeft{-webkit-animation-name:fadeInLeft;-moz-animation-name:fadeInLeft;-o-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInRight{0%{opacity:0;-moz-transform:translateX(20px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInRight{0%{opacity:0;-o-transform:translateX(20px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;transform:translateX(20px)}100%{opacity:1;transform:translateX(0)}}.animated.fadeInRight{-webkit-animation-name:fadeInRight;-moz-animation-name:fadeInRight;-o-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUpBig{0%{opacity:0;-moz-transform:translateY(2000px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUpBig{0%{opacity:0;-o-transform:translateY(2000px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;transform:translateY(2000px)}100%{opacity:1;transform:translateY(0)}}.animated.fadeInUpBig{-webkit-animation-name:fadeInUpBig;-moz-animation-name:fadeInUpBig;-o-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInDownBig{0%{opacity:0;-moz-transform:translateY(-2000px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInDownBig{0%{opacity:0;-o-transform:translateY(-2000px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInDownBig{0%{opacity:0;transform:translateY(-2000px)}100%{opacity:1;transform:translateY(0)}}.animated.fadeInDownBig{-webkit-animation-name:fadeInDownBig;-moz-animation-name:fadeInDownBig;-o-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInLeftBig{0%{opacity:0;-moz-transform:translateX(-2000px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInLeftBig{0%{opacity:0;-o-transform:translateX(-2000px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInLeftBig{0%{opacity:0;transform:translateX(-2000px)}100%{opacity:1;transform:translateX(0)}}.animated.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;-moz-animation-name:fadeInLeftBig;-o-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInRightBig{0%{opacity:0;-moz-transform:translateX(2000px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInRightBig{0%{opacity:0;-o-transform:translateX(2000px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInRightBig{0%{opacity:0;transform:translateX(2000px)}100%{opacity:1;transform:translateX(0)}}.animated.fadeInRightBig{-webkit-animation-name:fadeInRightBig;-moz-animation-name:fadeInRightBig;-o-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-o-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.animated.fadeOut{-webkit-animation-name:fadeOut;-moz-animation-name:fadeOut;-o-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px)}}@-moz-keyframes fadeOutUp{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(-20px)}}@-o-keyframes fadeOutUp{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(-20px)}}@keyframes fadeOutUp{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-20px)}}.animated.fadeOutUp{-webkit-animation-name:fadeOutUp;-moz-animation-name:fadeOutUp;-o-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px)}}@-moz-keyframes fadeOutDown{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(20px)}}@-o-keyframes fadeOutDown{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(20px)}}.animated.fadeOutDown{-webkit-animation-name:fadeOutDown;-moz-animation-name:fadeOutDown;-o-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px)}}@-moz-keyframes fadeOutLeft{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(-20px)}}@-o-keyframes fadeOutLeft{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(-20px)}}.animated.fadeOutLeft{-webkit-animation-name:fadeOutLeft;-moz-animation-name:fadeOutLeft;-o-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px)}}@-moz-keyframes fadeOutRight{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(20px)}}@-o-keyframes fadeOutRight{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(20px)}}@keyframes fadeOutRight{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(20px)}}.animated.fadeOutRight{-webkit-animation-name:fadeOutRight;-moz-animation-name:fadeOutRight;-o-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px)}}@-moz-keyframes fadeOutUpBig{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(-2000px)}}@-o-keyframes fadeOutUpBig{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(-2000px)}}@keyframes fadeOutUpBig{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-2000px)}}.animated.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;-moz-animation-name:fadeOutUpBig;-o-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px)}}@-moz-keyframes fadeOutDownBig{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(2000px)}}@-o-keyframes fadeOutDownBig{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(2000px)}}@keyframes fadeOutDownBig{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(2000px)}}.animated.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;-moz-animation-name:fadeOutDownBig;-o-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px)}}@-moz-keyframes fadeOutLeftBig{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(-2000px)}}@-o-keyframes fadeOutLeftBig{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(-2000px)}}@keyframes fadeOutLeftBig{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(-2000px)}}.animated.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;-moz-animation-name:fadeOutLeftBig;-o-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px)}}@-moz-keyframes fadeOutRightBig{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(2000px)}}@-o-keyframes fadeOutRightBig{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(2000px)}}@keyframes fadeOutRightBig{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(2000px)}}.animated.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;-moz-animation-name:fadeOutRightBig;-o-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(0.3)}50%{opacity:1;-webkit-transform:scale(1.05)}70%{-webkit-transform:scale(0.9)}100%{-webkit-transform:scale(1)}}@-moz-keyframes bounceIn{0%{opacity:0;-moz-transform:scale(0.3)}50%{opacity:1;-moz-transform:scale(1.05)}70%{-moz-transform:scale(0.9)}100%{-moz-transform:scale(1)}}@-o-keyframes bounceIn{0%{opacity:0;-o-transform:scale(0.3)}50%{opacity:1;-o-transform:scale(1.05)}70%{-o-transform:scale(0.9)}100%{-o-transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;transform:scale(0.3)}50%{opacity:1;transform:scale(1.05)}70%{transform:scale(0.9)}100%{transform:scale(1)}}@-webkit-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px)}100%{-webkit-transform:translateY(0)}}@-moz-keyframes slideInDown{0%{opacity:0;-moz-transform:translateY(-2000px)}100%{-moz-transform:translateY(0)}}@-o-keyframes slideInDown{0%{opacity:0;-o-transform:translateY(-2000px)}100%{-o-transform:translateY(0)}}@keyframes slideInDown{0%{opacity:0;transform:translateY(-2000px)}100%{transform:translateY(0)}}.slideInDown{-webkit-animation-name:slideInDown;-moz-animation-name:slideInDown;-o-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes slideInLeft{0%{opacity:0;-moz-transform:translateX(-2000px)}100%{-moz-transform:translateX(0)}}@-o-keyframes slideInLeft{0%{opacity:0;-o-transform:translateX(-2000px)}100%{-o-transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translateX(-2000px)}100%{transform:translateX(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;-moz-animation-name:slideInLeft;-o-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes slideInRight{0%{opacity:0;-moz-transform:translateX(2000px)}100%{-moz-transform:translateX(0)}}@-o-keyframes slideInRight{0%{opacity:0;-o-transform:translateX(2000px)}100%{-o-transform:translateX(0)}}@keyframes slideInRight{0%{opacity:0;transform:translateX(2000px)}100%{transform:translateX(0)}}.slideInRight{-webkit-animation-name:slideInRight;-moz-animation-name:slideInRight;-o-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px)}}@-moz-keyframes slideOutLeft{0%{-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(-2000px)}}@-o-keyframes slideOutLeft{0%{-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(-2000px)}}@keyframes slideOutLeft{0%{transform:translateX(0)}100%{opacity:0;transform:translateX(-2000px)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;-moz-animation-name:slideOutLeft;-o-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px)}}@-moz-keyframes slideOutRight{0%{-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(2000px)}}@-o-keyframes slideOutRight{0%{-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(2000px)}}@keyframes slideOutRight{0%{transform:translateX(0)}100%{opacity:0;transform:translateX(2000px)}}.slideOutRight{-webkit-animation-name:slideOutRight;-moz-animation-name:slideOutRight;-o-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px)}}@-moz-keyframes slideOutUp{0%{-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(-2000px)}}@-o-keyframes slideOutUp{0%{-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(-2000px)}}@keyframes slideOutUp{0%{transform:translateY(0)}100%{opacity:0;transform:translateY(-2000px)}}.slideOutUp{-webkit-animation-name:slideOutUp;-moz-animation-name:slideOutUp;-o-animation-name:slideOutUp;animation-name:slideOutUp}.animated.bounceIn{-webkit-animation-name:bounceIn;-moz-animation-name:bounceIn;-o-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px)}80%{-webkit-transform:translateY(10px)}100%{-webkit-transform:translateY(0)}}@-moz-keyframes bounceInUp{0%{opacity:0;-moz-transform:translateY(2000px)}60%{opacity:1;-moz-transform:translateY(-30px)}80%{-moz-transform:translateY(10px)}100%{-moz-transform:translateY(0)}}@-o-keyframes bounceInUp{0%{opacity:0;-o-transform:translateY(2000px)}60%{opacity:1;-o-transform:translateY(-30px)}80%{-o-transform:translateY(10px)}100%{-o-transform:translateY(0)}}@keyframes bounceInUp{0%{opacity:0;transform:translateY(2000px)}60%{opacity:1;transform:translateY(-30px)}80%{transform:translateY(10px)}100%{transform:translateY(0)}}.animated.bounceInUp{-webkit-animation-name:bounceInUp;-moz-animation-name:bounceInUp;-o-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px)}80%{-webkit-transform:translateY(-10px)}100%{-webkit-transform:translateY(0)}}@-moz-keyframes bounceInDown{0%{opacity:0;-moz-transform:translateY(-2000px)}60%{opacity:1;-moz-transform:translateY(30px)}80%{-moz-transform:translateY(-10px)}100%{-moz-transform:translateY(0)}}@-o-keyframes bounceInDown{0%{opacity:0;-o-transform:translateY(-2000px)}60%{opacity:1;-o-transform:translateY(30px)}80%{-o-transform:translateY(-10px)}100%{-o-transform:translateY(0)}}@keyframes bounceInDown{0%{opacity:0;transform:translateY(-2000px)}60%{opacity:1;transform:translateY(30px)}80%{transform:translateY(-10px)}100%{transform:translateY(0)}}.animated.bounceInDown{-webkit-animation-name:bounceInDown;-moz-animation-name:bounceInDown;-o-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px)}80%{-webkit-transform:translateX(-10px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes bounceInLeft{0%{opacity:0;-moz-transform:translateX(-2000px)}60%{opacity:1;-moz-transform:translateX(30px)}80%{-moz-transform:translateX(-10px)}100%{-moz-transform:translateX(0)}}@-o-keyframes bounceInLeft{0%{opacity:0;-o-transform:translateX(-2000px)}60%{opacity:1;-o-transform:translateX(30px)}80%{-o-transform:translateX(-10px)}100%{-o-transform:translateX(0)}}@keyframes bounceInLeft{0%{opacity:0;transform:translateX(-2000px)}60%{opacity:1;transform:translateX(30px)}80%{transform:translateX(-10px)}100%{transform:translateX(0)}}.animated.bounceInLeft{-webkit-animation-name:bounceInLeft;-moz-animation-name:bounceInLeft;-o-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px)}80%{-webkit-transform:translateX(10px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes bounceInRight{0%{opacity:0;-moz-transform:translateX(2000px)}60%{opacity:1;-moz-transform:translateX(-30px)}80%{-moz-transform:translateX(10px)}100%{-moz-transform:translateX(0)}}@-o-keyframes bounceInRight{0%{opacity:0;-o-transform:translateX(2000px)}60%{opacity:1;-o-transform:translateX(-30px)}80%{-o-transform:translateX(10px)}100%{-o-transform:translateX(0)}}@keyframes bounceInRight{0%{opacity:0;transform:translateX(2000px)}60%{opacity:1;transform:translateX(-30px)}80%{transform:translateX(10px)}100%{transform:translateX(0)}}.animated.bounceInRight{-webkit-animation-name:bounceInRight;-moz-animation-name:bounceInRight;-o-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceOut{0%{-webkit-transform:scale(1)}25%{-webkit-transform:scale(0.95)}50%{opacity:1;-webkit-transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(0.3)}}@-moz-keyframes bounceOut{0%{-moz-transform:scale(1)}25%{-moz-transform:scale(0.95)}50%{opacity:1;-moz-transform:scale(1.1)}100%{opacity:0;-moz-transform:scale(0.3)}}@-o-keyframes bounceOut{0%{-o-transform:scale(1)}25%{-o-transform:scale(0.95)}50%{opacity:1;-o-transform:scale(1.1)}100%{opacity:0;-o-transform:scale(0.3)}}@keyframes bounceOut{0%{transform:scale(1)}25%{transform:scale(0.95)}50%{opacity:1;transform:scale(1.1)}100%{opacity:0;transform:scale(0.3)}}.animated.bounceOut{-webkit-animation-name:bounceOut;-moz-animation-name:bounceOut;-o-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutUp{0%{-webkit-transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px)}}@-moz-keyframes bounceOutUp{0%{-moz-transform:translateY(0)}20%{opacity:1;-moz-transform:translateY(20px)}100%{opacity:0;-moz-transform:translateY(-2000px)}}@-o-keyframes bounceOutUp{0%{-o-transform:translateY(0)}20%{opacity:1;-o-transform:translateY(20px)}100%{opacity:0;-o-transform:translateY(-2000px)}}@keyframes bounceOutUp{0%{transform:translateY(0)}20%{opacity:1;transform:translateY(20px)}100%{opacity:0;transform:translateY(-2000px)}}.animated.bounceOutUp{-webkit-animation-name:bounceOutUp;-moz-animation-name:bounceOutUp;-o-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes bounceOutDown{0%{-webkit-transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px)}}@-moz-keyframes bounceOutDown{0%{-moz-transform:translateY(0)}20%{opacity:1;-moz-transform:translateY(-20px)}100%{opacity:0;-moz-transform:translateY(2000px)}}@-o-keyframes bounceOutDown{0%{-o-transform:translateY(0)}20%{opacity:1;-o-transform:translateY(-20px)}100%{opacity:0;-o-transform:translateY(2000px)}}@keyframes bounceOutDown{0%{transform:translateY(0)}20%{opacity:1;transform:translateY(-20px)}100%{opacity:0;transform:translateY(2000px)}}.animated.bounceOutDown{-webkit-animation-name:bounceOutDown;-moz-animation-name:bounceOutDown;-o-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{0%{-webkit-transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px)}}@-moz-keyframes bounceOutLeft{0%{-moz-transform:translateX(0)}20%{opacity:1;-moz-transform:translateX(20px)}100%{opacity:0;-moz-transform:translateX(-2000px)}}@-o-keyframes bounceOutLeft{0%{-o-transform:translateX(0)}20%{opacity:1;-o-transform:translateX(20px)}100%{opacity:0;-o-transform:translateX(-2000px)}}@keyframes bounceOutLeft{0%{transform:translateX(0)}20%{opacity:1;transform:translateX(20px)}100%{opacity:0;transform:translateX(-2000px)}}.animated.bounceOutLeft{-webkit-animation-name:bounceOutLeft;-moz-animation-name:bounceOutLeft;-o-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{0%{-webkit-transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px)}}@-moz-keyframes bounceOutRight{0%{-moz-transform:translateX(0)}20%{opacity:1;-moz-transform:translateX(-20px)}100%{opacity:0;-moz-transform:translateX(2000px)}}@-o-keyframes bounceOutRight{0%{-o-transform:translateX(0)}20%{opacity:1;-o-transform:translateX(-20px)}100%{opacity:0;-o-transform:translateX(2000px)}}@keyframes bounceOutRight{0%{transform:translateX(0)}20%{opacity:1;transform:translateX(-20px)}100%{opacity:0;transform:translateX(2000px)}}.animated.bounceOutRight{-webkit-animation-name:bounceOutRight;-moz-animation-name:bounceOutRight;-o-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center center;-webkit-transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateIn{0%{-moz-transform-origin:center center;-moz-transform:rotate(-200deg);opacity:0}100%{-moz-transform-origin:center center;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateIn{0%{-o-transform-origin:center center;-o-transform:rotate(-200deg);opacity:0}100%{-o-transform-origin:center center;-o-transform:rotate(0);opacity:1}}@keyframes rotateIn{0%{transform-origin:center center;transform:rotate(-200deg);opacity:0}100%{transform-origin:center center;transform:rotate(0);opacity:1}}.animated.rotateIn{-webkit-animation-name:rotateIn;-moz-animation-name:rotateIn;-o-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInUpLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(90deg);opacity:0}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInUpLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(90deg);opacity:0}100%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInUpLeft{0%{transform-origin:left bottom;transform:rotate(90deg);opacity:0}100%{transform-origin:left bottom;transform:rotate(0);opacity:1}}.animated.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;-moz-animation-name:rotateInUpLeft;-o-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInDownLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(-90deg);opacity:0}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInDownLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(-90deg);opacity:0}100%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInDownLeft{0%{transform-origin:left bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:left bottom;transform:rotate(0);opacity:1}}.animated.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;-moz-animation-name:rotateInDownLeft;-o-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInUpRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(-90deg);opacity:0}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInUpRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(-90deg);opacity:0}100%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInUpRight{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}.animated.rotateInUpRight{-webkit-animation-name:rotateInUpRight;-moz-animation-name:rotateInUpRight;-o-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInDownRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(90deg);opacity:0}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInDownRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(90deg);opacity:0}100%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInDownRight{0%{transform-origin:right bottom;transform:rotate(90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}.animated.rotateInDownRight{-webkit-animation-name:rotateInDownRight;-moz-animation-name:rotateInDownRight;-o-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center center;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;-webkit-transform:rotate(200deg);opacity:0}}@-moz-keyframes rotateOut{0%{-moz-transform-origin:center center;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:center center;-moz-transform:rotate(200deg);opacity:0}}@-o-keyframes rotateOut{0%{-o-transform-origin:center center;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:center center;-o-transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{transform-origin:center center;transform:rotate(0);opacity:1}100%{transform-origin:center center;transform:rotate(200deg);opacity:0}}.animated.rotateOut{-webkit-animation-name:rotateOut;-moz-animation-name:rotateOut;-o-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(-90deg);opacity:0}}@-moz-keyframes rotateOutUpLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(-90deg);opacity:0}}@-o-keyframes rotateOutUpLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:left bottom;-o-transform:rotate(-90deg);opacity:0}}@keyframes rotateOutUpLeft{0%{transform-origin:left bottom;transform:rotate(0);opacity:1}100%{transform-origin:left bottom;transform:rotate(-90deg);opacity:0}}.animated.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;-moz-animation-name:rotateOutUpLeft;-o-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(90deg);opacity:0}}@-moz-keyframes rotateOutDownLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(90deg);opacity:0}}@-o-keyframes rotateOutDownLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:left bottom;-o-transform:rotate(90deg);opacity:0}}@keyframes rotateOutDownLeft{0%{transform-origin:left bottom;transform:rotate(0);opacity:1}100%{transform-origin:left bottom;transform:rotate(90deg);opacity:0}}.animated.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;-moz-animation-name:rotateOutDownLeft;-o-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(90deg);opacity:0}}@-moz-keyframes rotateOutUpRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(90deg);opacity:0}}@-o-keyframes rotateOutUpRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:right bottom;-o-transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{transform-origin:right bottom;transform:rotate(0);opacity:1}100%{transform-origin:right bottom;transform:rotate(90deg);opacity:0}}.animated.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;-moz-animation-name:rotateOutUpRight;-o-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(-90deg);opacity:0}}@-moz-keyframes rotateOutDownRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(-90deg);opacity:0}}@-o-keyframes rotateOutDownRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:right bottom;-o-transform:rotate(-90deg);opacity:0}}@keyframes rotateOutDownRight{0%{transform-origin:right bottom;transform:rotate(0);opacity:1}100%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}}.animated.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;-moz-animation-name:rotateOutDownRight;-o-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes hinge{0%{-webkit-transform:rotate(0);-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);opacity:1;-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}100%{-webkit-transform:translateY(700px);opacity:0}}@-moz-keyframes hinge{0%{-moz-transform:rotate(0);-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}20%,60%{-moz-transform:rotate(80deg);-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}40%{-moz-transform:rotate(60deg);-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}80%{-moz-transform:rotate(60deg) translateY(0);opacity:1;-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}100%{-moz-transform:translateY(700px);opacity:0}}@-o-keyframes hinge{0%{-o-transform:rotate(0);-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}20%,60%{-o-transform:rotate(80deg);-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}40%{-o-transform:rotate(60deg);-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}80%{-o-transform:rotate(60deg) translateY(0);opacity:1;-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}100%{-o-transform:translateY(700px);opacity:0}}@keyframes hinge{0%{transform:rotate(0);transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate(80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out}80%{transform:rotate(60deg) translateY(0);opacity:1;transform-origin:top left;animation-timing-function:ease-in-out}100%{transform:translateY(700px);opacity:0}}.animated.hinge{-webkit-animation-name:hinge;-moz-animation-name:hinge;-o-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg)}}@-moz-keyframes rollIn{0%{opacity:0;-moz-transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-moz-transform:translateX(0px) rotate(0deg)}}@-o-keyframes rollIn{0%{opacity:0;-o-transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-o-transform:translateX(0px) rotate(0deg)}}@keyframes rollIn{0%{opacity:0;transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;transform:translateX(0px) rotate(0deg)}}.animated.rollIn{-webkit-animation-name:rollIn;-moz-animation-name:rollIn;-o-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg)}}@-moz-keyframes rollOut{0%{opacity:1;-moz-transform:translateX(0px) rotate(0deg)}100%{opacity:0;-moz-transform:translateX(100%) rotate(120deg)}}@-o-keyframes rollOut{0%{opacity:1;-o-transform:translateX(0px) rotate(0deg)}100%{opacity:0;-o-transform:translateX(100%) rotate(120deg)}}@keyframes rollOut{0%{opacity:1;transform:translateX(0px) rotate(0deg)}100%{opacity:0;transform:translateX(100%) rotate(120deg)}}.animated.rollOut{-webkit-animation-name:rollOut;-moz-animation-name:rollOut;-o-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0%) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0%) skewX(0deg);opacity:1}}@-moz-keyframes lightSpeedIn{0%{-moz-transform:translateX(100%) skewX(-30deg);opacity:0}60%{-moz-transform:translateX(-20%) skewX(30deg);opacity:1}80%{-moz-transform:translateX(0%) skewX(-15deg);opacity:1}100%{-moz-transform:translateX(0%) skewX(0deg);opacity:1}}@-o-keyframes lightSpeedIn{0%{-o-transform:translateX(100%) skewX(-30deg);opacity:0}60%{-o-transform:translateX(-20%) skewX(30deg);opacity:1}80%{-o-transform:translateX(0%) skewX(-15deg);opacity:1}100%{-o-transform:translateX(0%) skewX(0deg);opacity:1}}@keyframes lightSpeedIn{0%{transform:translateX(100%) skewX(-30deg);opacity:0}60%{transform:translateX(-20%) skewX(30deg);opacity:1}80%{transform:translateX(0%) skewX(-15deg);opacity:1}100%{transform:translateX(0%) skewX(0deg);opacity:1}}.animated.lightSpeedIn{-webkit-animation-name:lightSpeedIn;-moz-animation-name:lightSpeedIn;-o-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;-moz-animation-timing-function:ease-out;-o-animation-timing-function:ease-out;animation-timing-function:ease-out;-webkit-animation-duration:.5s;-moz-animation-duration:.5s;-o-animation-duration:.5s;animation-duration:.5s}@-webkit-keyframes lightSpeedOut{0%{-webkit-transform:translateX(0%) skewX(0deg);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);opacity:0}}@-moz-keyframes lightSpeedOut{0%{-moz-transform:translateX(0%) skewX(0deg);opacity:1}100%{-moz-transform:translateX(100%) skewX(-30deg);opacity:0}}@-o-keyframes lightSpeedOut{0%{-o-transform:translateX(0%) skewX(0deg);opacity:1}100%{-o-transform:translateX(100%) skewX(-30deg);opacity:0}}@keyframes lightSpeedOut{0%{transform:translateX(0%) skewX(0deg);opacity:1}100%{transform:translateX(100%) skewX(-30deg);opacity:0}}.animated.lightSpeedOut{-webkit-animation-name:lightSpeedOut;-moz-animation-name:lightSpeedOut;-o-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;-moz-animation-timing-function:ease-in;-o-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-duration:.25s;-moz-animation-duration:.25s;-o-animation-duration:.25s;animation-duration:.25s}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}/*! + * jQuery UI Bootstrap (1.0 alpha) + * http://addyosmani.github.io/jqueryui-bootstrap/ + * + * Copyright 2012 - 2013, Addy Osmani + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Portions copyright jQuery UI & Twitter Bootstrap + */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui-helper-clearfix{display:block;min-height:0}* html .ui-helper-clearfix{height:1%}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:alpha(opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;z-index:99999;display:block}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px}.ui-widget .ui-widget{font-size:13px}.ui-widget button,.ui-widget input,.ui-widget select,.ui-widget textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:inherit}.ui-widget-content{border:1px solid #aaa;background:#fff;color:#404040}.ui-widget-header{font-weight:700;background-color:#F5F5F5;border-color:#DDD;color:#333}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{color:#333;background-color:#fff;font-weight:400;border:1px solid #ccc}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{color:#333;background-color:#ebebeb;border-color:#adadad;text-decoration:none}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#333;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #adadad;font-weight:400;color:#333}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#333;text-decoration:none}.ui-widget :active{outline:0}.ui-state-default,.ui-state-error,.ui-state-highlight{position:relative;border-width:1px;border-style:solid}.ui-state-default p,.ui-state-error p,.ui-state-highlight p{font-size:13px;font-weight:400;line-height:18px;margin:7px 15px}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#2d6987}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.ui-state-error a,.ui-state-error-text,.ui-widget-content .ui-state-error a,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error a,.ui-widget-header .ui-state-error-text{color:#953b39}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:alpha(opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:alpha(opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:alpha(opacity=35)}.ui-icon{width:16px;height:16px;background-image:url(../img/jqueryui/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon,.ui-widget-header .ui-icon{background-image:url(../img/jqueryui/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(../img/jqueryui/ui-icons_888888_256x240.png)}.ui-state-active .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(../img/jqueryui/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(../img/jqueryui/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(../img/jqueryui/ui-icons_f6cf3b_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-corner-left,.ui-corner-tl,.ui-corner-top{-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px}.ui-corner-right,.ui-corner-top,.ui-corner-tr{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px}.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.ui-corner-bottom,.ui-corner-br,.ui-corner-right{-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px}.ui-widget-overlay{opacity:.3;filter:alpha(opacity=30);width:100%}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa;opacity:.3;filter:alpha(opacity=30);-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px}.ui-accordion{width:100%}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{border-top:0 none;margin-top:-3px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none}.ui-accordion .ui-accordion-content-active{display:block}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid #ccc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.ui-button:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ui-button:focus,.ui-button:hover{color:#333;background-color:#ebebeb;border-color:#adadad;text-decoration:none}fieldset[disabled] ui-button,fieldset[disabled] ui-button.ui-state-active,fieldset[disabled] ui-button:active,fieldset[disabled] ui-button:focus,fieldset[disabled] ui-button:hover,ui-button.disabled,ui-button.disabled.active,ui-button.disabled:active,ui-button.disabled:focus,ui-button.disabled:hover,ui-button[disabled],ui-button[disabled].active,ui-button[disabled]:active,ui-button[disabled]:focus,ui-button[disabled]:hover{background-color:#fff;border-color:#ccc}.ui-btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.ui-btn-sm,.ui-btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.ui-btn-xs{padding:1px 5px}.ui-btn-block{display:block;width:100%;padding-right:0;padding-left:0}.ui-btn-block+.ui-btn-block{margin-top:5px}input[type=button].ui-btn-block,input[type=reset].ui-btn-block,input[type=submit].ui-btn-block{width:100%}.ui-button-text-icon-primary .ui-button-icon-primary{float:left}.ui-button-text-icon-primary{padding:2px 7px 3px}.ui-button-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.ui-button-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.ui-button-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.ui-button-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.ui-button-inverse{color:#fff;background-color:#222;border-color:#080808}.ui-button-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.ui-button-error{color:#fff;background-color:#c43c35;border-color:#882a25}.ui-button-danger:hover,.ui-button-info:hover,.ui-button-inverse:hover,.ui-button-primary:hover,.ui-button-success:hover,.ui-button-warning:hover{text-decoration:none}.ui-button-primary:focus,.ui-button-primary:hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.ui-button-success:hover{color:#fff;background-color:#47a447;border-color:#398439}.ui-button-info:hover{color:#fff;background-color:#39b3d7;border-color:#269abc}.ui-button-danger:hover{color:#fff;background-color:#d2322d;border-color:#ac2925}.ui-button-warning:hover{color:#fff;background-color:#ed9c28;border-color:#d58512}.ui-button-inverse:hover{color:#fff;background-color:#363636;border-color:#000}.ui-button-icon-only{width:2.2em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button-text-icon-primary .ui-button-icon-primary.ui-icon{margin-top:5px}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999px;display:none}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-icons-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon{margin-bottom:0;margin-top:0;top:50%}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px;margin-right:-6px}.ui-button-icons-only .ui-button-icon-primary,.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary{left:.5em}.ui-button-icons-only .ui-button-icon-secondary,.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-state-active{color:#fff;background-color:#428bca;border-color:#357ebd}.ui-buttonset .ui-state-active.ui-state-hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.ui-buttonset .ui-button{margin-left:0;margin-right:-.4em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-menu{list-style:none;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute;list-style:none}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%;list-style:none;list-style-image:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-corner-all{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-widget-content{font-weight:700;margin:0;background-color:#428BCA;border-color:#357EBD;color:#FFF;display:block;white-space:nowrap}.ui-menu .ui-menu-item a.ui-state-active{padding:1px .4em}.ui-menu .ui-state-disabled{line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-menu{margin-bottom:2em}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:0 0;vertical-align:middle}.ui-spinner-button{height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-dialog{position:absolute;top:0;left:0;padding:0;width:300px;overflow:hidden;background-clip:padding-box;background-color:#fff;border-radius:6px;-moz-box-shadow:0 3px 7px rgba(0,0,0,.3);outline:medium none;z-index:1050}.ui-dialog .ui-dialog-titlebar{position:relative;border:0 0 0 1px solid;border-color:#fff;font-size:18px;text-decoration:none;-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;border-bottom:1px solid #ccc}.ui-dialog .ui-dialog-title{float:left;color:#404040;font-weight:700;padding:5px;text-overflow:ellipsis;overflow:hidden}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-20px 0 0 0;padding:1px;height:18px;font-size:20px;font-weight:700;line-height:13.5px;text-shadow:0 1px 0 #fff;filter:alpha(opacity=25);-khtml-opacity:.25;-moz-opacity:.25;opacity:.25;background:0 0;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px;text-indent:9999px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:1px;filter:alpha(opacity=90);-moz-opacity:.9;opacity:.9}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{border-width:1px 0 0;background-image:none;margin:.5em 0 0;background-color:#fff;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff;margin-bottom:0}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog-buttonpane .ui-dialog-buttonset .ui-button{color:#fff;background-color:#428bca;border-color:#357ebd}.ui-dialog-buttonpane .ui-dialog-buttonset .ui-button.ui-state-hover{color:#fff;background-color:#3276b1;border-color:#285e8e}.ui-dialog-buttonset .ui-button:not(:first-child){cursor:pointer;display:inline-block;color:#333;background-color:#fff;border:1px solid #ccc;-webkit-transition:.1s linear all;-moz-transition:.1s linear all;-o-transition:.1s linear all;transition:.1s linear all;overflow:visible}.ui-dialog-buttonset .ui-button:not(:first-child) .ui-state-hover{color:#333;background-color:#ebebeb;border-color:#adadad;text-decoration:none}.ui-dialog-buttonset .ui-button.ui-button-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.ui-dialog-buttonset .ui-button.ui-button-info.ui-state-hover{color:#fff;background-color:#39b3d7;border-color:#269abc}.ui-dialog-buttonset .ui-button.ui-button-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.ui-dialog-buttonset .ui-button.ui-button-success.ui-state-hover{color:#fff;background-color:#47a447;border-color:#398439}.ui-dialog-buttonset .ui-button.ui-button-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.ui-dialog-buttonset .ui-button.ui-button-warning.ui-state-hover{color:#fff;background-color:#ed9c28;border-color:#d58512}.ui-dialog-buttonset .ui-button.ui-button-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.ui-dialog-buttonset .ui-button.ui-button-danger.ui-state-hover{color:#fff;background-color:#d2322d;border-color:#ac2925}.ui-dialog-buttonset .ui-button.ui-button-inverse{color:#fff;background-color:#222;border-color:#080808}.ui-dialog-buttonset .ui-button.ui-button-inverse.ui-state-hover{color:#fff;background-color:#363636;border-color:#000}.ui-slider{position:relative;text-align:left}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:16px;height:18px;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0;color:#fff;background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.ui-slider-horizontal{height:10px;background:#D5D5D5;border:none}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em;background-color:#fff;border-color:#CCC}.ui-slider-horizontal .ui-slider-handle:focus{background-color:#fff;border-color:#357EBD}.ui-slider-horizontal .ui-slider-handle:hover{background-color:#fff;border-color:#285E8E;outline:0}.ui-slider-horizontal .ui-slider-handle:active{background-color:#428BCA;border-color:#3276B1}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-tabs .ui-tabs-nav{border:solid #ddd;border-width:0 0 1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background:0 0}.ui-tabs .ui-tabs-nav li{position:relative;top:0;float:left;margin-bottom:-1px;border:0;list-style:none;white-space:nowrap}.ui-tabs-nav .ui-state-default{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ui-tabs .ui-tabs-nav li a{float:left;-webkit-border-radius:4px 4px 0 0;padding:8px 12px;font-weight:400;text-decoration:none;outline:0;background:0 0}.ui-tabs .ui-tabs-nav li a:hover{border:1px solid #f5f5f5;border-bottom:1px solid #ddd;background-color:#f5f5f5}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{border:1px solid #ddd;border-bottom:1px solid #fff;background-color:#fff;color:#555}.ui-tabs .ui-tabs-nav li.ui-tabs-active:hover{background:#fff;cursor:text}.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-panel{display:block;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;background:0 0}.ui-tabs .ui-tabs-hide{display:none!important}.ui-tabs .ui-tabs-nav li{filter:none}.ui-tooltip{display:block;font-size:11px;opacity:.8;position:absolute;visibility:visible;z-index:1024;max-width:200px;background:#000;border:1px solid #000;color:#FFF;padding:3px 8px;text-align:center;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 #000;-moz-box-shadow:inset 0 1px 0 #000;box-shadow:inset 0 1px 0 #000;border-radius:4px}body .ui-tooltip{border-width:1px}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;border:0;font-weight:700;width:100%;padding:4px 0;background-color:#f5f5f5;color:gray}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-datepicker th{font-weight:700;color:gray}.ui-datepicker-today a:hover{background-color:gray;color:#fff}.ui-datepicker-today a{background-color:#BFBFBF;cursor:pointer;padding:0 4px;margin-bottom:0}.ui-datepicker td a{margin-bottom:0;border:0}.ui-datepicker td:hover{color:#fff}.ui-datepicker td .ui-state-default{border:0;background:0 0;margin-bottom:0;padding:5px;color:gray;text-align:center;filter:none}.ui-datepicker td .ui-state-highlight{color:#fff;background-color:#A90329;text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-datepicker td .ui-state-active{color:#333;background-color:#ebebeb;margin-bottom:0;font-size:normal;text-shadow:0;border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-datepicker td .ui-state-hover{color:#fff;background:#428bca;background-color:#428bca;text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#357ebd;border-color:rgba(0,0,0,.1)rgba(0,0,0,.1)rgba(0,0,0,.25);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.ui-progressbar{height:2em;margin-bottom:20px;border:0;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.ui-progressbar .ui-progressbar-value{margin:0;height:100%;color:#fff;background-color:#428BCA;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;transition:width .6s ease}.ui-progressbar .ui-progressbar-overlay{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-size:40px 40px;-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-toolbar{padding:7px 14px;margin:0 0 18px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.customfile-button{padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid #ccc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}div.wijmo-wijmenu{padding:0 20px;background-color:#222;background-repeat:repeat-x;background-image:-webkit-linear-gradient(top,#333,#222);background-image:-moz-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1);box-shadow:0 1px 3px rgba(0,0,0,.25),inset 0 -1px 0 rgba(0,0,0,.1)}.wijmo-wijmenu .ui-state-default .wijmo-wijmenu-text{color:#bfbfbf}.wijmo-wijmenu .ui-state-hover{background:#444;background:rgba(255,255,255,.05)}.wijmo-wijmenu .ui-state-hover .wijmo-wijmenu-text{color:#fff}div.wijmo-wijmenu .ui-widget-header h3{position:relative;margin-top:1px;padding:0}.wijmo-wijmenu h3 a{color:#fff;display:block;float:left;font-size:20px;font-weight:200;line-height:1;margin-left:-20px;margin-top:1px;padding:8px 20px 12px}.wijmo-wijmenu h3 a:hover{background-color:rgba(255,255,255,.05);color:#fff;text-decoration:none}.wijmo-wijmenu .ui-widget-header{border:0}.wijmo-wijmenu .wijmo-wijmenu-parent .wijmo-wijmenu-child{padding:.3em 0}div.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child{background:#333;border:0;margin:0;padding:6px 0;width:160px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2);-moz-box-shadow:0 2px 4px rgba(0,0,0,.2);box-shadow:0 2px 4px rgba(0,0,0,.2)}div.wijmo-wijmenu .wijmo-wijmenu-item{margin:0;border:0}.wijmo-wijmenu a.wijmo-wijmenu-link{margin:0;line-height:19px;padding:10px 10px 11px;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-link{display:block;float:none;padding:4px 15px;width:auto}div.wijmo-wijmenu .wijmo-wijmenu-child .wijmo-wijmenu-text{float:none}.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-child .ui-state-hover{background:#191919}.wijmo-wijmenu .wijmo-wijmenu-item .wijmo-wijmenu-separator{padding:5px 0;background-image:none;background-color:#222;border-top:1px solid #444;border-bottom:0;border-left:0;border-right:0}.wijmo-wijmenu .wijmo-wijmenu-item input{-moz-transition:none 0s ease 0s;background-color:rgba(255,255,255,.3);border:1px solid #111;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.1)inset,0 1px 0 rgba(255,255,255,.25);-moz-box-shadow:0 1px 2px rgba(0,0,0,.1)inset,0 1px 0 rgba(255,255,255,.25);box-shadow:0 1px 2px rgba(0,0,0,.1)inset,0 1px 0 rgba(255,255,255,.25);color:rgba(255,255,255,.75);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1;margin:5px 10px 0;padding:4px 9px;width:100px}.wijmo-wijmenu .wijmo-wijmenu-item input:hover{background-color:rgba(255,255,255,.5);color:#fff}.wijmo-wijmenu .wijmo-wijmenu-item input:focus{background-color:#fff;border:0 none;-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);-moz-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15);color:#404040;outline:0 none;padding:5px 10px;text-shadow:0 1px 0 #fff}.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default,.wijmo-wijmenu .ui-state-default{text-shadow:none}.wijmo-wijmenu .ui-state-default{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;color:#bfbfbf;filter:none}.ui-button-icon-primary.ui-icon[class*=" icon-"]:before,.ui-button-icon-primary.ui-icon[class^=icon-]:before,.ui-button-icon-secondary.ui-icon[class*=" icon-"]:before,.ui-button-icon-secondary.ui-icon[class^=icon-]:before{font-size:inherit;margin-left:7px!important;margin-left:5px;display:inline;text-decoration:inherit;color:inherit}.ui-state-default .ui-icon[class*=" icon-"]{background:0 0;margin-left:-12px}.flag{width:16px;height:11px;background:url(../img/flags/flags.png) no-repeat;margin-top:-.18em;display:inline-block}.flag.flag-ad{background-position:-16px 0}.flag.flag-ae{background-position:-32px 0}.flag.flag-af{background-position:-48px 0}.flag.flag-ag{background-position:-64px 0}.flag.flag-ai{background-position:-80px 0}.flag.flag-al{background-position:-96px 0}.flag.flag-am{background-position:-112px 0}.flag.flag-an{background-position:-128px 0}.flag.flag-ao{background-position:-144px 0}.flag.flag-ar{background-position:-160px 0}.flag.flag-as{background-position:-176px 0}.flag.flag-at{background-position:-192px 0}.flag.flag-au{background-position:-208px 0}.flag.flag-aw{background-position:-224px 0}.flag.flag-az{background-position:-240px 0}.flag.flag-ba{background-position:0 -11px}.flag.flag-bb{background-position:-16px -11px}.flag.flag-bd{background-position:-32px -11px}.flag.flag-be{background-position:-48px -11px}.flag.flag-bf{background-position:-64px -11px}.flag.flag-bg{background-position:-80px -11px}.flag.flag-bh{background-position:-96px -11px}.flag.flag-bi{background-position:-112px -11px}.flag.flag-bj{background-position:-128px -11px}.flag.flag-bm{background-position:-144px -11px}.flag.flag-bn{background-position:-160px -11px}.flag.flag-bo{background-position:-176px -11px}.flag.flag-br{background-position:-192px -11px}.flag.flag-bs{background-position:-208px -11px}.flag.flag-bt{background-position:-224px -11px}.flag.flag-bv{background-position:-240px -11px}.flag.flag-bw{background-position:0 -22px}.flag.flag-by{background-position:-16px -22px}.flag.flag-bz{background-position:-32px -22px}.flag.flag-ca{background-position:-48px -22px}.flag.flag-catalonia{background-position:-64px -22px}.flag.flag-cd{background-position:-80px -22px}.flag.flag-cf{background-position:-96px -22px}.flag.flag-cg{background-position:-112px -22px}.flag.flag-ch{background-position:-128px -22px}.flag.flag-ci{background-position:-144px -22px}.flag.flag-ck{background-position:-160px -22px}.flag.flag-cl{background-position:-176px -22px}.flag.flag-cm{background-position:-192px -22px}.flag.flag-cn{background-position:-208px -22px}.flag.flag-co{background-position:-224px -22px}.flag.flag-cr{background-position:-240px -22px}.flag.flag-cu{background-position:0 -33px}.flag.flag-cv{background-position:-16px -33px}.flag.flag-cw{background-position:-32px -33px}.flag.flag-cy{background-position:-48px -33px}.flag.flag-cz{background-position:-64px -33px}.flag.flag-de{background-position:-80px -33px}.flag.flag-dj{background-position:-96px -33px}.flag.flag-dk{background-position:-112px -33px}.flag.flag-dm{background-position:-128px -33px}.flag.flag-do{background-position:-144px -33px}.flag.flag-dz{background-position:-160px -33px}.flag.flag-ec{background-position:-176px -33px}.flag.flag-ee{background-position:-192px -33px}.flag.flag-eg{background-position:-208px -33px}.flag.flag-eh{background-position:-224px -33px}.flag.flag-england{background-position:-240px -33px}.flag.flag-er{background-position:0 -44px}.flag.flag-es{background-position:-16px -44px}.flag.flag-et{background-position:-32px -44px}.flag.flag-eu{background-position:-48px -44px}.flag.flag-fi{background-position:-64px -44px}.flag.flag-fj{background-position:-80px -44px}.flag.flag-fk{background-position:-96px -44px}.flag.flag-fm{background-position:-112px -44px}.flag.flag-fo{background-position:-128px -44px}.flag.flag-fr{background-position:-144px -44px}.flag.flag-ga{background-position:-160px -44px}.flag.flag-gb{background-position:-176px -44px}.flag.flag-gd{background-position:-192px -44px}.flag.flag-ge{background-position:-208px -44px}.flag.flag-gf{background-position:-224px -44px}.flag.flag-gg{background-position:-240px -44px}.flag.flag-gh{background-position:0 -55px}.flag.flag-gi{background-position:-16px -55px}.flag.flag-gl{background-position:-32px -55px}.flag.flag-gm{background-position:-48px -55px}.flag.flag-gn{background-position:-64px -55px}.flag.flag-gp{background-position:-80px -55px}.flag.flag-gq{background-position:-96px -55px}.flag.flag-gr{background-position:-112px -55px}.flag.flag-gs{background-position:-128px -55px}.flag.flag-gt{background-position:-144px -55px}.flag.flag-gu{background-position:-160px -55px}.flag.flag-gw{background-position:-176px -55px}.flag.flag-gy{background-position:-192px -55px}.flag.flag-hk{background-position:-208px -55px}.flag.flag-hm{background-position:-224px -55px}.flag.flag-hn{background-position:-240px -55px}.flag.flag-hr{background-position:0 -66px}.flag.flag-ht{background-position:-16px -66px}.flag.flag-hu{background-position:-32px -66px}.flag.flag-ic{background-position:-48px -66px}.flag.flag-id{background-position:-64px -66px}.flag.flag-ie{background-position:-80px -66px}.flag.flag-il{background-position:-96px -66px}.flag.flag-im{background-position:-112px -66px}.flag.flag-in{background-position:-128px -66px}.flag.flag-io{background-position:-144px -66px}.flag.flag-iq{background-position:-160px -66px}.flag.flag-ir{background-position:-176px -66px}.flag.flag-is{background-position:-192px -66px}.flag.flag-it{background-position:-208px -66px}.flag.flag-je{background-position:-224px -66px}.flag.flag-jm{background-position:-240px -66px}.flag.flag-jo{background-position:0 -77px}.flag.flag-jp{background-position:-16px -77px}.flag.flag-ke{background-position:-32px -77px}.flag.flag-kg{background-position:-48px -77px}.flag.flag-kh{background-position:-64px -77px}.flag.flag-ki{background-position:-80px -77px}.flag.flag-km{background-position:-96px -77px}.flag.flag-kn{background-position:-112px -77px}.flag.flag-kp{background-position:-128px -77px}.flag.flag-kr{background-position:-144px -77px}.flag.flag-kurdistan{background-position:-160px -77px}.flag.flag-kw{background-position:-176px -77px}.flag.flag-ky{background-position:-192px -77px}.flag.flag-kz{background-position:-208px -77px}.flag.flag-la{background-position:-224px -77px}.flag.flag-lb{background-position:-240px -77px}.flag.flag-lc{background-position:0 -88px}.flag.flag-li{background-position:-16px -88px}.flag.flag-lk{background-position:-32px -88px}.flag.flag-lr{background-position:-48px -88px}.flag.flag-ls{background-position:-64px -88px}.flag.flag-lt{background-position:-80px -88px}.flag.flag-lu{background-position:-96px -88px}.flag.flag-lv{background-position:-112px -88px}.flag.flag-ly{background-position:-128px -88px}.flag.flag-ma{background-position:-144px -88px}.flag.flag-mc{background-position:-160px -88px}.flag.flag-md{background-position:-176px -88px}.flag.flag-me{background-position:-192px -88px}.flag.flag-mg{background-position:-208px -88px}.flag.flag-mh{background-position:-224px -88px}.flag.flag-mk{background-position:-240px -88px}.flag.flag-ml{background-position:0 -99px}.flag.flag-mm{background-position:-16px -99px}.flag.flag-mn{background-position:-32px -99px}.flag.flag-mo{background-position:-48px -99px}.flag.flag-mp{background-position:-64px -99px}.flag.flag-mq{background-position:-80px -99px}.flag.flag-mr{background-position:-96px -99px}.flag.flag-ms{background-position:-112px -99px}.flag.flag-mt{background-position:-128px -99px}.flag.flag-mu{background-position:-144px -99px}.flag.flag-mv{background-position:-160px -99px}.flag.flag-mw{background-position:-176px -99px}.flag.flag-mx{background-position:-192px -99px}.flag.flag-my{background-position:-208px -99px}.flag.flag-mz{background-position:-224px -99px}.flag.flag-na{background-position:-240px -99px}.flag.flag-nc{background-position:0 -110px}.flag.flag-ne{background-position:-16px -110px}.flag.flag-nf{background-position:-32px -110px}.flag.flag-ng{background-position:-48px -110px}.flag.flag-ni{background-position:-64px -110px}.flag.flag-nl{background-position:-80px -110px}.flag.flag-no{background-position:-96px -110px}.flag.flag-np{background-position:-112px -110px}.flag.flag-nr{background-position:-128px -110px}.flag.flag-nu{background-position:-144px -110px}.flag.flag-nz{background-position:-160px -110px}.flag.flag-om{background-position:-176px -110px}.flag.flag-pa{background-position:-192px -110px}.flag.flag-pe{background-position:-208px -110px}.flag.flag-pf{background-position:-224px -110px}.flag.flag-pg{background-position:-240px -110px}.flag.flag-ph{background-position:0 -121px}.flag.flag-pk{background-position:-16px -121px}.flag.flag-pl{background-position:-32px -121px}.flag.flag-pm{background-position:-48px -121px}.flag.flag-pn{background-position:-64px -121px}.flag.flag-pr{background-position:-80px -121px}.flag.flag-ps{background-position:-96px -121px}.flag.flag-pt{background-position:-112px -121px}.flag.flag-pw{background-position:-128px -121px}.flag.flag-py{background-position:-144px -121px}.flag.flag-qa{background-position:-160px -121px}.flag.flag-re{background-position:-176px -121px}.flag.flag-ro{background-position:-192px -121px}.flag.flag-rs{background-position:-208px -121px}.flag.flag-ru{background-position:-224px -121px}.flag.flag-rw{background-position:-240px -121px}.flag.flag-sa{background-position:0 -132px}.flag.flag-sb{background-position:-16px -132px}.flag.flag-sc{background-position:-32px -132px}.flag.flag-scotland{background-position:-48px -132px}.flag.flag-sd{background-position:-64px -132px}.flag.flag-se{background-position:-80px -132px}.flag.flag-sg{background-position:-96px -132px}.flag.flag-sh{background-position:-112px -132px}.flag.flag-si{background-position:-128px -132px}.flag.flag-sk{background-position:-144px -132px}.flag.flag-sl{background-position:-160px -132px}.flag.flag-sm{background-position:-176px -132px}.flag.flag-sn{background-position:-192px -132px}.flag.flag-so{background-position:-208px -132px}.flag.flag-somaliland{background-position:-224px -132px}.flag.flag-sr{background-position:-240px -132px}.flag.flag-ss{background-position:0 -143px}.flag.flag-st{background-position:-16px -143px}.flag.flag-sv{background-position:-32px -143px}.flag.flag-sx{background-position:-48px -143px}.flag.flag-sy{background-position:-64px -143px}.flag.flag-sz{background-position:-80px -143px}.flag.flag-tc{background-position:-96px -143px}.flag.flag-td{background-position:-112px -143px}.flag.flag-tf{background-position:-128px -143px}.flag.flag-tg{background-position:-144px -143px}.flag.flag-th{background-position:-160px -143px}.flag.flag-tj{background-position:-176px -143px}.flag.flag-tk{background-position:-192px -143px}.flag.flag-tl{background-position:-208px -143px}.flag.flag-tm{background-position:-224px -143px}.flag.flag-tn{background-position:-240px -143px}.flag.flag-to{background-position:0 -154px}.flag.flag-tr{background-position:-16px -154px}.flag.flag-tt{background-position:-32px -154px}.flag.flag-tv{background-position:-48px -154px}.flag.flag-tw{background-position:-64px -154px}.flag.flag-tz{background-position:-80px -154px}.flag.flag-ua{background-position:-96px -154px}.flag.flag-ug{background-position:-112px -154px}.flag.flag-um{background-position:-128px -154px}.flag.flag-us{background-position:-144px -154px}.flag.flag-uy{background-position:-160px -154px}.flag.flag-uz{background-position:-176px -154px}.flag.flag-va{background-position:-192px -154px}.flag.flag-vc{background-position:-208px -154px}.flag.flag-ve{background-position:-224px -154px}.flag.flag-vg{background-position:-240px -154px}.flag.flag-vi{background-position:0 -165px}.flag.flag-vn{background-position:-16px -165px}.flag.flag-vu{background-position:-32px -165px}.flag.flag-wales{background-position:-48px -165px}.flag.flag-wf{background-position:-64px -165px}.flag.flag-ws{background-position:-80px -165px}.flag.flag-ye{background-position:-96px -165px}.flag.flag-yt{background-position:-112px -165px}.flag.flag-za{background-position:-128px -165px}.flag.flag-zanzibar{background-position:-144px -165px}.flag.flag-zm{background-position:-160px -165px}.flag.flag-zw{background-position:-176px -165px}:-webkit-full-screen #fullscreen>:first-child>a{background-color:#e8e8e8;background-image:-moz-linear-gradient(top,#5a5a5a 0,#686868 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#5a5a5a),color-stop(100%,#686868));background-image:-webkit-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-o-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-ms-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:linear-gradient(to bottom,#5a5a5a 0,#686868 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5A5A5A', endColorstr='#686868', GradientType=0);-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);color:#fff;border-color:#494949}:-moz-full-screen #fullscreen>:first-child>a{background-color:#e8e8e8;background-image:-moz-linear-gradient(top,#5a5a5a 0,#686868 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#5a5a5a),color-stop(100%,#686868));background-image:-webkit-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-o-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-ms-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:linear-gradient(to bottom,#5a5a5a 0,#686868 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5A5A5A', endColorstr='#686868', GradientType=0);-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);color:#fff;border-color:#494949}:-ms-fullscreen #fullscreen>:first-child>a{background-color:#e8e8e8;background-image:-moz-linear-gradient(top,#5a5a5a 0,#686868 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#5a5a5a),color-stop(100%,#686868));background-image:-webkit-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-o-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-ms-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:linear-gradient(to bottom,#5a5a5a 0,#686868 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5A5A5A', endColorstr='#686868', GradientType=0);-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);color:#fff;border-color:#494949}:full-screen #fullscreen>:first-child>a{background-color:#e8e8e8;background-image:-moz-linear-gradient(top,#5a5a5a 0,#686868 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#5a5a5a),color-stop(100%,#686868));background-image:-webkit-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-o-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-ms-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:linear-gradient(to bottom,#5a5a5a 0,#686868 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5A5A5A', endColorstr='#686868', GradientType=0);-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);color:#fff;border-color:#494949}:fullscreen #fullscreen>:first-child>a{background-color:#e8e8e8;background-image:-moz-linear-gradient(top,#5a5a5a 0,#686868 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#5a5a5a),color-stop(100%,#686868));background-image:-webkit-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-o-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-ms-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:linear-gradient(to bottom,#5a5a5a 0,#686868 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5A5A5A', endColorstr='#686868', GradientType=0);-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);color:#fff;border-color:#494949}:-webkit-full-screen video{width:100%;height:100%}.ui-widget-overlay{background:#AAA;height:100%;z-index:949!important;position:fixed;top:0;left:0}.slider{margin-top:0;margin-bottom:30px}.slider.slider-vertical{margin-bottom:0;margin-right:5px}.ui-menu{width:155px;padding:2px;-webkit-box-shadow:0 2px 4px rgba(30,30,100,.25);-moz-box-shadow:0 2px 4px rgba(30,30,100,.25);box-shadow:0 2px 4px rgba(30,30,100,.25);background:#fff;border:1px solid rgba(0,0,0,.2);z-index:1}.ui-menu .ui-state-disabled{margin:.4em 0 .2em!important;background:none!important;color:#999!important;font-weight:400!important;cursor:default}.ui-icon-carat-1-e:before{content:"\f105";font-family:FontAwesome;font-size:14px;display:inline}.ui-menu .ui-menu-item a .ui-menu-icon{width:auto;height:auto;top:0;left:auto;right:auto;bottom:auto;text-indent:0}.ui-tabs .ui-tabs-nav li a{border-radius:0;-moz-border-radius:0;background-color:#F5F5F5;border:1px solid #F5F5F5;border-bottom:1px solid #ddd;color:#838383}.ui-tabs .ui-tabs-nav li{margin-right:3px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a{font-weight:700;border-top-width:0!important;margin-top:1px!important;-webkit-box-shadow:0 -2px 0 #57889c;-moz-box-shadow:0 -2px 0 #57889c;box-shadow:0 -2px 0 #57889c}.ui-tabs .ui-tabs-panel{border:1px solid #ddd;margin:0;padding:10px 13px;border-top:none}.ui-tabs .ui-tabs-nav{margin-bottom:0}.ui-accordion .ui-accordion-header{background-color:#fbfbfb;font-size:15px;padding:10px 15px 10px 36px!important}.ui-accordion .ui-accordion-content,.ui-accordion .ui-accordion-header{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}.ui-accordion .ui-accordion-content{padding:15px}.ui-accordion-header-active+.ui-accordion-content{border-top:1px solid #ddd}.ui-accordion .ui-accordion-header{margin-top:-2px}.ui-accordion .ui-accordion-header,.ui-accordion-content{border-color:#ddd!important}.ui-accordion-header-icon{text-indent:0!important;background-image:none!important;text-align:center;line-height:normal;left:12px!important;margin-top:-6px!important;font-size:14px!important}.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{text-align:center;margin-top:2px}.ui-datepicker-next>:first-child,.ui-datepicker-prev>:first-child{text-indent:0!important}.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{background:none!important}.noUi-target *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-touch-callout:none;-ms-touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;cursor:default}.noUi-base{width:100%;height:14px;position:relative;max-width:100%;max-height:100%;border:1px solid #bfbfbf;z-index:1}.noUi-origin-lower{background:#72a8d7}.noUi-handle{background:#858585;height:30px;width:16px;border:1px solid #fff;margin:-8px 0 0 -8px;cursor:default}.noUi-handle:hover{background:#6c6c6c}.noUi-active{cursor:default;box-shadow:rgba(0,0,0,.1)1px 1px 1px 0;background:#686868;height:32px;width:18px;margin:-9px 0 0 -8px;border:none}.noUi-active:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;content:"";display:block;height:100%;border:1px solid #ddd}.noUi-connect{background:#3276b1}.noUi-background{background:#eee;border:none}.noUi-origin{position:absolute;right:0;top:0;bottom:0;z-index:0}.noUi-origin-upper{background:inherit!important}.noUi-z-index{z-index:10}.noUi-vertical{width:10px;height:100%}.noUi-vertical .noUi-origin{bottom:0;left:0}.noUi-vertical .noUi-handle{margin:-8px 0 0 -3px}.noUi-target[disabled] .noUi-base{background:#999}.noUi-target[disabled] .noUi-connect{background:#BBB}.noUi-state-tap .noUi-origin{-webkit-transition:left .3s,top .3s;transition:left .3s,top .3s}.ui-spinner-input{margin:0!important;height:30px;padding:6px 24px 6px 12px}.ui-spinner-input.spinner-left{padding:6px 12px 6px 24px}.ui-spinner{width:100%}.ui-spinner-input.spinner-left+.ui-spinner-button,.ui-spinner-input.spinner-left+.ui-spinner-button+.ui-spinner-button{right:auto;left:0}.ui-spinner-down,.ui-spinner-up{background:#739e73;border-radius:0}.ui-spinner-up:active,.ui-spinner-up:focus,.ui-spinner-up:hover{background:#5b835b}.ui-spinner-down:active,.ui-spinner-down:focus,.ui-spinner-down:hover{background:#77021d}.ui-spinner-down{background:#c2032f}.ui-spinner-down:before,.ui-spinner-up:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f067";color:#fff;font-size:14px;margin-top:1px}.ui-spinner-down:before{content:"\f068"}.ui-spinner-down>:first-child,.ui-spinner-up>:first-child{display:none}.ui-spinner-button{width:19px}.ui-spinner-input.spinner-both{padding:6px 30px}.ui-spinner-input.spinner-both+.ui-spinner-button+.ui-spinner-button{left:0;right:auto}.ui-spinner-input.spinner-both+.ui-spinner-button,.ui-spinner-input.spinner-both+.ui-spinner-button+.ui-spinner-button{height:30px;width:25px}.ui-spinner-input.spinner-both+.ui-spinner-up+.ui-spinner-down:before,.ui-spinner-input.spinner-both+.ui-spinner-up:before{margin-top:8px}.ui-dialog{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5);border:1px solid #999;border:1px solid rgba(0,0,0,.2)}.widget-header>:first-child{margin:13px 0}.ui-dialog .ui-dialog-titlebar{padding:0 10px;background:#fff;border-bottom-color:#eee}.ui-dialog .ui-dialog-title{margin:0}.ui-dialog .ui-dialog-titlebar-close{margin-top:-16px;margin-right:4px}.ui-dialog-titlebar-close:before{content:"\f00d";font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:13px}.ui-dialog .ui-dialog-buttonpane button{margin:0 .4em 0 0}.ui-dialog .ui-dialog-buttonpane{margin-top:13px;padding:19px 15px 20px;text-align:right;border-top:1px solid #eee}.ui-autocomplete{z-index:905!important}.the-price{background-color:rgba(220,220,220,.17);box-shadow:0 1px 0 #dcdcdc,inset 0 1px 0 #fff;padding:20px;margin:0}.the-price h1{line-height:1em;padding:0;margin:0}.subscript{font-size:21px;color:#999}.ribbon{position:absolute;right:9px;top:-4px}.pricing-big{border:none!important}.pricing-big .panel-heading{border-radius:5px 5px 0 0}.pricing-big .panel-title{text-transform:capitalize;font-size:18px;padding:20px 0;text-align:center;border-radius:5px 5px 0 0;margin:0;font-weight:700}.pricing-big .the-price{padding:20px 0;background:#333;text-align:center;font-size:24px;font-weight:700;color:#FFF;box-shadow:none!important;-moz-box-shadow:none!important}.pricing-big .subscript{font-size:18px;color:#999;margin-left:5px}.price-features{background:#FAFAFA;padding:20px 15px;min-height:230px;font-size:13.5px}.price-features li+li{margin-top:10px}.pricing-big .panel-footer{border-radius:0 0 5px 5px}.pricing-big .panel-footer .btn{padding:15px 0;border-radius:3px;font-weight:700;font-size:14px}.pricing-big .panel-footer .btn span{font-weight:400;font-style:italic}.pricing-big .panel-footer{background-color:#F2F2F2!important}.pricing-big .panel-footer>div{padding:15px 0 10px;display:block;font-size:13px}.pricing-big table{background:#FAFAFA;padding:20px 15px;height:230px;text-align:left}.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#3276b1;position:fixed;z-index:2000;top:0;left:0;height:2px;-webkit-transition:width 1s;-moz-transition:width 1s;-o-transition:width 1s;transition:width 1s}.pace .pace-progress-inner{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-moz-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);-o-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translate(0px,-4px)}.pace .pace-activity{display:block;position:fixed;z-index:2000;top:63px;right:40px;width:14px;height:14px;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:10px;-webkit-animation:pace-spinner 400ms linear infinite;-moz-animation:pace-spinner 400ms linear infinite;-ms-animation:pace-spinner 400ms linear infinite;-o-animation:pace-spinner 400ms linear infinite;animation:pace-spinner 400ms linear infinite}@-webkit-keyframes pace-spinner{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes pace-spinner{0%{-moz-transform:rotate(0deg);transform:rotate(0deg)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-o-keyframes pace-spinner{0%{-o-transform:rotate(0deg);transform:rotate(0deg)}100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes pace-spinner{0%{-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pace-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#chat-container *,#chat-container :after,#chat-container :before{box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}#chat-container input[type=text]{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#chat-container{position:absolute;width:250px;height:270px;z-index:2;border-left:1px solid #CDCECF;right:-251px;top:0;background:#fff;transition-duration:.25s;-webkit-transition-duration:.25s;-moz-transition-duration:.25s;-o-transition-duration:.25s;-ms-transition-duration:.25s}#chat-container:hover,#chat-container:hover .chat-list-open-close{border-color:#A7A7A7}#chat-container.open{right:0;top:0}#chat-container .chat-list-open-close{display:block;width:25px;height:25px;border:1px solid #CDCECF;border-right:1px solid #f2f4f8!important;position:absolute;left:-32px;top:7%;border-radius:50% 0 0 50%;padding:3px 1px 3px 5px;font-size:21px;line-height:22px;cursor:pointer;color:#868686;box-shadow:inset 0 .2em 0 rgba(0,0,0,.05);-moz-box-shadow:inset 0 .2em 0 rgba(0,0,0,.05);background:#f2f4f8;text-align:center}#chat-container .chat-list-open-close b{position:absolute;right:0;background:#ed1c24;line-height:9px;height:10px;width:10px;top:3px;border:1px solid #FFF;border-radius:3px;font-size:9px;text-align:center;vertical-align:middle;color:#fff;font-weight:400}#chat-container.open .chat-list-open-close i:before{content:"\f00d"!important}#chat-container.open .chat-list-open-close b{display:none}#chat-container .chat-list-body{height:217px;overflow-y:scroll;overflow-x:hidden;display:block;padding:0;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;background:#f2f4f8}#chat-container #chat-users{list-style:none;margin:10px 0;padding:0}#chat-container #chat-users li{margin-bottom:3px;margin-left:5px}#chat-container #chat-users li a{display:block;font-size:13px;color:#3d3d3d;text-decoration:none!important;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;padding:3px 8px 3px 3px;line-height:33px;vertical-align:middle}#chat-container #chat-users li a:hover{background:#e0e4ee}#chat-container #chat-users li a img{width:33px;height:auto;margin-right:10px}#chat-container #chat-users li a i{color:#ACACAC;font-size:8px;line-height:34px;font-style:normal}#chat-container #chat-users li a i.last-online{font-size:12px;letter-spacing:-1px}#chat-container .chat-list-footer{overflow:hidden;border-top:1px solid #CCC;padding:10px;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}#chat-container .chat-list-footer input[type=text]{border:1px solid #bababa!important}#chat-container .control-group{padding:0}.chat-body{background:#FAFAFA;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod…EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);background:-moz-linear-gradient(top,#fafafa 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#fafafa),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#fafafa 0,#fff 100%);background:-o-linear-gradient(top,#fafafa 0,#fff 100%);background:-ms-linear-gradient(top,#fafafa 0,#fff 100%);background:linear-gradient(to bottom,#f5fcff 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa', endColorstr='#ffffff', GradientType=0);box-shadow:inset 2px 2px 5px rgba(0,0,0,.04);-moz-box-shadow:inset -2px -2px 5px rgba(0,0,0,.04);display:block;height:270px;overflow-y:scroll;overflow-x:hidden;padding:10px;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;border:1px solid #fff;border-top:none}.chat-body ul{margin:0;padding:0}.chat-body li.message{display:block;position:relative;margin:20px 20px 0}.chat-body li:first-child{margin-top:10px}.chat-body li.message img{display:inline-block;border-left:4px solid #fff;position:absolute}.chat-body li.message img.online{border-left-color:#00a300}.chat-body li.message img.offline{border-left-color:#ddd}.chat-body li.message img.busy{border-left-color:#A90329}.chat-body li.message img.away{border-left-color:#ffc40d}.chat-body li.message .message-text{display:inline-block;vertical-align:top;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;padding:0;margin-left:65px;line-height:normal}.chat-body li.message .message-text time{position:absolute;top:1px;right:0;font-size:10px;line-height:10px;color:#AFAFAF}.chat-body li.message .message-text .chat-file:nth-child(3){margin-top:15px}.chat-body li.message .message-text .chat-file{display:block;margin:3px 0;padding:4px;border:1px dotted #ddd;background:rgba(0,0,0,.05);border-radius:4px;-webkit-border-radius:4px;-moz-border-radius:4px;text-align:right;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.chat-body li.message .message-text .chat-file.row-fluid [class*=span]{min-height:10px!important}.chat-body li.message .message-text .chat-file b{font-style:italic;white-space:nowrap;width:250px;overflow:hidden;text-overflow:ellipsis;text-align:left}.chat-body li.message .message-text a.username{display:block;font-weight:700;margin-bottom:4px;vertical-align:top;line-height:14px;font-size:14px;letter-spacing:-1px;text-decoration:none!important}.profile-message{background:none!important;height:auto!important;box-shadow:none!important;-moz-box-shadow:none!important;-webkit-box-shadow:none!important;overflow:hidden}.profile-message li.message.message-reply{margin-left:85px!important;background:#F7F7F7;padding:10px;margin:3px 0 0 20px}.profile-message li.message.message-reply img{width:35px!important}.profile-message li.message.message-reply .message-text{margin-left:45px!important}.profile-message .wall-comment-reply{margin-left:85px;margin-bottom:20px}.chat-footer{border-top:1px solid rgba(0,0,0,.1);background:rgba(248,248,248,.9);padding:0 10px 15px;position:relative;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.textarea-div{background-color:#FFF;border:1px solid #CCC;border-bottom:none;margin:10px 0 0}.typearea{cursor:text;overflow-x:hidden;overflow-y:auto;max-height:90px;padding:5px 25px 5px 5px;position:relative;border-bottom:1px solid #EEE}.typearea textarea{width:100%;border-color:transparent!important;box-sizing:border-box;box-shadow:none;-moz-box-shadow:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-webkit-box-shadow:none;overflow:hidden;padding:0;margin:0;-webkit-transition:height .2s;-moz-transition:height .2s;transition:height .2s;outline:0;resize:none;min-height:61px}textarea.clone{position:absolute;visibility:hidden}.textarea-controls{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:5px;display:block;background-color:#FFF;border:1px solid #CCC;border-top:none;height:43px;line-height:33px;overflow:hidden}.textarea-controls>label{margin:3px 10px 0}.textarea-controls .smart-form .checkbox{padding-left:22px!important}@media (min-width:768px) and (max-width:880px){.chat-body li.message .message-text .chat-file b{width:150px}}@media only screen and (min-width:320px) and (max-width:479px){.chat-body li.message .message-text .chat-file b{width:150px}}@media (max-width:480px){.chat-body li.message .message-text .chat-file b{width:150px}}.smart-form *,.smart-form :after,.smart-form :before{margin:0;padding:0;box-sizing:content-box;-moz-box-sizing:content-box}.smart-form .btn{box-sizing:border-box;-moz-box-sizing:border-box}.smart-form .checkbox+.checkbox,.smart-form .radio+.radio{margin-top:0}.smart-form footer .btn{float:right;height:31px;margin:10px 0 0 5px;padding:0 22px;font:300 15px/29px 'Open Sans',Helvetica,Arial,sans-serif;cursor:pointer}.smart-form legend{padding-top:15px}.smart-form{margin:0;outline:0;color:#666;position:relative}.smart-form header{display:block;padding:8px 0;border-bottom:1px dashed rgba(0,0,0,.2);background:#fff;font-size:16px;font-weight:300;color:#232323;margin:10px 14px 0}.smart-form fieldset{display:block;padding:25px 14px 5px;border:none;background:rgba(255,255,255,.9);position:relative}.smart-form fieldset+fieldset{border-top:1px solid rgba(0,0,0,.1)}.smart-form section{margin-bottom:15px;position:relative}.smart-form footer{display:block;padding:7px 14px 15px;border-top:1px solid rgba(0,0,0,.1);background:rgba(248,248,248,.9)}.smart-form footer:after{content:'';display:table;clear:both}.smart-form .label{display:block;margin-bottom:6px;line-height:19px;font-weight:400;font-size:13px;color:#333;text-align:left}.smart-form .label.col{margin:0;padding-top:7px}.note,.smart-form .note{margin-top:6px;padding:0 1px;font-size:11px;line-height:15px;color:#999}.smart-form .note a{font-size:13px}.smart-form .button,.smart-form .checkbox,.smart-form .input,.smart-form .radio,.smart-form .select,.smart-form .textarea,.smart-form .toggle{position:relative;display:block;font-weight:400}.smart-form .input input,.smart-form .select select,.smart-form .textarea textarea{display:block;box-sizing:border-box;-moz-box-sizing:border-box;width:100%;height:32px;padding:8px 10px;outline:0;border-width:1px;border-style:solid;border-radius:0;background:#fff;font:13px/16px 'Open Sans',Helvetica,Arial,sans-serif;color:#404040;appearance:normal;-moz-appearance:none;-webkit-appearance:none}.smart-form .input-file .button{position:absolute;top:4px;right:4px;float:none;height:22px;margin:0;padding:0 14px;font-size:13px;line-height:22px}.smart-form .input-file .button:hover{box-shadow:none}.smart-form .input-file .button input{position:absolute;top:0;right:0;padding:0;font-size:30px;cursor:pointer;opacity:0}.smart-form .select i{position:absolute;top:10px;right:11px;width:5px;height:11px;background:#fff;box-shadow:0 0 0 9px #fff}.smart-form .select i:after,.smart-form .select i:before{content:'';position:absolute;right:0;border-right:4px solid transparent;border-left:4px solid transparent}.smart-form .select i:after{bottom:0;border-top:4px solid #404040}.smart-form .select i:before{top:0;border-bottom:4px solid #404040}.smart-form .select-multiple select{height:auto}.smart-form .textarea textarea{height:auto;resize:none}.smart-form .textarea-resizable textarea{resize:vertical}.smart-form .textarea-expandable textarea{height:31px}.smart-form .textarea-expandable textarea:focus{height:auto}.smart-form .checkbox,.smart-form .radio{margin-bottom:4px;padding-left:25px;line-height:25px;color:#404040;cursor:pointer;font-size:13px}.smart-form .checkbox:last-child,.smart-form .radio:last-child{margin-bottom:0}.smart-form .checkbox input,.smart-form .radio input{position:absolute;left:-9999px}.smart-form .checkbox i,.smart-form .radio i{position:absolute;top:3px;left:0;display:block;width:17px;height:17px;outline:0;border-width:1px;border-style:solid;background:#FFF}.smart-form .radio i{border-radius:50%}.smart-form .checkbox input+i:after,.smart-form .radio input+i:after{position:absolute;opacity:0;transition:opacity .1s;-o-transition:opacity .1s;-ms-transition:opacity .1s;-moz-transition:opacity .1s;-webkit-transition:opacity .1s}.smart-form .radio input+i:after{content:'';top:4px;left:4px;width:9px;height:9px;border-radius:50%}.smart-form .checkbox input+i:after{content:'\f00c';top:-1px;left:1px;width:15px;height:15px;font:400 16px/19px FontAwesome;text-align:center}.smart-form .checkbox input:checked:hover+i:after{content:'\f00d'}.smart-form .checkbox input:checked:disabled:hover+i:after{content:'\f00c'}.smart-form .checkbox input:checked+i:after,.smart-form .radio input:checked+i:after{opacity:1}.smart-form .inline-group{margin:0 -15px -4px 0}.smart-form .inline-group:after{content:'';display:table;clear:both}.smart-form .inline-group .checkbox,.smart-form .inline-group .radio{float:left;margin-right:30px}.smart-form .inline-group .checkbox:last-child,.smart-form .inline-group .radio:last-child{margin-bottom:4px}.smart-form .toggle{margin-bottom:4px;padding-right:61px;font-size:15px;line-height:25px;color:#404040;cursor:pointer}.smart-form .toggle:last-child{margin-bottom:0}.smart-form .toggle input{position:absolute;left:-9999px}.smart-form .toggle i{content:'';position:absolute;top:4px;right:0;display:block;width:49px;height:17px;border-width:1px;border-style:solid;border-radius:12px;background:#fff}.smart-form .toggle i:after{content:attr(data-swchoff-text);position:absolute;top:2px;right:8px;left:8px;font-style:normal;font-size:9px;line-height:13px;font-weight:700;text-align:left;color:#5f5f5f}.smart-form .toggle i:before{content:'';position:absolute;z-index:1;top:4px;right:4px;display:block;width:9px;height:9px;border-radius:50%;opacity:1;transition:right .2s;-o-transition:right .2s;-ms-transition:right .2s;-moz-transition:right .2s;-webkit-transition:right .2s}.smart-form .toggle input:checked+i:after{content:attr(data-swchon-text);text-align:right}.smart-form .toggle input:checked+i:before{right:36px}.smart-form .rating{margin-bottom:4px;font-size:13px;line-height:25px;color:#404040}.smart-form .rating:last-child{margin-bottom:0}.smart-form .rating input{position:absolute;left:-9999px}.smart-form .rating label{display:block;float:right;height:17px;margin-top:5px;padding:0 2px;font-size:17px;line-height:17px;cursor:pointer}.smart-form .button{float:right;height:31px;overflow:hidden;margin:10px 0 0 5px;padding:0 25px;outline:0;border:0;font:300 15px/31px 'Open Sans',Helvetica,Arial,sans-serif;text-decoration:none;color:#fff;cursor:pointer}.smart-form .icon-append,.smart-form .icon-prepend{position:absolute;top:5px;width:22px;height:22px;font-size:14px;line-height:22px;text-align:center}.smart-form .icon-append{right:5px;padding-left:3px;border-left-width:1px;border-left-style:solid}.smart-form .icon-prepend{left:5px;padding-right:3px;border-right-width:1px;border-right-style:solid}.smart-form .input .icon-prepend+input,.smart-form .textarea .icon-prepend+textarea{padding-left:37px}.smart-form .input .icon-append+input,.smart-form .textarea .icon-append+textarea{padding-right:37px}.smart-form .input .icon-prepend+.icon-append+input,.smart-form .textarea .icon-prepend+.icon-append+textarea{padding-left:37px}.smart-form .row{margin:0 -15px}.smart-form .row:after{content:'';display:table;clear:both}.smart-form .col{float:left;min-height:1px;padding-right:15px;padding-left:15px;box-sizing:border-box;-moz-box-sizing:border-box}.smart-form .col-1{width:8.33%}.smart-form .col-2{width:16.66%}.smart-form .col-3{width:25%}.smart-form .col-4{width:33.33%}.smart-form .col-5{width:41.66%}.smart-form .col-6{width:50%}.smart-form .col-8{width:66.67%}.smart-form .col-9{width:75%}.smart-form .col-10{width:83.33%}@media screen and (max-width:600px){.smart-form .col{float:none;width:100%}}.smart-form .select select{padding:5px}.smart-form .tooltip{position:absolute;z-index:99999;left:-9999px;padding:2px 8px 3px;font-size:11px;line-height:16px;font-weight:400;background:rgba(0,0,0,.9);color:#fff;opacity:0;transition:margin .3s,opacity .3s;-o-transition:margin .3s,opacity .3s;-ms-transition:margin .3s,opacity .3s;-moz-transition:margin .3s,opacity .3s;-webkit-transition:margin .3s,opacity .3s}.smart-form .tooltip:after{content:'';position:absolute}.smart-form .input input:focus+.tooltip,.smart-form .textarea textarea:focus+.tooltip{opacity:1}.smart-form .tooltip-top-right{bottom:100%;margin-bottom:15px}.smart-form .tooltip-top-right:after{top:100%;right:11px;border-top:4px solid rgba(0,0,0,.9);border-right:4px solid transparent;border-left:4px solid transparent}.smart-form .input input:focus+.tooltip-top-right,.smart-form .textarea textarea:focus+.tooltip-top-right{right:0;left:auto;margin-bottom:5px}.smart-form .tooltip-top-left{bottom:100%;margin-bottom:15px}.smart-form .tooltip-top-left:after{top:100%;left:11px;border-top:4px solid rgba(0,0,0,.9);border-right:4px solid transparent;border-left:4px solid transparent}.smart-form .input input:focus+.tooltip-top-left,.smart-form .textarea textarea:focus+.tooltip-top-left{right:auto;left:0;margin-bottom:5px}.smart-form .tooltip-right{top:4px;white-space:nowrap;margin-left:15px}.smart-form .tooltip-right:after{top:6px;right:100%;border-top:4px solid transparent;border-right:4px solid rgba(0,0,0,.9);border-bottom:4px solid transparent}.smart-form .input input:focus+.tooltip-right,.smart-form .textarea textarea:focus+.tooltip-right{left:100%;margin-left:5px}.smart-form .tooltip-left{top:4px;white-space:nowrap;margin-right:15px}.smart-form .tooltip-left:after{top:6px;left:100%;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid rgba(0,0,0,.9)}.smart-form .input input:focus+.tooltip-left,.smart-form .textarea textarea:focus+.tooltip-left{right:100%;left:auto;margin-right:5px}.smart-form .tooltip-bottom-right{top:100%;margin-top:15px}.smart-form .tooltip-bottom-right:after{bottom:100%;right:11px;border-right:4px solid transparent;border-bottom:4px solid rgba(0,0,0,.9);border-left:4px solid transparent}.smart-form .input input:focus+.tooltip-bottom-right,.smart-form .textarea textarea:focus+.tooltip-bottom-right{right:0;left:auto;margin-top:5px}.smart-form .tooltip-bottom-left{top:100%;margin-top:15px}.smart-form .tooltip-bottom-left:after{bottom:100%;left:11px;border-right:4px solid transparent;border-bottom:4px solid rgba(0,0,0,.9);border-left:4px solid transparent}.smart-form .input input:focus+.tooltip-bottom-left,.smart-form .textarea textarea:focus+.tooltip-bottom-left{right:auto;left:0;margin-top:5px}.smart-form .checkbox i,.smart-form .icon-append,.smart-form .icon-prepend,.smart-form .input input,.smart-form .radio i,.smart-form .select select,.smart-form .textarea textarea,.smart-form .toggle i{border-color:#BDBDBD;transition:border-color .3s;-o-transition:border-color .3s;-ms-transition:border-color .3s;-moz-transition:border-color .3s;-webkit-transition:border-color .3s}.smart-form .toggle i:before{background-color:#3276B1}.smart-form .rating label{color:#ccc;transition:color .3s;-o-transition:color .3s;-ms-transition:color .3s;-moz-transition:color .3s;-webkit-transition:color .3s}.smart-form .button{background-color:#3276B1;opacity:.8;transition:opacity .2s;-o-transition:opacity .2s;-ms-transition:opacity .2s;-moz-transition:opacity .2s;-webkit-transition:opacity .2s}.smart-form .button.button-secondary{background-color:#b3b3b3}.smart-form .icon-append,.smart-form .icon-prepend{color:#A2A2A2}.smart-form .checkbox:hover i,.smart-form .input:hover input,.smart-form .radio:hover i,.smart-form .select:hover select,.smart-form .textarea:hover textarea,.smart-form .toggle:hover i{border-color:#5D98CC}.smart-form .rating input+label:hover,.smart-form .rating input+label:hover~label{color:#3276B1}.smart-form .button:hover{opacity:1}.smart-form .checkbox:hover i,.smart-form .radio:hover i,.smart-form .toggle:hover i{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.smart-form .checkbox:active i,.smart-form .radio:active i,.smart-form .toggle:active i{background:#F0F0F0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.1);box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.smart-form .checkbox input:focus+i,.smart-form .input input:focus,.smart-form .radio input:focus+i,.smart-form .select select:focus,.smart-form .textarea textarea:focus,.smart-form .toggle input:focus+i{border-color:#3276B1}.smart-form .radio input+i:after{background-color:#3276B1}.smart-form .checkbox input+i:after{color:#3276B1}.smart-form .checkbox input:checked+i,.smart-form .radio input:checked+i,.smart-form .toggle input:checked+i{border-color:#3276B1}.smart-form .rating input:checked~label{color:#3276B1}.smart-form .checkbox.state-error i,.smart-form .radio.state-error i,.smart-form .state-error input,.smart-form .state-error select,.smart-form .state-error textarea,.smart-form .toggle.state-error i{background:#fff0f0;border-color:#A90329}.smart-form .toggle.state-error input:checked+i{background:#fff0f0}.smart-form .state-error+em{display:block;margin-top:6px;padding:0 1px;font-style:normal;font-size:11px;line-height:15px;color:#D56161}.smart-form .rating.state-error+em{margin-top:-4px;margin-bottom:4px}.smart-form .state-error select+i{background:#FFF0F0;box-shadow:0 0 0 9px #FFF0F0}.state-error .icon-append,.state-error .icon-prepend{color:#ed1c24}.smart-form .checkbox.state-success i,.smart-form .radio.state-success i,.smart-form .state-success input,.smart-form .state-success select,.smart-form .state-success textarea,.smart-form .toggle.state-success i{background:#f0fff0;border-color:#7DC27D}.smart-form .toggle.state-success input:checked+i{background:#f0fff0}.smart-form .note-success{color:#6fb679}.smart-form .state-success select+i{background:#f0fff0;box-shadow:0 0 0 9px #f0fff0}.smart-form .button.state-disabled,.smart-form .checkbox.state-disabled,.smart-form .input.state-disabled input,.smart-form .radio.state-disabled,.smart-form .select.state-disabled,.smart-form .textarea.state-disabled,.smart-form .toggle.state-disabled{cursor:default!important;opacity:.6!important}.smart-form .checkbox.state-disabled:hover i,.smart-form .input.state-disabled:hover input,.smart-form .radio.state-disabled:hover i,.smart-form .select.state-disabled:hover select,.smart-form .textarea.state-disabled:hover textarea,.smart-form .toggle.state-disabled:hover i{border-color:#e5e5e5!important}.smart-form .state-disabled.checkbox input+i:after,.smart-form .state-disabled.checkbox input:checked+i,.smart-form .state-disabled.radio input+i:after,.smart-form .state-disabled.radio input:checked+i,.smart-form .state-disabled.toggle input:checked+i{border-color:#e5e5e5!important;color:#333!important}.smart-form .state-disabled.radio input+i:after{background-color:#333}.smart-form .message{display:none;color:#6fb679}.smart-form .message i{display:block;margin:0 auto 20px;width:81px;height:81px;border:1px solid #6fb679;border-radius:50%;font-size:30px;line-height:81px}.smart-form.submited fieldset,.smart-form.submited footer{display:none}.smart-form.submited .message{display:block;padding:25px 30px;background:rgba(255,255,255,.9);font:300 18px/27px 'Open Sans',Helvetica,Arial,sans-serif;text-align:center}.smart-form .ui-widget-content .ui-spinner-input{margin:0;border:0;box-shadow:none!important;height:29px}.smart-form-modal{position:fixed;z-index:1;display:none;width:400px}.smart-form-modal-overlay{position:fixed;top:0;left:0;display:none;width:100%;height:100%;background:rgba(0,0,0,.7)}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:17px 10px 12px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px}.smart-form input.input-lg{height:44px;padding:10px 16px;font-size:17px;line-height:1.33}.smart-form input.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5}.smart-form input.input-xs{height:24px;padding:2px 10px;font-size:11px;line-height:1.5}.smart-form select.input-sm{height:30px;line-height:15px;font-size:12px}.smart-form select.input-sm+i{height:10px}.smart-form select.input-lg{height:44px;line-height:22px;font-size:17px}.smart-form select.input-lg+i{height:11px;top:17px}.smart-form .checkbox input+input[type=hidden]+i:after{content:'\f00c';top:-1px;left:1px;width:15px;height:15px;font:400 16px/19px FontAwesome;text-align:center}.smart-form .checkbox input:checked:hover+input[type=hidden]+i:after{content:'\f00d'}.smart-form .checkbox input:checked:disabled:hover+input[type=hidden]+i:after{content:'\f00c'}.smart-form .checkbox input:checked+input[type=hidden]+i:after{opacity:1}.smart-form .toggle input:checked+input[type=hidden]+i:after{content:attr(data-swchon-text);text-align:right}.smart-form .toggle input:checked+input[type=hidden]+i:before{right:36px}.error-box{max-width:900px;margin:0 auto}.error-text{font-weight:400;color:#fff;letter-spacing:-4px;font-size:700%;margin-bottom:30px;text-shadow:0 1px 0 #ccc,0 2px 0 #bfbfbf,0 3px 0 #bbb,0 4px 0 #b9b9b9,0 5px 0 #aaa,0 6px 1px rgba(0,0,0,.1),0 0 5px rgba(0,0,0,.1),0 1px 3px rgba(0,0,0,.3),0 3px 5px rgba(0,0,0,.2),0 5px 10px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.2),0 20px 20px rgba(0,0,0,.15)}.error-search{width:300px;margin:0 auto 20px}.error-icon-shadow{text-shadow:0 1px 0 #803838,0 2px 0 #a85d5d,0 3px 0 #b86565,0 4px 0 #d86f6f,0 5px 0 #b3a5a5,0 6px 1px rgba(131,51,51,.1),0 0 5px rgba(102,30,30,.1),0 1px 3px rgba(95,15,15,.3),0 3px 5px rgba(100,23,23,.2),0 5px 10px rgba(114,30,30,.25),0 10px 10px rgba(94,15,15,.2),0 20px 20px rgba(121,38,38,.15)}.display-image{margin-top:-60px;margin-right:20px}.terms-body{max-height:400px;overflow:auto}#extr-page{background:#fff;overflow:visible}#extr-page .container{border:none}#extr-page #header{margin:0;height:71px;border-bottom:1px solid #eee!important;overflow:hidden;padding:0 30px;border-width:0;min-height:28px;background:#f4f4f4!important}#extr-page #main{padding-top:20px}#extr-page #header #logo{margin-top:22px;margin-left:0}#extr-page #header #logo img{width:137px}#extr-page-header-space{float:right;text-align:right;display:block;vertical-align:middle;line-height:71px}#extr-page-header-space>:first-child{font-size:13px;margin-right:14px;vertical-align:-3px;font-weight:400}#extr-page-header-space .btn{font-weight:700;text-transform:uppercase}#extr-page-header-space>*{display:inline-block}#extr-page #main{background:#fff;margin:0}#extr-page .hero{background-image:url(../img/gradient/login.png);background-repeat:no-repeat;background-position:0 137px;height:360px;width:100%;float:left}#extr-page h4.paragraph-header{color:#565656;font-size:15px;font-weight:400;line-height:22px;margin-top:15px;width:270px}#extr-page h5.about-heading{color:#565656;font-size:15px;font-weight:700;line-height:24px;margin:0 0 5px}#extr-page .login-header-big{font-weight:400}#extr-page .login-desc-box-l{min-height:350px;width:50%}#extr-page .login-app-icons{vertical-align:top;margin-top:90px;width:300px}@media (min-width:768px) and (max-width:880px){#extr-page #header{padding:0 5px!important}}@media only screen and (min-width:0) and (max-width:679px){#extr-page #header{padding:0 5px!important}#extr-page #header #logo img{width:135px}#extr-page #header #logo{margin-top:22px}}.dd{position:relative;display:block;margin:0;padding:0;max-width:600px;list-style:none;font-size:13px;line-height:20px}.dd-list{display:block;position:relative;margin:0;padding:0;list-style:none}.dd-list .dd-list{padding-left:30px}.dd-collapsed .dd-list{display:none}.dd-empty,.dd-item,.dd-placeholder{display:block;position:relative;margin:0;padding:0;min-height:20px;font-size:13px;line-height:20px}.dd-handle{display:block;font-size:15px;margin:5px 0;padding:7px 15px;color:#333;text-decoration:none;border:1px solid #cfcfcf;background:#fbfbfb}.dd-item>button{position:relative;cursor:pointer;float:left;width:25px;height:20px;margin:7px 10px;line-height:22px!important;padding:0;text-indent:100%;white-space:nowrap;overflow:hidden;border:0;background:rgba(0,0,0,0);text-align:center;display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:18px}.dd-item>button:before{content:'\f055';display:block;position:absolute;width:100%;text-align:center;text-indent:0;color:#0091d9}.dd-item>button[data-action=collapse]:before{content:'\f056';color:#a90329}.dd-empty,.dd-placeholder{margin:5px 0;padding:0;min-height:30px;background:#f2fbff;border:1px dashed #b6bcbf;box-sizing:border-box;-moz-box-sizing:border-box}.dd-empty{border:1px dashed #bbb;min-height:100px;background-color:#eee;background-image:-webkit-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff),-webkit-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff);background-image:-moz-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff),-moz-linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff);background-image:linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff),linear-gradient(45deg,#fff 25%,transparent 25%,transparent 75%,#fff 75%,#fff);background-size:60px 60px;background-position:0 0,30px 30px}.dd-dragel{position:absolute;pointer-events:none;z-index:9999}.dd-dragel>.dd-item .dd-handle{margin-top:0}.dd-dragel .dd-handle{-webkit-box-shadow:2px 4px 6px 0 rgba(0,0,0,.1);box-shadow:2px 4px 6px 0 rgba(0,0,0,.1)}.nestable-lists{display:block;clear:both;padding:30px 0;width:100%;border:0;border-top:2px solid #bfbfbf;border-bottom:2px solid #bfbfbf}#nestable-menu{padding:0;margin:10px 0 20px}#nestable-output,#nestable2-output{width:100%;padding:5px}@media only screen and (min-width:700px){.dd{float:left;width:100%}.dd+.dd{margin-left:2%}}.dd-hover>.dd-handle{background:#2ea8e5!important}.dd3-content{display:block;margin:5px 0;padding:6px 10px 8px 40px;font-size:15px;color:#333;text-decoration:none;border:1px solid #cfcfcf;background:#fbfbfb}.dd3-content:hover{color:#2ea8e5;background:#fff}.dd-dragel>.dd3-item>.dd3-content{margin:0}.dd3-item>button{margin-left:38px}.dd3-handle{position:absolute;margin:0;left:0;top:0;cursor:move;width:30px;text-indent:100%;white-space:nowrap;overflow:hidden;border:1px solid #aaa;background:#bfbfbf;background:-webkit-linear-gradient(top,#ddd 0,#bbb 100%);background:-moz-linear-gradient(top,#ddd 0,#bbb 100%);background:linear-gradient(top,#ddd 0,#bbb 100%);display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:18px;padding:8px 15px}.dd3-handle:before{content:'\f0c9';display:block;position:absolute;left:0;top:3px;width:100%;text-align:center;text-indent:0;color:#818181;font-weight:400;line-height:28px}.dd3-handle:hover:before{color:#C27616}.dd-handle:hover,.dd-handle:hover+.dd-list .dd-handle{background:#FDDFB3!important;border:1px solid #FAA937;color:#333!important}.dd-handle>span{font-size:13px;color:#777}.dd-dragel>.dd-item>.dd-handle{border-left-width:4px}.dd-dragel>li.dd-item.dd3-item{position:relative;top:10px;left:10px;z-index:999}#calendar-container{position:relative}.fc table,html .fc{font-size:12px}.dt-header.calender-spacer{height:46px;display:block}.jarviswidget #calendar{margin-top:-18px}.fc-widget-content,.fc-widget-header{border-right:none}tr td.fc-first,tr.fc-first th.fc-first{border-left:none}tr.fc-last td{border-bottom:none}.jarviswidget .fc-header-title h2{text-shadow:0 1px 0 #fff;margin-top:-12px;margin-left:10px;font-size:14px;font-weight:700;margin-bottom:0}.fc-event-time,.fc-event-title{padding:3px 0 2px 3px;display:inline-block;line-height:16px;font-weight:700;font-size:11px;box-sizing:border-box}#calendar-buttons{position:absolute;right:14px;top:5px}.dropzone,td.fc-other-month{background-image:-webkit-gradient(linear,left top,right bottom,color-stop(0.25,rgba(0,0,0,.03)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(0,0,0,.03)),color-stop(0.75,rgba(0,0,0,.03)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(135deg,rgba(0,0,0,.03)25%,transparent 25%,transparent 50%,rgba(0,0,0,.03)50%,rgba(0,0,0,.03)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(135deg,rgba(0,0,0,.03)25%,transparent 25%,transparent 50%,rgba(0,0,0,.03)50%,rgba(0,0,0,.03)75%,transparent 75%,transparent);background-image:-ms-linear-gradient(135deg,rgba(0,0,0,.03)25%,transparent 25%,transparent 50%,rgba(0,0,0,.03)50%,rgba(0,0,0,.03)75%,transparent 75%,transparent);background-image:-o-linear-gradient(135deg,rgba(0,0,0,.03)25%,transparent 25%,transparent 50%,rgba(0,0,0,.03)50%,rgba(0,0,0,.03)75%,transparent 75%,transparent);background-image:linear-gradient(135deg,rgba(0,0,0,.03)25%,transparent 25%,transparent 50%,rgba(0,0,0,.03)50%,rgba(0,0,0,.03)75%,transparent 75%,transparent);background-color:#FAFCFD;background-size:16px 16px}.fc-corner-right .fc-event-inner{padding-right:15px}.btn-select-tick i{display:none}.btn-select-tick .btn:hover i{opacity:.3;display:block}.btn-select-tick .active i{display:block;opacity:1!important}#external-events>li{margin:6px 4px 6px 0;display:inline-block}#external-events>li>:first-child{padding:5px 10px 10px;cursor:move;display:block}#external-events>li>:first-child:after{color:#fff;color:rgba(255,255,255,.7);content:attr(data-description);font-size:11px;font-weight:400;display:block;line-height:0;margin:7px 0;text-transform:lowercase}.table-wrap{overflow:auto}.inbox-body{position:relative}.inbox-body .table-wrap{background:#fff;padding:10px 14px 7px;position:relative;margin-left:200px;overflow-x:hidden}.inbox-body.no-content-padding{margin-top:0;background:#fff;overflow:hidden}.inbox-nav-bar{height:70px;margin-bottom:0;padding:20px 14px;background:#fff}.inbox-nav-bar .page-title{display:inline-block;margin:0;width:196px;line-height:33px;vertical-align:middle}.inbox-footer{position:absolute;bottom:-53px}.inbox-footer .btn-group,.inbox-paging{margin-left:10px}#inbox-table{font-size:13px;border-top:none;border-left-color:transparent!important;border-right-color:transparent!important}#inbox-table tbody tr:hover{cursor:pointer;background:#E4E4E4}#inbox-table tr td{border-right:none;border-left:none;line-height:26px;padding:6px 4px 7px!important}#inbox-table .inbox-table-icon{padding-left:15px!important}#inbox-table tbody tr th{overflow:hidden}#inbox-table.table tbody>tr>td{border-color:#fff!important}#inbox-table .checkbox,#inbox-table .radio{margin-top:-1px;margin-bottom:0}.inbox-data-attachment,.inbox-table-icon{width:28px;text-align:left;padding-left:12px!important;padding-right:0!important}.inbox-data-from{width:200px}.inbox-data-from>:first-child{width:200px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inbox-data-date{width:80px;padding-left:7px!important;padding-right:0!important}.inbox-data-message>:first-child{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;height:27px;color:#8A8A8A}.inbox-data-message>:first-child span{color:#111}.inbox-data-message>:first-child span.label{color:#fff}.inbox-data-message>:first-child>:first-child:after{content:" - "}.unread td{background:#fff}.unread .inbox-data-date>:first-child,.unread .inbox-data-from>:first-child,.unread .inbox-data-message>:first-child>:first-child{font-weight:700}tr.highlight td,tr.unread.highlight td{background:#ffc!important;color:#333}.inbox-checkbox-triggered{display:inline-block}.inbox-checkbox-triggered>.btn-group{margin-right:10px}.inbox-checkbox-triggered>.btn-group .btn{padding-left:14px;padding-right:14px}.inbox-side-bar{height:100%;position:absolute;background:#fff;display:block;width:200px;padding:10px 0 10px 14px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.inbox-side-bar::-webkit-scrollbar{width:0!important}.inbox-side-bar h6{font-weight:400;font-size:11px;display:block;padding:0 15px;text-transform:uppercase;color:#838383}.inbox-side-bar h6 a{font-size:14px;margin-top:-2px}.inbox-side-bar h6 .tooltip{text-transform:none!important}.inbox-side-bar>.btn{margin-bottom:35px}.inbox-side-bar .input-group{margin-bottom:25px}#compose-mail-mini{margin-left:4px}.inbox-space{display:block;width:185px}.inbox-space>.progress{margin-top:5px}.inbox-menu-lg{list-style:none;padding:0;margin:0 0 20px}.inbox-menu-lg li a{display:block;padding:6px 15px 7px;font-size:13px;color:#333}.inbox-menu-lg li{display:block;width:100%}.inbox-menu-lg li a:hover{text-decoration:none;background:#f4f4f4}.inbox-menu-lg li.active a{font-weight:700;background:#F0F0F0;border-bottom:1px solid #E7E7E7;color:#3276b1}.inbox-menu-sm{list-style:none;padding:0;margin:0 0 20px}.inbox-menu-sm li a{display:block;padding:8px 15px 10px;font-size:13px;color:#333}.inbox-menu-sm li{display:block;width:100%}.inbox-menu-sm li a:hover{text-decoration:none;background:#f4f4f4}.inbox-menu-sm li.active a{font-weight:700;background:#F0F0F0;border-bottom:1px solid #E7E7E7;color:#3276b1}.email-open-header{margin:-10px 0 0 0;font-size:20px;border-bottom:1px solid #bfbfbf;border-top:1px solid #eee;padding:15px 3px}.email-open-header>span{font-size:10px;font-weight:400;padding:3px 5px;letter-spacing:normal;text-transform:uppercase;vertical-align:middle;line-height:33px;background:#ACACAC}.inbox-info-bar{padding:10px 0;border-bottom:1px solid #bfbfbf}.inbox-info-bar img{width:35px;height:auto;display:inline-block;vertical-align:middle;margin-right:7px;margin-left:2px;border-left:3px solid #fff}.inbox-download,.inbox-message{padding:15px 4px;border-bottom:1px solid #bfbfbf}.inbox-download-list{list-style:none;margin:5px 0 0;padding:0}.inbox-download-list li{display:inline-block;margin:0 5px 0 0;vertical-align:top}.inbox-download-list li>:first-child{margin-bottom:0;width:150px;overflow:hidden}.inbox-download-list li>:first-child:hover{background:#fff;border-color:silver}.inbox-download-list li>:first-child>:first-child{text-align:center;display:block;color:#D6D6D6}.inbox-download-list li>:first-child>:first-child>.fa{font-size:150px}.inbox-download-list li>:first-child>:first-child>img{max-width:120px}.inbox-compose-footer{padding:10px;background:#F5F5F5;border-bottom:1px solid #A9A9A9}.inbox-compose-footer,.inbox-download,.inbox-info-bar,.inbox-message{margin-right:240px;position:relative}.email-infobox{display:block;width:180px;border-bottom:1px solid #bfbfbf;padding-bottom:0;padding-top:15px;position:absolute;top:65px;right:15px}.inbox-info-bar .form-group{margin:0}.inbox-info-bar .form-group input,.inbox-info-bar .select2-container-multi .select2-choices{border-color:#fff!important}.inbox-info-bar .select2-choices>div{display:none}.inbox-info-bar .col-md-1,.inbox-info-bar .col-md-11{padding-left:0;padding-right:0}.fileinput{padding-top:3px}.hidden{display:none}.inbox-info-bar em{position:absolute;top:6px;right:20px;text-align:right;font-style:normal}.email-reply-text>div{border-left:1px solid #D6D6D6;padding-left:10px;margin-left:50px;color:#A9A9A9}.inbox-body .note-editor .note-editable{height:100% important}.email-reply-text>:first-child{padding-left:45px}@media (max-width:1280px){.inbox-compose-footer,.inbox-info-bar,.inbox-message{margin-right:0}.email-infobox{display:none}}@media (max-width:1024px){.inbox-side-bar{display:none!important}.inbox-body .table-wrap{margin-left:0!important}.inbox-info-bar .col-md-1,.inbox-info-bar .col-md-11{padding-left:26px;padding-right:26px}}.profile-pic{text-align:right}.profile-pic>img{border-radius:0;position:relative;border:5px solid #fff;top:-30px;left:10px;display:inline-block;text-align:right;z-index:4;max-width:100px;margin-bottom:-30px}.profile-carousel .carousel-inner{max-height:150px}.friends-list li{margin-bottom:10px;margin-right:3px;padding:0}.friends-list img{width:35px;border:1px solid #fff;outline:1px solid #bfbfbf}.profile-link-btn{color:#999;font-size:14px}time.icon{font-size:14px;display:block;position:relative;width:35px;height:43px;background-color:#fff;margin:3px auto;border-radius:7px;box-shadow:0 1px 0 #bdbdbd,0 2px 0 #fff,0 3px 0 #EEE9E9,0 4px 0 #fff,0 5px 0 #FFF,0 0 0 1px #D3D3D3;overflow:hidden}time.icon *{display:block;width:100%;font-size:10px;font-weight:700;font-style:normal;text-align:center}time.icon strong{position:absolute;top:0;padding:2px 0;color:#fff;background-color:#3a3633;-webkit-box-shadow:0 2px 0 #3a3633;box-shadow:0 2px 0 #3a3633;border-radius:6px 6px 0 0}time.icon em{position:absolute;bottom:3px;color:#3276b1}time.icon span{width:100%;font-size:15px;letter-spacing:-.05em;padding-top:21px;color:#2f2f2f}.user{display:block;float:left;width:170px;margin:0 15px 15px 0;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.user img{float:left;width:35px;margin-right:5px}.user .email{color:#999;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;white-space:nowrap}.search-results{padding:18px 5px}.search-results+.search-results{border-top:1px dashed #E3E3E3}.search-results>:first-child{margin-bottom:4px;font-weight:400}.search-results>:first-child a{text-decoration:underline}.search-results .url{font-style:normal;font-size:14px}.search-results img{display:inline-block;margin-top:4px;margin-right:4px;width:80px}.search-results>div{display:inline-block;vertical-align:top}.search-results .note{margin:0;line-height:normal}.search-results .note a{text-decoration:none!important;color:#333}.search-results .note a:hover{color:#ed1c24}.todo-group-title{margin:0;line-height:31px;padding:0 0 0 10px;background:#fafafa;border-bottom:1px solid #e7e7e7;border-top:1px solid #f4f4f4;color:#999}.todo{margin:0;padding:0;min-height:5px;list-style:none}.todo>li{display:block;position:relative;overflow:hidden;border-bottom:1px solid #e7e7e7;margin:0 5px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAQCAYAAADagWXwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0RkQ1OEY4NTM4NUIxMUUzQjdCMUMxQzJCQUE3MTMxOCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0RkQ1OEY4NjM4NUIxMUUzQjdCMUMxQzJCQUE3MTMxOCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRGRDU4RjgzMzg1QjExRTNCN0IxQzFDMkJBQTcxMzE4IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRGRDU4Rjg0Mzg1QjExRTNCN0IxQzFDMkJBQTcxMzE4Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+pTD+wgAAACtJREFUeNpimDBhwn8gYABhdDYjiIELMDHgAUwTJ06Ea0VnjxpLO2MBAgwAGYZLegQbQ3UAAAAASUVORK5CYII=) 1px 11px no-repeat}.todo>li:last-child,.todo>li:only-child{border-bottom:none}.todo>li>:first-child{display:block;border-right:1px solid #FFE1EB;height:100%;padding:6px 11px 6px 18px;width:20px;vertical-align:top;position:absolute}.todo>li>:first-child:hover{cursor:move}.todo>li.complete>:first-child:hover{cursor:default}.todo>li.complete{background:0 0}.todo>li>p{height:100%;margin-left:52px;border-left:1px solid #FFE1EB;display:inline-block;padding:8px 0 6px 7px;margin-bottom:0;min-height:37px;line-height:normal;font-size:14px;font-weight:500;color:#333}.todo>li>p>span{display:block;line-height:12px;font-size:10px;font-weight:400}.todo>li>p>:first-child{margin-top:-5px;color:#999;margin-bottom:4px}.todo>li>p>.date{color:#bfbfbf}.todo>li.complete>*{text-decoration:line-through;font-style:italic}.todo>li.ui-sortable-helper{border-top:1px solid #eee;background:rgba(113,132,63,.1)}.smart-timeline{position:relative}.smart-timeline-list{list-style:none;margin:0;padding:0}.smart-timeline-list:after{content:" ";background-color:#eee;position:absolute;display:block;width:2px;top:0;left:95px;bottom:0;z-index:1}.smart-timeline-list li{position:relative;margin:0;padding:15px 0}.smart-timeline-list>li:hover{background-color:#f4f4f4}.smart-timeline-hover li:hover{background-color:#f9f9f9}.smart-timeline-icon{background:#3276b1;color:#fff;border-radius:50%;position:absolute;width:32px;height:32px;line-height:28px;font-size:14px;text-align:center;left:80px;top:10px;z-index:100;padding:2px}.smart-timeline-icon>img{height:32px;width:32px;border-radius:50%;margin-top:-2px;margin-left:-2px;border:2px solid #3276b1}.smart-timeline-time{float:left;width:70px;text-align:right}.smart-timeline-time>small{font-style:italic}.smart-timeline-content{margin-left:123px}.table-forum thead tr{background:none!important}.table-forum thead tr th{font-size:17px;font-weight:400;border-bottom-color:#F1F1F1}.table-forum tr td{border-top-style:dashed!important;padding-top:12px!important;padding-bottom:12px!important}.table-forum tr td h4{font-size:15px;font-weight:700}.table-forum tr td h4 small{font-size:13px;display:block;margin-top:2px}.table-forum tr td>i{margin-top:4px;padding-left:10px}.table-forum tr.locked h4>a:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f023"}.table-forum tr.closed h4>a{text-decoration:line-through;color:#848484;cursor:not-allowed}.forum-attachment{margin-top:20px;display:block}.ajax-loading-error{margin-top:70px;display:block;text-align:center;font-size:23px;font-weight:700}.ajax-notifications .ajax-loading-error{text-align:center;margin-top:20px;font-size:15px}.ajax-notifications .ajax-loading-animation{font-size:15px;text-align:center;margin-top:70px}html{margin:0;padding:0;min-height:100%;background:url(../img/mybg.png) #fff;position:relative}body{margin:0;padding:0;min-height:100%;background:url(../img/mybg.png) #fff;direction:ltr}body.mobile-view-activated.hidden-menu{overflow-x:hidden}body.modal-open{overflow:hidden!important}a:active,a:focus,a:hover,button,button:active,button:focus,embed,input::-moz-focus-inner,object{outline:0}h1,h2,h3,h4{margin:0;font-family:"Open Sans",Arial,Helvetica,Sans-Serif;font-weight:300}.page-title{margin:12px 0 28px}.page-title span{font-size:16px;color:#333;display:inline-block;vertical-align:1px}label{font-weight:400}:focus{outline:0!important}a,button,input{-ms-touch-action:none!important}.uneditable-input:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{outline:0;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important}.form-control,.input-lg,.input-sm,.input-xs{border-radius:0!important;-webkit-border-radius:0!important;-moz-border-radius:0!important}.input-xs{height:24px;padding:2px 10px;font-size:11px;line-height:1.5}.btn-xs{padding:1px 5px}.btn-sm{padding:6px 10px 5px}.btn-lg{padding:10px 16px}.no-space{margin:0}.no-space>[class*=col-]{margin:0!important;padding-right:0;padding-left:0}#content{padding:10px 14px;position:relative}body.container{position:absolute;left:0;right:0;padding:0;border-left:1px solid #bfbfbf;border-right:1px solid #bfbfbf;box-shadow:0 2px 70px rgba(0,0,0,.45)}h1{letter-spacing:-1px;font-size:24px;margin:10px 0}h1 small{font-size:18px;font-weight:300;letter-spacing:-1px}.lead{font-size:19px}h2{letter-spacing:-1px;font-size:22px;margin:20px 0;line-height:normal}h3{display:block;font-size:19px;font-weight:400;margin:20px 0;line-height:normal}h4{line-height:normal}h5{font-size:17px;font-weight:300;margin:10px 0;line-height:normal}h6{font-size:15px;margin:10px 0;font-weight:700;line-height:normal}.row-seperator-header{margin:15px 14px 20px;border-bottom:none;display:block;color:#646464;font-size:20px;font-weight:400}.center-canvas,.center-child-canvas>canvas{display:block!important;margin:0 auto!important}.bordered{border:1px solid rgba(0,0,0,.2)}.bordered:hover{border:1px solid rgba(0,0,0,.4)}aside{display:block;overflow:hidden;background:#3a3633;background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSI5NyUiIHN0b3AtY29sb3I9IiMzYTM2MzMiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMmEyNzI1IiBzdG9wLW9wYWNpdHk9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==);background:-moz-linear-gradient(left,#3a3633 93%,#2a2725 100%);background:-webkit-gradient(linear,left top,right top,color-stop(93%,#3a3633),color-stop(100%,#2a2725));background:-webkit-linear-gradient(left,#3a3633 93%,#2a2725 100%);background:-o-linear-gradient(left,#3a3633 93%,#2a2725 100%);background:-ms-linear-gradient(left,#3a3633 93%,#2a2725 100%);background:linear-gradient(to right,#3a3633 93%,#2a2725 100%);min-height:100%}#header{display:block;height:49px;margin:0;padding:0 13px 0 0;background-color:#f3f3f3;background-image:-moz-linear-gradient(top,#f3f3f3,#e2e2e2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f3f3f3),to(#e2e2e2));background-image:-webkit-linear-gradient(top,#f3f3f3,#e2e2e2);background-image:-o-linear-gradient(top,#f3f3f3,#e2e2e2);background-image:linear-gradient(to bottom,#f3f3f3,#e2e2e2);background-repeat:repeat-x;position:relative;z-index:905}#header>div{display:inline-block;vertical-align:middle;height:49px;float:left}#header>div.open{font-weight:700}.fixed-header #header{position:fixed;width:100%;z-index:905;top:0;border-bottom:2px solid #999;border-bottom:1px solid rgba(0,0,0,.3);box-shadow:-11px 12px 23px rgba(0,0,0,.1)}.fixed-header.fixed-ribbon #header{border-bottom:none;box-shadow:none}.container.fixed-header #header{max-width:1164px}.fixed-header #header .ajax-dropdown{z-index:906}.fixed-header #shortcut{position:fixed}.fixed-header #main{margin-top:49px}#logo-group>span{display:inline-block;height:39px;float:left}#logo-group span#activity{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;cursor:default!important;display:inline-block;font-weight:700;height:24px;width:24px;padding:2px;text-align:center;text-decoration:none!important;-moz-user-select:none;-webkit-user-select:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,left top,left bottom,from(#f8f8f8),to(#f1f1f1));background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #bfbfbf;color:#c4bab6;font-size:19px;margin:10px 0 0;position:relative}#logo-group span#activity:hover{border:1px solid #bfbfbf;transition:all 0s;cursor:pointer!important;-webkit-box-shadow:inset 0 0 4px 1px rgba(0,0,0,.08);box-shadow:inset 0 0 4px 1px rgba(0,0,0,.08)}#logo{display:inline-block;width:175px;margin-top:13px;margin-left:9px}#logo img{width:110px;height:auto;padding-left:3px}#logo-group>span b.badge{position:absolute;top:-5px;right:-5px;cursor:pointer;background:#0091d9;display:inline-block;font-size:10px;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);color:#fff;font-weight:700;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;padding:2px 4px 3px;text-align:center;line-height:normal}#activity.active .badge{background:#006fa6!important}#project-context,.project-context{display:inline-block;padding:7px 13px 0;position:relative}#project-context>span,.project-context>span{display:block}#project-context>:first-child,.project-context>:first-child{display:block;color:#bfbfbf;font-size:10px;font-weight:700;text-transform:uppercase;text-shadow:0 0 1px #fff;padding-left:0;text-align:left}#project-selector,.project-selector{max-width:97%;white-space:nowrap;background:0 0;border:none;padding:0;text-align:left;color:#555;font-size:14px;cursor:pointer}#project-selector:hover,.project-selector:hover{color:#333}.header-search{position:relative}.header-search.pull-right{margin-left:6px}.header-search>input[type=text]{display:block;box-sizing:border-box;-moz-box-sizing:border-box;min-width:200px;width:100%;height:30px;padding:0 10px;outline:0;border-width:1px;border-style:solid;border-radius:0;border-color:#bfbfbf;background:#fff;color:#404040;appearance:normal;-moz-appearance:none;-webkit-appearance:none;margin-top:10px;line-height:normal}.header-search>button{background:0 0;border:none;color:#6D6A69;font-size:17px;height:30px;line-height:30px;margin:0;padding:0;position:absolute;right:0;top:10px;width:30px;z-index:2}#search-mobile{display:none}#cancel-search-js{position:absolute;display:none;background:#a90329;z-index:3;color:#fff;padding:0;right:10px;top:10px;text-align:center;height:29px;line-height:29px;width:30px;font-size:17px;text-decoration:none!important}#header>:first-child,aside{width:220px}#left-panel{position:absolute;top:0;left:0;z-index:904;padding-top:49px}#main{margin-left:220px;padding:0;padding-bottom:52px;min-height:500px}#ribbon{min-height:40px;background:#474544;padding:0 13px;position:relative}#ribbon .breadcrumb{display:inline-block;margin:0;padding:11px 34px 11px 0!important;background:0 0;vertical-align:top}#ribbon .breadcrumb,#ribbon .breadcrumb a{color:#BBB!important;text-decoration:none!Important}#ribbon .breadcrumb li:last-child,#ribbon .breadcrumb>.active{color:#E4E4E4}.fixed-ribbon #ribbon{position:fixed;right:0;left:220px;top:49px;z-index:901}.container.fixed-ribbon #ribbon{width:944px;left:590px}.fixed-ribbon #content{padding-top:50px}.minified.fixed-ribbon #ribbon{left:45px}.hidden-menu.fixed-ribbon #ribbon{left:10px}.fixed-navigation #left-panel{height:100%;position:fixed}.fixed-navigation nav{-webkit-overflow-scrolling:touch;overflow-y:auto;height:100%;padding-bottom:49px}.fixed-navigation nav>ul{padding-right:15px;position:relative;height:100%;width:114%;overflow-x:hidden;overflow-y:scroll}.mobile-detected.fixed-navigation nav>ul{padding-right:30px!important}.minified.fixed-navigation nav{-webkit-overflow-scrolling:none;overflow:visible;height:auto;padding-bottom:0}.minified.fixed-navigation nav>ul{overflow:visible;padding-right:0;width:100%}nav ul li a:active{background:#616161!important}nav ul{width:100%;padding:40px 28px 25px 0;padding:0;margin:0;font-size:13px;line-height:.5em;list-style:none;position:relative}nav ul .active>a{color:#fff!important;position:relative}nav ul li.active>a:before{content:"\f0d9";font-family:FontAwesome;display:block;height:27px;line-height:normal;width:27px;position:absolute;right:-21px;font-size:20px;color:#eee}nav ul li.active.open>a:before{content:""}nav>ul>li:last-child.open{border-bottom:1px solid rgba(255,255,255,.15)}nav ul li{overflow:hidden}nav ul li a{line-height:normal;font-size:14px;padding:10px 10px 10px 11px;color:#a8a8a8;display:block;font-weight:400;text-decoration:none!important;position:relative}nav>ul>li>ul>li>a,nav>ul>li>ul>li>ul>li>a{padding-top:7px;padding-bottom:7px}nav ul li a:focus{color:#c9c9c9}nav ul li a:hover{color:#fff;text-decoration:none}nav ul b{float:right;font-size:11px;margin-top:2px}nav ul span.menu-item-parent{display:inline-block;margin:0;padding:0}nav ul li.open>a,nav ul li.open>a b{color:#fff!important}nav>ul>li>a b{position:absolute!important;right:10px;top:10px}nav>ul>li>a>i{margin-right:5px;width:15px;display:inline-block;text-align:center;position:relative}nav>ul>li>a>i>em{font-size:9px;display:block;padding:2px;position:absolute;top:-8px;right:-6px;text-decoration:none;font-style:normal;background:#ED1C24;color:#fff;min-width:13px;border-radius:50%;max-height:13px;line-height:8px;font-weight:700;vertical-align:baseline;white-space:nowrap;text-align:center;border:1px solid rgba(255,255,255,.1)}nav ul li li{border-bottom:none;position:relative}nav>ul>li>ul::before{content:"";display:block;position:absolute;z-index:1;left:23px;top:0;bottom:0;border-left:1px solid #7A7A7A}nav>ul ul li::before{content:"";display:block;position:absolute;width:8px;left:23px;top:16px;border-top:1px solid #7A7A7A;z-index:1}nav>ul ul ul li::before{content:"";display:block;position:absolute;width:18px;left:10px;top:17px;border-top:1px solid transparent}nav>ul ul li a i{font-size:14px!important;width:18px!important;text-align:center!important;vertical-align:0!important;line-height:1!important}nav>ul>li:hover>ul::before,nav>ul>li:hover>ul>li::before{border-color:#ACACAC!important}nav ul ul{margin:0;display:none;background:rgba(69,69,69,.6);padding:7px 0}nav ul ul ul{background:0 0;padding:0}nav ul ul li{margin:0;padding:0}nav ul ul li>a{padding-left:42px;font-size:14px;font-weight:400;outline:0}nav ul ul li>a:hover{background-color:rgba(69,69,69,.8);color:#fff}nav ul ul ul li a{color:#bfbfbf;padding:8px 10px 8px 60px;font-size:14px}nav ul ul ul li a:hover{background-color:#4C4F53;color:#fff}nav ul ul ul ul li a{padding-left:80px}nav ul ul ul ul ul li a{padding-left:100px}nav ul ul ul ul ul ul li a{padding-left:120px}nav ul ul b{color:#B3B3B3}nav ul ul>li:hover b{color:#D5D9E2}.header-dropdown-list{list-style:none;float:right;position:relative;margin:0}.header-dropdown-list>li{display:inline-block;padding-right:5px}.header-dropdown-list>li>.dropdown-toggle{margin-top:16px;display:block}.smart-accordion-default.panel-group{margin-bottom:0}.smart-accordion-default.panel-group .panel+.panel{margin-top:-1px}.smart-accordion-default.panel-group .panel-heading{padding:0}.smart-accordion-default.panel-group .panel-title a{display:block;padding:10px 15px;text-decoration:none!important}.panel-group .panel,.smart-accordion-default .panel-heading{border-radius:0;-webkit-border-radius:0;-moz-border-radius:0}.smart-accordion-default .panel-default>.panel-heading{background-color:#fcfcfc}.smart-accordion-default .panel-default{border-color:#c3c3c3}.smart-accordion-default .panel-title>a.collapsed>.fa,.smart-accordion-default .panel-title>a>:first-child{display:none}.smart-accordion-default .panel-title>a.collapsed>:first-child{display:inline-block}.no-padding .smart-accordion-default>div{border-left:none!important;border-right:none!important}.no-padding .smart-accordion-default>div:first-child{border-top:none!important}.no-padding .smart-accordion-default>div:last-child{border-bottom:none!important}.onoffswitch-container{margin-top:4px;margin-left:7px;display:inline-block}.onoffswitch{position:relative;width:50px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;margin-top:3px;margin-bottom:3px;margin-left:5px;display:inline-block;vertical-align:middle}.onoffswitch-checkbox{display:none}.onoffswitch-label{display:block;overflow:hidden;cursor:pointer;border:1px solid #626262;border-radius:50px;border-color:#adadad #b3b3b3 #9e9e9e;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.onoffswitch-inner{width:200%;margin-left:-100%;display:block}.onoffswitch-inner:after,.onoffswitch-inner:before{float:left;width:50%;height:15px;padding:0;line-height:15px;font-size:10px;font-family:Trebuchet,Arial,sans-serif;font-weight:700;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.onoffswitch-inner:before{content:attr(data-swchon-text);text-shadow:0 -1px 0 #333;padding-left:7px;background-color:#3276b1;color:#fff;box-shadow:inset 0 2px 6px rgba(0,0,0,.5),0 1px 2px rgba(0,0,0,.05);text-align:left}.onoffswitch-inner:after{content:attr(data-swchoff-text);padding-right:7px;text-shadow:0 -1px 0 #fff;background-color:#fff;color:#555;text-align:right;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.onoffswitch-switch{width:19px;height:19px;margin:-2px;background:#fff;border:1px solid #9a9a9a;border-radius:50px;position:absolute;top:0;bottom:0;right:32px;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;background-color:#f4f4f4;background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);background-repeat:repeat-x;-webkit-box-shadow:1px 1px 4px 0 rgba(0,0,0,.3);box-shadow:1px 1px 4px 0 rgba(0,0,0,.3)}.onoffswitch-checkbox+.onoffswitch-label .onoffswitch-switch:before,.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch:before{content:"\f00d";color:#a90329;display:block;text-align:center;line-height:19px;font-size:10px;text-shadow:0 -1px 0 #fff;font-weight:700;font-family:FontAwesome}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch:before{content:"\f00c";color:#57889c}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-inner{margin-left:0;display:block}.onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch{right:0}.onoffswitch-switch:hover{background-color:#eee}.onoffswitch-switch:active{background-color:#eee;box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-inner:before,.onoffswitch-checkbox:disabled+.onoffswitch-label .onoffswitch-inner:after{text-shadow:0 1px 0 #fff;background:#bfbfbf;color:#333}.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-switch,.onoffswitch-checkbox:disabled+.onoffswitch-label .onoffswitch-switch{background-color:#f4f4f4;background-image:-moz-linear-gradient(top,#bfbfbf,#f4f4f4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#bfbfbf),to(#f4f4f4));background-image:-webkit-linear-gradient(top,#bfbfbf,#f4f4f4);background-image:-o-linear-gradient(top,#bfbfbf,#f4f4f4);background-image:linear-gradient(to bottom,#bfbfbf,#f4f4f4);box-shadow:none!important}.onoffswitch-checkbox:checked:disabled+.onoffswitch-label .onoffswitch-label,.onoffswitch-checkbox:disabled+.onoffswitch-label{border-color:#ababab #999 #878787!important}.onoffswitch-checkbox:checked+.onoffswitch-label{border-color:#3276b1 #2a6395 #255681}.onoffswitch+span,.onoffswitch-title{display:inline-block;vertical-align:middle;margin-top:-5px}.form-control{box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.form hr{margin-left:-13px;margin-right:-13px;border-color:rgba(0,0,0,.1);margin-top:20px;margin-bottom:20px}.form fieldset{display:block;border:none;background:rgba(255,255,255,.9);position:relative}fieldset{position:relative}.form-actions{display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,.1);background:rgba(249,249,249,.9);margin-top:25px;margin-left:-13px;margin-right:-13px;margin-bottom:-13px;text-align:right}.well .form-actions{margin-left:-19px;margin-right:-19px;margin-bottom:-19px}.well.well-lg .form-actions{margin-left:-24px;margin-right:-24px;margin-bottom:-24px}.well.well-sm .form-actions{margin-left:-9px;margin-right:-9px;margin-bottom:-9px}.popover-content .form-actions{margin:0 -14px -9px;border-radius:0 0 3px 3px;padding:9px 14px}.no-padding .form .form-actions{margin:0;display:block;padding:13px 14px 15px;border-top:1px solid rgba(0,0,0,.1);background:rgba(248,248,248,.9);text-align:right;margin-top:25px}.form header,legend{display:block;padding:8px 0;border-bottom:1px dashed rgba(0,0,0,.2);background:#fff;font-size:16px;font-weight:300;color:#222;margin:25px 0 20px}.no-padding .form header{margin:25px 14px 0}.form header:first-child{margin-top:10px}legend{font-weight:400;margin-top:0;background:0 0}.input-group-addon{padding:6px 10px;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;transition:background-color .3s;-o-transition:background-color .3s;-ms-transition:background-color .3s;-moz-transition:background-color .3s;-webkit-transition:background-color .3s}.input-group-addon .fa{font-size:14px}.input-group-addon .fa-2x,.input-group-addon .fa-lg{font-size:2em}.input-group-addon .fa-3x,.input-group-addon .fa-4x,.input-group-addon .fa-5x{font-size:30px}input[type=text]:focus+.input-group-addon{border-color:#0091d9;background-color:#72a0ce;color:#fff}.has-warning input[type=text],.has-warning input[type=text]+.input-group-addon{border-color:#dbab57}.has-warning input[type=text]+.input-group-addon{background-color:#faf2cc;color:#c09853}.has-warning input[type=text]:focus,.has-warning input[type=text]:focus+.input-group-addon{border-color:#dbab57}.has-warning input[type=text]:focus+.input-group-addon{background-color:#e1c118;color:#fff}.has-error .input-group-addon{border-color:#b94a48;background:#f2dede;color:#b94a48}.has-error input[type=text],.has-error input[type=text]+.input-group-addon{border-color:#b94a48}.has-error input[type=text]+.input-group-addon{background-color:#f2dede;color:#b94a48}.has-error input[type=text]:focus,.has-error input[type=text]:focus+.input-group-addon{border-color:#c05e5e}.has-error input[type=text]:focus+.input-group-addon{background-color:#c05e5e;color:#fff}.has-success input[type=text]:focus+.input-group-addon{border-color:#468847;background-color:#468847;color:#fff}.form .form-group:last-child,.form .form-group:last-child .note,.form fieldset .form-group:last-child,.form fieldset .form-group:last-child .note{margin-bottom:0}.note{margin-top:6px;padding:0 1px;font-size:11px;line-height:15px;color:#999}.input-icon-right{position:relative}.input-icon-left>i,.input-icon-right>i{position:absolute;right:10px;top:30%;font-size:16px;color:#bfbfbf}.input-icon-left>i{right:auto;left:24px}.input-icon-right .form-control{padding-right:27px}.input-icon-left .form-control{padding-left:29px}input[type=color].ui-autocomplete-loading,input[type=date].ui-autocomplete-loading,input[type=datetime-local].ui-autocomplete-loading,input[type=datetime].ui-autocomplete-loading,input[type=email].ui-autocomplete-loading,input[type=month].ui-autocomplete-loading,input[type=number].ui-autocomplete-loading,input[type=password].ui-autocomplete-loading,input[type=search].ui-autocomplete-loading,input[type=tel].ui-autocomplete-loading,input[type=text].ui-autocomplete-loading,input[type=time].ui-autocomplete-loading,input[type=url].ui-autocomplete-loading,input[type=week].ui-autocomplete-loading{background-image:url(../img/select2-spinner.gif)!important;background-repeat:no-repeat;background-position:99% 50%;padding-right:27px}.input-group-addon .checkbox,.input-group-addon .radio{min-height:0;margin-right:0!important;padding-top:0}.input-group-addon label input[type=checkbox].checkbox+span,.input-group-addon label input[type=checkbox].checkbox+span:before,.input-group-addon label input[type=radio].radiobox+span,.input-group-addon label input[type=radio].radiobox+span:before{margin-right:0}.input-group-addon .onoffswitch,.input-group-addon .onoffswitch-label{margin:0}.timeline-seperator{display:block;text-align:center;color:#999;margin:20px 0 0}.timeline-seperator>:first-child{padding:4px 5px;border:1px dashed rgba(0,0,0,.1);background:#fff;font-size:11px;border-radius:4px}.timeline-seperator .btn,.timeline-seperator .btn+.dropdown-menu{margin-right:15px}.timeline-seperator:after{display:block;content:" ";margin:0 20px;border-bottom:1px dashed rgba(0,0,0,.1);margin-top:-8px}.alert{margin-bottom:20px;margin-top:0;color:#675100;border-width:0;border-left-width:5px;padding:10px;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0}.alert .close{top:0;right:-5px;line-height:20px}.alert-heading{font-weight:600}.alert-danger{border-color:#953b39;color:#fff;background:#c26565;text-shadow:none}.alert-warning{border-color:#dfb56c;color:#826430;background:#efe1b3}.alert-success{border-color:#8ac38b;color:#356635;background:#cde0c4}.alert-info{border-color:#9cb4c5;color:#305d8c;background:#d6dde7}.well{background:#fbfbfb;border:1px solid #ddd;box-shadow:0 1px 1px #ececec;-webkit-box-shadow:0 1px 1px #ececec;-moz-box-shadow:0 1px 1px #ececec;position:relative}.well.well-clean{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-color:transparent}.well.well-glass{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-color:transparent;background-color:rgba(255,255,255,.25);color:#fff}.well.well-light{background:#fff;border:1px solid #e2e2e2}.widget-body .well{margin-bottom:0}.well.transparent{border:none!important;background:none!important}.jarviswidget.well.transparent>div,.jarviswidget.well.transparent>div .widget-body{padding:0!important}.well[class*=" bg-"],.well[class^=bg-]{border:1px solid #555!important}.progress-micro{height:3px!important;line-height:3px!important}.progress-xs{height:7px!important;line-height:7px!important}.progress-sm{height:14px!important;line-height:14px!important}.progress-lg{height:30px!important;line-height:30px!important}.progress .progress-bar{position:absolute;overflow:hidden;line-height:20px}.progress .progressbar-back-text{position:absolute;width:100%;height:100%;font-size:12px;line-height:20px;text-align:center}.progress .progressbar-front-text{display:block;width:100%;font-size:12px;line-height:20px;text-align:center}.progress.right .progress-bar{right:0}.progress.right .progressbar-front-text{position:absolute;right:0}.progress.vertical{width:25px;height:100%;min-height:150px;margin-right:20px;display:inline-block;margin-bottom:0}.progress.wide-bar{width:40px}.progress.vertical.bottom{position:relative}.progress.vertical.bottom .progressbar-front-text{position:absolute;bottom:0}.progress.vertical .progress-bar{width:100%;height:0;-webkit-transition:height .6s ease;transition:height .6s ease}.progress.vertical.bottom .progress-bar{position:absolute;bottom:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{position:relative;margin-bottom:20px;overflow:hidden;height:22px;background:#eee;box-shadow:0 1px 0 transparent,0 0 0 1px #e3e3e3 inset;-webkit-box-shadow:0 1px 0 transparent,0 0 0 1px #e3e3e3 inset;-moz-box-shadow:0 1px 0 transparent,0 0 0 1px #e3e3e3 inset;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}.progress-bar{float:left;width:0;height:100%;font-size:11px;color:#fff;text-align:center;background-color:#57889c;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);font-weight:700;text-shadow:0 -1px 0 rgba(0,0,0,.25);background-image:url(../img/pattern/overlay-pattern.png)}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-danger{background-color:#a90329}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.progress-bar-success{background-color:#739e73}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#c79121}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.progress-bar-info{background-color:#57889c}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,.15)),color-stop(0.75,rgba(255,255,255,.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15)25%,transparent 25%,transparent 50%,rgba(255,255,255,.15)50%,rgba(255,255,255,.15)75%,transparent 75%,transparent)}.progress .bar-info,.progress-info .bar{background:#57889c}.vertical-bars{padding:0;margin:0}.vertical-bars:after{content:"";display:block;height:0;clear:both}.vertical-bars li{padding:14px 0;width:25%;display:block;float:left;text-align:center}.vertical-bars li:first-child{border-left:none}.vertical-bars>li>.progress.vertical:first-child{margin-left:auto}.vertical-bars>li>.progress.vertical{margin:0 auto;float:none}.bar-holder:first-child{border-top:none}.bar-holder{padding:18px 15px}.bar-holder .progress{margin:0}.nav-tabs>li>a .badge{font-size:11px;padding:3px 5px;opacity:.5;margin-left:5px;min-width:17px;font-weight:400}.nav-tabs>li>a>.fa{opacity:.5}.tabs-left .nav-tabs>li>a .badge{margin-right:5px;margin-left:0}.nav-tabs>li>a .label{display:inline-block;font-size:11px;margin-left:5px;opacity:.5}.nav-tabs>li.active>a .badge,.nav-tabs>li.active>a .label,.nav-tabs>li.active>a>.fa{opacity:1}.nav-tabs>li>a{border-radius:0;color:#333}.nav-tabs>li.active>a{-webkit-box-shadow:0 -2px 0 #57889c;-moz-box-shadow:0 -2px 0 #57889c;box-shadow:0 -2px 0 #57889c;border-top-width:0!important;margin-top:1px!important;font-weight:700}.tabs-left .nav-tabs>li.active>a{-webkit-box-shadow:-2px 0 0 #57889c;-moz-box-shadow:-2px 0 0 #57889c;box-shadow:-2px 0 0 #57889c;border-top-width:1px!important;border-left:none!important;margin-left:1px!important}.tabs-left .nav-pills>li.active>a{border:none!important;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important}.tabs-right .nav-tabs>li.active>a{-webkit-box-shadow:2px 0 0 #57889c;-moz-box-shadow:2px 0 0 #57889c;box-shadow:2px 0 0 #57889c;border-top-width:1px!important;border-right:none!important;margin-right:1px!important}.tabs-below .nav-tabs>li.active>a{-webkit-box-shadow:0 2px 0 #57889c;-moz-box-shadow:0 2px 0 #57889c;box-shadow:0 2px 0 #57889c;border-bottom-width:0!important;border-top:none!important;margin-top:0!important}.tabs-left>.nav-pills>li,.tabs-left>.nav-tabs>li,.tabs-right>.nav-pills>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-pills>li>a,.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-pills>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-pills,.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-pills{border-right:none}.tabs-left>.nav-tabs>li>a{margin-right:-1px}.tabs-left>.nav-tabs>li>a:focus,.tabs-left>.nav-tabs>li>a:hover{border-color:#eee #d5d5d5 #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:focus,.tabs-left>.nav-tabs .active>a:hover{border-color:#d5d5d5 transparent #d5d5d5 #ddd;*border-right-color:#fff}.tabs-left>.tab-content{margin-left:109px}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px}.tabs-right>.nav-tabs>li>a:focus,.tabs-right>.nav-tabs>li>a:hover{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:focus,.tabs-right>.nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.tabs-below>.nav-tabs,.tabs-left>.nav-tabs,.tabs-right>.nav-tabs{border-bottom:0}.pill-content>.pill-pane,.tab-content>.tab-pane{display:none}.pill-content>.active,.tab-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a:focus,.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:focus,.tabs-below>.nav-tabs>.active>a:hover{border-color:transparent #ddd #ddd}.nav-tabs.bordered{background:#fff;border:1px solid #ddd}.nav-tabs.bordered>:first-child a{border-left-width:0!important}.nav-tabs.bordered+.tab-content{border:1px solid #ddd;border-top:none}.tabs-pull-right.nav-pills>li,.tabs-pull-right.nav-tabs>li{float:right}.tabs-pull-right.nav-pills>li:first-child>a,.tabs-pull-right.nav-tabs>li:first-child>a{margin-right:1px}.tabs-pull-right.bordered.nav-pills>li:first-child>a,.tabs-pull-right.bordered.nav-tabs>li:first-child>a{border-left-width:1px!important;margin-right:0;border-right-width:0}.jarviswidget>header>.nav-tabs.pull-left>li:first-child a{border-left-width:0!important}.btn,a:link,button{-webkit-tap-highlight-color:rgba(169,3,41,.5)}#logo-group *,.login-info,.login-info *,.minified .menu-item-parent{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.hidden-desktop{display:none!important}.dropdown-menu-xs{min-width:37px}.dropdown-menu-xs>li>a{padding:3px 10px}.dropdown-menu-xs>li>a:hover i{color:#fff!important}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#bfbfbf;margin-top:5px;margin-right:-10px}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}.table.has-tickbox thead tr th:first-child{width:25px}.table.has-tickbox.smart-form tbody tr td:first-child .checkbox,.table.has-tickbox.smart-form tbody tr td:first-child .radio,.table.has-tickbox.smart-form thead tr th:first-child .checkbox,.table.has-tickbox.smart-form thead tr th:first-child .radio{padding:0!important}.fc-border-separate thead tr,.table thead tr{background-color:#eee;background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#fafafa));background-image:-webkit-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-moz-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-ms-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-o-linear-gradient(top,#f2f2f2 0,#fafafa 100%);background-image:-linear-gradient(top,#f2f2f2 0,#fafafa 100%);font-size:12px}.fc-border-separate thead tr th{padding:4px;line-height:1.428571429}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-width:1px}.no-padding>.table-bordered,.no-padding>.table-responsive>.table-bordered{border:none!important}.no-padding>.table-bordered tbody tr td:first-child,.no-padding>.table-bordered thead tr td:first-child,.no-padding>.table-bordered thead tr th:first-child,.no-padding>.table-responsive>.table-bordered tbody tr td:first-child,.no-padding>.table-responsive>.table-bordered thead tr td:first-child,.no-padding>.table-responsive>.table-bordered thead tr th:first-child{border-left-width:0!important}.no-padding>.table-bordered tbody tr td:last-child,.no-padding>.table-bordered thead tr th:last-child,.no-padding>.table-responsive>.table-bordered tbody tr td:last-child,.no-padding>.table-responsive>.table-bordered thead tr th:last-child{border-right-width:0!important}.no-padding>.table-bordered tbody tr:last-child td,.no-padding>.table-responsive>.table-bordered tbody tr:last-child td{border-bottom-width:0!important}.no-padding .table-responsive .table{margin-bottom:0}.no-padding .note-editable .table-bordered{border:1px solid #ddd!important}.smart-form.table td .checkbox i,.smart-form.table td .radio i,.smart-form.table th .checkbox i,.smart-form.table th .radio i{top:0!important}.table-condensed.table>tbody>tr>td,.table-condensed.table>tbody>tr>th,.table-condensed.table>tfoot>tr>td,.table-condensed.table>tfoot>tr>th,.table-condensed.table>thead>tr>td,.table-condensed.table>thead>tr>th{padding:5px 10px!important}.show-stats .progress{height:7px;border-radius:0;margin-top:3px;margin-bottom:15px}.show-stats{padding-top:6px!important}.show-stat-buttons{float:left;width:100%}.show-stats .show-stat-buttons>:first-child{padding-right:5px}.show-stats .show-stat-buttons>:last-child{padding-left:5px}.show-stat-microcharts{margin-left:-10px;margin-right:-10px}.show-stat-microcharts>div{border-right:1px solid #DADADA!important;border-top:1px solid #DADADA!important;margin-top:10px!important;height:65px;overflow:hidden;padding:7px 9px}.show-stat-microcharts>:last-child{border-right:none!important}.show-stat-microcharts .sparkline{margin-top:10px;margin-right:8px;opacity:.7}.show-stat-microcharts .sparkline:hover{opacity:1}.smaller-stat{margin:0;padding:0;list-style:none}.smaller-stat li{margin-top:3px;margin-right:0}.smaller-stat li:first-child{margin-top:8px}.smaller-stat span.label{width:40px;display:block;text-align:left;opacity:.5;cursor:default}.smaller-stat span.label:hover{opacity:1}.login-info{display:block;font-size:12px;height:39px;color:#fff;border:solid transparent;border-width:1px 0;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);width:100%;margin:0!important;border-bottom:1px solid #525151}.login-info a{text-decoration:none!important;color:#a8a8a8;display:inline-block;margin-top:6px}.login-info a span{text-transform:capitalize;font-size:14px;display:inline-block;text-decoration:none;max-width:150px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.login-info a span+i{vertical-align:middle}.login-info a:hover{color:#fff}.login-info>span{height:38px;display:block;padding:0 10px;border-bottom:1px solid #1A1817}.login-info img{width:25px;height:auto;display:inline-block;vertical-align:middle;margin-top:1px;margin-right:5px;margin-left:0;border-left:3px solid #fff}img.away,img.busy,img.offline,img.online{border-left:3px solid #fff}img.online{border-left-color:#40ac2b!important}img.busy{border-left-color:#ed1c24!important}img.offline{border-left-color:#ddd!important}img.away{border-left-color:#ffc40d!important}.client-form header{padding:15px 13px;margin:0;border-bottom-style:solid;border-bottom-color:rgba(0,0,0,.1);background:rgba(248,248,248,.9)}.minified .inbox-badge{border-radius:50%;font-size:9px;padding:2px;position:absolute;top:6px;right:6px;background:#ED1C24;min-width:13px}.minifyme{border-bottom:1px solid #302F2F;background:#454545;color:#A8A8A8;text-align:center;padding:0;width:36px;height:28px;display:block;position:absolute;right:-3px;border-radius:5px 0 0 5px;cursor:pointer;margin-top:5px;font-size:19px;transition:all .1s linear 0s}.minifyme:hover{background:#646464;color:#E4E4E4;right:0}.minified .minifyme{right:0;color:#A8A8A8;position:relative;width:100%;border-radius:0;margin:0;height:34px;font-size:23px}.minified .minifyme .fa:before{content:"\f0a9"}.minified .login-info a i,.minified .login-info a span{display:none}.minified .login-info span{padding:0 5px;text-align:center}.minified .login-info img{margin:-2px 0 0;width:30px}.minified .login-info{height:38px;border-bottom:1px solid #181818}.minified #left-panel{width:45px}.minified #main{margin-left:45px}.minified #left-panel,.minified nav>ul>li{overflow:visible}.minified nav>ul>ul{min-height:100px!important;max-height:180px!important;overflow-y:scroll;overflow-x:hidden;background:#ed1c24!important}.minified nav>ul>li,.minified nav>ul>li a{position:relative}.minified nav ul>li>a{padding:10px 11px;display:block}.minified nav>ul>li>a .fa.fa-fw{display:block;width:auto;text-align:center;padding:0}.minified nav>ul>li>a>i{text-align:center;margin:0;display:block}.minified nav>ul>li.active>a::before{content:"\f0d9"}.minified nav ul ul li a{padding-left:14px}.minified nav ul ul li li a{padding-left:25px}.minified nav>ul ul li::before,.minified nav>ul>li>ul::before{left:12px}.minified nav>ul>li>a .menu-item-parent,.minified nav>ul>li>a>b{display:none}.minified nav>ul>li>a>.menu-item-parent{display:none;position:absolute;left:40px;top:-3px;width:186px;height:38px;line-height:38px;background-color:#f5f5f5;color:#333;z-index:3;-webkit-box-shadow:2px 1px 2px 0 rgba(0,0,0,.2);-moz-box-shadow:2px 1px 2px 0 rgba(0,0,0,.2);box-shadow:2px 1px 2px 0 rgba(0,0,0,.2);border-left:1px solid #bfbfbf;border-top:1px solid #D8D4D4;border-bottom:1px solid #fff;padding-left:12px}.minified nav>ul>li>ul{display:none!important;position:absolute;left:40px;width:200px;z-index:5;border:1px solid #bfbfbf;min-height:180px;-webkit-box-shadow:1px 1px 2px 0 rgba(0,0,0,.2);-moz-box-shadow:1px 1px 2px 0 rgba(0,0,0,.2);box-shadow:1px 1px 2px 0 rgba(0,0,0,.2);background:#3A3633;margin-top:-3px}.minified nav ul>li>ul>li>ul{position:relative;left:13px;border:none;margin-left:-12px;width:197px}.minified nav>ul>li:hover>a>.menu-item-parent,.minified nav>ul>li:hover>ul{display:block!important}.minified nav>ul>li>ul>li{background-color:rgba(69,69,69,.9)}.minified nav>ul>li>ul>li>ul>li{background-color:#484B50}.minified nav>ul>li{border-bottom:1px solid #1A1817;border-top:1px solid #525151}.minified nav>ul>li>ul::before{border-left:none}.minified nav>ul ul li::before{border:none}.slimScrollDiv,.slimScrollDiv>:first-child{overflow:hidden}.minified .slimScrollDiv,.minified .slimScrollDiv>:first-child{overflow:visible!important}.minified .slimScrollBar,.minified .slimScrollRail{display:none}.minified nav>ul>li>ul>li>a,.minified nav>ul>li>ul>li>ul>li>a{padding-top:7px;padding-bottom:7px}.minified nav>ul>li>ul>li>ul>li a{padding-top:6px;padding-bottom:6px}.minified nav ul ul ul ul li a{padding-left:45px}.minified nav ul ul ul ul ul li a{padding-left:62px}.minified nav ul ul ul ul ul ul li a{padding-left:82px}.pagination.pagination-alt>li>a{box-shadow:none;-moz-box-shadow:none;-webkit-box-shadow:none;border:none;margin-left:-1px}.pagination.pagination-alt>li:first-child>a{padding-left:0}.pagination>li>a,.pagination>li>span{box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05)}.disabled{color:#fff}.btn-default.disabled{color:#999}.btn{border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05)}.btn:active{position:relative;top:1px;left:1px}.btn.btn-ribbon{background-color:#707070;background-image:-moz-linear-gradient(top,#777,#666);background-image:-webkit-gradient(linear,0 0,0 100%,from(#777),to(#666));background-image:-webkit-linear-gradient(top,#777,#666);background-image:-o-linear-gradient(top,#777,#666);background-image:linear-gradient(to bottom,#777,#666);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff777777', endColorstr='#ff666666', GradientType=0);color:#fff;padding:0 5px;line-height:20px;vertical-align:middle;height:20px;display:block;border:none;float:left;margin:0 8px 0 0;cursor:pointer}.btn.btn-ribbon>i{font-size:111%}.ribbon-button-alignment{padding-top:10px;display:inline-block}.ribbon-button-alignment.pull-right>.btn.btn-ribbon{margin:0 0 0 8px}.panel-purple{border-color:#6e587a}.panel-purple>.panel-heading{color:#fff;background-color:#6e587a;border-color:#6e587a}.panel-greenLight{border-color:#71843f}.panel-greenLight>.panel-heading{color:#fff;background-color:#71843f;border-color:#71843f}.panel-greenDark{border-color:#496949}.panel-greenDark>.panel-heading{color:#fff;background-color:#496949;border-color:#496949}.panel-darken{border-color:#333}.panel-darken>.panel-heading{color:#fff;background-color:#404040;border-color:#404040}.panel-pink{border-color:#ac5287}.panel-pink>.panel-heading{color:#fff;background-color:#ac5287;border-color:#ac5287}.panel-green{border-color:#356e35}.panel-green>.panel-heading{color:#fff;background-color:#356e35;border-color:#356e35}.panel-blueLight{border-color:#92a2a8}.panel-blueLight>.panel-heading{color:#fff;background-color:#92a2a8;border-color:#92a2a8}.panel-pinkDark{border-color:#a8829f}.panel-pinkDark>.panel-heading{color:#fff;background-color:#a8829f;border-color:#a8829f}.panel-redLight{border-color:#a65858}.panel-redLight>.panel-heading{color:#fff;background-color:#a65858;border-color:#a65858}.panel-red{border-color:#a90329}.panel-red>.panel-heading{color:#fff;background-color:#a90329;border-color:#a90329}.panel-teal{border-color:#568a89}.panel-teal>.panel-heading{color:#fff;background-color:#568a89;border-color:#568a89}.panel-orange{border-color:#c79121}.panel-orange>.panel-heading{color:#fff;background-color:#c79121;border-color:#c79121}.panel-blueDark{border-color:#4c4f53}.panel-blueDark>.panel-heading{color:#fff;background-color:#4c4f53;border-color:#4c4f53}.panel-magenta{border-color:#6e3671}.panel-magenta>.panel-heading{color:#fff;background-color:#6e3671;border-color:#6e3671}.panel-blue{border-color:#57889c}.panel-blue>.panel-heading{color:#fff;background-color:#57889c;border-color:#57889c}.panel-footer>.btn-block{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;border-bottom:none;border-left:none;border-right:none}.btn-circle{width:30px;height:30px;text-align:center;padding:6px 0;font-size:12px;line-height:18px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-lg{width:50px;height:50px;padding:10px 15px;font-size:18px;line-height:30px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-circle.btn-xl{width:70px;height:70px;padding:10px 15px;font-size:24px;line-height:50px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%}.btn-metro{margin:0 0 20px;padding-top:15px;padding-bottom:15px}.btn-metro>span{display:block;vertical-align:bottom;margin-top:10px;text-transform:uppercase}.btn-metro>span.label{position:absolute;top:0;right:0}.btn-label{position:relative;left:-12px;display:inline-block;padding:6px 12px;background:rgba(0,0,0,.15);border-radius:3px 0 0 3px}.btn-labeled{padding-top:0;padding-bottom:0}.btn-link{box-shadow:none;-webkit-box-shadow:none;font-size:14px}#left-panel{-webkit-transition:250ms cubic-bezier(0.1,.57,.1,1);transition:250ms cubic-bezier(0.1,.57,.1,1);-webkit-transform:translate(0px,0) translateZ(0px)}#main{-webkit-transition:all .2s ease-out;transition:all .2s ease-out}.chart-large,.chart-small,.chart-xl{overflow:hidden}.chart-small{height:100px;width:100%}.chart-large{height:235px;width:100%}.chart-xl{height:297px;width:100%}#flotTip{padding:3px 5px;background-color:#fff;z-index:9999;color:#333;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);-moz-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1);font-size:14px;border:1px solid #C1C1C1;-moz-border-radius:4px;-khtml-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}#flotTip span{color:#38812D;font-weight:700}.legendLabel span{display:block;margin:0 5px}.legendColorBox{padding-left:10px;vertical-align:top;padding-top:5px}.legendColorBox div>div{width:4px;height:4px;border-radius:50%;-webkit-border-radius:50%;-moz-border-radius:50%;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,.8);border:solid 2px rgba(230,230,230,.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:700;margin:.25em 0}.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:.1em 0}.morris-hover{position:absolute;z-index:903}.fixed-page-footer .morris-hover{z-index:900}.chart{overflow:hidden;height:220px;margin:20px 5px 10px 10px}.has-legend{margin-top:30px!important}.has-legend-unique{margin-top:19px!important}.easyPieChart{position:relative;text-align:center}.easyPieChart canvas{position:absolute;top:0;left:0}.easy-pie-chart{display:inline-block}.easy-pie-chart .percent{color:#444;font-size:12px;font-weight:700}.easy-pie-title{display:inline-block;margin:10px 6px 0;font-size:12px;font-weight:400;text-transform:uppercase;width:100px;height:19px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.easy-pie-title .icon-color-bad,.easy-pie-title .icon-color-good{font-size:18px}.icon-color-good{color:#40ac2b}.icon-color-bad{color:#ed1c24}.degree-sign:after,.percent-sign:after{content:" %";line-height:normal}.degree-sign:after{content:" °F"}.hidden-menu #left-panel{left:-210px;z-index:903}.hidden-menu #main{margin-left:10px}.hidden-menu #left-panel:hover{left:0}.hidden-menu .minifyme,.minified #hide-menu{display:none}.btn-header.pull-right{margin-left:6px}.btn-header a>span{font-size:13px;font-weight:400;line-height:30px;height:30px;display:inline-block}.btn-header>:first-child>a{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;cursor:default!important;display:inline-block;font-weight:700;height:30px;min-width:30px;padding:2px;text-align:center;text-decoration:none!important;-moz-user-select:none;-webkit-user-select:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,left top,left bottom,from(#f8f8f8),to(#f1f1f1));background-image:-webkit-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-moz-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-ms-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:-o-linear-gradient(top,#f8f8f8,#f1f1f1);background-image:linear-gradient(top,#f8f8f8,#f1f1f1);border:1px solid #bfbfbf;color:#6D6A69;font-size:17px;margin:10px 0 0}.btn-header>:first-child>a:hover{border:1px solid #bfbfbf;color:#222;transition:all 0s;cursor:pointer;-webkit-box-shadow:inset 0 0 4px 1px rgba(0,0,0,.08);box-shadow:inset 0 0 4px 1px rgba(0,0,0,.08)}.btn-header>:first-child>a:active{background-color:#e8e8e8;background-image:-moz-linear-gradient(top,#e8e8e8 0,#ededed 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#e8e8e8),color-stop(100%,#ededed));background-image:-webkit-linear-gradient(top,#e8e8e8 0,#ededed 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#ededed 100%);background-image:-ms-linear-gradient(top,#e8e8e8 0,#ededed 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#ededed 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e8e8e8', endColorstr='#ededed', GradientType=0);-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15)}.hidden-menu #hide-menu>:first-child>a{background-color:#e8e8e8;background-image:-moz-linear-gradient(top,#5a5a5a 0,#686868 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#5a5a5a),color-stop(100%,#686868));background-image:-webkit-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-o-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:-ms-linear-gradient(to bottom,#5a5a5a 0,#686868 100%);background-image:linear-gradient(to bottom,#5a5a5a 0,#686868 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5A5A5A', endColorstr='#686868', GradientType=0);-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);box-shadow:inset 0 0 3px 1px rgba(0,0,0,.15);color:#fff;border-color:#494949}.full-screen #fullscreen>:first-child>a:active,.hidden-menu #hide-menu>:first-child>a:active{-webkit-box-shadow:inset 0 0 6px 1px rgba(0,0,0,.2);box-shadow:inset 0 0 6px 1px rgba(0,0,0,.2)}.ajax-dropdown>:first-child{margin:0 0 3px;padding:0 0 9px}.ajax-dropdown{position:absolute;display:none;z-index:905;top:48px;left:16px;width:344px;height:435px;border-radius:0;-webkit-border-radius:0;-moz-border-radius:0;-webkit-box-shadow:0 2px 4px rgba(30,30,100,.25);-moz-box-shadow:0 2px 4px rgba(30,30,100,.25);box-shadow:0 2px 4px rgba(30,30,100,.25);padding:10px;background:#fff;border:1px solid #b3b3b3}.ajax-dropdown:after,.ajax-dropdown:before{bottom:100%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.ajax-dropdown:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:7px;left:50%;margin-left:-7px}.ajax-dropdown:before{border-color:rgba(131,131,131,0);border-bottom-color:#838383;border-width:8px;left:50%;margin-left:-8px}.ajax-dropdown .btn-group .btn{font-weight:700;text-transform:capitalize}.ajax-dropdown .btn-group>:nth-child(2){border-right-width:0;border-left-width:0}.ajax-dropdown .btn-group>:last-child{border-right-width:1px!important}.ajax-dropdown .btn-group .btn:active{top:0;left:0}.ajax-notifications{height:365px;display:block;overflow:auto;margin-right:-10px;margin-left:-10px;border-bottom:1px solid #CECECE;border-top:1px solid #CECECE;background:#E9E9E9}.ajax-notifications>.alert.alert-transparent{background-color:transparent;border-color:transparent;color:#757575;margin:13px 10px}.ajax-notifications>.alert>:first-child{margin-bottom:10px;font-weight:400}.ajax-dropdown>:last-child{font-size:13px;display:block;padding:5px 0;line-height:22px;font-weight:400}.ajax-dropdown .fa-4x.fa-border{border-width:3px;border-radius:50%;-webkit-border-radius:50%;-moz-border-radius:50%;display:block;margin:0 auto;width:46px;text-align:center;color:#D1D1D1;border-color:#D1D1D1}.dropdown-large{position:static!important}.dropdown-menu-large{margin-left:16px;margin-right:16px;padding:20px 0}.dropdown-menu-large>li>ul{padding:0;margin:0}.dropdown-menu-large>li>ul>li{list-style:none}.dropdown-menu-large>li>ul>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.428571429;color:#333;white-space:normal}.dropdown-menu-large>li ul>li>a:focus,.dropdown-menu-large>li ul>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu-large .disabled>a,.dropdown-menu-large .disabled>a:focus,.dropdown-menu-large .disabled>a:hover{color:#999}.dropdown-menu-large .disabled>a:focus,.dropdown-menu-large .disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.dropdown-menu-large .dropdown-header{color:#428bca;font-size:18px}@media (max-width:768px){.dropdown-menu-large{margin-left:0;margin-right:0}.dropdown-menu-large>li{margin-bottom:30px}.dropdown-menu-large>li:last-child{margin-bottom:0}.dropdown-menu-large .dropdown-header{padding:3px 15px!important}}.pagination-xs>li>a,.pagination-xs>li>span{padding:4px 9px;font-size:12px}.notification-body *,.notification-body:after *,.notification-body:before *{box-sizing:border-box!important;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important}.notification-body{padding:0 0 0 3px;margin:0;list-style:none}.notification-body>li{border-bottom:1px solid #E9E9E9;position:relative}.notification-body>li>span{background:#fff;display:block;min-height:25px;overflow:hidden;padding:8px 10px 13px;white-space:normal}.notification-body>li>span:hover{background:#F0F4F7;color:#667F8F}.notification-body>li a.msg{padding-left:50px!important}.notification-body>li a,.notification-body>li a span{display:block;position:relative;overflow:hidden}.notification-body>li a,.notification-body>li a:hover{text-decoration:none}.notification-body>li:hover .progress{background:#fff;box-shadow:0 1px 0 rgba(0,0,0,0),0 0 0 1px #a7a7a7 inset;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0),0 0 0 1px #ccc inset;-moz-box-shadow:0 1px 0 transparent,0 0 0 1px #fff inset}.notification-body>li:hover .text-muted{color:#333}.notification-body .from{font-size:14px;line-height:normal;color:#333;font-weight:400;margin-right:60px;margin-bottom:6px;height:20px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification-body .unread .from{font-weight:700}.notification-body .unread{background:#FFFFE0}.notification-body time{position:absolute;top:3px;right:0;font-size:11px;font-weight:400;color:#058dc7}.notification-body .msg-body,.notification-body .subject{font-size:13px;color:#A0A0A0;max-height:35px;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.notification-body .subject{font-size:13px;color:#333;max-height:22px}.bootstrapWizard{display:block;list-style:none;padding:0;position:relative;width:100%}.bootstrapWizard a:active,.bootstrapWizard a:focus,.bootstrapWizard a:hover{text-decoration:none}.bootstrapWizard li{display:block;float:left;width:25%;text-align:center;padding-left:0}.bootstrapWizard li:before{border-top:3px solid #55606E;content:"";display:block;font-size:0;overflow:hidden;position:relative;top:11px;right:1px;width:100%;z-index:1}.bootstrapWizard li:first-child:before{left:50%;max-width:50%}.bootstrapWizard li:last-child:before{max-width:50%;width:50%}.bootstrapWizard li.complete .step{background:#0aa66e;padding:1px 6px;border:3px solid #55606E}.bootstrapWizard li .step i{font-size:10px;font-weight:400;position:relative;top:-1.5px}.bootstrapWizard li .step{background:#B2B5B9;color:#fff;display:inline;font-size:15px;font-weight:700;padding:7px 13px;border:3px solid transparent;border-radius:50%;line-height:normal;position:relative;text-align:center;z-index:2;transition:all .1s linear 0s}.bootstrapWizard li.active .step,.bootstrapWizard li.active.complete .step{background:#0091d9;color:#fff;font-weight:700;padding:7px 13px;font-size:15px;border-radius:50%;border:3px solid #55606E}.bootstrapWizard li.active .title,.bootstrapWizard li.complete .title{color:#2B3D53}.bootstrapWizard li .title{color:#bfbfbf;display:block;font-size:13px;line-height:15px;max-width:100%;position:relative;table-layout:fixed;text-align:center;top:20px;word-wrap:break-word;z-index:104}.wizard-actions{display:block;list-style:none;padding:0;position:relative;width:100%}.wizard-actions li{display:inline}.tab-content.transparent{background-color:transparent}.fuelux .wizard{position:relative;overflow:hidden;background-color:#f9f9f9;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,.065);box-shadow:0 1px 4px rgba(0,0,0,.065)}.fuelux .wizard:after,.fuelux .wizard:before{display:table;line-height:0;content:""}.fuelux .wizard:after{clear:both}.fuelux .wizard ul{width:4000px;padding:0;margin:0;list-style:none outside none}.fuelux .wizard ul.previous-disabled li.complete{cursor:default}.fuelux .wizard ul.previous-disabled li.complete:hover{color:#356e35;cursor:default;background:#f3f4f5}.fuelux .wizard ul.previous-disabled li.complete:hover .chevron:before{border-left-color:#f3f4f5}.fuelux .wizard ul li{position:relative;float:left;height:46px;padding:0 20px 0 30px;margin:0;font-size:16px;line-height:46px;color:#999;cursor:default;background:#ededed}.fuelux .wizard ul li .chevron{position:absolute;top:0;right:-14px;z-index:1;display:block;border:24px solid transparent;border-right:0;border-left:14px solid #d4d4d4}.fuelux .wizard ul li .chevron:before{position:absolute;top:-24px;right:1px;display:block;border:24px solid transparent;border-right:0;border-left:14px solid #ededed;content:""}.fuelux .wizard ul li.complete{color:#468847;background:#f3f4f5}.fuelux .wizard ul li.complete:hover{cursor:pointer;background:#e7eff8}.fuelux .wizard ul li.complete:hover .chevron:before{border-left:14px solid #e7eff8}.fuelux .wizard ul li.complete .chevron:before{border-left:14px solid #f3f4f5}.fuelux .wizard ul li.active{color:#3a87ad;background:#f1f6fc}.fuelux .wizard ul li.active .chevron:before{border-left:14px solid #f1f6fc}.fuelux .wizard ul li .badge{margin-right:8px}.fuelux .wizard ul li:first-child{padding-left:20px;border-radius:4px 0 0 4px}.fuelux .wizard .actions{position:absolute;right:0;z-index:2;float:right;padding-right:15px;padding-left:15px;line-height:46px;vertical-align:middle;background-color:#eee;border-left:1px solid #d4d4d4}.fuelux .wizard .actions a{margin-right:8px;font-size:12px;line-height:45px}.fuelux .wizard .actions .btn-prev i{margin-right:5px}.fuelux .wizard .actions .btn-next i{margin-left:5px}.fuelux .step-content .step-pane{display:none}.fuelux .step-content .active{display:block}.fuelux .step-content .active .btn-group .active{display:inline-block}.jarvismetro-tile{float:left;display:block;background-color:#fff;width:100px;height:70px;cursor:pointer;box-shadow:inset 0 0 1px #FFC;border:1px dotted #C5C5C5;text-decoration:none;color:#fff;font-weight:300;font-smooth:always;margin:0 10px 20px 0;padding:5px;position:relative}.jarvismetro-tile:hover{z-index:10;-webkit-transform:scale(1.07);-moz-transform:scale(1.07)}.jarvismetro-tile.big-cubes{width:120px;height:120px}.jarvismetro-tile.double{width:249px}.jarvismetro-tile:active{top:1px;left:1px}.jarvismetro-tile .iconbox{text-align:center}.jarvismetro-tile .iconbox i{display:block;margin:15px auto 0;height:75px}.jarvismetro-tile .iconbox span{display:block;text-align:left}.jarvismetro-tile .iconbox span>span{position:absolute;right:-3px;bottom:-3px;border-radius:50%;padding:5px;border:1px solid #fff}.selected{border:1px solid #0091d9!important;position:relative}.selected:before{display:block;position:absolute;content:"\f00c";color:#fff;right:4px;top:3px;font-family:FontAwesome;z-index:2}.selected:after{width:0;height:0;border-top:35px solid #0091d9;border-left:35px solid rgba(0,0,0,0);position:absolute;display:block;right:0;content:"";top:0;z-index:1}#shortcut{position:absolute;top:0;left:0;height:auto;width:100%;background-color:#33302F;background-color:rgba(0,0,0,.85);z-index:907;display:none;color:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#shortcut ul{padding:15px 20px 10px;list-style:none;margin:0;box-shadow:0 4px 10px rgba(0,0,0,.3);-moz-box-shadow:0 4px 10px rgba(0,0,0,.3);border-bottom:1px solid #423F3F}#shortcut ul li{display:inline-block;width:auto}#shortcut ul li .jarvismetro-tile{margin:0 3px 3px;border:none;border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}#shortcut ul li .jarvismetro-tile:hover{color:#fff;text-decoration:none}#shortcut ul li .jarvismetro-tile:active,#shortcut ul li .jarvismetro-tile:focus{left:0;top:0}.shortcut-on #response-btn{display:none!important}.shortcut-on #left-bar .navbar,.shortcut-on #main .navbar{border:none!important}.arrow-box-up:after,.arrow-box-up:before{bottom:100%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.arrow-box-up:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:7px;left:50%;margin-left:-7px}.arrow-box-up:before{border-color:rgba(131,131,131,0);border-bottom-color:#838383;border-width:8px;left:50%;margin-left:-8px}.arrow-box-up-right:after,.arrow-box-up-right:before{bottom:100%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.arrow-box-up-right:after{border-color:rgba(255,255,255,0);border-bottom-color:#fff;border-width:7px;right:10px;margin-left:-7px}.arrow-box-up-right:before{border-color:rgba(131,131,131,0);border-bottom-color:#838383;border-width:8px;right:9px;margin-left:-8px}.tooltip-inner{padding:5px 10px;font-size:11px;font-family:Arial,Helvetica,sans-serif;font-weight:700;border-radius:0}.jqstooltip{padding:7px!important;border-radius:3px!important;-webkit-border-radius:3px!important;-moz-border-radius:3px!important;border:none!important;background-color:#000!important;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.jqstooltip .jqsfield{font-family:"Segoe UI","Open Sans",Calibri,Candara,Arial,sans-serif;font-size:11px}#sparks{display:block;list-style:none;margin:10px 0 0;padding:0;text-align:right}#sparks li{display:inline-block;max-height:47px;overflow:hidden;text-align:left;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}#sparks li h5{color:#555;float:left;font-size:11px;font-weight:400;margin:-3px 0 0 0;padding:0;border:none;text-transform:uppercase}#sparks li span{color:#636363;display:block}#sparks li{border-left:1px dotted #c7c7c7;padding:0 10px}#sparks li:last-child{padding-right:0}#sparks li:first-child{border-left:none;padding-left:0}.sparks-info{min-width:70px}.sparks-info span{font-size:18px;line-height:20px;margin:0;text-transform:none}.sparks-info .sparkline{display:block;float:right;margin:3px 0 0 20px}.custom-scroll::-webkit-scrollbar{-webkit-overflow-scrolling:touch;height:10px;width:10px}.custom-scroll::-webkit-scrollbar:hover{background-color:#E9E9E9;border:1px solid #dbdbdb}.custom-scroll::-webkit-scrollbar-button:end:increment,.custom-scroll::-webkit-scrollbar-button:start:decrement{background:0 0;display:block;height:0}.custom-scroll::-webkit-scrollbar-track{background-clip:padding-box;border:solid transparent}.custom-scroll::-webkit-scrollbar-track-piece{-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;-webkit-border-radius:0;background-color:transparent;border-radius:0}.custom-scroll::-webkit-scrollbar-thumb{-moz-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);-webkit-box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07);background-clip:padding-box;background-color:rgba(0,0,0,.2);border:none;box-shadow:inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)}.custom-scroll::-webkit-scrollbar-thumb:horizontal,.custom-scroll::-webkit-scrollbar-thumb:vertical{-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;-webkit-border-radius:0;background-color:#bfbfbf;border-radius:0}.custom-scroll::-webkit-scrollbar-thumb:active{-moz-box-shadow:inset 1px 1px 3px rgba(0,0,0,.33);-webkit-box-shadow:inset 1px 1px 3px rgba(0,0,0,.33);background-color:rgba(0,0,0,.44);box-shadow:inset 1px 1px 3px rgba(0,0,0,.33)}.custom-scroll::-webkit-scrollbar-thumb:hover{background-color:#959595}.twitter-typeahead .tt-hint,.twitter-typeahead .tt-query{margin-bottom:0}.tt-dropdown-menu{min-width:160px;margin-top:2px;padding:5px 0;background-color:#fff;border:1px solid #bfbfbf;border:1px solid rgba(0,0,0,.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.tt-suggestion{display:block;padding:3px 20px}.tt-suggestion.tt-is-under-cursor{color:#fff;background-color:#0081c2}.tt-suggestion.tt-is-under-cursor a{color:#fff}.tt-suggestion p{margin:0}.google_maps{width:100%;height:350px;position:relative}.google_maps *{box-sizing:content-box;-webkit-box-sizing:content-box;-moz-box-sizing:content-box}.google_maps img{max-width:none}.header-btn{margin-top:5px}.tree{min-height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tree li{list-style-type:none;margin:0;padding:5px;position:relative}.tree ul ul li:hover{background:rgba(0,0,0,.015)}.tree li:after,.tree li:before{content:'';left:-20px;position:absolute;right:auto}.tree li:before{border-left:1px solid #999;bottom:50px;height:100%;top:-11px;width:1px;-webkit-transition:"border-color 0.1s ease 0.1s";-moz-transition:"border-color 0.1s ease 0.1s";-o-transition:"border-color 0.1s ease 0.1s";transition:"border-color 0.1s ease 0.1s"}.tree li:after{border-top:1px solid #999;height:20px;top:18px;width:25px}.tree li span{-moz-border-radius:5px;-webkit-border-radius:5px;border:1px dotted #999;border-radius:5px;display:inline-block;padding:3px 8px;text-decoration:none;-webkit-transition:color .2s ease .1s,background-color .2s ease .1s,border-color .3s ease .2s;-moz-transition:color .2s ease .1s,background-color .2s ease .1s,border-color .3s ease .2s;-o-transition:color .2s ease .1s,background-color .2s ease .1s,border-color .3s ease .2s;transition:color .2s ease .1s,background-color .2s ease .1s,border-color .3s ease .2s}.tree li.parent_li>span{cursor:pointer;padding:7px}.tree>ul>li::after,.tree>ul>li:before{border:0}.tree li:last-child::before{height:30px}.tree li.parent_li>span:hover,.tree li.parent_li>span:hover+ul li span{background:#eee;border:1px solid #94a0b4;color:#000}.tree>ul{padding-left:0}.tree ul ul{padding-left:34px;padding-top:10px}.tree li.parent_li>span:hover{background-color:#DF8505;border:1px solid #C67605;color:#fff}.tree li.parent_li>span:hover+ul li::before{border-left-color:#F89406}.tree li.parent_li>span:hover+ul li::after{border-top-color:#F89406}.tree li.parent_li>span:hover+ul li span{background:#FDDFB3!important;border:1px solid #FAA937;color:#000}.jvectormap-label{position:absolute;display:none;border:solid 1px #CDCDCD;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;background:#292929;color:#fff;font-family:sans-serif,Verdana;font-size:smaller;padding:3px}.jvectormap-zoomin,.jvectormap-zoomout{position:absolute;background:#292929;padding:4px;width:22px;height:22px;cursor:pointer;line-height:10px;text-align:center;font-size:14px;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px;box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-moz-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);-webkit-box-shadow:inset 0 -2px 0 rgba(0,0,0,.05);background-color:#fff;border:1px solid #bfbfbf}.jvectormap-zoomin:hover,.jvectormap-zoomout:hover{background:#eee;border-color:#d9d9d9}.jvectormap-zoomin{top:0}.jvectormap-zoomout{top:24px}.vector-map{height:300px;width:100%;padding:10px}#heat-fill{display:block;position:relative;margin-bottom:20px;background:#333;height:7px;width:200px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAAABCAIAAAAU3Xa1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowMDE4MkZGMzMzOTgxMUUzODZBQUNFQUNFOTk0NEUxRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowMDE4MkZGNDMzOTgxMUUzODZBQUNFQUNFOTk0NEUxRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjAwMTgyRkYxMzM5ODExRTM4NkFBQ0VBQ0U5OTQ0RTFGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjAwMTgyRkYyMzM5ODExRTM4NkFBQ0VBQ0U5OTQ0RTFGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+rG8MDAAAAM5JREFUeNpUUtESwyAIg8ft9v8/W4ElBPWKV1AIiKEeEWVuVlWjINSVONBnirQDxukNgcuyTQsBzLHMDsLIQQw+nIL71JqNJ5GZJXApFNpmtlagQjfS2xGbkFA4Iwu+hu0sK3Wl3nOwNv7TvPrWk3X0eW9dK1pU9hK2eTuWb2ySJmlziutA3iBxmblPNvA5PNsuUpoDY80+Z0SW1IRpDEqwC58C14tsr1f8le8si0aojdADr/1UjaclsFashX8GGkL9wDxtRsV6ft/PX4ABADRzhOVIOJaAAAAAAElFTkSuQmCC)}.fill-a,.fill-b{width:20px;text-align:right;overflow:hidden;text-overflow:ellipsis;display:block;background:#fff;padding-right:4px;position:absolute;left:0;margin-top:-7px;font-weight:700}.fill-b{text-align:left;position:absolute;right:0;left:auto;top:0;width:60px;padding-left:4px;padding-right:0}.cke_top{background:rgba(248,248,248,.9)!important;background-image:none!important}.multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li>label.multiselect-group{margin:0;padding:3px 20px;height:100%;font-weight:700}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400}.multiselect-container>li>a>label.checkbox,.multiselect-container>li>a>label.radio{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.input-group .icon-addon .form-control{border-radius:0}.icon-addon{position:relative;color:#555;display:block}.icon-addon:after,.icon-addon:before{display:table;content:" "}.icon-addon:after{clear:both}.icon-addon .fa,.icon-addon .glyphicon,.icon-addon.addon-md .fa,.icon-addon.addon-md .glyphicon{position:absolute;z-index:2;left:10px;width:20px;margin-left:-2.5px;text-align:center;padding:10px 0;top:1px}.icon-addon.addon-lg .form-control{line-height:1.33;height:46px;font-size:18px;padding:10px 16px 10px 40px}.input-group-lg .icon-addon.addon-lg+.input-group-btn>.btn{height:46px}.icon-addon.addon-sm .form-control{height:30px;padding:5px 10px 5px 28px;font-size:12px;line-height:1.5}.icon-addon.addon-lg .fa,.icon-addon.addon-lg .glyphicon{font-size:18px;margin-left:0;left:11px;top:4px}.icon-addon .form-control,.icon-addon.addon-md .form-control{padding-left:30px;float:left;font-weight:400}.icon-addon.addon-sm .fa,.icon-addon.addon-sm .glyphicon{margin-left:0;font-size:12px;left:5px;top:-1px}.icon-addon .form-control:focus+.fa,.icon-addon .form-control:focus+.glyphicon,.icon-addon:hover .fa,.icon-addon:hover .glyphicon{color:#2580db}.icon-addon input:disabled+.fa,.icon-addon input:disabled+.glyphicon,.icon-addon select:disabled+.fa,.icon-addon select:disabled+.glyphicon{color:#ccc}html.hidden-menu-mobile-lock{overflow-x:hidden}.no-content-padding{margin:-10px -14px 0 -14px}.no-padding{padding:0!important}.no-padding>pre{margin:30px}.no-padding .dataTables_wrapper table,.no-padding>table{border:none!important;margin-bottom:0!important;border-bottom-width:0!important}.no-padding-bottom{padding-bottom:0!important}.padding-5{padding:5px!important}.padding-7{padding:7px!important}.padding-10{padding:10px!important}.padding-gutter{padding:13px!important}.padding-top-10{padding-top:10px!important}.padding-top-15{padding-top:15px!important}.padding-bottom-10{padding-bottom:10px!important}.padding-bottom-0{padding-bottom:0!important}.padding-top-0{padding-top:0!important}.no-padding .dataTables_wrapper table tr td:last-child,.no-padding .dataTables_wrapper table tr th:last-child,.no-padding>table tr td:last-child,.no-padding>table tr th:last-child{border-right:none!important}.no-padding .dataTables_wrapper table tr td:first-child,.no-padding .dataTables_wrapper table tr th:first-child,.no-padding>table tr td:first-child,.no-padding>table tr th:first-child{border-left:none!important}.no-padding .dataTables_wrapper table tbody tr:last-child td{border-bottom:0}.semi-bold{font-weight:400!important}.ultra-light{font-weight:300!important}.font-xs{font-size:85%!important}.font-sm{font-size:95%!important}.font-md{font-size:130%!important}.font-lg{font-size:160%!important}.font-xl{font-size:200%!important}.font-400{font-size:400%!important}.no-margin{margin:0!important}.margin-top-5{margin-top:5px!important}.margin-top-10{margin-top:10px!important}.margin-bottom-5{margin-bottom:5px!important}.margin-bottom-10{margin-bottom:10px!important}.margin-right-5{margin-right:5px!important}.margin-top-0{margin-top:0!important}.margin-bottom-0{margin-bottom:0!important}.no-border,.well[class*=" bg-"].no-border{border-width:0!important}.no-border-transparent{border-color:transparent!important}.no-border-radius{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0}.display-inline{display:inline-block!important}.display-normal{display:inline!important}.cursor-pointer{cursor:pointer}.hover-transparent{opacity:.5}.hover-transparent:hover{opacity:1}.text-align-center,.text-center{text-align:center!important}.text-align-left,.text-left{text-align:left!important}.text-align-right,.text-right{text-align:right!important}hr.simple{margin-top:10px;margin-bottom:10px;border-style:dashed}.pull-right{float:right!Important}.pull-left{float:left!Important}.air{position:absolute;z-index:5}.air-bottom{bottom:0}.air-top{top:0}.air-top-right{top:0;right:0}.air-top-left{top:0;left:0}.air-bottom-left{bottom:0;left:0}.air-bottom-right{bottom:0;right:0}.display-none{display:none!important}.checkbox input[type=checkbox].checkbox+span,.checkbox-inline input[type=checkbox].checkbox+span,.radio input[type=radio].radiobox+span,.radiobox-inline input[type=radio].radiobox+span{margin-left:-20px}.form-inline .checkbox input[type=checkbox].checkbox+span,.form-inline .radiobox input[type=radio].radiobox+span{margin-left:0}.form-inline .checkbox,.form-inline .radiobox{padding-left:0}input[type=checkbox].checkbox+span,label input[type=radio].radiobox+span{vertical-align:middle;line-height:20px}input[type=checkbox].checkbox+span,input[type=checkbox].checkbox+span:after,input[type=checkbox].checkbox+span:before,input[type=radio].radiobox+span,input[type=radio].radiobox+span:after,input[type=radio].radiobox+span:before{box-sizing:content-box!important;-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important}input[type=checkbox].checkbox,input[type=radio].radiobox{visibility:hidden;position:absolute;z-index:20;width:18px;height:18px}label input[type=checkbox].checkbox+span,label input[type=radio].radiobox+span{position:relative;z-index:19;display:inline-block;margin:0;line-height:17px;min-height:14px;min-width:14px;margin-right:5px}label input[type=checkbox].checkbox+span:hover,label input[type=radio].radiobox+span:hover{cursor:pointer}label input[type=checkbox].checkbox+span:before,label input[type=radio].radiobox+span:before{font-family:FontAwesome;font-size:12px;border-radius:0;content:"\a0";display:inline-block;text-align:center;vertical-align:middle;padding:1px;height:12px;line-height:12px;min-width:12px;margin-right:5px;border:1px solid #bfbfbf;background-color:#f4f4f4;font-weight:400;margin-top:-1px}label input[type=radio].radiobox+span:before{content:"\a0";border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;box-shadow:inset 0 2px 3px 0 rgba(0,0,0,.1),0 1px 0 0 rgba(255,255,255,.2)}label input[type=radio].radiobox:checked+span{font-weight:700}label input[type=radio].radiobox:checked+span:before{content:"\f111";color:#2E7BCC}label input[type=radio].radiobox.style-3:checked+span:before{color:#a90329;border-color:#a90329}label input[type=radio].radiobox.style-2:checked+span:before{color:#66665e;border-color:#4d90fe;font-size:9px}label input[type=radio].radiobox.style-2:checked+span{font-weight:400}label input[type=radio].radiobox.style-1+span:before{font-size:9px;background:#fff;text-shadow:none;box-shadow:none!important;border-width:1px;height:13px;line-height:13px;min-width:13px}label input[type=radio].radiobox.style-1:checked+span:before{font-size:10px;color:#333;border-color:#333;background:#fff}label input[type=radio].radiobox.style-1:checked+span{font-weight:400}label:hover input[type=radio].radiobox+span:before,label:hover input[type=radio].radiobox:checked+span:before{color:#2E7BCC;border-color:#2E7BCC}label:hover input[type=radio].radiobox.style-3+span:before,label:hover input[type=radio].radiobox.style-3:checked+span:before{color:#a90329;border-color:#a90329}label:hover input[type=radio].radiobox.style-2:checked+span:before{color:#66665e;border-color:#4d90fe}label:hover input[type=radio].radiobox.style-1+span:before,label:hover input[type=radio].radiobox.style-1:checked+span:before{color:#333;border-color:#333;background:#fff}label:active input[type=radio].radiobox+span:before{box-shadow:inset 0 2px 3px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.4)}label input[type=radio][disabled].radiobox+span,label input[type=radio][disabled].radiobox:checked+span,label:hover input[type=radio][disabled].radiobox:checked+span:before{color:#A7A7A7;cursor:not-allowed}label input[type=radio][disabled].radiobox:checked+span:before{content:"\f111"}label input[type=radio][disabled].radiobox+span:before,label input[type=radio][disabled].radiobox:checked+span:before,label:active input[type=radio][disabled].radiobox:checked+span:before,label:hover input[type=radio][disabled].radiobox:checked+span:before{background:#eee!important;border-color:#CCC!important;box-shadow:none;color:#A7A7A7}label input[type=checkbox].checkbox+span:before{content:"\a0"}label input[type=checkbox].checkbox:checked+span:before{content:"\f00c"}label input[type=checkbox].checkbox:checked+span{font-weight:700}label input[type=checkbox].checkbox:checked+span:before{color:#2E7BCC}label input[type=checkbox].checkbox.style-3:checked+span:before{color:#fff;border-color:#a90329;background:#a90329}label input[type=checkbox].checkbox.style-2+span:before{background:0 0;border-color:#c1c1c1;box-shadow:none}label input[type=checkbox].checkbox.style-2:checked+span:before{content:"\f00c";color:#66665e;border-color:#4d90fe;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MUQ0MEM4RUFEQUE4MTFFMkEwMjM5NzlCRjAxM0UwRjciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MUQ0MEM4RUJEQUE4MTFFMkEwMjM5NzlCRjAxM0UwRjciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxRDQwQzhFOERBQTgxMUUyQTAyMzk3OUJGMDEzRTBGNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxRDQwQzhFOURBQTgxMUUyQTAyMzk3OUJGMDEzRTBGNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsD/PVAAAAAQSURBVHjaYv7//78vQIABAAlYA05NMPppAAAAAElFTkSuQmCC) #fff}label input[type=checkbox].checkbox.style-2:checked+span{font-weight:400}label input[type=checkbox].checkbox.style-1+span:before{color:#333;background:#fff;text-shadow:none;box-shadow:none!important;border-width:1px;height:12px;line-height:13px;min-width:12px}label input[type=checkbox].checkbox.style-1:checked+span:before{color:#333;border-color:#333}label input[type=checkbox].checkbox.style-1:checked+span{font-weight:400}label:active input[type=checkbox].checkbox+span:before{box-shadow:inset 0 2px 3px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.4)}label:hover input[type=checkbox].checkbox+span:before{color:#2E7BCC;border-color:#2E7BCC}label:hover input[type=checkbox].checkbox.style-3+span:before{color:#fff;border-color:#A90327}label:hover input[type=checkbox].checkbox.style-2+span:before{box-shadow:inset 0 2px 3px 0 rgba(0,0,0,.1),0 1px 0 0 rgba(255,255,255,.2)}label:hover input[type=checkbox].checkbox.style-2:checked+span:before{box-shadow:inset 0 2px 3px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.4)}label:hover input[type=checkbox].checkbox.style-1+span:before{border-color:#333}label:active input[type=checkbox].checkbox:checked+span:before{color:#fff;background:#2E7BCC;border-color:#2E7BCC}label:active input[type=checkbox].checkbox.style-3:checked+span:before{color:#a90329;background:#fff;border-color:#a90329}label:active input[type=checkbox].checkbox.style-2+span:before,label:active input[type=checkbox].checkbox.style-2:checked+span:before{color:#66665e;background:0 0;border-color:#c1c1c1;box-shadow:inset 0 2px 3px 0 rgba(0,0,0,.3),0 1px 0 0 rgba(255,255,255,.4)}label:active input[type=checkbox].checkbox.style-1:checked+span:before{color:#fff;background:#333;border-color:#333}label input[type=checkbox][disabled].checkbox+span,label input[type=checkbox][disabled].checkbox:checked+span,label:hover input[type=checkbox][disabled].checkbox:checked+span:before{color:#A7A7A7;cursor:not-allowed}label input[type=checkbox][disabled].checkbox.style-2:checked+span:before,label input[type=checkbox][disabled].checkbox:checked+span:before{content:"\f00c"}label input[type=checkbox][disabled].checkbox+span:before,label input[type=checkbox][disabled].checkbox:checked+span:before,label:active input[type=checkbox][disabled].checkbox:checked+span:before,label:hover input[type=checkbox][disabled].checkbox:checked+span:before{background:#eee!important;border-color:#CCC!important;color:#A7A7A7;box-shadow:none!important}.open>.dropdown-menu{-webkit-animation-name:flipInX;-moz-animation-name:flipInX;-o-animation-name:flipInX;animation-name:flipInX;-webkit-animation-duration:.4s;-moz-animation-duration:.4s;-o-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.active+.ajax-dropdown{-webkit-animation-name:flipInY;-moz-animation-name:flipInY;-o-animation-name:flipInY;animation-name:flipInY;-webkit-animation-duration:.7s;-moz-animation-duration:.7s;-o-animation-duration:.7s;animation-duration:.7s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.square{display:block;float:left;margin-right:10px;height:20px;width:20px}[class*=" bg-"],[class^=bg-]{filter:none!important}.txt-color-blue{color:#57889c!important}.txt-color-blueLight{color:#92a2a8!important}.txt-color-blueDark{color:#4c4f53!important}.txt-color-green{color:#356e35!important}.txt-color-greenLight{color:#71843f!important}.txt-color-greenDark{color:#496949!important}.txt-color-red{color:#a90329!important}.txt-color-yellow{color:#b09b5b!important}.txt-color-orange{color:#b19a6b!important}.txt-color-orangeDark{color:#a57225!important}.txt-color-pink{color:#ac5287!important}.txt-color-pinkDark{color:#a8829f!important}.txt-color-purple{color:#6e587a!important}.txt-color-darken{color:#404040!important}.txt-color-lighten{color:#d5e7ec!important}.txt-color-white{color:#fff!important}.txt-color-grayDark{color:#525252!important}.txt-color-magenta{color:#6e3671!important}.txt-color-teal{color:#568a89!important}.txt-color-redLight{color:#a65858!important}.bg-color-blue{background-color:#57889c!important}.bg-color-blueLight{background-color:#92a2a8!important}.bg-color-blueDark{background-color:#4c4f53!important}.bg-color-green{background-color:#356e35!important}.bg-color-greenLight{background-color:#71843f!important}.bg-color-greenDark{background-color:#496949!important}.bg-color-red{background-color:#a90329!important}.bg-color-yellow{background-color:#b09b5b!important}.bg-color-orange{background-color:#c79121!important}.bg-color-orangeDark{background-color:#a57225!important}.bg-color-pink{background-color:#ac5287!important}.bg-color-pinkDark{background-color:#a8829f!important}.bg-color-purple{background-color:#6e587a!important}.bg-color-darken{background-color:#404040!important}.bg-color-lighten{background-color:#d5e7ec!important}.bg-color-white{background-color:#fff!important}.bg-color-grayDark{background-color:#525252!important}.bg-color-magenta{background-color:#6e3671!important}.bg-color-teal{background-color:#568a89!important}.bg-color-redLight{background-color:#a65858!important}.page-footer{height:52px;padding:15px 13px 0;padding-left:233px;border-top:1px solid #CECECE;background:#2a2725;width:100%;position:absolute;display:block;bottom:0}.fixed-page-footer .page-footer{position:fixed;z-index:901}.minified .page-footer{padding-left:58px}.container.fixed-page-footer .page-footer{max-width:1164px}.hidden-menu .page-footer{padding-left:20px}@media (max-width:979px){html.hidden-menu-mobile-lock{overflow-x:hidden}#main{width:100%!important}.page-footer{padding:15px 14px 0}.profile-pic>img{width:110px}.profile-pic{float:left}.profile-pic>img{margin-right:10px}.profile-pic+div,.profile-pic+div+div{padding-left:30px;padding-right:30px}#fullscreen>:first-child>a{display:none!important}body.container{border:none!important;width:100%!important}.inbox-data-message>:first-child{height:50px;overflow:hidden}.show-stats .show-stat-buttons>:first-child{padding-right:13px}.show-stats .show-stat-buttons>:last-child{padding-left:13px}.inbox-checkbox-triggered>.btn-group .btn{padding-left:10px;padding-right:10px}.inbox-body .table-wrap{padding:0!important;padding-left:5px!important;padding-right:5px!important}.inbox-nav-bar{padding-left:5px;padding-right:5px}.inbox-data-message>:first-child>:first-child{display:block!important;font-size:14px}.inbox-table-icon>:first-child{margin-top:12px}#inbox-table .inbox-table-icon{padding-left:10px!important}.header-search.pull-right{margin-left:0}.visible-tablet{display:inline-block!important}.display-inline.hidden-tablet,.hidden-tablet{display:none!important}.jarviswidget header h2{width:310px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dropzone .dz-default.dz-message{background-size:100%;width:200px;height:43px;margin-left:-112px;margin-top:-23.5px}}@media (min-width:768px) and (max-width:979px){#main{margin-left:0}#left-panel{left:-220px}.minified #left-panel{left:0}#hide-menu>:first-child>a{margin-top:9px;width:40px}.btn-header a{margin-top:9px!important;width:40px!important}#hide-menu i{color:#6D6A69;font-size:100%}.hidden-menu #hide-menu i{color:#fff}#hide-menu i::before{content:"\f0c9"}.hidden-menu #left-panel{left:0}.hidden-menu #main{position:relative;left:210px}.hidden-menu.fixed-ribbon #ribbon{left:220px;width:100%}.fixed-ribbon #ribbon{left:0}.jarviswidget header h2{width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.header-search>input[type=text]{margin-top:9px}}@media (min-width:768px) and (max-width:880px){#main{margin-left:0;overflow-x:hidden}#left-panel{left:-220px}.no-content-padding{margin:0 -14px!important}.inbox-nav-bar.no-content-padding{margin-top:-10px!important}.minified #left-panel{left:0}#hide-menu>:first-child>a,.btn-header a{margin-top:5px!important;width:40px!important;height:39px!important;line-height:38px!important}#logo{margin-top:10px}#logo img{width:127px}.btn-header.transparent a{border:none!important;background:0 0;margin-left:0;width:25px!important;box-shadow:none!important}.btn-header.transparent a:hover{color:#a90329}#hide-menu i{color:#6D6A69;font-size:121%}.hidden-menu #hide-menu i{color:#fff}#hide-menu i::before{content:"\f0c9"}.hidden-menu #left-panel{left:0}.hidden-menu #main{position:relative;left:210px}.hidden-menu.fixed-ribbon #ribbon{left:220px;width:100%}.fixed-ribbon #ribbon{left:0}.jarviswidget header h2{width:180px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.header-search>input[type=text]{margin-top:9px}}@media (max-width:767px){.profile-pic>img{width:100px}#main{margin-left:0;overflow-x:hidden}#left-panel{left:-220px}.show-stat-microcharts>div{margin-top:0!important;border-right:none!important}.show-stat-buttons{padding-left:10px!important;padding-right:10px!important}#content,#ribbon{padding-left:5px;padding-right:5px}#header{padding-right:5px}#logo{margin-left:4px}.no-content-padding{margin:0 -5px!important}.inbox-nav-bar.no-content-padding{margin-top:-10px!important}.minified #left-panel{left:0}.btn-header.transparent a{border:none!important;background:0 0;margin-left:0;width:25px!important;box-shadow:none!important}.btn-header.transparent a:hover{color:#a90329}#hide-menu>:first-child>a,.btn-header a{margin-top:5px!important;width:40px!important;height:39px!important;line-height:38px!important}#hide-menu>:first-child>a{width:50px!important}#logo{margin-top:10px}#logo img{width:127px}#hide-menu i{color:#6D6A69;font-size:121%}.hidden-menu #hide-menu i{color:#fff}#hide-menu i::before{content:"\f0c9"}.hidden-menu #left-panel{left:0}.hidden-menu #main{position:relative;left:210px}.hidden-menu.fixed-ribbon #ribbon{left:220px;width:100%}.fixed-ribbon #ribbon{left:0}body.fixed-navigation.hidden-menu{overflow:hidden!important}.fixed-ribbon #content{padding-top:52px}.header-search{display:none}#search-mobile{display:block}.search-mobile .header-search{display:block;position:absolute;top:0;width:100%;height:49px;background:#333;padding:0 2px;box-sizing:border-box;left:0}.search-mobile .header-search>input[type=text]{margin-top:2px;height:45px;border-color:#333;padding-right:75px}.search-mobile .header-search>button{height:29px;line-height:29px;background:#DDD;right:44px}.search-mobile #search-mobile{display:none}.search-mobile #cancel-search-js{display:block}.jarviswidget header h2{width:250px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}@media only screen and (min-width:0) and (max-width:679px){.profile-pic>img{width:90px}#main{margin-left:0;overflow-x:hidden}#left-panel{left:-220px}.show-stat-microcharts>div{margin-top:0!important;border-right:none!important}.show-stat-buttons{padding-left:10px!important;padding-right:10px!important}#content,#ribbon{padding-left:5px;padding-right:5px}#header{padding-right:5px}#logo{margin-left:4px}.no-content-padding{margin:0 -5px!important}.inbox-nav-bar.no-content-padding{margin-top:-10px!important}.minified #left-panel{left:0}#header{background:#fff}#ribbon{border-bottom:1px solid #CFCFCF;border-top:1px solid #E6E6E6;background:#F5F5F5}#ribbon .breadcrumb,#ribbon .breadcrumb a{color:#6D6C6C!important}#ribbon .breadcrumb li:last-child,#ribbon .breadcrumb>.active{color:#333!important}#hide-menu>:first-child>a,.btn-header a{margin-top:5px!important;width:40px!important;height:39px!important;line-height:38px!important}#hide-menu>:first-child>a{width:50px!important}#logo{margin-top:10px}#logo img{width:127px}.btn-header.transparent a{border:none!important;background:0 0;margin-left:0;width:25px!important;box-shadow:none!important}.btn-header.transparent a:hover{color:#a90329}#hide-menu i{color:#6D6A69;font-size:121%}.hidden-menu #hide-menu i{color:#fff}#hide-menu i::before{content:"\f0c9"}.hidden-menu #left-panel{left:0}.hidden-menu #main{position:relative;left:210px}.hidden-menu.fixed-ribbon #ribbon{left:220px;width:100%}.fixed-ribbon #ribbon{left:0}.header-search{display:none}#search-mobile{display:block}.search-mobile .header-search{display:block;position:absolute;top:0;width:100%;height:49px;background:#333;padding:0 2px;box-sizing:border-box;left:0}.search-mobile .header-search>input[type=text]{margin-top:2px;height:45px;border-color:#333;padding-right:75px}.search-mobile .header-search>button{height:29px;line-height:29px;background:#DDD;right:44px}.search-mobile #search-mobile{display:none}.search-mobile #cancel-search-js{display:block}.hidden-tablet{display:none!important}.jarviswidget header h2{width:300px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}@media only screen and (min-width:320px) and (max-width:479px){.page-title{display:none}.profile-pic{text-align:left}.profile-pic>img{width:90px;margin-left:0;top:-25px;margin-right:0}.profile-pic+div>h1{font-size:20px}.profile-pic+div>h1 small{font-size:16px}.profile-carousel .carousel-indicators{top:10px}#main{margin-left:0;overflow-x:hidden}#left-panel{left:-220px}.show-stat-microcharts>div{margin-top:0!important;border-right:none!important}.show-stat-buttons{padding-left:10px!important;padding-right:10px!important}#content,#ribbon{padding-left:5px;padding-right:5px}#header{padding-right:5px}#logo{margin-left:4px}.no-content-padding{margin:0 -5px!important}.inbox-nav-bar.no-content-padding{margin-top:-10px!important}.minified #left-panel{left:0}#header{background:#fff}#ribbon{border-bottom:1px solid #CFCFCF;border-top:1px solid #E6E6E6;background:#F5F5F5}#ribbon .breadcrumb,#ribbon .breadcrumb a{color:#6D6C6C!important}#ribbon .breadcrumb li:last-child,#ribbon .breadcrumb>.active{color:#333!important}#logo{width:135px}#logo-group{width:169px!important}#sparks{text-align:center;background:#E0E0E0;padding:10px 0;margin-bottom:15px}#sparks li{padding:0 10px 0 20px}#hide-menu>:first-child>a,.btn-header a{margin-top:5px!important;width:40px!important;height:39px!important;line-height:38px!important}#logo{margin-top:10px}#logo img{width:127px}.btn-header.transparent a{border:none!important;background:0 0;margin-left:0;width:25px!important;box-shadow:none!important}.btn-header.transparent a:hover{color:#a90329}#hide-menu>:first-child>a{width:46px!important}#hide-menu i{color:#6D6A69;font-size:121%}.hidden-menu #hide-menu i{color:#fff}#hide-menu i::before{content:"\f0c9"}.hidden-menu #left-panel{left:0}.hidden-menu #main{position:relative;left:210px}.hidden-menu.fixed-ribbon #ribbon{left:220px;width:100%}.fixed-ribbon #ribbon{left:0}.hidden-mobile{display:none!important}.visible-mobile{display:inline-block!important}.ajax-notifications{height:250px}.ajax-dropdown{width:299px;height:320px;left:0;top:49px}.ajax-dropdown:before{margin-left:-14px}.ajax-dropdown:after{margin-left:-13px}.header-search{display:none}#search-mobile{display:block;margin-left:0}.search-mobile .header-search{display:block;position:absolute;top:0;width:100%;height:49px;background:#333;padding:0 2px;box-sizing:border-box;left:0}.search-mobile .header-search>input[type=text]{margin-top:2px;height:45px;border-color:#333;padding-right:75px}.search-mobile .header-search>button{height:29px;line-height:29px;background:#DDD;right:44px}.search-mobile #search-mobile{display:none}.search-mobile #cancel-search-js{display:block}.jarviswidget header h2{width:135px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}#extr-page #main{margin-top:0!important}#mobile-profile-img{display:none}.menu-on-top #mobile-profile-img{display:block!important;padding-right:2px!important;padding-left:2px!important}.menu-on-top #mobile-profile-img a.userdropdown img{width:30px;margin-top:5px;margin-left:2px;border-radius:3px;border:1px solid #797979!important}.menu-on-top .page-footer{padding:15px 13px 0}.menu-on-top.hidden-menu #left-panel{left:0}.menu-on-top #main{margin-left:0!important;margin-top:69px!important}.menu-on-top #hide-menu,.menu-on-top #logout,.menu-on-top .minifyme{display:none!important}.menu-on-top aside#left-panel{width:100%!important;min-height:0!important;height:auto;overflow:visible;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.25);box-shadow:0 2px 4px 0 rgba(0,0,0,.25);border-bottom:1px solid #222;border-top:1px solid #333}.menu-on-top aside#left-panel nav>ul{display:block;width:100%}.menu-on-top aside#left-panel nav>ul>li:first-child{margin-left:0}.menu-on-top aside#left-panel nav>ul>li{position:relative;height:auto!important;padding:0!important;display:inline-block;float:left;border-right:1px solid #222;border-left:1px solid #4E4E4E;overflow:visible}.menu-on-top aside#left-panel nav>ul>li>a{display:inline-block;height:68px;text-shadow:none!important;font-size:13px;text-decoration:none;line-height:22px;padding:10px 9px!important}.menu-on-top li.active>a{font-weight:700!important}.menu-on-top .login-info,.menu-on-top nav>ul>li>a b{display:none}.menu-on-top aside#left-panel nav>ul>li>a>i{display:block!important;margin:1px 0 4px;line-height:inherit;text-align:center;font-size:18px;margin-bottom:2px;width:100%}.menu-on-top .menu-item-parent{max-width:72px;min-width:50px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:center;font-size:13px}.menu-on-top .menu-item-parent+span{float:none!important;top:5px;right:5px;position:absolute}.menu-on-top nav ul ul li a{padding-left:10px!important;font-size:13px}.menu-on-top aside#left-panel nav>ul>li:hover{background:#fff;background:-moz-linear-gradient(top,#cfcfcf 0,#fff 66%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#cfcfcf),color-stop(66%,#fff));background:-webkit-linear-gradient(top,#cfcfcf 0,#fff 66%);background:-o-linear-gradient(top,#cfcfcf 0,#fff 66%);background:-ms-linear-gradient(top,#cfcfcf 0,#fff 66%);background:linear-gradient(to bottom,#cfcfcf 0,#fff 66%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#cfcfcf', endColorstr='#ffffff', GradientType=0)}.menu-on-top aside#left-panel nav>ul>li:hover>a{color:#333!important;border-left:1px solid #c7c7c7;border-right:1px solid #c7c7c7;padding-left:8px!important;padding-right:8px!important}.menu-on-top aside#left-panel nav>ul>li>ul{position:absolute!important;background:#3a3633}.menu-on-top aside#left-panel nav>ul>li:hover>ul{display:block!important}.menu-on-top aside#left-panel nav ul li.active>a:before{content:""!important}.menu-on-top nav>ul ul li::before,.menu-on-top nav>ul>li>ul::before{border:none}.menu-on-top nav ul ul li a,.menu-on-top nav ul ul ul li a{color:#4C4F53}.menu-on-top nav ul ul li a:hover,.menu-on-top nav ul ul li:hover>a,.menu-on-top nav ul ul ul li a:hover{color:#fff;background-color:#4C4F53}.menu-on-top nav>ul ul ul{border-top:1px solid #c7c7c7!important}.menu-on-top nav ul ul li{overflow:visible}.menu-on-top nav ul ul,.menu-on-top nav ul ul ul{background:#fff!important;border:1px solid #c7c7c7;-moz-box-shadow:inset 0 -4px 0 0 #bd2a2a;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);border-bottom:1px solid #BD2A2A;border-top:none;width:200px;border-radius:0;padding:3px;margin-left:0}.menu-on-top nav>ul ul li:hover>ul{display:block;position:absolute;z-index:999;left:100%;top:-8px;background:#333}.menu-on-top nav>ul>li>a:after{content:"\f0dd"!important;top:76%!important;color:#636363!important;left:46%}.menu-on-top nav ul ul li:hover>a:after,.menu-on-top nav>ul ul>li a:after,.menu-on-top nav>ul ul>li a:hover:after,.menu-on-top nav>ul>li>a:after{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f0da";display:block!important;position:absolute;top:9px;right:4px;color:#333}.menu-on-top nav ul ul li:hover>a:after,.menu-on-top nav>ul ul>li a:hover:after{color:#fff}.menu-on-top nav>ul ul>li a:only-child:after,.menu-on-top nav>ul>li>a:only-child:after{content:""!important}.menu-on-top nav ul ul .active>a{color:#333!important}.menu-on-top nav ul ul .active>a:hover,.menu-on-top nav ul ul li.active:hover>a{color:#fff!important}.menu-on-top .slimScrollDiv,.menu-on-top nav{overflow:visible!important}body.menu-on-top.fixed-header{padding-top:49px}body.menu-on-top.fixed-header.fixed-navigation nav>ul{padding-right:0;position:relative;height:auto;width:auto;overflow:visible}body.menu-on-top.fixed-header.fixed-navigation.fixed-ribbon #ribbon{left:0;top:118px}@media (max-width:979px){.menu-on-top #mobile-profile-img a.userdropdown img{width:39px;margin-top:0;margin-left:2px;border-radius:3px;margin-right:-3px}.menu-on-top .btn-header.pull-right{margin-left:0!important}.menu-on-top #main{margin-top:0!important}.menu-on-top #left-panel{left:0;display:none}body.menu-on-top.fixed-header.fixed-navigation.fixed-ribbon #ribbon{top:49px}.menu-on-top.hidden-menu #left-panel{display:block}.menu-on-top.hidden-menu #main{left:0!important}.menu-on-top #hide-menu{display:block!important}.menu-on-top aside#left-panel nav{height:300px!important;overflow:scroll;overflow-x:hidden!important;-webkit-overflow-scrolling:touch}.menu-on-top .menu-item-parent{white-space:inherit;overflow:visible;text-overflow:inherit;text-align:left;min-width:85%;max-width:85%;padding-left:5px}.menu-on-top .menu-item-parent+span{top:50%;margin-top:-8px}.menu-on-top nav li.active>ul{display:block}.menu-on-top nav>ul>li.active{background:#fff;background:-moz-linear-gradient(top,#cfcfcf 0,#fff 66%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#cfcfcf),color-stop(66%,#fff));background:-webkit-linear-gradient(top,#cfcfcf 0,#fff 66%);background:-o-linear-gradient(top,#cfcfcf 0,#fff 66%);background:-ms-linear-gradient(top,#cfcfcf 0,#fff 66%);background:linear-gradient(to bottom,#cfcfcf 0,#fff 66%)}.menu-on-top nav>ul>li.active>a{color:#333!important}.menu-on-top nav ul ul li:hover>a:after,.menu-on-top nav>ul ul>li a:after,.menu-on-top nav>ul ul>li a:hover:after,.menu-on-top nav>ul>li>a:after{top:50%;right:15px;font-size:15px;margin-top:-8px;content:"\f0dd"!important}.menu-on-top nav>ul ul>li a:only-child:after,.menu-on-top nav>ul>li>a:only-child:after{content:""!important}.menu-on-top nav>ul>li>a:after{top:50%!important;left:auto;margin-top:-14px;font-size:20px}.menu-on-top nav ul ul,.menu-on-top nav ul ul ul{padding:0;border:none}.menu-on-top nav ul ul ul{border-bottom:2px solid #333}.menu-on-top aside#left-panel nav>ul>li{width:100%}.menu-on-top aside#left-panel nav>ul>li>a{height:auto;display:block;padding:8px 9px!important;border-bottom:1px dotted #585858}.menu-on-top nav>ul>li>ul>li>a,.menu-on-top nav>ul>li>ul>li>ul>li>a{padding-top:10px;padding-bottom:10px}.menu-on-top aside#left-panel nav>ul>li>a>i{display:inline!important}.menu-on-top aside#left-panel nav>ul li ul{position:relative!important;width:100%;top:0;left:0}.menu-on-top aside#left-panel nav>ul>li:active>ul,.menu-on-top aside#left-panel nav>ul>li:focus>ul{display:block!important}} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/css/smartadmin-skins.min.css b/src/main/webapp/WEB-INF/views/src/css/smartadmin-skins.min.css new file mode 100644 index 0000000..64bd918 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/css/smartadmin-skins.min.css @@ -0,0 +1 @@ +.smart-style-1 a{transition:color .1s linear 0s,background-color .1s linear 0s!important}.smart-style-1 body.container{border-left:1px solid rgba(34,38,46,.4);border-right:1px solid rgba(34,38,46,.4)}.smart-style-1 #header{background-image:none;background-color:#22262e}.smart-style-1 .project-context>:first-child{color:#697B92;text-shadow:0 0 1px #111318}.smart-style-1 #ribbon{background:#e6e6e6}.smart-style-1 #ribbon .breadcrumb li:last-child,.smart-style-1 #ribbon .breadcrumb>.active{color:#868686}.smart-style-1 #ribbon .breadcrumb,.smart-style-1 #ribbon .breadcrumb a{color:#747474!important}.smart-style-1 .breadcrumb>li+li:before{color:#646464}.smart-style-1 .project-selector{color:#B9B9B9}.smart-style-1 .dropdown-menu,.smart-style-1 .open>.dropdown-menu{padding:4px}.smart-style-1 .dropdown-menu>li>a{border-radius:4px;margin:3px 0}.smart-style-1 .btn.btn-ribbon{background-color:#697486;background-image:-moz-linear-gradient(top,#6f7d94,#697486);background-image:-webkit-gradient(linear,0 0,0 100%,from(#6f7d94),to(#697486));background-image:-webkit-linear-gradient(top,#6f7d94,#697486);background-image:-o-linear-gradient(top,#6f7d94,#697486);background-image:linear-gradient(to bottom,#6f7d94,#697486)}.smart-style-1 #logo-group span#activity{background:#0d0f12;border:1px solid #0d0f12;color:#fff;cursor:pointer}.smart-style-1 .btn-header>:first-child>a{background:#fb3c4a;border:1px solid #fb3c4a;color:#fff!important;cursor:pointer!important}.smart-style-1 .btn-header>:first-child>a:hover{opacity:.9}.smart-style-1 #cancel-search-js{background:#fb3c4a;line-height:29px!important}.smart-style-1 .MsgTitle .txt-color-orangeDark{color:#fb3c4a!important}@media (max-width:979px) and (min-width:768px){.smart-style-1 #hide-menu i{color:#fff!important}}@media only screen and (max-width:679px) and (min-width:0){.smart-style-1 #hide-menu i{color:#fff!important}}@media only screen and (max-width:479px) and (min-width:320px){.smart-style-1 #sparks{background:#fff}.smart-style-1 #cancel-search-js,.smart-style-1 .search-mobile .header-search>button{border-radius:3px}}.smart-style-1 .minifyme{background:#434953}.smart-style-1 .minifyme:hover{background:#5C6C86;color:#e1e8f3}.smart-style-1 #show-shortcut:hover>i{color:#fff}.smart-style-1 .page-footer,.smart-style-1 .superbox-show,.smart-style-1 aside{background:#1b1e24}.smart-style-1 .superbox-list.active:before{color:#1b1e24}.smart-style-1 #logo-group{background:#22262e!important}.smart-style-1 .login-info,.smart-style-1 .login-info span{border-bottom:none}.smart-style-1 nav ul b{font-size:14px;margin-top:0}.smart-style-1 nav ul b .fa-plus-square-o:before{content:"\f104"}.smart-style-1 nav ul b .fa-minus-square-o:before{content:"\f107"}.smart-style-1 .header-search>input[type=text]{border-color:#FFF!important;border-radius:2px}.smart-style-1 nav ul ul li>a{text-shadow:0 1px 1px #000;font-size:13px;padding-left:43px;color:#e1eaf1;display:block;font-weight:300;padding-top:6px!important;padding-bottom:6px!important}.smart-style-1 nav ul ul ul li a{padding:8px 17px 8px 54px!important}.smart-style-1 nav ul ul ul ul li a{padding-left:72px!important}.smart-style-1 nav ul ul ul ul ul li a{padding-left:90px!important}.smart-style-1 nav ul ul ul ul ul ul li a{padding-left:108px!important}.smart-style-1 nav>ul ul li::before,.smart-style-1 nav>ul>li>ul::before{border:none!important}.smart-style-1 nav>ul>li>a>i{font-size:17px;vertical-align:0}.smart-style-1 nav>ul>li>a b{right:17px;top:12px}.smart-style-1 nav>ul>li>a>i:after{border:1px solid #fff}.smart-style-1 nav ul ul{background:#22262E}.smart-style-1 nav ul ul li>a:hover{background:#1b1e24!important}.smart-style-1 .login-info a,.smart-style-1 .login-info strong,.smart-style-1 nav ul li a{color:#8b91a0}.smart-style-1 nav ul li a:active{background:0 0}.smart-style-1 nav ul li a:hover{color:#E1EAF1}.smart-style-1 .header-dropdown-list a.dropdown-toggle{color:#FFF;text-decoration:none}.smart-style-1 nav ul li a{padding:12px 17px 12px 16px}.smart-style-1 .login-info{height:auto}.smart-style-1 .login-info>span{padding:5px 10px}.smart-style-1 .login-info img{width:35px;border-radius:50%}.smart-style-1 .login-info a{margin-top:2px}.smart-style-1 .login-info a span{max-width:136px}.smart-style-1 .login-info a:hover{color:#fff}.smart-style-1 #logo-group>span .badge{background:#0aa699}.smart-style-1 #activity.active .badge{background:#0aa699!important}.smart-style-1 .ajax-dropdown{background:#E2E8F1}.smart-style-1 .ajax-notifications{background:#fff}.smart-style-1 nav>ul>li>a:hover i{-webkit-animation-name:none;-moz-animation-name:none;-o-animation-name:none;animation-name:none}.smart-style-1 img.online{border-left-color:#0AA699!important}.smart-style-1 .onoffswitch-inner:before{background-color:#36AECC!important}.smart-style-1 .bg-color-red{background-color:#fb3c4a!important}.smart-style-1 .pagination>.active>a,.smart-style-1 .pagination>.active>a:focus,.smart-style-1 .pagination>.active>a:hover,.smart-style-1 .pagination>.active>span,.smart-style-1 .pagination>.active>span:focus,.smart-style-1 .pagination>.active>span:hover{background-color:#36AECC;border-color:#36AECC}.smart-style-1.minified .login-info a{margin-top:6px}.smart-style-1.minified nav ul li a{padding:12px 17px 12px 14px}.smart-style-1.minified nav>ul>li>a>i{font-size:18px}.smart-style-1.minified nav>ul>li{border-bottom:1px solid #131416;border-top:1px solid #303031}.smart-style-1.minified nav>ul>li>ul{background:#1B1E24}.smart-style-1.minified nav>ul>li>ul>li{background:#22262E}.smart-style-1.minified .login-info img{width:30px!important}.smart-style-1.minified .login-info span{padding:0 5px!important}.smart-style-1.minified nav ul ul li>a:hover{background:#30343D!important}.smart-style-1.minified nav ul>li>ul>li>ul,.smart-style-1.minified nav>ul>li>ul>li>ul>li{background:#1B1E24}.smart-style-1.minified nav ul ul li>a{padding-left:13px;padding-right:13px!important}.smart-style-1.minified nav ul ul ul li a{padding-left:33px!important;padding-right:13px!important}.smart-style-1.minified nav ul ul ul ul li a{padding-left:43px!important;padding-right:13px!important}.smart-style-1.minified nav ul ul ul ul ul li a{padding-left:53px!important;padding-right:13px!important}.smart-style-1.minified nav ul ul ul ul ul ul li a{padding-left:63px!important;padding-right:13px!important}.smart-style-1 .jarviswidget-color-darken>header{background:#1B1E24!important;border-color:#1B1E24!important}.smart-style-1 .jarviswidget-color-blueDark>header{background:#353D4B!important;border-color:#353D4B!important}.smart-style-1 .jarviswidget-color-blue>header{background:#688F9E;border-color:#6A838D!important}.smart-style-1 .jarviswidget-color-purple>header{background:#736086}.smart-style-1 .jarviswidget-color-red>header{background:#C02631;border-color:#8F2129!important}.smart-style-1 .jarviswidget .bg-color-red{background:#C02631!important}.smart-style-1 .jarviswidget .bg-color-greenLight,.smart-style-1 .jarviswidget-color-greenLight>header{border-color:#96B447!important;background:#96B447!important}.smart-style-1 .jarviswidget .bg-color-yellow,.smart-style-1 .jarviswidget-color-yellow>header{border-color:#DBB727!important;background:#FDD01C!important;color:#25241F}.smart-style-1 .jarviswidget .bg-color-pink,.smart-style-1 .jarviswidget-color-pink>header{background:#DB8EBB!important}.smart-style-1.menu-on-top nav ul ul li>a{text-shadow:none!important;color:#646E75}.smart-style-1.menu-on-top aside{background:#14161B}.smart-style-1.menu-on-top aside#left-panel{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.25);box-shadow:0 2px 4px 0 rgba(0,0,0,.25);border-bottom:1px solid #222;border-top:1px solid #333}.smart-style-1.menu-on-top aside#left-panel nav>ul>li{border-right:1px solid transparent;border-left:1px solid transparent}.smart-style-1.menu-on-top aside#left-panel nav>ul>li:hover{border-right-color:#333;border-left-color:#333}.smart-style-1.menu-on-top aside#left-panel nav>ul>li>a{text-shadow:none!important;font-size:13px;padding:10px 9px!important}.smart-style-1.menu-on-top nav ul ul li a{padding-left:10px!important;font-size:13px}.smart-style-1.menu-on-top aside#left-panel nav>ul>li:hover{background:#fff;background:-moz-linear-gradient(top,#04070c 0,#2e3e57 66%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#cfcfcf),color-stop(66%,#2e3e57));background:-webkit-linear-gradient(top,#04070c 0,#2e3e57 66%);background:-o-linear-gradient(top,#04070c 0,#2e3e57 66%);background:-ms-linear-gradient(top,#04070c 0,#2e3e57 66%);background:linear-gradient(to bottom,#04070c,#2e3e57 66%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#04070C', endColorstr='#2E3E57', GradientType=0)}.smart-style-1.menu-on-top aside#left-panel nav>ul>li:hover>a{color:#F1F1F1!important;border-left:1px solid #000;border-right:1px solid #000;padding-left:8px!important;padding-right:8px!important}.smart-style-1.menu-on-top aside#left-panel nav>ul>li>ul{background:#3a3633}.smart-style-1.menu-on-top nav ul ul li a,.smart-style-1.menu-on-top nav ul ul ul li a{color:#D8DEE5}.smart-style-1.menu-on-top nav ul ul li a:hover,.smart-style-1.menu-on-top nav ul ul ul li a:hover{color:#fff;background-color:#1b1e24!important}.smart-style-1.menu-on-top nav ul ul li:hover>a{color:#fff;background-color:#1b1e24}.smart-style-1.menu-on-top nav>ul ul ul{border-top:1px solid #c7c7c7!important}.smart-style-1.menu-on-top nav ul ul,.smart-style-1.menu-on-top nav ul ul ul{background:#2e3e57!important;border:1px solid transparent;padding:0}.smart-style-1.menu-on-top nav>ul ul li:hover>ul{background:#333}.smart-style-1.menu-on-top nav>ul>li>a:after{color:#8AA1B3!important}.smart-style-1.menu-on-top nav ul ul li:hover>a:after,.smart-style-1.menu-on-top nav>ul ul>li a:after,.smart-style-1.menu-on-top nav>ul ul>li a:hover:after,.smart-style-1.menu-on-top nav>ul>li>a:after{color:#D5D5D5}.smart-style-1.menu-on-top nav ul ul li:hover>a:after,.smart-style-1.menu-on-top nav>ul ul>li a:hover:after{color:#fff}.smart-style-1.menu-on-top nav>ul ul>li a:only-child:after,.smart-style-1.menu-on-top nav>ul>li>a:only-child:after{content:""!important}.smart-style-1.menu-on-top nav ul ul .active>a,.smart-style-1.menu-on-top nav ul ul .active>a:hover,.smart-style-1.menu-on-top nav ul ul li.active:hover>a{color:#fff!important}.smart-style-2 #shortcut{background-color:rgba(255,255,255,.9)}.smart-style-2 #shortcut ul{-webkit-box-shadow:0 4px 10px rgba(0,0,0,.3);box-shadow:0 4px 10px rgba(0,0,0,.3);border-bottom:1px solid #A8BADB}body.smart-style-2{background:#fff}.smart-style-2 #header,.smart-style-2 .page-footer,.smart-style-2 .superbox-show{background-image:none;background-color:#2C3742}.smart-style-2 .superbox-list.active:before{color:#2C3742}.smart-style-2 .superbox-img-description{color:#9EA8B1!important}.smart-style-2 .project-context>:first-child{text-shadow:none}.smart-style-2 .project-selector{color:#B2C1D5}.smart-style-2 .project-selector:hover{color:#fff}.smart-style-2 #logo-group span#activity{background:none!important;border:none!important;color:#C5C6CA}.smart-style-2 #logo-group span#activity:hover{color:#fff}.smart-style-2 .header-search>input[type=text]{background:#161B22;border:1px solid #0F1217;color:#fff;border-radius:4px}.smart-style-2 #hide-menu a>i,.smart-style-2 .btn-header>:first-child>a{background:0 0;border:none!important;color:#C5C6CA!important;box-shadow:none!important}.smart-style-2 #hide-menu a:hover i,.smart-style-2 .btn-header>:first-child>a:hover{color:#fff!important;cursor:pointer!important}.smart-style-2 .header-dropdown-list a.dropdown-toggle,.smart-style-2 .header-search>button{color:#C5C6CA}.smart-style-2 #ribbon{background:#fff}.smart-style-2.fixed-ribbon #ribbon{border-bottom:1px solid #E0E0E0}.smart-style-2 .btn.btn-ribbon{background:#9498A0}.smart-style-2 #ribbon .breadcrumb,.smart-style-2 #ribbon .breadcrumb a,.smart-style-2 #ribbon .breadcrumb li:last-child,.smart-style-2 #ribbon .breadcrumb>.active{color:#7C7C7C!important}.smart-style-2 aside{background:#F7F7F7;background:-webkit-gradient(linear,left top,right top,color-stop(99%,#f7f7f7),color-stop(100%,#cacaca));background:-webkit-linear-gradient(left,#f7f7f7 99%,#cacaca 100%);background:-webkit-gradient(linear,top left,top right,from(#f7f7f7),to(#cacaca));background:linear-gradient(to right,#f7f7f7 99%,#cacaca 100%);min-height:100%}.smart-style-2 #left-panel{padding-right:15px;padding-left:15px;padding-bottom:15px;padding-top:64px}.menu-on-top.smart-style-2 #left-panel{padding-top:49px!important}.smart-style-2 #logo-group>span .badge{background:#008DC4}.smart-style-2 .login-info,.smart-style-2 .login-info span{border:0!important;box-shadow:none!important}.smart-style-2 .login-info span{padding:5px 10px 7px;background:#FFF;border-radius:4px}.smart-style-2 .login-info a span{padding:0;font-size:16px!important;max-width:105px}.smart-style-2 .login-info{margin-bottom:7px!important;height:auto}.smart-style-2 .login-info a{font-size:16px!important;color:#33455A;margin-top:2px}.smart-style-2 .login-info img{width:35px}.smart-style-2 nav ul li a{color:#69737A!important;font-size:12px!important}.smart-style-2 nav>ul>li>a{padding-top:16px;padding-bottom:16px}.smart-style-2 nav ul ul>li:hover b{color:#69737A!important}.smart-style-2 nav>ul>li>a>i{font-size:25px!important}.smart-style-2 nav>ul>li>a b{top:16px}.smart-style-2 nav ul ul{background:0 0}.smart-style-2 nav ul .active>a,.smart-style-2 nav ul li.open>a,.smart-style-2 nav ul li.open>a b{color:#202427!important;font-weight:700}.smart-style-2 nav ul li a:hover,.smart-style-2 nav ul ul li>a:hover{color:#202427!important;background:none!important}.smart-style-2 nav ul ul li>a{padding-left:23px}.smart-style-2 nav>ul ul li::before,.smart-style-2 nav>ul>li>ul::before{border:none!important}.smart-style-2 nav ul ul ul li a{padding-left:30px}.smart-style-2 nav ul ul ul ul li a{padding-left:40px}.smart-style-2 nav ul ul ul ul ul li a{padding-left:50px}.smart-style-2 nav ul ul ul ul ul ul li a{padding-left:60px}.smart-style-2 .jarviswidget-color-blueDark>header{background:#2C3742!important;border-color:#2C3742!important}.smart-style-2 .btn-primary,.smart-style-2 .smart-form .button{background-color:#3b9ff3;border-color:#3292E2}.smart-style-2 .btn-primary.active,.smart-style-2 .btn-primary:active,.smart-style-2 .btn-primary:focus,.smart-style-2 .btn-primary:hover,.smart-style-2 .open .dropdown-toggle.btn-primary{background-color:#3E90D4;border-color:#2F7DBE}.smart-style-2 .dropdown-menu>li>a:focus,.smart-style-2 .dropdown-menu>li>a:hover{background-color:#3E90D4}.smart-style-2 .btn-success{background-color:#96bf48;border-color:#84A83E}.smart-style-2 .btn-success.active,.smart-style-2 .btn-success:active,.smart-style-2 .btn-success:focus,.smart-style-2 .btn-success:hover,.smart-style-2 .open .dropdown-toggle.btn-success{background-color:#89AD45;border-color:#78973B}.smart-style-2 .btn-danger{background-color:#DB4A67;border-color:#CA4862}.smart-style-2 .btn-danger.active,.smart-style-2 .btn-danger:active,.smart-style-2 .btn-danger:focus,.smart-style-2 .btn-danger:hover,.smart-style-2 .open .dropdown-toggle.btn-danger{background-color:#CF4762;border-color:#C0455E}.smart-style-2 .btn-warning{background-color:#E2B14A;border-color:#C99D42}.smart-style-2 .btn-warning.active,.smart-style-2 .btn-warning:active,.smart-style-2 .btn-warning:focus,.smart-style-2 .btn-warning:hover,.smart-style-2 .open .dropdown-toggle.btn-warning{background-color:#D6A848;border-color:#C09844}.smart-style-2 .pagination>.active>a,.smart-style-2 .pagination>.active>a:focus,.smart-style-2 .pagination>.active>a:hover,.smart-style-2 .pagination>.active>span,.smart-style-2 .pagination>.active>span:focus,.smart-style-2 .pagination>.active>span:hover{background-color:#3b9ff3}.smart-style-2.minified .login-info a{margin-top:4px}.smart-style-2.minified #left-panel{padding:0!important;padding-top:50px!important}.smart-style-2.minified nav ul>li>a{padding:12px 11px}.smart-style-2.minified nav>ul>li>ul,.smart-style-2.minified nav>ul>li>ul>li,.smart-style-2.minified nav>ul>li>ul>li>ul>li{background:#fff!important}.smart-style-2.minified nav>ul>li{border-bottom:1px solid #E6E6E6;border-top:1px solid #FFF}.smart-style-2.minified nav>ul>li>a>i{font-size:18px!important}.smart-style-2.minified .login-info span{padding:0}.smart-style-2.minified .login-info{margin:0!important}.smart-style-2.minified nav ul li.active>a:before{height:23px;right:-19px;top:7px;font-size:20px;color:#FFF}.smart-style-2 .bg-color-red{background:#DB4A67!important}.smart-style-2 .bg-color-blue{background:#4387bf!important}.smart-style-2 .smart-form .checkbox input:checked+i,.smart-style-2 .smart-form .radio input:checked+i,.smart-style-2 .smart-form .toggle input:checked+i{border-color:#3b9ff3}.smart-style-2 .smart-form .toggle i:before{background-color:#3b9ff3}.smart-form .rating input+label:hover,.smart-form .rating input+label:hover~label{color:#3b9ff3}.smart-style-2 .bg-color-greenLight{background-color:#89AD45!important}.smart-style-2 .bg-color-orange{background-color:#D6A848!important}.smart-style-2 .bg-color-teal{background-color:#5ba0a3!important}.smart-style-2 .minifyme{background:#D7DAE2;border-bottom:1px solid #818181;color:#7E7E7E}.smart-style-2 .minifyme:hover{color:#4E4E4E}.smart-style-2 .onoffswitch-inner:before{background:#3b9ff3;border-color:#3b9ff3 #257DC7 #2A7DC4}.smart-style-2 .onoffswitch-checkbox:checked+.onoffswitch-label .onoffswitch-switch:before{color:#84A83E}.smart-style-2.menu-on-top .menu-item-parent{font-size:10px}.smart-style-2.menu-on-top #left-panel{padding-right:0;padding-left:0;padding-bottom:0}.smart-style-2.menu-on-top nav ul ul li>a{text-shadow:none!important;color:#646E75}.smart-style-2.menu-on-top aside{background:inherit}.smart-style-2.menu-on-top aside#left-panel{-webkit-box-shadow:none;box-shadow:none;border-bottom:1px solid #B8B8B8;border-top:1px solid #333}.smart-style-2.menu-on-top aside#left-panel nav>ul>li{border-right:1px solid transparent;border-left:1px solid transparent}.smart-style-2.menu-on-top aside#left-panel nav>ul>li:hover{background:#2e3e57;border-right-color:#fff;border-left-color:#fff}.smart-style-2.menu-on-top aside#left-panel nav>ul>li>a{text-shadow:none!important;font-size:13px;padding:10px 9px!important}.smart-style-2.menu-on-top nav ul ul li a{padding-left:10px!important;font-size:13px}.smart-style-2.menu-on-top aside#left-panel nav>ul>li:hover>a{color:#F1F1F1!important;border-left:1px solid #000;border-right:1px solid #000;padding-left:8px!important;padding-right:8px!important}.smart-style-2.menu-on-top aside#left-panel nav>ul>li>ul{background:#2C3742}.smart-style-2.menu-on-top nav ul ul li a,.smart-style-2.menu-on-top nav ul ul ul li a{color:#ADBED3!important}.smart-style-2.menu-on-top nav ul ul li a:hover,.smart-style-2.menu-on-top nav ul ul ul li a:hover{color:#fff;background-color:#5E6C88!important}.smart-style-2.menu-on-top nav ul ul li:hover>a{color:#fff!important;background-color:#5E6C88}.smart-style-2.menu-on-top nav>ul ul ul{border-top:1px solid #c7c7c7!important}.smart-style-2.menu-on-top nav ul ul,.smart-style-2.menu-on-top nav ul ul ul{background:#2e3e57!important;border:1px solid transparent}.smart-style-2.menu-on-top nav>ul ul li:hover>ul{background:#333}.smart-style-2.menu-on-top nav>ul>li>a:after{color:#8AA1B3!important}.smart-style-2.menu-on-top nav ul ul li:hover>a:after,.smart-style-2.menu-on-top nav>ul ul>li a:after,.smart-style-2.menu-on-top nav>ul ul>li a:hover:after,.smart-style-2.menu-on-top nav>ul>li>a:after{color:#D5D5D5}.smart-style-2.menu-on-top nav ul ul li:hover>a:after,.smart-style-2.menu-on-top nav>ul ul>li a:hover:after{color:#fff}.smart-style-2.menu-on-top nav ul ul .active>a,.smart-style-2.menu-on-top nav ul ul .active>a:hover,.smart-style-2.menu-on-top nav ul ul li.active:hover>a{color:#fff!important}.smart-style-3 body,body.smart-style-3{background:#fff!important;font-family:Arial,sans-serif}.smart-style-3 #logo img{width:125px;height:auto;padding-left:3px;margin-top:-3px}.smart-style-3 #header{background-color:#f78c40;background-image:-moz-linear-gradient(top,#f78c40,#d67632);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f78c40),to(#d67632));background-image:-webkit-linear-gradient(top,#f78c40,#d67632);background-image:-o-linear-gradient(top,#f78c40,#d67632);background-image:linear-gradient(to bottom,#f78c40,#d67632)}.smart-style-3 #ribbon{background:#fff}.smart-style-3 #ribbon .breadcrumb,.smart-style-3 #ribbon .breadcrumb a{color:#7C7C7C!important}.smart-style-3 #ribbon .breadcrumb li:last-child,.smart-style-3 #ribbon .breadcrumb>.active{color:#5F5F5F}.smart-style-3.fixed-ribbon #ribbon{box-shadow:0 .0625em .3125em rgba(0,0,0,.35)}.smart-style-3 #logo-group span#activity,.smart-style-3 .btn-header>:first-child>a{background-color:#DD7C37;background-image:-moz-linear-gradient(top,#dd7c37,#b9662b);background-image:-webkit-gradient(linear,0 0,0 100%,from(#b9662b),to(#b9662b));background-image:-webkit-linear-gradient(top,#dd7c37,#b9662b);background-image:-o-linear-gradient(top,#dd7c37,#b9662b);background-image:linear-gradient(to bottom,#dd7c37,#b9662b);color:#fff!important;border:1px solid #f09d61;text-shadow:#985813 0 -1px}.smart-style-3 #hide-menu i{color:#fff!important}.smart-style-3 #logo-group span#activity:active,.smart-style-3 #logo-group span#activity:hover,.smart-style-3 .btn-header>:first-child>a:active,.smart-style-3 .btn-header>:first-child>a:hover{-webkit-box-shadow:inset 1px 1px 0 #985813,inset -1px -1px 0 #985813;-moz-box-shadow:inset 1px 1px 0 #985813,inset -1px -1px 0 #985813;box-shadow:inset 1px 1px 0 #985813,inset -1px -1px 0 #985813;background-color:#dd7a35;background-image:-moz-linear-gradient(top,#dd7a35,#984a13);background-image:-webkit-gradient(linear,0 0,0 100%,from(#dd7a35),to(#984a13));background-image:-webkit-linear-gradient(top,#dd7a35,#984a13);background-image:-o-linear-gradient(top,#dd7a35,#984a13);background-image:linear-gradient(to bottom,#dd7a35,#984a13)}.smart-style-3 .header-dropdown-list>li>.dropdown-toggle,.smart-style-3 .project-context>:first-child,.smart-style-3 .project-selector{color:#fff;text-shadow:#985813 0 -1px}.smart-style-3 .header-dropdown-list>li>.dropdown-toggle{display:block;background:rgba(0,0,0,.2);padding:2px 7px 3px;border-radius:3px;margin-top:14px}.smart-style-3 .header-search>input[type=text]{border-color:#CA854F}.smart-style-3 .header-search>button{color:#DF9B45}.smart-style-3 aside{background:#f2f2f2;border-right:2px solid #ccc}.smart-style-3 .login-info span{border-bottom:none}.smart-style-3 .login-info a span{color:#444!important}.smart-style-3 .login-info{border-bottom:1px solid #E2E2E2;background:#fff;box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}.smart-style-3 nav ul li a,.smart-style-3 nav ul li.open>a,.smart-style-3 nav ul li.open>a b{color:#444!important}.smart-style-3 nav>ul>li{background-color:#f2f2f2;background-image:-moz-linear-gradient(top,#f9f9f9,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f9f9),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#f9f9f9,#f2f2f2);background-image:-o-linear-gradient(top,#f9f9f9,#f2f2f2);background-image:linear-gradient(to bottom,#f9f9f9,#f2f2f2);border-bottom:1px solid #DFDFDF}.smart-style-3 nav>ul>li.active>a:before{top:10px!important}.smart-style-3 nav>ul>li>a b{top:12px}.smart-style-3 nav ul li.active>a:before{top:6px}.smart-style-3 nav>ul>li.open{border-left:4px solid #058dc7}.smart-style-3 nav>ul>li>a{padding:12px 10px 12px 11px;font-size:13px}.smart-style-3 nav>ul>li>a>i{color:#058dc7;font-size:20px}.smart-style-3 nav ul ul{background:0 0}.smart-style-3 nav ul ul li>a{font-size:13px}.smart-style-3 nav ul li a:hover{background:rgba(0,0,0,.05)!important}.smart-style-3 nav>ul>li.open>a{padding-left:7px}.smart-style-3 nav>ul>li.open ul li>a{padding-left:38px}.smart-style-3 nav>ul ul li::before,.smart-style-3 nav>ul>li>ul::before{border:none}.smart-style-3 nav ul li.active>a{font-weight:700}.smart-style-3 nav ul li.active>a:before{color:#bbb}.smart-style-3 .page-footer,.smart-style-3 .superbox-show{background:#3D3B39}.smart-style-3 .superbox-list.active:before{color:#3D3B39}.smart-style-3 nav>ul>li.open>ul>li>a{padding-left:38px}.smart-style-3.minified nav>ul>li{border-bottom:1px solid #E9E4E4;border-top:1px solid #FFF}.smart-style-3.minified nav>ul>li>ul,.smart-style-3.minified nav>ul>li>ul>li>ul>li{background-color:rgba(69,69,69,.9)}.smart-style-3.minified nav ul li a,.smart-style-3.minified nav ul li.open>a,.smart-style-3.minified nav ul li.open>a b{color:#fff!important}.smart-style-3.minified nav>ul>li.open ul li>a{padding-left:14px}.smart-style-3 .active+.ajax-dropdown{-webkit-box-shadow:1px 14px 16px rgba(61,35,14,.55);box-shadow:1px 14px 16px rgba(61,35,14,.55)}@media (max-width:979px){.smart-style-3 #content{padding-left:5px;padding-right:5px}.smart-style-3 #ribbon{margin-left:0;margin-right:0;margin-top:0;border-radius:0}}.smart-style-3 .dropdown-menu>.active>a,.smart-style-3 .dropdown-menu>.active>a:hover,.smart-style-3 .dropdown-menu>li>a:focus,.smart-style-3 .dropdown-menu>li>a:hover,.smart-style-3 .tt-suggestion.tt-is-under-cursor{background-color:#EC9519;color:#fff}.smart-style-3 .dropdown-menu>li>a{color:#4E361B}.smart-style-3 .dropdown-menu{border-radius:0;border-bottom:2px solid #ADADAD;background:#FDDFB3}.smart-style-3 .dropdown-menu .divider{background-color:#EBC7A6}.smart-style-3 .dropdown-menu-large .dropdown-header{color:#5C391E}.smart-style-3 .dropdown-menu-large>li ul>li>a:focus,.smart-style-3 .dropdown-menu-large>li ul>li>a:hover{border-radius:3px;background-color:#F1B686}.smart-style-3 input:not([type]),.smart-style-3 input[type=color],.smart-style-3 input[type=email],.smart-style-3 input[type=number],.smart-style-3 input[type=password],.smart-style-3 input[type=tel],.smart-style-3 input[type=text],.smart-style-3 input[type=url],.smart-style-3 textarea{border-top-color:#a3a3a3;border-left-color:#a3a3a3;border-bottom-color:#ccc;border-right-color:#ccc;-webkit-box-shadow:inset 0 1px 0 #d6d6d6;-moz-box-shadow:inset 0 1px 0 #d6d6d6;box-shadow:inset 0 1px 0 #d6d6d6;color:#000}.smart-style-3 .has-warning .form-control{border-color:#c09853!important}.smart-style-3 .has-error .form-control{border-color:#b94a48!important}.smart-style-3 .has-success .form-control{border-color:#468847!important}.smart-style-3 .select2-container-multi .select2-choices .select2-search-field input,.smart-style-3 .tt-hint{box-shadow:none!important;border:none!important}.smart-style-3 #shortcut{background-color:rgba(25,16,6,.85)}.smart-style-3 .SmallBox span,.smart-style-3 .bigBox span{letter-spacing:0}.smart-style-3.menu-on-top nav ul ul li>a{color:inherit}.smart-style-3.menu-on-top aside{background:inherit}.smart-style-3.menu-on-top aside#left-panel{-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.25);box-shadow:0 2px 4px 0 rgba(0,0,0,.25);border-bottom:1px solid #fff;border-top:1px solid #fff}.smart-style-3.menu-on-top aside#left-panel nav>ul>li{border-right:1px solid #E2E2E2;border-left:1px solid #FFF}.smart-style-3.menu-on-top nav ul ul,.smart-style-3.menu-on-top nav ul ul ul{border-color:#E2E2E2}.smart-style-3.menu-on-top nav ul>li>ul{left:-2px}.smart-style-3.menu-on-top aside#left-panel nav>ul>li>a{text-shadow:none!important;font-size:13px;padding:10px 9px!important;border:none!important}.smart-style-3.menu-on-top nav ul ul li a{padding-left:10px!important;font-size:13px}.smart-style-3.menu-on-top nav>ul>li>a:hover{background:#fff!important}.smart-style-3.menu-on-top nav ul ul li a:hover,.smart-style-3.menu-on-top nav ul ul li:hover>a,.smart-style-3.menu-on-top nav ul ul ul li a:hover{background:rgba(0,0,0,.05)}.smart-style-3.menu-on-top aside#left-panel nav>ul>li:hover{background:#fff}.smart-style-3.menu-on-top nav ul ul li a,.smart-style-3.menu-on-top nav ul ul ul li a{color:#D8DEE5}.smart-style-3.menu-on-top nav ul ul li a:hover,.smart-style-3.menu-on-top nav ul ul li:hover>a,.smart-style-3.menu-on-top nav ul ul ul li a:hover{color:#fff}.smart-style-3.menu-on-top nav>ul>li>a:after{color:#8AA1B3!important}.smart-style-3.menu-on-top nav ul ul li:hover>a:after,.smart-style-3.menu-on-top nav>ul ul>li a:after,.smart-style-3.menu-on-top nav>ul ul>li a:hover:after,.smart-style-3.menu-on-top nav>ul>li>a:after{color:inherit}.smart-style-1.menu-on-top nav ul ul .active>a:hover,.smart-style-1.menu-on-top nav ul ul li.active:hover>a,.smart-style-3.menu-on-top nav ul ul .active>a,.smart-style-3.menu-on-top nav ul ul .active>a:hover,.smart-style-3.menu-on-top nav ul ul li.active:hover>a{color:#333!important} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/css/sps.css b/src/main/webapp/WEB-INF/views/src/css/sps.css new file mode 100644 index 0000000..ca81b3c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/css/sps.css @@ -0,0 +1,49 @@ +.vaild {color: red;} +.login-info{ border-bottom: 1px solid #fff} +.login-info>span{ border-bottom: 1px solid #d7d5d5;} +nav ul .active > a{background: #538ba6} +nav ul .active > a:hover{background: #538ba6} +nav ul li.open > a, nav ul li.open > a b{color: #333 !important} +nav ul li a{ color: #333;} +nav ul li a:hover{ color: #333;} +nav ul li a:active{background:none!important} +nav ul ul{ background: none;} +nav ul ul li a:hover{ color: #333; background: none} + +.logo-tt{ display: inline-block; margin: 0px; padding: 0px; padding-left: 40px; line-height: 48px; color: #fff; font-size: 16px; font-weight: bold; font-family: "microsoft yahei", Verdana, Arial, Helvetica, sans-serif} +.logo-eng{ display: inline-block; margin: 0px; padding: 0px; padding-left: 10px; line-height: 48px; color: #fff; font-size: 14px; font-family: "microsoft yahei", Verdana, Arial, Helvetica, sans-serif} +aside{ background: #e8e8e8} +#header{ background: #538ba6} +#header>:first-child{ width: 500px;} +#ribbon{ background:none} +#ribbon .breadcrumb, #ribbon .breadcrumb a{ color: #333!important} +#ribbon .breadcrumb li:last-child, #ribbon .breadcrumb > .active{ color: #333} +.page-footer{ background: #4b4b4b;} +#main{ padding-bottom: 25px;} +.new-foot{width: 100%; height: 40px; background: #4b4b4b; color: #f2f2f2; line-height: 40px; text-align: center; font-size: 12px; z-index: 9999; position: absolute; bottom: 0;} +.btn-header > *:first-child > a{ background: none; border: 1px solid #fff; color: #fff;} +.btn-header > *:first-child > a:hover{ color: #fff;border: 1px solid #f1f1f1;} +.btn-header.pull-right{ margin-left: 10px;} +.hidden-menu #hide-menu>:first-child>a{ background: #407995; border: 1px solid #295b73} + +.header-dropdown-list,.ribbon-button-alignment,.minifyme{ display: none} +#fullscreen,#demo-setting{ display: none} +.error { + color: red; +} +.chose-tr { + background-color: #CECE07!important; +} +.tree-hide { + display: none; +} +.tdred{ + background:red; +} + +.edui-default { + z-index: 1100; +} +.widget-body .row { + padding-bottom: 10px; +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/fonts/fontawesome-webfont.ttf b/src/main/webapp/WEB-INF/views/src/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..5cd6cff Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/fonts/fontawesome-webfont.ttf differ diff --git a/src/main/webapp/WEB-INF/views/src/fonts/fontawesome-webfont.woff b/src/main/webapp/WEB-INF/views/src/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..9eaecb3 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/fonts/fontawesome-webfont.woff differ diff --git a/src/main/webapp/WEB-INF/views/src/fonts/glyphicons-halflings-regular.svg b/src/main/webapp/WEB-INF/views/src/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..7fff065 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,230 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/fonts/glyphicons-halflings-regular.woff b/src/main/webapp/WEB-INF/views/src/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..8c54182 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/fonts/glyphicons-halflings-regular.woff differ diff --git a/src/main/webapp/WEB-INF/views/src/ic01java.htm b/src/main/webapp/WEB-INF/views/src/ic01java.htm new file mode 100644 index 0000000..595d18a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/ic01java.htm @@ -0,0 +1,416 @@ + + + + + + + USB IC ؼ V1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ ţ + 룺 + +
+ +
+
+ +
+ +
+

+ ʾ

+

+     1бǰע IcCardReader ؼע᷽Ϊʼ->С->롰regsvr32 + ***\IcCardReader.ocx->ȷС***Ϊؼ·

+

+     2IEInternet 趨 ActiveX ؼ

+

+     3ڷбҳIEInternet 趨ַΪվ㣬ҳȨбؿؼ

+ + diff --git a/src/main/webapp/WEB-INF/views/src/img/logo.png b/src/main/webapp/WEB-INF/views/src/img/logo.png new file mode 100644 index 0000000..32af08f Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/img/logo.png differ diff --git a/src/main/webapp/WEB-INF/views/src/img/mybg.png b/src/main/webapp/WEB-INF/views/src/img/mybg.png new file mode 100644 index 0000000..55adafa Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/img/mybg.png differ diff --git a/src/main/webapp/WEB-INF/views/src/img/select2-spinner.gif b/src/main/webapp/WEB-INF/views/src/img/select2-spinner.gif new file mode 100644 index 0000000..5b33f7e Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/img/select2-spinner.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/index.html b/src/main/webapp/WEB-INF/views/src/index.html new file mode 100644 index 0000000..2dcd432 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/index.html @@ -0,0 +1,173 @@ + + + + + + + SmartAdmin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/app.min.js b/src/main/webapp/WEB-INF/views/src/js/app.min.js new file mode 100644 index 0000000..7e9430a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/app.min.js @@ -0,0 +1,29 @@ +/* ______________________________________ + ________| |_______ + \ | SmartAdmin WebApp | / + \ | Copyright © 2014 MyOrange | / + / |______________________________________| \ + /__________) (_________\ + + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * ======================================================================= + * SmartAdmin is FULLY owned and LICENSED by MYORANGE INC. + * This script may NOT be RESOLD or REDISTRUBUTED under any + * circumstances, and is only to be used with this purchased + * copy of SmartAdmin Template. + * ======================================================================= + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * ======================================================================= + * original filename: app.js + * filesize: 50,499 bytes + * author: Sunny (@bootstraphunt) + * email: info@myorange.ca + */ + +$.throttle_delay=350;$.menu_speed=235;$.navAsAjax=true;$.enableJarvisWidgets=true;$.enableMobileWidgets=false;$.fastClick=false;$.calc_navbar_height=function(){var a=null;if($("#header").length){a=$("#header").height()}if(a===null){a=$('').height()}if(a===null){return 49}return a};$.navbar_height=$.calc_navbar_height();$.root_=$("body");$.left_panel=$("#left-panel");$.shortcut_dropdown=$("#shortcut");$.bread_crumb=$("#ribbon ol.breadcrumb");$.intervalArr=new Array();var $topmenu=false;$.device=null;var ismobile=(/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));if(!ismobile){$.root_.addClass("desktop-detected");$.device="desktop"}else{$.root_.addClass("mobile-detected");$.device="mobile";if($.fastClick){$.root_.addClass("needsclick");FastClick.attach(document.body)}}if($("body").hasClass("menu-on-top")||localStorage.getItem("sm-setmenu")=="top"){$topmenu=true;$("body").addClass("menu-on-top")}jQuery(document).ready(function(){if($("[rel=tooltip]").length){$("[rel=tooltip]").tooltip()}$(document).mouseup(function(a){if(!$(".ajax-dropdown").is(a.target)&&$(".ajax-dropdown").has(a.target).length===0){$(".ajax-dropdown").fadeOut(150);$(".ajax-dropdown").prev().removeClass("active")}});$("button[data-btn-loading]").on("click",function(){var a=$(this);a.button("loading");setTimeout(function(){a.button("reset")},3000)})});(function(g,i,c){var a=g([]),e=g.resize=g.extend(g.resize,{}),j,l="setTimeout",k="resize",d=k+"-special-event",b="delay",f="throttleWindow";e[b]=g.throttle_delay;e[f]=true;g.event.special[k]={setup:function(){if(!e[f]&&this[l]){return false}var m=g(this);a=a.add(m);try{g.data(this,d,{w:m.width(),h:m.height()})}catch(n){g.data(this,d,{w:m.width,h:m.height})}if(a.length===1){h()}},teardown:function(){if(!e[f]&&this[l]){return false}var m=g(this);a=a.not(m);m.removeData(d);if(!a.length){clearTimeout(j)}},add:function(m){if(!e[f]&&this[l]){return false}var o;function n(t,p,q){var r=g(this),s=g.data(this,d);s.w=p!==c?p:r.width();s.h=q!==c?q:r.height();o.apply(this,arguments)}if(g.isFunction(m)){o=m;return n}else{o=m.handler;m.handler=n}}};function h(){j=i[l](function(){a.each(function(){var n;var m;var o=g(this),p=g.data(this,d);try{n=o.width()}catch(q){n=o.width}try{m=o.height()}catch(q){m=o.height}if(n!==p.w||m!==p.h){o.trigger(k,[p.w=n,p.h=m])}});h()},e[b])}})(jQuery,this);$("#main").resize(function(){check_if_mobile_width()});function check_if_mobile_width(){if($(window).width()<979){$.root_.addClass("mobile-view-activated");$.root_.removeClass("minified")}else{if($.root_.hasClass("mobile-view-activated")){$.root_.removeClass("mobile-view-activated")}}}var ie=(function(){var c,a=3,d=document.createElement("div"),b=d.getElementsByTagName("i");while(d.innerHTML="",b[0]){}return a>4?a:c}());$.fn.extend({jarvismenu:function(a){var d={accordion:"true",speed:200,closedSign:"[+]",openedSign:"[-]"};var b=$.extend(d,a);var c=$(this);c.find("li").each(function(){if($(this).find("ul").size()!==0){$(this).find("a:first").append(""+b.closedSign+"");if($(this).find("a:first").attr("href")=="#"){$(this).find("a:first").click(function(){return false})}}});c.find("li.active").each(function(){$(this).parents("ul").slideDown(b.speed);$(this).parents("ul").parent("li").find("b:first").html(b.openedSign);$(this).parents("ul").parent("li").addClass("open")});c.find("li a").click(function(){if($(this).parent().find("ul").size()!==0){if(b.accordion){if(!$(this).parent().find("ul").is(":visible")){parents=$(this).parent().parents("ul");visible=c.find("ul:visible");visible.each(function(e){var f=true;parents.each(function(g){if(parents[g]==visible[e]){f=false;return false}});if(f){if($(this).parent().find("ul")!=visible[e]){$(visible[e]).slideUp(b.speed,function(){$(this).parent("li").find("b:first").html(b.closedSign);$(this).parent("li").removeClass("open")})}}})}}if($(this).parent().find("ul:first").is(":visible")&&!$(this).parent().find("ul:first").hasClass("active")){$(this).parent().find("ul:first").slideUp(b.speed,function(){$(this).parent("li").removeClass("open");$(this).parent("li").find("b:first").delay(b.speed).html(b.closedSign)})}else{$(this).parent().find("ul:first").slideDown(b.speed,function(){$(this).parent("li").addClass("open");$(this).parent("li").find("b:first").delay(b.speed).html(b.openedSign)})}}})}});jQuery.fn.doesExist=function(){return jQuery(this).length>0};function runAllForms(){if($.fn.slider){$(".slider").slider()}if($.fn.select2){$(".select2").each(function(){var b=$(this);var a=b.attr("data-select-width")||"100%";b.select2({allowClear:true,width:a})})}if($.fn.mask){$("[data-mask]").each(function(){var c=$(this);var a=c.attr("data-mask")||"error...",b=c.attr("data-mask-placeholder")||"X";c.mask(a,{placeholder:b})})}if($.fn.autocomplete){$("[data-autocomplete]").each(function(){var b=$(this);var a=b.data("autocomplete")||["The","Quick","Brown","Fox","Jumps","Over","Three","Lazy","Dogs"];b.autocomplete({source:a})})}if($.fn.datepicker){$(".datepicker").each(function(){var b=$(this);var a=b.attr("data-dateformat")||"dd.mm.yy";b.datepicker({dateFormat:a,prevText:'',nextText:''})})}}function runAllCharts(){if($.fn.sparkline){var D,y,ar,t,E,al,h,Q,U,an,J,W,ak,k,Z,o,x,N,R,aa,P,j,a,f,r,av,am,ae,ao,H,M,F,p,I,b,i,O,g,G,l,T,n,c,aj,w,K,V,S,au,C,m,L,z,ag,v,at,e,d,u,s,af,ac,Y,X,aq,ai,ap,ah,ad,q,ab,B,A;$(".sparkline").each(function(){var ax=$(this);var aw=ax.data("sparkline-type")||"bar";if(aw=="bar"){D=ax.data("sparkline-bar-color")||ax.css("color")||"#0000f0";y=ax.data("sparkline-height")||"26px";ar=ax.data("sparkline-barwidth")||5;t=ax.data("sparkline-barspacing")||2;E=ax.data("sparkline-negbar-color")||"#A90329";al=ax.data("sparkline-barstacked-color")||["#A90329","#0099c6","#98AA56","#da532c","#4490B1","#6E9461","#990099","#B4CAD3"];ax.sparkline("html",{barColor:D,type:aw,height:y,barWidth:ar,barSpacing:t,stackedBarColor:al,negBarColor:E,zeroAxis:"false"})}if(aw=="line"){y=ax.data("sparkline-height")||"20px";v=ax.data("sparkline-width")||"90px";h=ax.data("sparkline-line-color")||ax.css("color")||"#0000f0";Q=ax.data("sparkline-line-width")||1;U=ax.data("fill-color")||"#c0d0f0";an=ax.data("sparkline-spot-color")||"#f08000";J=ax.data("sparkline-minspot-color")||"#ed1c24";W=ax.data("sparkline-maxspot-color")||"#f08000";ak=ax.data("sparkline-highlightspot-color")||"#50f050";k=ax.data("sparkline-highlightline-color")||"f02020";Z=ax.data("sparkline-spotradius")||1.5;thisChartMinYRange=ax.data("sparkline-min-y")||"undefined";thisChartMaxYRange=ax.data("sparkline-max-y")||"undefined";thisChartMinXRange=ax.data("sparkline-min-x")||"undefined";thisChartMaxXRange=ax.data("sparkline-max-x")||"undefined";thisMinNormValue=ax.data("min-val")||"undefined";thisMaxNormValue=ax.data("max-val")||"undefined";thisNormColor=ax.data("norm-color")||"#c0c0c0";thisDrawNormalOnTop=ax.data("draw-normal")||false;ax.sparkline("html",{type:"line",width:v,height:y,lineWidth:Q,lineColor:h,fillColor:U,spotColor:an,minSpotColor:J,maxSpotColor:W,highlightSpotColor:ak,highlightLineColor:k,spotRadius:Z,chartRangeMin:thisChartMinYRange,chartRangeMax:thisChartMaxYRange,chartRangeMinX:thisChartMinXRange,chartRangeMaxX:thisChartMaxXRange,normalRangeMin:thisMinNormValue,normalRangeMax:thisMaxNormValue,normalRangeColor:thisNormColor,drawNormalOnTop:thisDrawNormalOnTop})}if(aw=="pie"){o=ax.data("sparkline-piecolor")||["#B4CAD3","#4490B1","#98AA56","#da532c","#6E9461","#0099c6","#990099","#717D8A"];x=ax.data("sparkline-piesize")||90;N=ax.data("border-color")||"#45494C";R=ax.data("sparkline-offset")||0;ax.sparkline("html",{type:"pie",width:x,height:x,tooltipFormat:' ({{percent.1}}%)',sliceColors:o,borderWidth:1,offset:R,borderColor:N})}if(aw=="box"){aa=ax.data("sparkline-width")||"auto";P=ax.data("sparkline-height")||"auto";j=ax.data("sparkline-boxraw")||false;a=ax.data("sparkline-targetval")||"undefined";f=ax.data("sparkline-min")||"undefined";r=ax.data("sparkline-max")||"undefined";av=ax.data("sparkline-showoutlier")||true;am=ax.data("sparkline-outlier-iqr")||1.5;ae=ax.data("sparkline-spotradius")||1.5;ao=ax.css("color")||"#000000";H=ax.data("fill-color")||"#c0d0f0";M=ax.data("sparkline-whis-color")||"#000000";F=ax.data("sparkline-outline-color")||"#303030";p=ax.data("sparkline-outlinefill-color")||"#f0f0f0";I=ax.data("sparkline-outlinemedian-color")||"#f00000";b=ax.data("sparkline-outlinetarget-color")||"#40a020";ax.sparkline("html",{type:"box",width:aa,height:P,raw:j,target:a,minValue:f,maxValue:r,showOutliers:av,outlierIQR:am,spotRadius:ae,boxLineColor:ao,boxFillColor:H,whiskerColor:M,outlierLineColor:F,outlierFillColor:p,medianColor:I,targetColor:b})}if(aw=="bullet"){var ay=ax.data("sparkline-height")||"auto";O=ax.data("sparkline-width")||2;g=ax.data("sparkline-bullet-color")||"#ed1c24";G=ax.data("sparkline-performance-color")||"#3030f0";l=ax.data("sparkline-bulletrange-color")||["#d3dafe","#a8b6ff","#7f94ff"];ax.sparkline("html",{type:"bullet",height:ay,targetWidth:O,targetColor:g,performanceColor:G,rangeColors:l})}if(aw=="discrete"){T=ax.data("sparkline-height")||26;n=ax.data("sparkline-width")||50;c=ax.css("color");aj=ax.data("sparkline-line-height")||5;w=ax.data("sparkline-threshold")||"undefined";K=ax.data("sparkline-threshold-color")||"#ed1c24";ax.sparkline("html",{type:"discrete",width:n,height:T,lineColor:c,lineHeight:aj,thresholdValue:w,thresholdColor:K})}if(aw=="tristate"){V=ax.data("sparkline-height")||26;S=ax.data("sparkline-posbar-color")||"#60f060";au=ax.data("sparkline-negbar-color")||"#f04040";C=ax.data("sparkline-zerobar-color")||"#909090";m=ax.data("sparkline-barwidth")||5;L=ax.data("sparkline-barspacing")||2;z=ax.data("sparkline-zeroaxis")||false;ax.sparkline("html",{type:"tristate",height:V,posBarColor:ag,negBarColor:au,zeroBarColor:C,barWidth:m,barSpacing:L,zeroAxis:z})}if(aw=="compositebar"){y=ax.data("sparkline-height")||"20px";v=ax.data("sparkline-width")||"100%";ar=ax.data("sparkline-barwidth")||3;Q=ax.data("sparkline-line-width")||1;h=ax.data("sparkline-color-top")||"#ed1c24";ag=ax.data("sparkline-color-bottom")||"#333333";ax.sparkline(ax.data("sparkline-bar-val"),{type:"bar",width:v,height:y,barColor:ag,barWidth:ar});ax.sparkline(ax.data("sparkline-line-val"),{width:v,height:y,lineColor:h,lineWidth:Q,composite:true,fillColor:false})}if(aw=="compositeline"){y=ax.data("sparkline-height")||"20px";v=ax.data("sparkline-width")||"90px";at=ax.data("sparkline-bar-val");e=ax.data("sparkline-bar-val-spots-top")||null;d=ax.data("sparkline-bar-val-spots-bottom")||null;u=ax.data("sparkline-line-width-top")||1;s=ax.data("sparkline-line-width-bottom")||1;af=ax.data("sparkline-color-top")||"#333333";ac=ax.data("sparkline-color-bottom")||"#ed1c24";Y=ax.data("sparkline-spotradius-top")||1.5;X=ax.data("sparkline-spotradius-bottom")||Y;an=ax.data("sparkline-spot-color")||"#f08000";aq=ax.data("sparkline-minspot-color-top")||"#ed1c24";ai=ax.data("sparkline-maxspot-color-top")||"#f08000";ap=ax.data("sparkline-minspot-color-bottom")||aq;ah=ax.data("sparkline-maxspot-color-bottom")||ai;ad=ax.data("sparkline-highlightspot-color-top")||"#50f050";q=ax.data("sparkline-highlightline-color-top")||"#f02020";ab=ax.data("sparkline-highlightspot-color-bottom")||ad;thisHighlightLineColor2=ax.data("sparkline-highlightline-color-bottom")||q;B=ax.data("sparkline-fillcolor-top")||"transparent";A=ax.data("sparkline-fillcolor-bottom")||"transparent";ax.sparkline(at,{type:"line",spotRadius:Y,spotColor:an,minSpotColor:aq,maxSpotColor:ai,highlightSpotColor:ad,highlightLineColor:q,valueSpots:e,lineWidth:u,width:v,height:y,lineColor:af,fillColor:B});ax.sparkline(ax.data("sparkline-line-val"),{type:"line",spotRadius:X,spotColor:an,minSpotColor:ap,maxSpotColor:ah,highlightSpotColor:ab,highlightLineColor:thisHighlightLineColor2,valueSpots:d,lineWidth:s,width:v,height:y,lineColor:ac,composite:true,fillColor:A})}})}if($.fn.easyPieChart){$(".easy-pie-chart").each(function(){var ay=$(this);var aw=ay.css("color")||ay.data("pie-color"),az=ay.data("pie-track-color")||"#eeeeee",ax=parseInt(ay.data("pie-size"))||25;ay.easyPieChart({barColor:aw,trackColor:az,scaleColor:false,lineCap:"butt",lineWidth:parseInt(ax/8.5),animate:1500,rotate:-90,size:ax,onStep:function(aA){this.$el.find("span").text(~~aA)}})})}}function setup_widgets_desktop(){if($.fn.jarvisWidgets&&$.enableJarvisWidgets){$("#widget-grid").jarvisWidgets({grid:"article",widgets:".jarviswidget",localStorage:true,deleteSettingsKey:"#deletesettingskey-options",settingsKeyLabel:"Reset settings?",deletePositionKey:"#deletepositionkey-options",positionKeyLabel:"Reset position?",sortable:true,buttonsHidden:false,toggleButton:true,toggleClass:"fa fa-minus | fa fa-plus",toggleSpeed:200,onToggle:function(){},deleteButton:true,deleteClass:"fa fa-times",deleteSpeed:200,onDelete:function(){},editButton:true,editPlaceholder:".jarviswidget-editbox",editClass:"fa fa-cog | fa fa-save",editSpeed:200,onEdit:function(){},colorButton:true,fullscreenButton:true,fullscreenClass:"fa fa-expand | fa fa-compress",fullscreenDiff:3,onFullscreen:function(){},customButton:false,customClass:"folder-10 | next-10",customStart:function(){alert("Hello you, this is a custom button...")},customEnd:function(){alert("bye, till next time...")},buttonOrder:"%refresh% %custom% %edit% %toggle% %fullscreen% %delete%",opacity:1,dragHandle:"> header",placeholderClass:"jarviswidget-placeholder",indicator:true,indicatorTime:600,ajax:true,timestampPlaceholder:".jarviswidget-timestamp",timestampFormat:"Last update: %m%/%d%/%y% %h%:%i%:%s%",refreshButton:true,refreshButtonClass:"fa fa-refresh",labelError:"Sorry but there was a error:",labelUpdated:"Last Update:",labelRefresh:"Refresh",labelDelete:"Delete widget:",afterLoad:function(){},rtl:false,onChange:function(){},onSave:function(){},ajaxnav:$.navAsAjax})}}function setup_widgets_mobile(){if($.enableMobileWidgets&&$.enableJarvisWidgets){setup_widgets_desktop()}}if($.navAsAjax||$(".google_maps")){var gMapsLoaded=false;window.gMapsCallback=function(){gMapsLoaded=true;$(window).trigger("gMapsLoaded")};window.loadGoogleMaps=function(){if(gMapsLoaded){return window.gMapsCallback()}var a=document.createElement("script");a.setAttribute("type","text/javascript");a.setAttribute("src","http://maps.google.com/maps/api/js?sensor=false&callback=gMapsCallback");(document.getElementsByTagName("head")[0]||document.documentElement).appendChild(a)}}var jsArray={};function loadScript(c,d){if(!jsArray[c]){jsArray[c]=true;var a=document.getElementsByTagName("body")[0];var b=document.createElement("script");b.type="text/javascript";b.src=c;b.onload=d;a.appendChild(b)}else{if(d){d()}}}function loadURL(b,a){$.ajax({type:"GET",url:b,dataType:"html",cache:true,beforeSend:function(){if($.navAsAjax&&$(".google_maps")[0]&&(a[0]==$("#content")[0])){var e=$(".google_maps"),d=0;e.each(function(){d++;var f=document.getElementById(this.id);if(d==e.length+1){}else{if(f){f.parentNode.removeChild(f)}}})}if($.navAsAjax&&$(".dataTables_wrapper")[0]&&(a[0]==$("#content")[0])){var c=$.fn.dataTable.fnTables(true);$(c).each(function(){$(this).dataTable().fnDestroy()})}if($.navAsAjax&&$.intervalArr.length>0&&(a[0]==$("#content")[0])){while($.intervalArr.length>0){clearInterval($.intervalArr.pop())}}a.html('

Loading...

');if(a[0]==$("#content")[0]){drawBreadCrumb();$("html").animate({scrollTop:0},"fast")}},success:function(c){a.css({opacity:"0.0"}).html(c).delay(50).animate({opacity:"1.0"},300)},error:function(e,c,d){a.html('

Error 404! Page not found.

')},async:true})}function pageSetUp(){if($.device==="desktop"){$("[rel=tooltip]").tooltip();$("[rel=popover]").popover();$("[rel=popover-hover]").popover({trigger:"hover"});setup_widgets_desktop();runAllCharts();runAllForms()}else{$("[rel=popover]").popover();$("[rel=popover-hover]").popover({trigger:"hover"});runAllCharts();setup_widgets_mobile();runAllForms()}}$("body").on("click",function(a){$('[rel="popover"]').each(function(){if(!$(this).is(a.target)&&$(this).has(a.target).length===0&&$(".popover").has(a.target).length===0){$(this).popover("hide")}})}); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/grunt/concat.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/grunt/concat.js new file mode 100644 index 0000000..313ae6b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/grunt/concat.js @@ -0,0 +1,24 @@ +module.exports = function () { + 'use strict'; + + return { + options: { + banner: '<%= meta.banner %>\n', + separator: '\n\n' + }, + dist: { + files: { + 'dist/<%= pkg.name %>.js': [ + '<%= paths.src %>/core/permissionModule.js', + '<%= paths.src %>/models/PermissionMap.js', + '<%= paths.src %>/models/Permission.js', + '<%= paths.src %>/models/Role.js', + '<%= paths.src %>/stores/PermissionStore.js', + '<%= paths.src %>/stores/RoleStore.js', + '<%= paths.src %>/core/permissionDirective.js', + '<%= paths.src %>/authorization/Authorization.js' + ] + } + } + }; +}; \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/grunt/jshint.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/grunt/jshint.js new file mode 100644 index 0000000..3bf31a0 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/grunt/jshint.js @@ -0,0 +1,16 @@ +module.exports = function () { + 'use strict'; + + return { + options: { + jshintrc: '.jshintrc', + reporter: require('jshint-stylish') + }, + all: { + src: ['src/**/*.js'] + }, + test: { + src: ['<%= paths.test %>'] + } + }; +}; \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/karma/karma.conf.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/karma/karma.conf.js new file mode 100644 index 0000000..40d93ad --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/config/karma/karma.conf.js @@ -0,0 +1,73 @@ +// Karma configuration +// http://karma-runner.github.io/0.12/config/configuration-file.html +// Generated on 2014-07-17 using +// generator-karma 0.8.3 + +module.exports = function(config) { + 'use strict'; + + config.set({ + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + // base path, that will be used to resolve files and exclude + basePath: '../../', + + // testing framework to use (jasmine/mocha/qunit/...) + frameworks: ['jasmine'], + + // list of files / patterns to load in the browser + files: [ + 'bower_components/angular/angular.js', + 'bower_components/angular-mocks/angular-mocks.js', + 'bower_components/angular-ui-router/release/angular-ui-router.js', + 'src/core/permissionModule.js', + 'src/**/*.js', + 'test/**/*.test.js' + ], + + // list of files / patterns to exclude + exclude: [], + + // web server port + port: 8080, + + // Start these browsers, currently available: + // - Chrome + // - ChromeCanary + // - Firefox + // - Opera + // - Safari (only Mac) + // - PhantomJS + // - IE (only Windows) + browsers: [ + 'PhantomJS' + ], + + reporters: ['mocha'], + + // Which plugins to enable + plugins: [ + 'karma-phantomjs-launcher', + 'karma-mocha-reporter', + 'karma-jasmine' + ], + + // Continuous Integration mode + // if true, it capture browsers, run tests and exit + singleRun: false, + + colors: true, + + // level of logging + // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG + logLevel: config.LOG_INFO + + // Uncomment the following lines if you are using grunt's server to run the tests + // proxies: { + // '/': 'http://localhost:9000/' + // }, + // URL root prevent conflicts with the site root + // urlRoot: '_karma_' + }); +}; diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.js new file mode 100644 index 0000000..3ac90d5 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.js @@ -0,0 +1,810 @@ +/** + * angular-permission + * Route permission and access control as simple as it can get + * @version v2.1.2 - 2016-03-06 + * @link http://www.rafaelvidaurre.com + * @author Rafael Vidaurre + * @license MIT License, http://www.opensource.org/licenses/MIT + */ + +(function () { + 'use strict'; + + var permission = angular.module('permission', ['ui.router']); + + /** + * This decorator is required to access full state object instead of it's configuration + * when trying to obtain full toState state object not it's configuration + * Can be removed when implemented https://github.com/angular-ui/ui-router/issues/13. + */ + permission.config(['$stateProvider', function ($stateProvider) { + $stateProvider.decorator('parent', function (state, parentFn) { + state.self.getState = function () { + return state; + }; + return parentFn(state); + }); + }]); + + permission.run(['$rootScope', '$state', '$q', 'Authorization', 'PermissionMap', function ($rootScope, $state, $q, Authorization, PermissionMap) { + $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) { + + if (!isAuthorizationFinished() && areSetStatePermissions(toState)) { + event.preventDefault(); + setStateAuthorizationStatus(true); + + if (!areStateEventsDefaultPrevented()) { + var compensatedPermissionMap = compensatePermissionMap(toState.data.permissions); + authorizeForState(compensatedPermissionMap); + } + } + + /** + * Checks if state is qualified to be permission based verified + * + * @returns {boolean} + */ + function areSetStatePermissions(state) { + return angular.isDefined(state.data) && angular.isDefined(state.data.permissions); + } + + /** + * Sets internal state `$$finishedAuthorization` variable to prevent looping + * + * @param status {boolean} When true authorization has been already preceded + */ + function setStateAuthorizationStatus(status) { + angular.extend(toState, {'$$isAuthorizationFinished': status}); + } + + + /** + * Checks if state has been already checked for authorization + * + * @returns {boolean} + */ + function isAuthorizationFinished() { + return toState.$$isAuthorizationFinished; + } + + /** + * Checks if state events are not prevented by default + * + * @returns {boolean} + */ + function areStateEventsDefaultPrevented() { + return isStateChangePermissionStartDefaultPrevented() || isStateChangeStartDefaultPrevented(); + } + + /** + * Builds map of permissions resolving passed values to data.permissions and combine them with all its parents + * keeping the order of permissions from the newest (children) to the oldest (parent) + * + * @param statePermissionMap {Object} Current state permission map + * @returns {PermissionMap} Permission map + */ + function compensatePermissionMap(statePermissionMap) { + var permissionMap = new PermissionMap({redirectTo: statePermissionMap.redirectTo}); + + var toStatePath = $state + .get(toState.name) + .getState().path + .slice() + .reverse(); + + angular.forEach(toStatePath, function (state) { + if (areSetStatePermissions(state)) { + permissionMap.extendPermissionMap(new PermissionMap(state.data.permissions)); + } + }); + + return permissionMap; + } + + /** + * Handles state authorization + * + * @param permissions {PermissionMap} Map of permission names + */ + function authorizeForState(permissions) { + Authorization + .authorize(permissions, toParams) + .then(function () { + $rootScope.$broadcast('$stateChangePermissionAccepted', toState, toParams, options); + + $state + .go(toState.name, toParams, {notify: false}) + .then(function () { + $rootScope.$broadcast('$stateChangeSuccess', toState, toParams); + }); + }) + .catch(function (rejectedPermission) { + $rootScope.$broadcast('$stateChangePermissionDenied', toState, toParams, options); + + return permissions + .resolveRedirectState(rejectedPermission) + .then(function (redirectStateName) { + $state.go(redirectStateName, toParams); + }); + }) + .finally(function () { + setStateAuthorizationStatus(false); + $rootScope.$broadcast('$stateChangeSuccess'); + }); + } + + /** + * Checks if event $stateChangeStart hasn't been disabled by default + * + * @returns {boolean} + */ + function isStateChangeStartDefaultPrevented() { + return $rootScope.$broadcast('$stateChangeStart', toState, toParams, fromState, fromParams, options).defaultPrevented; + } + + /** + * Checks if event $stateChangePermissionStart hasn't been disabled by default + * + * @returns {boolean} + */ + function isStateChangePermissionStartDefaultPrevented() { + return $rootScope.$broadcast('$stateChangePermissionStart', toState, toParams, options).defaultPrevented; + } + }); + }]); +}()); + + +(function () { + 'use strict'; + + angular + .module('permission') + .factory('PermissionMap', ['$q', function ($q) { + + /** + * Constructs map object instructing authorization service how to handle authorizing + * + * @param permissionMap {Object} Map of permissions provided to authorization service + * @param permissionMap.only {Array} List of exclusive permission/role names allowed for authorization + * @param permissionMap.except {Array} List of exclusive permission/role names denied for authorization + * @param permissionMap.redirectTo {String|Function|Object|promise} Handling redirection when rejected + * authorization + * @param [toState] {Object} UI-Router transition state object + * @param [toParams] {Object} UI-Router transition state params + * @param [options] {Object} UI-Router transition state options + * @constructor + */ + function PermissionMap(permissionMap, toState, toParams, options) { + this.only = resolvePermissionMapProperty(permissionMap.only, toState, toParams, options); + this.except = resolvePermissionMapProperty(permissionMap.except, toState, toParams, options); + this.redirectTo = permissionMap.redirectTo; + } + + /** + * Extends permission map by pushing to it state's permissions + * + * @param permissionMap {PermissionMap} Compensated permission map + */ + PermissionMap.prototype.extendPermissionMap = function (permissionMap) { + this.only = this.only.concat(permissionMap.only); + this.except = this.except.concat(permissionMap.except); + }; + + /** + * Redirects to fallback states when permissions fail + * + * @param rejectedPermissionName {String} Permission name + * + * @return {Promise} + */ + PermissionMap.prototype.resolveRedirectState = function (rejectedPermissionName) { + if (angular.isFunction(this.redirectTo)) { + return resolveFunctionRedirect(this.redirectTo, rejectedPermissionName); + } + + if (angular.isObject(this.redirectTo)) { + return resolveObjectRedirect(this.redirectTo, rejectedPermissionName); + } + + if (angular.isString(this.redirectTo)) { + return $q.resolve(this.redirectTo); + } + + // If redirectTo state is not defined stay where you are + return $q.reject(null); + }; + + /** + * Handles function based redirection for rejected permissions + * + * @param redirectFunction {Function} Redirection function + * @param permission {String} Rejected permission + * + * @return {Promise} + */ + function resolveFunctionRedirect(redirectFunction, permission) { + return $q + .when(redirectFunction.call(null, permission)) + .then(function (redirectState) { + if (!angular.isString(redirectState)) { + throw new TypeError('When used "redirectTo" as function, returned value must be string with state name'); + } + return redirectState; + }); + } + + /** + * Handles object based redirection for rejected permissions + * + * @param redirectObject {Object} Redirection function + * @param permission {String} Rejected permission + * + * @return {Promise} + */ + function resolveObjectRedirect(redirectObject, permission) { + if (!angular.isDefined(redirectObject['default'])) { + throw new ReferenceError('When used "redirectTo" as object, property "default" must be defined'); + } + + var redirectState = redirectObject[permission]; + + if (!angular.isDefined(redirectState)) { + redirectState = redirectObject['default']; + } + + if (angular.isFunction(redirectState)) { + return resolveFunctionRedirect(redirectState, permission); + } + + if (angular.isString(redirectState)) { + return $q.resolve(redirectState); + } + } + + /** + * Handles extraction of permission map "only" and "except" properties + * @private + * + * @param property {Array|Function|promise} Permission map property "only" or "except" + * @param [toState] {Object} UI-Router transition state object + * @param [toParams] {Object} UI-Router transition state params + * @param [options] {Object} UI-Router transition state options + * + * @returns {Array} Array of permission "only" or "except" names + */ + function resolvePermissionMapProperty(property, toState, toParams, options) { + if (angular.isString(property)) { + return [property]; + } + + if (angular.isArray(property)) { + return property; + } + + if (angular.isFunction(property)) { + return property.call(null, toState, toParams, options); + } + + return []; + } + + return PermissionMap; + }]); +}()); + +(function () { + 'use strict'; + + angular + .module('permission') + .factory('Permission', ['$q', function ($q) { + + /** + * Permission definition object constructor + * + * @param permissionName {String} Name repressing permission + * @param validationFunction {Function} Function used to check if permission is valid + * @constructor + */ + function Permission(permissionName, validationFunction) { + validateConstructor(permissionName, validationFunction); + + this.permissionName = permissionName; + this.validationFunction = validationFunction; + } + + /** + * Checks if permission is still valid + * + * @param toParams {Object} UI-Router params object + * @returns {Promise} + */ + Permission.prototype.validatePermission = function (toParams) { + var validationResult = this.validationFunction.call(null, toParams, this.permissionName); + + if (!angular.isFunction(validationResult.then)) { + validationResult = wrapInPromise(validationResult, this.permissionName); + } + + return validationResult; + }; + + /** + * Converts a value into a promise, if the value is truthy it resolves it, otherwise it rejects it + * @private + * + * @param result {Boolean} Function to be wrapped into promise + * @param permissionName {String} Returned value in promise + * @return {Promise} + */ + function wrapInPromise(result, permissionName) { + var dfd = $q.defer(); + + if (result) { + dfd.resolve(permissionName); + } else { + dfd.reject(permissionName); + } + + return dfd.promise; + } + + /** + * Checks if provided permission has accepted parameter types + * @private + */ + function validateConstructor(permissionName, validationFunction) { + if (!angular.isString(permissionName)) { + throw new TypeError('Parameter "permissionName" name must be String'); + } + if (!angular.isFunction(validationFunction)) { + throw new TypeError('Parameter "validationFunction" must be Function'); + } + } + + return Permission; + }]); +}()); + +(function () { + 'use strict'; + + angular + .module('permission') + .factory('Role', ['$q', 'PermissionStore', function ($q, PermissionStore) { + + /** + * Role definition constructor + * + * @param roleName {String} Name representing role + * @param permissionNames {Array} List of permission names representing role + * @param [validationFunction] {Function} Optional function used to validate if permissions are still valid + * @constructor + */ + function Role(roleName, permissionNames, validationFunction) { + validateConstructor(roleName, permissionNames, validationFunction); + this.roleName = roleName; + this.permissionNames = permissionNames || []; + this.validationFunction = validationFunction; + + if (validationFunction) { + PermissionStore.defineManyPermissions(permissionNames, validationFunction); + } + } + + /** + * Checks if role is still valid + * + * @param [toParams] {Object} UI-Router params object + * @returns {Promise} $q.promise object + */ + Role.prototype.validateRole = function (toParams) { + + // When set permissions is provided check each of them + if (this.permissionNames.length) { + var promises = this.permissionNames.map(function (permissionName) { + if (PermissionStore.hasPermissionDefinition(permissionName)) { + var permission = PermissionStore.getPermissionDefinition(permissionName); + var validationResult = permission.validationFunction.call(null, toParams, permission.permissionName); + + if (!angular.isFunction(validationResult.then)) { + validationResult = wrapInPromise(validationResult); + } + + return validationResult; + } + + return $q.reject(null); + }); + + return $q.all(promises); + } + + // If not call validation function manually + var validationResult = this.validationFunction.call(null, toParams, this.roleName); + if (!angular.isFunction(validationResult.then)) { + validationResult = wrapInPromise(validationResult, this.roleName); + } + + return $q.resolve(validationResult); + + }; + + /** + * Converts a value into a promise, if the value is truthy it resolves it, otherwise it rejects it + * @private + * + * @param result {Boolean} Function to be wrapped into promise + * @param roleName {String} Returned value in promise + * @return {Promise} + */ + function wrapInPromise(result, roleName) { + var dfd = $q.defer(); + + if (result) { + dfd.resolve(roleName); + } else { + dfd.reject(roleName); + } + + return dfd.promise; + } + + /** + * Checks if provided permission has accepted parameter types + * @private + */ + function validateConstructor(roleName, permissionNames, validationFunction) { + if (!angular.isString(roleName)) { + throw new TypeError('Parameter "roleName" name must be String'); + } + + if (!angular.isArray(permissionNames)) { + throw new TypeError('Parameter "permissionNames" must be Array'); + } + + if (!permissionNames.length && !angular.isFunction(validationFunction)) { + throw new TypeError('Parameter "validationFunction" must be provided for empty "permissionNames" array'); + } + } + + return Role; + }]); +}()); + +(function () { + 'use strict'; + + angular + .module('permission') + .service('PermissionStore', ['Permission', function (Permission) { + var permissionStore = {}; + + this.definePermission = definePermission; + this.defineManyPermissions = defineManyPermissions; + this.removePermissionDefinition = removePermissionDefinition; + this.hasPermissionDefinition = hasPermissionDefinition; + this.getPermissionDefinition = getPermissionDefinition; + this.getStore = getStore; + this.clearStore = clearStore; + + /** + * Allows to define permission on application configuration + * + * @param permissionName {String} Name of defined permission + * @param validationFunction {Function} Function used to validate if permission is valid + */ + function definePermission(permissionName, validationFunction) { + permissionStore[permissionName] = new Permission(permissionName, validationFunction); + } + + /** + * Allows to define set of permissionNames with shared validation function on application configuration + * + * @param permissionNames {Array} Set of permission names + * @param validationFunction {Function} Function used to validate if permission is valid + */ + function defineManyPermissions(permissionNames, validationFunction) { + if (!angular.isArray(permissionNames)) { + throw new TypeError('Parameter "permissionNames" name must be Array'); + } + + angular.forEach(permissionNames, function (permissionName) { + definePermission(permissionName, validationFunction); + }); + } + + /** + * Deletes permission + * + * @param permissionName {String} Name of defined permission + */ + function removePermissionDefinition(permissionName) { + delete permissionStore[permissionName]; + } + + /** + * Checks if permission exists + * + * @param permissionName {String} Name of defined permission + * @returns {Boolean} + */ + function hasPermissionDefinition(permissionName) { + return angular.isDefined(permissionStore[permissionName]); + } + + /** + * Returns permission by it's name + * + * @returns {Object} Permissions collection + */ + function getPermissionDefinition(permissionName) { + return permissionStore[permissionName]; + } + + /** + * Returns all permissions + * + * @returns {Object} Permissions collection + */ + function getStore() { + return permissionStore; + } + + /** + * Removes all permissions + */ + function clearStore() { + permissionStore = {}; + } + }]); +}()); + +(function () { + 'use strict'; + + angular + .module('permission') + .service('RoleStore', ['Role', function (Role) { + var roleStore = {}; + + this.defineRole = defineRole; + this.getRoleDefinition = getRoleDefinition; + this.hasRoleDefinition = hasRoleDefinition; + this.removeRoleDefinition = removeRoleDefinition; + this.getStore = getStore; + this.clearStore = clearStore; + + /** + * Allows to define role + * + * @param roleName {String} Name of defined role + * @param permissions {Array} Set of permission names + * @param [validationFunction] {Function} Function used to validate if permissions in role are valid + */ + function defineRole(roleName, permissions, validationFunction) { + roleStore[roleName] = new Role(roleName, permissions, validationFunction); + } + + /** + * Deletes role from store + * + * @param roleName {String} Name of defined permission + */ + function removeRoleDefinition(roleName) { + delete roleStore[roleName]; + } + + /** + * Checks if role is defined in store + * + * @param roleName {String} Name of role + * @returns {Boolean} + */ + function hasRoleDefinition(roleName) { + return angular.isDefined(roleStore[roleName]); + } + + /** + * Returns role definition object by it's name + * + * @returns {Object} Role definition object + */ + function getRoleDefinition(roleName) { + return roleStore[roleName]; + } + + /** + * Returns all role definitions + * + * @returns {Object} Defined roles collection + */ + function getStore() { + return roleStore; + } + + /** + * Removes all role definitions + */ + function clearStore() { + roleStore = {}; + } + }]); +}()); + +(function () { + 'use strict'; + + /** + * Show/hide elements based on provided permissions/roles + * + * @example + *
+ *
+ *
+ */ + angular + .module('permission') + .directive('permission', ['$log', 'Authorization', 'PermissionMap', function ($log, Authorization, PermissionMap) { + return { + restrict: 'A', + scope: true, + bindToController: { + only: '=', + except: '=' + }, + controllerAs: 'permission', + controller: ['$scope', '$element', function ($scope, $element) { + var permission = this; + + $scope.$watchGroup(['permission.only', 'permission.except'], + function () { + try { + Authorization + .authorize(new PermissionMap({ + only: permission.only, + except: permission.except + }), null) + .then(function () { + $element.removeClass('ng-hide'); + }) + .catch(function () { + $element.addClass('ng-hide'); + }); + } catch (e) { + $element.addClass('ng-hide'); + $log.error(e.message); + } + }); + }] + }; + }]); +}()); + + +(function () { + 'use strict'; + + angular + .module('permission') + .service('Authorization', ['$q', 'PermissionMap', 'PermissionStore', 'RoleStore', function ($q, PermissionMap, PermissionStore, RoleStore) { + this.authorize = authorize; + + /** + * Checks if provided permissions are acceptable + * + * @param permissionsMap {PermissionMap} Map of permission names + * @param [toParams] {Object} UI-Router params object + * @returns {promise} $q.promise object + */ + function authorize(permissionsMap, toParams) { + return handleAuthorization(permissionsMap, toParams); + } + + /** + * Handles authorization based on provided permissions map + * @private + * + * @param permissionsMap {Object} Map of permission names + * @param toParams {Object} UI-Router params object + * @returns {promise} $q.promise object + */ + function handleAuthorization(permissionsMap, toParams) { + var deferred = $q.defer(); + + var exceptPromises = findMatchingPermissions(permissionsMap.except, toParams); + + only(exceptPromises) + .then(function (rejectedPermissions) { + deferred.reject(rejectedPermissions); + }) + .catch(function () { + if (!permissionsMap.only.length) { + deferred.resolve(null); + } + + var onlyPromises = findMatchingPermissions(permissionsMap.only, toParams); + + only(onlyPromises) + .then(function (resolvedPermissions) { + deferred.resolve(resolvedPermissions); + }) + .catch(function (rejectedPermission) { + deferred.reject(rejectedPermission); + }); + }); + + return deferred.promise; + } + + /** + * Implementation of missing $q `only` method that wits for first + * resolution of provided promise set. + * @private + * + * @param promises {Array|promise} Single or set of promises + * @returns {Promise} Returns a single promise that will be rejected with an array/hash of values, + * each value corresponding to the promise at the same index/key in the `promises` array/hash. + * If any of the promises is resolved, this resulting promise will be returned + * with the same resolution value. + */ + function only(promises) { + var deferred = $q.defer(), + counter = 0, + results = angular.isArray(promises) ? [] : {}; + + angular.forEach(promises, function (promise, key) { + counter++; + $q.when(promise) + .then(function (value) { + if (results.hasOwnProperty(key)) { + return; + } + deferred.resolve(value); + }) + .catch(function (reason) { + if (results.hasOwnProperty(key)) { + return; + } + results[key] = reason; + if (!(--counter)) { + deferred.reject(reason); + } + }); + }); + + if (counter === 0) { + deferred.reject(results); + } + + return deferred.promise; + } + + /** + * Performs iteration over list of defined permissions looking for matches + * @private + * + * @param permissionNames {Array} Set of permission names + * @param toParams {Object} UI-Router params object + * @returns {Array} Promise collection + */ + function findMatchingPermissions(permissionNames, toParams) { + return permissionNames.map(function (permissionName) { + if (RoleStore.hasRoleDefinition(permissionName)) { + var role = RoleStore.getRoleDefinition(permissionName); + return role.validateRole(toParams); + } + + if (PermissionStore.hasPermissionDefinition(permissionName)) { + var permission = PermissionStore.getPermissionDefinition(permissionName); + return permission.validatePermission(toParams); + } + + if (permissionName) { + return $q.reject(permissionName); + } + }); + } + }]); +})(); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.min.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.min.js new file mode 100644 index 0000000..1367692 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.min.js @@ -0,0 +1,11 @@ +/** + * angular-permission + * Route permission and access control as simple as it can get + * @version v2.1.2 - 2016-03-06 + * @link http://www.rafaelvidaurre.com + * @author Rafael Vidaurre + * @license MIT License, http://www.opensource.org/licenses/MIT + */ + +!function(){"use strict";var a=angular.module("permission",["ui.router"]);a.config(["$stateProvider",function(a){a.decorator("parent",function(a,b){return a.self.getState=function(){return a},b(a)})}]),a.run(["$rootScope","$state","$q","Authorization","PermissionMap",function(a,b,c,d,e){a.$on("$stateChangeStart",function(c,f,g,h,i,j){function k(a){return angular.isDefined(a.data)&&angular.isDefined(a.data.permissions)}function l(a){angular.extend(f,{$$isAuthorizationFinished:a})}function m(){return f.$$isAuthorizationFinished}function n(){return r()||q()}function o(a){var c=new e({redirectTo:a.redirectTo}),d=b.get(f.name).getState().path.slice().reverse();return angular.forEach(d,function(a){k(a)&&c.extendPermissionMap(new e(a.data.permissions))}),c}function p(c){d.authorize(c,g).then(function(){a.$broadcast("$stateChangePermissionAccepted",f,g,j),b.go(f.name,g,{notify:!1}).then(function(){a.$broadcast("$stateChangeSuccess",f,g)})})["catch"](function(d){return a.$broadcast("$stateChangePermissionDenied",f,g,j),c.resolveRedirectState(d).then(function(a){b.go(a,g)})})["finally"](function(){l(!1),a.$broadcast("$stateChangeSuccess")})}function q(){return a.$broadcast("$stateChangeStart",f,g,h,i,j).defaultPrevented}function r(){return a.$broadcast("$stateChangePermissionStart",f,g,j).defaultPrevented}if(!m()&&k(f)&&(c.preventDefault(),l(!0),!n())){var s=o(f.data.permissions);p(s)}})}])}(),function(){"use strict";angular.module("permission").factory("PermissionMap",["$q",function(a){function b(a,b,c,d){this.only=e(a.only,b,c,d),this.except=e(a.except,b,c,d),this.redirectTo=a.redirectTo}function c(b,c){return a.when(b.call(null,c)).then(function(a){if(!angular.isString(a))throw new TypeError('When used "redirectTo" as function, returned value must be string with state name');return a})}function d(b,d){if(!angular.isDefined(b["default"]))throw new ReferenceError('When used "redirectTo" as object, property "default" must be defined');var e=b[d];return angular.isDefined(e)||(e=b["default"]),angular.isFunction(e)?c(e,d):angular.isString(e)?a.resolve(e):void 0}function e(a,b,c,d){return angular.isString(a)?[a]:angular.isArray(a)?a:angular.isFunction(a)?a.call(null,b,c,d):[]}return b.prototype.extendPermissionMap=function(a){this.only=this.only.concat(a.only),this.except=this.except.concat(a.except)},b.prototype.resolveRedirectState=function(b){return angular.isFunction(this.redirectTo)?c(this.redirectTo,b):angular.isObject(this.redirectTo)?d(this.redirectTo,b):angular.isString(this.redirectTo)?a.resolve(this.redirectTo):a.reject(null)},b}])}(),function(){"use strict";angular.module("permission").factory("Permission",["$q",function(a){function b(a,b){d(a,b),this.permissionName=a,this.validationFunction=b}function c(b,c){var d=a.defer();return b?d.resolve(c):d.reject(c),d.promise}function d(a,b){if(!angular.isString(a))throw new TypeError('Parameter "permissionName" name must be String');if(!angular.isFunction(b))throw new TypeError('Parameter "validationFunction" must be Function')}return b.prototype.validatePermission=function(a){var b=this.validationFunction.call(null,a,this.permissionName);return angular.isFunction(b.then)||(b=c(b,this.permissionName)),b},b}])}(),function(){"use strict";angular.module("permission").factory("Role",["$q","PermissionStore",function(a,b){function c(a,c,d){e(a,c,d),this.roleName=a,this.permissionNames=c||[],this.validationFunction=d,d&&b.defineManyPermissions(c,d)}function d(b,c){var d=a.defer();return b?d.resolve(c):d.reject(c),d.promise}function e(a,b,c){if(!angular.isString(a))throw new TypeError('Parameter "roleName" name must be String');if(!angular.isArray(b))throw new TypeError('Parameter "permissionNames" must be Array');if(!b.length&&!angular.isFunction(c))throw new TypeError('Parameter "validationFunction" must be provided for empty "permissionNames" array')}return c.prototype.validateRole=function(c){if(this.permissionNames.length){var e=this.permissionNames.map(function(e){if(b.hasPermissionDefinition(e)){var f=b.getPermissionDefinition(e),g=f.validationFunction.call(null,c,f.permissionName);return angular.isFunction(g.then)||(g=d(g)),g}return a.reject(null)});return a.all(e)}var f=this.validationFunction.call(null,c,this.roleName);return angular.isFunction(f.then)||(f=d(f,this.roleName)),a.resolve(f)},c}])}(),function(){"use strict";angular.module("permission").service("PermissionStore",["Permission",function(a){function b(b,c){i[b]=new a(b,c)}function c(a,c){if(!angular.isArray(a))throw new TypeError('Parameter "permissionNames" name must be Array');angular.forEach(a,function(a){b(a,c)})}function d(a){delete i[a]}function e(a){return angular.isDefined(i[a])}function f(a){return i[a]}function g(){return i}function h(){i={}}var i={};this.definePermission=b,this.defineManyPermissions=c,this.removePermissionDefinition=d,this.hasPermissionDefinition=e,this.getPermissionDefinition=f,this.getStore=g,this.clearStore=h}])}(),function(){"use strict";angular.module("permission").service("RoleStore",["Role",function(a){function b(b,c,d){h[b]=new a(b,c,d)}function c(a){delete h[a]}function d(a){return angular.isDefined(h[a])}function e(a){return h[a]}function f(){return h}function g(){h={}}var h={};this.defineRole=b,this.getRoleDefinition=e,this.hasRoleDefinition=d,this.removeRoleDefinition=c,this.getStore=f,this.clearStore=g}])}(),function(){"use strict";angular.module("permission").directive("permission",["$log","Authorization","PermissionMap",function(a,b,c){return{restrict:"A",scope:!0,bindToController:{only:"=",except:"="},controllerAs:"permission",controller:["$scope","$element",function(d,e){var f=this;d.$watchGroup(["permission.only","permission.except"],function(){try{b.authorize(new c({only:f.only,except:f.except}),null).then(function(){e.removeClass("ng-hide")})["catch"](function(){e.addClass("ng-hide")})}catch(d){e.addClass("ng-hide"),a.error(d.message)}})}]}}])}(),function(){"use strict";angular.module("permission").service("Authorization",["$q","PermissionMap","PermissionStore","RoleStore",function(a,b,c,d){function e(a,b){return f(a,b)}function f(b,c){var d=a.defer(),e=h(b.except,c);return g(e).then(function(a){d.reject(a)})["catch"](function(){b.only.length||d.resolve(null);var a=h(b.only,c);g(a).then(function(a){d.resolve(a)})["catch"](function(a){d.reject(a)})}),d.promise}function g(b){var c=a.defer(),d=0,e=angular.isArray(b)?[]:{};return angular.forEach(b,function(b,f){d++,a.when(b).then(function(a){e.hasOwnProperty(f)||c.resolve(a)})["catch"](function(a){e.hasOwnProperty(f)||(e[f]=a,--d||c.reject(a))})}),0===d&&c.reject(e),c.promise}function h(b,e){return b.map(function(b){if(d.hasRoleDefinition(b)){var f=d.getRoleDefinition(b);return f.validateRole(e)}if(c.hasPermissionDefinition(b)){var g=c.getPermissionDefinition(b);return g.validatePermission(e)}return b?a.reject(b):void 0})}this.authorize=e}])}(); +//# sourceMappingURL=angular-permission.min.js.map \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.min.js.map b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.min.js.map new file mode 100644 index 0000000..9cf233d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/dist/angular-permission.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["angular-permission.js"],"names":["permission","angular","module","config","$stateProvider","decorator","state","parentFn","self","getState","run","$rootScope","$state","$q","Authorization","PermissionMap","$on","event","toState","toParams","fromState","fromParams","options","areSetStatePermissions","isDefined","data","permissions","setStateAuthorizationStatus","status","extend","$$isAuthorizationFinished","isAuthorizationFinished","areStateEventsDefaultPrevented","isStateChangePermissionStartDefaultPrevented","isStateChangeStartDefaultPrevented","compensatePermissionMap","statePermissionMap","permissionMap","redirectTo","toStatePath","get","name","path","slice","reverse","forEach","extendPermissionMap","authorizeForState","authorize","then","$broadcast","go","notify","rejectedPermission","resolveRedirectState","redirectStateName","defaultPrevented","preventDefault","compensatedPermissionMap","factory","this","only","resolvePermissionMapProperty","except","resolveFunctionRedirect","redirectFunction","when","call","redirectState","isString","TypeError","resolveObjectRedirect","redirectObject","ReferenceError","isFunction","resolve","property","isArray","prototype","concat","rejectedPermissionName","isObject","reject","Permission","permissionName","validationFunction","validateConstructor","wrapInPromise","result","dfd","defer","promise","validatePermission","validationResult","PermissionStore","Role","roleName","permissionNames","defineManyPermissions","length","validateRole","promises","map","hasPermissionDefinition","getPermissionDefinition","all","service","definePermission","permissionStore","removePermissionDefinition","getStore","clearStore","defineRole","roleStore","removeRoleDefinition","hasRoleDefinition","getRoleDefinition","directive","$log","restrict","scope","bindToController","controllerAs","controller","$scope","$element","$watchGroup","removeClass","addClass","e","error","message","RoleStore","permissionsMap","handleAuthorization","deferred","exceptPromises","findMatchingPermissions","rejectedPermissions","onlyPromises","resolvedPermissions","counter","results","key","value","hasOwnProperty","reason","role"],"mappings":"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","file":"angular-permission.min.js"} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/core/permissionModule.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/core/permissionModule.js new file mode 100644 index 0000000..946b0ff --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/core/permissionModule.js @@ -0,0 +1,146 @@ +(function () { + 'use strict'; + + var permission = angular.module('permission', ['ui.router']); + + /** + * This decorator is required to access full state object instead of it's configuration + * when trying to obtain full toState state object not it's configuration + * Can be removed when implemented https://github.com/angular-ui/ui-router/issues/13. + */ + permission.config(function ($stateProvider) { + $stateProvider.decorator('parent', function (state, parentFn) { + state.self.getState = function () { + return state; + }; + return parentFn(state); + }); + }); + + permission.run(function ($rootScope, $state, $q, Authorization, PermissionMap) { + $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) { + + if (!isAuthorizationFinished() && areSetStatePermissions(toState)) { + event.preventDefault(); + setStateAuthorizationStatus(true); + + if (!areStateEventsDefaultPrevented()) { + var compensatedPermissionMap = compensatePermissionMap(toState.data.permissions); + authorizeForState(compensatedPermissionMap); + } + } + + /** + * Checks if state is qualified to be permission based verified + * + * @returns {boolean} + */ + function areSetStatePermissions(state) { + return angular.isDefined(state.data) && angular.isDefined(state.data.permissions); + } + + /** + * Sets internal state `$$finishedAuthorization` variable to prevent looping + * + * @param status {boolean} When true authorization has been already preceded + */ + function setStateAuthorizationStatus(status) { + angular.extend(toState, {'$$isAuthorizationFinished': status}); + } + + + /** + * Checks if state has been already checked for authorization + * + * @returns {boolean} + */ + function isAuthorizationFinished() { + return toState.$$isAuthorizationFinished; + } + + /** + * Checks if state events are not prevented by default + * + * @returns {boolean} + */ + function areStateEventsDefaultPrevented() { + return isStateChangePermissionStartDefaultPrevented() || isStateChangeStartDefaultPrevented(); + } + + /** + * Builds map of permissions resolving passed values to data.permissions and combine them with all its parents + * keeping the order of permissions from the newest (children) to the oldest (parent) + * + * @param statePermissionMap {Object} Current state permission map + * @returns {PermissionMap} Permission map + */ + function compensatePermissionMap(statePermissionMap) { + var permissionMap = new PermissionMap({redirectTo: statePermissionMap.redirectTo}); + + var toStatePath = $state + .get(toState.name) + .getState().path + .slice() + .reverse(); + + angular.forEach(toStatePath, function (state) { + if (areSetStatePermissions(state)) { + permissionMap.extendPermissionMap(new PermissionMap(state.data.permissions)); + } + }); + + return permissionMap; + } + + /** + * Handles state authorization + * + * @param permissions {PermissionMap} Map of permission names + */ + function authorizeForState(permissions) { + Authorization + .authorize(permissions, toParams) + .then(function () { + $rootScope.$broadcast('$stateChangePermissionAccepted', toState, toParams, options); + + $state + .go(toState.name, toParams, {notify: false}) + .then(function () { + $rootScope.$broadcast('$stateChangeSuccess', toState, toParams); + }); + }) + .catch(function (rejectedPermission) { + $rootScope.$broadcast('$stateChangePermissionDenied', toState, toParams, options); + + return permissions + .resolveRedirectState(rejectedPermission) + .then(function (redirectStateName) { + $state.go(redirectStateName, toParams); + }); + }) + .finally(function () { + setStateAuthorizationStatus(false); + $rootScope.$broadcast('$stateChangeSuccess'); + }); + } + + /** + * Checks if event $stateChangeStart hasn't been disabled by default + * + * @returns {boolean} + */ + function isStateChangeStartDefaultPrevented() { + return $rootScope.$broadcast('$stateChangeStart', toState, toParams, fromState, fromParams, options).defaultPrevented; + } + + /** + * Checks if event $stateChangePermissionStart hasn't been disabled by default + * + * @returns {boolean} + */ + function isStateChangePermissionStartDefaultPrevented() { + return $rootScope.$broadcast('$stateChangePermissionStart', toState, toParams, options).defaultPrevented; + } + }); + }); +}()); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/models/Permission.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/models/Permission.js new file mode 100644 index 0000000..4e2f72d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/models/Permission.js @@ -0,0 +1,73 @@ +(function () { + 'use strict'; + + angular + .module('permission') + .factory('Permission', function ($q) { + + /** + * Permission definition object constructor + * + * @param permissionName {String} Name repressing permission + * @param validationFunction {Function} Function used to check if permission is valid + * @constructor + */ + function Permission(permissionName, validationFunction) { + validateConstructor(permissionName, validationFunction); + + this.permissionName = permissionName; + this.validationFunction = validationFunction; + } + + /** + * Checks if permission is still valid + * + * @param toParams {Object} UI-Router params object + * @returns {Promise} + */ + Permission.prototype.validatePermission = function (toParams) { + var validationResult = this.validationFunction.call(null, toParams, this.permissionName); + + if (!angular.isFunction(validationResult.then)) { + validationResult = wrapInPromise(validationResult, this.permissionName); + } + + return validationResult; + }; + + /** + * Converts a value into a promise, if the value is truthy it resolves it, otherwise it rejects it + * @private + * + * @param result {Boolean} Function to be wrapped into promise + * @param permissionName {String} Returned value in promise + * @return {Promise} + */ + function wrapInPromise(result, permissionName) { + var dfd = $q.defer(); + + if (result) { + dfd.resolve(permissionName); + } else { + dfd.reject(permissionName); + } + + return dfd.promise; + } + + /** + * Checks if provided permission has accepted parameter types + * @private + */ + function validateConstructor(permissionName, validationFunction) { + if (!angular.isString(permissionName)) { + throw new TypeError('Parameter "permissionName" name must be String'); + } + if (!angular.isFunction(validationFunction)) { + throw new TypeError('Parameter "validationFunction" must be Function'); + } + } + + return Permission; + }); +}()); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/models/Role.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/models/Role.js new file mode 100644 index 0000000..fa0c59c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/models/Role.js @@ -0,0 +1,105 @@ +(function () { + 'use strict'; + + angular + .module('permission') + .factory('Role', function ($q, PermissionStore) { + + /** + * Role definition constructor + * + * @param roleName {String} Name representing role + * @param permissionNames {Array} List of permission names representing role + * @param [validationFunction] {Function} Optional function used to validate if permissions are still valid + * @constructor + */ + function Role(roleName, permissionNames, validationFunction) { + validateConstructor(roleName, permissionNames, validationFunction); + this.roleName = roleName; + this.permissionNames = permissionNames || []; + this.validationFunction = validationFunction; + + if (validationFunction) { + PermissionStore.defineManyPermissions(permissionNames, validationFunction); + } + } + + /** + * Checks if role is still valid + * + * @param [toParams] {Object} UI-Router params object + * @returns {Promise} $q.promise object + */ + Role.prototype.validateRole = function (toParams) { + + // When set permissions is provided check each of them + if (this.permissionNames.length) { + var promises = this.permissionNames.map(function (permissionName) { + if (PermissionStore.hasPermissionDefinition(permissionName)) { + var permission = PermissionStore.getPermissionDefinition(permissionName); + var validationResult = permission.validationFunction.call(null, toParams, permission.permissionName); + + if (!angular.isFunction(validationResult.then)) { + validationResult = wrapInPromise(validationResult); + } + + return validationResult; + } + + return $q.reject(null); + }); + + return $q.all(promises); + } + + // If not call validation function manually + var validationResult = this.validationFunction.call(null, toParams, this.roleName); + if (!angular.isFunction(validationResult.then)) { + validationResult = wrapInPromise(validationResult, this.roleName); + } + + return $q.resolve(validationResult); + + }; + + /** + * Converts a value into a promise, if the value is truthy it resolves it, otherwise it rejects it + * @private + * + * @param result {Boolean} Function to be wrapped into promise + * @param roleName {String} Returned value in promise + * @return {Promise} + */ + function wrapInPromise(result, roleName) { + var dfd = $q.defer(); + + if (result) { + dfd.resolve(roleName); + } else { + dfd.reject(roleName); + } + + return dfd.promise; + } + + /** + * Checks if provided permission has accepted parameter types + * @private + */ + function validateConstructor(roleName, permissionNames, validationFunction) { + if (!angular.isString(roleName)) { + throw new TypeError('Parameter "roleName" name must be String'); + } + + if (!angular.isArray(permissionNames)) { + throw new TypeError('Parameter "permissionNames" must be Array'); + } + + if (!permissionNames.length && !angular.isFunction(validationFunction)) { + throw new TypeError('Parameter "validationFunction" must be provided for empty "permissionNames" array'); + } + } + + return Role; + }); +}()); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/stores/RoleStore.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/stores/RoleStore.js new file mode 100644 index 0000000..55c58bf --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/stores/RoleStore.js @@ -0,0 +1,71 @@ +(function () { + 'use strict'; + + angular + .module('permission') + .service('RoleStore', function (Role) { + var roleStore = {}; + + this.defineRole = defineRole; + this.getRoleDefinition = getRoleDefinition; + this.hasRoleDefinition = hasRoleDefinition; + this.removeRoleDefinition = removeRoleDefinition; + this.getStore = getStore; + this.clearStore = clearStore; + + /** + * Allows to define role + * + * @param roleName {String} Name of defined role + * @param permissions {Array} Set of permission names + * @param [validationFunction] {Function} Function used to validate if permissions in role are valid + */ + function defineRole(roleName, permissions, validationFunction) { + roleStore[roleName] = new Role(roleName, permissions, validationFunction); + } + + /** + * Deletes role from store + * + * @param roleName {String} Name of defined permission + */ + function removeRoleDefinition(roleName) { + delete roleStore[roleName]; + } + + /** + * Checks if role is defined in store + * + * @param roleName {String} Name of role + * @returns {Boolean} + */ + function hasRoleDefinition(roleName) { + return angular.isDefined(roleStore[roleName]); + } + + /** + * Returns role definition object by it's name + * + * @returns {Object} Role definition object + */ + function getRoleDefinition(roleName) { + return roleStore[roleName]; + } + + /** + * Returns all role definitions + * + * @returns {Object} Defined roles collection + */ + function getStore() { + return roleStore; + } + + /** + * Removes all role definitions + */ + function clearStore() { + roleStore = {}; + } + }); +}()); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/stores/permissionStore.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/stores/permissionStore.js new file mode 100644 index 0000000..cbf2ae0 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/src/stores/permissionStore.js @@ -0,0 +1,87 @@ +(function () { + 'use strict'; + + angular + .module('permission') + .service('PermissionStore', function (Permission) { + var permissionStore = {}; + + this.definePermission = definePermission; + this.defineManyPermissions = defineManyPermissions; + this.removePermissionDefinition = removePermissionDefinition; + this.hasPermissionDefinition = hasPermissionDefinition; + this.getPermissionDefinition = getPermissionDefinition; + this.getStore = getStore; + this.clearStore = clearStore; + + /** + * Allows to define permission on application configuration + * + * @param permissionName {String} Name of defined permission + * @param validationFunction {Function} Function used to validate if permission is valid + */ + function definePermission(permissionName, validationFunction) { + permissionStore[permissionName] = new Permission(permissionName, validationFunction); + } + + /** + * Allows to define set of permissionNames with shared validation function on application configuration + * + * @param permissionNames {Array} Set of permission names + * @param validationFunction {Function} Function used to validate if permission is valid + */ + function defineManyPermissions(permissionNames, validationFunction) { + if (!angular.isArray(permissionNames)) { + throw new TypeError('Parameter "permissionNames" name must be Array'); + } + + angular.forEach(permissionNames, function (permissionName) { + definePermission(permissionName, validationFunction); + }); + } + + /** + * Deletes permission + * + * @param permissionName {String} Name of defined permission + */ + function removePermissionDefinition(permissionName) { + delete permissionStore[permissionName]; + } + + /** + * Checks if permission exists + * + * @param permissionName {String} Name of defined permission + * @returns {Boolean} + */ + function hasPermissionDefinition(permissionName) { + return angular.isDefined(permissionStore[permissionName]); + } + + /** + * Returns permission by it's name + * + * @returns {Object} Permissions collection + */ + function getPermissionDefinition(permissionName) { + return permissionStore[permissionName]; + } + + /** + * Returns all permissions + * + * @returns {Object} Permissions collection + */ + function getStore() { + return permissionStore; + } + + /** + * Removes all permissions + */ + function clearStore() { + permissionStore = {}; + } + }); +}()); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/authorization/Authorization.test.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/authorization/Authorization.test.js new file mode 100644 index 0000000..97f967f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/authorization/Authorization.test.js @@ -0,0 +1,173 @@ +describe('service: Authorization', function () { + 'use strict'; + + var $q, $rootScope, PermissionStore, RoleStore, PermissionMap, Authorization; + + beforeEach(function () { + module('permission'); + + inject(function ($injector) { + PermissionStore = $injector.get('PermissionStore'); + RoleStore = $injector.get('RoleStore'); + PermissionMap = $injector.get('PermissionMap'); + Authorization = $injector.get('Authorization'); + $q = $injector.get('$q'); + $rootScope = $injector.get('$rootScope'); + }); + }); + + describe('method: authorize', function () { + + var isResolved; + + beforeEach(function () { + PermissionStore.definePermission('USER', function () { + return true; + }); + + PermissionStore.definePermission('ADMIN', function () { + return false; + }); + + RoleStore.defineRole('ACCOUNTANT', ['USER']); + RoleStore.defineRole('ADMIN_ACCOUNTANT', ['ADMIN']); + + isResolved = false; + }); + + it('should resolve promise when "only" matches permissions', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({only: ['USER']}), null) + .then(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should resolve promise when "only" matches roles', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({only: ['ACCOUNTANT']})) + .then(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should reject promise when "only" mismatches permissions', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({only: ['ADMIN']})) + .catch(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should reject promise when "only" mismatches roles', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({only: ['ADMIN_ACCOUNTANT']})) + .catch(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should resolve promise when "except" mismatches permissions', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({except: ['ADMIN']})) + .then(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should resolve promise when "except" mismatches roles', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({except: ['ADMIN_ACCOUNTANT']})) + .then(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should reject promise when "except" matches permissions', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({except: ['USER']})) + .catch(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should reject promise when "except" matches roles', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({except: ['ACCOUNTANT']})) + .catch(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + + it('should reject promise when permission/role is undefined', function () { + // GIVEN + Authorization + .authorize(new PermissionMap({only: ['SUPER_ADMIN']})) + .catch(function () { + isResolved = true; + }); + + // WHEN + $rootScope.$apply(); + + // THEN + expect(isResolved).toEqual(true); + }); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/core/permissionDirective.test.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/core/permissionDirective.test.js new file mode 100644 index 0000000..4bbf763 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/core/permissionDirective.test.js @@ -0,0 +1,110 @@ +describe('directive: Permission', function () { + 'use strict'; + + var $q, $compile, $rootScope, Authorization, PermissionStore, PermissionMap; + + + beforeEach(function () { + // Instantiate module + module('permission'); + + // Inject services into module + inject(function ($injector) { + $q = $injector.get('$q'); + $compile = $injector.get('$compile'); + $rootScope = $injector.get('$rootScope').$new(); + Authorization = $injector.get('Authorization'); + PermissionStore = $injector.get('PermissionStore'); + PermissionMap = $injector.get('PermissionMap'); + }); + }); + + // Initialize permissions + beforeEach(function () { + PermissionStore.definePermission('USER', function () { + return true; + }); + + PermissionStore.definePermission('ADMIN', function () { + return false; + }); + }); + + it('should show element if authorized when permissions are passed as string array', function () { + // GIVEN + var element = angular.element('
'); + + // WHEN + $compile(element)($rootScope); + $rootScope.$digest(); + + // THEN + expect(element.hasClass('ng-hide')).toBeFalsy(); + }); + + it('should show element if authorized when permissions are passed as variable reference', function () { + // GIVEN + var element = angular.element('
'); + $rootScope.only = ['USER']; + + // WHEN + $compile(element)($rootScope); + $rootScope.$digest(); + + // THEN + expect(element.hasClass('ng-hide')).toBeFalsy(); + }); + + it('should hide element if unauthorized when permissions are passed as string array', function () { + // GIVEN + var element = angular.element('
'); + + // WHEN + $compile(element)($rootScope); + $rootScope.$digest(); + + // THEN + expect(element.hasClass('ng-hide')).toBeTruthy(); + }); + + it('should hide element if unauthorized when permissions are passed as variable reference', function () { + // GIVEN + var element = angular.element('
'); + $rootScope.except = ['USER']; + + // WHEN + $compile(element)($rootScope); + $rootScope.$digest(); + + // THEN + expect(element.hasClass('ng-hide')).toBeTruthy(); + }); + + it('should watch for changes in "only" and "except" attributes', function () { + // GIVEN + var element = angular.element('
'); + $rootScope.only = ['USER']; + $compile(element)($rootScope); + $rootScope.$digest(); + + // WHEN + $rootScope.only = ['ADMIN']; + $rootScope.$digest(); + + // THEN + expect(element.hasClass('ng-hide')).toBeTruthy(); + }); + + it('should call authorize method', function () { + // GIVEN + var element = angular.element('
'); + spyOn(Authorization, 'authorize'); + + // WHEN + $compile(element)($rootScope); + $rootScope.$digest(); + + // THEN + expect(Authorization.authorize).toHaveBeenCalledWith(new PermissionMap({only: undefined, except: ['USER']}), null); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/Permission.test.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/Permission.test.js new file mode 100644 index 0000000..cf48edb --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/Permission.test.js @@ -0,0 +1,52 @@ +describe('model: Permission', function () { + 'use strict'; + + var $q, $rootScope, Permission; + + beforeEach(function () { + module('permission'); + + inject(function ($injector) { + $q = $injector.get('$q'); + $rootScope = $injector.get('$rootScope'); + Permission = $injector.get('Permission'); + }); + }); + + describe('constructor: Permission', function () { + it('should throw an exception on invalid permissionName', function () { + // GIVEN + // WHEN + // THEN + expect(function () { + new Permission(null, function () { + return true; + }); + }).toThrow(new TypeError('Parameter "permissionName" name must be String')); + }); + + it('should throw an exception on invalid validationFunction', function () { + // GIVEN + // WHEN + // THEN + expect(function () { + new Permission('valid-name', undefined); + }).toThrow(new TypeError('Parameter "validationFunction" must be Function')); + }); + + it('should return new permission definition instance for correct parameters', function () { + // GIVEN + var permissionName = 'user'; + var validationFunction = function () { + return true; + }; + + // WHEN + var permission = new Permission(permissionName, validationFunction); + + // THEN + expect(permission.permissionName).toBe(permissionName); + expect(permission.validationFunction).toBe(validationFunction); + }); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/exceptParam.test.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/exceptParam.test.js new file mode 100644 index 0000000..dd3f3fa --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/exceptParam.test.js @@ -0,0 +1,192 @@ +describe('model: PermissionMap', function () { + 'use strict'; + + var $rootScope, $state, $stateProvider, PermissionStore; + + beforeEach(function () { + module('ui.router', function ($injector) { + $stateProvider = $injector.get('$stateProvider'); + }); + + module('permission'); + + inject(function ($injector) { + $state = $injector.get('$state'); + $rootScope = $injector.get('$rootScope'); + PermissionStore = $injector.get('PermissionStore'); + }); + }); + + // Initialize permissions + beforeEach(function () { + PermissionStore.definePermission('AUTHORIZED', function () { + return true; + }); + + PermissionStore.definePermission('ADMIN', function () { + return false; + }); + + PermissionStore.definePermission('UNAUTHORIZED', function () { + return false; + }); + }); + + // Set default states and go home + beforeEach(function () { + $stateProvider + .state('home', {}); + + $state.go('home'); + $rootScope.$apply(); + }); + + describe('param: except', function () { + + function authorizationTests() { + it('should go to state if authorized', function () { + // GIVEN + // WHEN + $state.go('authorized'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('authorized'); + }); + + it('should go to child state if parent state is authorized', function () { + // GIVEN + $stateProvider.state('authorized.child', {}); + + // WHEN + $state.go('authorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('authorized.child'); + }); + + it('should go to authorized state even if called multiple time', function () { + // GIVEN + $stateProvider.state('authorized.child', {}); + + // WHEN + $state.go('authorized.child'); + $rootScope.$digest(); + $state.go('authorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('authorized.child'); + }); + + it('should not go to state if unauthorized', function () { + // GIVEN + // WHEN + $state.go('unauthorized'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('home'); + }); + + it('should not go to child state if parent state is not authorized', function () { + // GIVEN + $stateProvider.state('unauthorized.child', {}); + + + // WHEN + $state.go('unauthorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('home'); + }); + + it('should not go to unauthorized state even if accessed multiple times', function () { + // GIVEN + $stateProvider.state('unauthorized.child', {}); + + + // WHEN + $state.go('unauthorized.child'); + $rootScope.$digest(); + $state.go('unauthorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('home'); + }); + } + + describe('used as string', function () { + beforeEach(function () { + $stateProvider + .state('authorized', { + data: { + permissions: { + except: 'UNAUTHORIZED' + } + } + }) + .state('unauthorized', { + data: { + permissions: { + except: 'AUTHORIZED' + } + } + }); + }); + + authorizationTests(); + }); + + describe('used as array', function () { + beforeEach(function () { + $stateProvider + .state('authorized', { + data: { + permissions: { + except: ['UNAUTHORIZED', 'ADMIN'] + } + } + }) + .state('unauthorized', { + data: { + permissions: { + except: ['AUTHORIZED'] + } + } + }); + }); + + authorizationTests(); + }); + + describe('used as function', function () { + beforeEach(function () { + $stateProvider + .state('authorized', { + data: { + permissions: { + except: function () { + return ['UNAUTHORIZED', 'ADMIN']; + } + } + } + }) + .state('unauthorized', { + data: { + permissions: { + except: function () { + return ['AUTHORIZED']; + } + } + } + }); + }); + + authorizationTests(); + }); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/onlyParam.test.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/onlyParam.test.js new file mode 100644 index 0000000..ed4b5d7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/onlyParam.test.js @@ -0,0 +1,192 @@ +describe('model: PermissionMap', function () { + 'use strict'; + + var $rootScope, $state, $stateProvider, PermissionStore; + + beforeEach(function () { + module('ui.router', function ($injector) { + $stateProvider = $injector.get('$stateProvider'); + }); + + module('permission'); + + inject(function ($injector) { + $state = $injector.get('$state'); + $rootScope = $injector.get('$rootScope'); + PermissionStore = $injector.get('PermissionStore'); + }); + }); + + // Initialize permissions + beforeEach(function () { + PermissionStore.definePermission('AUTHORIZED', function () { + return true; + }); + + PermissionStore.definePermission('ADMIN', function () { + return false; + }); + + PermissionStore.definePermission('UNAUTHORIZED', function () { + return false; + }); + }); + + // Set default states and go home + beforeEach(function () { + $stateProvider + .state('home', {}); + + $state.go('home'); + $rootScope.$apply(); + }); + + describe('param: only', function () { + + function authorizationTests() { + it('should go to state if authorized', function () { + // GIVEN + // WHEN + $state.go('authorized'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('authorized'); + }); + + it('should go to child state if parent state is authorized', function () { + // GIVEN + $stateProvider.state('authorized.child', {}); + + // WHEN + $state.go('authorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('authorized.child'); + }); + + it('should go to authorized state even if called multiple time', function () { + // GIVEN + $stateProvider.state('authorized.child', {}); + + // WHEN + $state.go('authorized.child'); + $rootScope.$digest(); + $state.go('authorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('authorized.child'); + }); + + it('should not go to state if unauthorized', function () { + // GIVEN + // WHEN + $state.go('unauthorized'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('home'); + }); + + it('should not go to child state if parent state is not authorized', function () { + // GIVEN + $stateProvider.state('unauthorized.child', {}); + + + // WHEN + $state.go('unauthorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('home'); + }); + + it('should not go to unauthorized state even if accessed multiple times', function () { + // GIVEN + $stateProvider.state('unauthorized.child', {}); + + + // WHEN + $state.go('unauthorized.child'); + $rootScope.$digest(); + $state.go('unauthorized.child'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('home'); + }); + } + + describe('used as string', function () { + beforeEach(function () { + $stateProvider + .state('authorized', { + data: { + permissions: { + only: 'AUTHORIZED' + } + } + }) + .state('unauthorized', { + data: { + permissions: { + only: 'UNAUTHORIZED' + } + } + }); + }); + + authorizationTests(); + }); + + describe('used as array', function () { + beforeEach(function () { + $stateProvider + .state('authorized', { + data: { + permissions: { + only: ['AUTHORIZED', 'ADMIN'] + } + } + }) + .state('unauthorized', { + data: { + permissions: { + only: ['UNAUTHORIZED'] + } + } + }); + }); + + authorizationTests(); + }); + + describe('used as function', function () { + beforeEach(function () { + $stateProvider + .state('authorized', { + data: { + permissions: { + only: function () { + return ['AUTHORIZED', 'ADMIN']; + } + } + } + }) + .state('unauthorized', { + data: { + permissions: { + only: function () { + return ['UNAUTHORIZED']; + } + } + } + }); + }); + + authorizationTests(); + }); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/redirectToParam.test.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/redirectToParam.test.js new file mode 100644 index 0000000..5287c74 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/models/PermissionMap/redirectToParam.test.js @@ -0,0 +1,292 @@ +describe('model: PermissionMap', function () { + 'use strict'; + + var $rootScope, $state, $stateProvider, $q, PermissionStore; + + beforeEach(function () { + module('ui.router', function ($injector) { + $stateProvider = $injector.get('$stateProvider'); + }); + + module('permission'); + + inject(function ($injector) { + $state = $injector.get('$state'); + $q = $injector.get('$q'); + $rootScope = $injector.get('$rootScope'); + PermissionStore = $injector.get('PermissionStore'); + }); + }); + + // Initialize permissions + beforeEach(function () { + PermissionStore.definePermission('accepted', function () { + return true; + }); + + PermissionStore.definePermission('denied', function () { + return false; + }); + }); + + // Set default states and go home + beforeEach(function () { + $stateProvider + .state('home', {}) + .state('accepted', { + data: { + permissions: {only: ['accepted']} + } + }) + .state('denied', { + data: { + permissions: { + only: ['denied'] + } + } + }); + + $state.go('home'); + $rootScope.$apply(); + }); + + describe('param: redirectTo', function () { + + describe('used as string', function () { + it('should redirect based on state name', function () { + // GIVEN + $stateProvider + .state('redirected', {}) + .state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: 'redirected' + } + } + }); + + // WHEN + $state.go('redirect'); + $rootScope.$digest(); + + // THEN + expect($state.current.name).toBe('redirected'); + }); + }); + + describe('used as object', function () { + it('should throw error when "default" property is not defined', function () { + // GIVEN + var error; + + $stateProvider + .state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: {} + } + } + }); + + // WHEN + $state.go('redirect'); + try { + $rootScope.$apply(); + } catch (err) { + error = err; + } + + // THEN + expect(error.message).toBe('When used "redirectTo" as object, property "default" must be defined'); + }); + + it('should redirect to "default" property value if rejected permission is not found', function () { + // GIVEN + $stateProvider + .state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: { + otherThanDenied: 'otherThanDenied', + default: 'default' + } + } + } + }) + .state('default', {}) + .state('otherThanDenied', {}); + + // WHEN + $state.go('redirect'); + $rootScope.$apply(); + + // THEN + expect($state.current.name).toBe('default'); + expect($state.current.name).not.toBe('otherThanDenied'); + }); + + it('should redirect based on results of rejected permission with string property', function () { + // GIVEN + $stateProvider + .state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: { + denied: 'redirected', + default: 'default' + } + } + } + }) + .state('default', {}) + .state('redirected', {}); + + // WHEN + $state.go('redirect'); + $rootScope.$apply(); + + // THEN + expect($state.current.name).toBe('redirected'); + expect($state.current.name).not.toBe('default'); + }); + + it('should redirect based on results of rejected permission with function', function () { + // GIVEN + $stateProvider + .state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: { + denied: function () { + return 'redirected'; + }, + default: 'default' + } + } + } + }) + .state('default', {}) + .state('redirected', {}); + + // WHEN + $state.go('redirect'); + $rootScope.$apply(); + + // THEN + expect($state.current.name).toBe('redirected'); + expect($state.current.name).not.toBe('default'); + }); + + it('should redirect based on results of rejected permission with promise', function () { + // GIVEN + $stateProvider + .state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: { + denied: function () { + return $q.when('redirected'); + }, + default: 'default' + } + } + } + }) + .state('default', {}) + .state('redirected', {}); + + // WHEN + $state.go('redirect'); + $rootScope.$apply(); + + // THEN + expect($state.current.name).toBe('redirected'); + expect($state.current.name).not.toBe('default'); + }); + }); + + describe('used as function/promise', function () { + it('should throw error when function do not return state string', function () { + // GIVEN + var error; + + $stateProvider + .state('redirect', { + url: '/function', + data: { + permissions: { + only: ['denied'], + redirectTo: function () { + return null; + } + } + } + }); + + // WHEN + $state.go('redirect'); + try { + $rootScope.$apply(); + } catch (err) { + error = err; + } + + // THEN + expect(error.message).toBe('When used "redirectTo" as function, returned value must be string with state name'); + }); + + it('should redirect based on results of function', function () { + // GIVEN + $stateProvider + .state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: function () { + return 'other'; + } + } + } + }) + .state('other', {}); + + // WHEN + $state.go('redirect'); + $rootScope.$apply(); + + // THEN + expect($state.current.name).toBe('other'); + }); + + it('should redirect with promise based functions', function () { + // GIVEN + $stateProvider.state('redirect', { + data: { + permissions: { + only: ['denied'], + redirectTo: function () { + return $q.when('other'); + } + } + } + }) + .state('other', { + url: '/other' + }); + + // WHEN + $state.go('redirect'); + $rootScope.$apply(); + + // THEN + expect($state.current.name).toBe('other'); + }); + }); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/stores/PermissionStore.test.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/stores/PermissionStore.test.js new file mode 100644 index 0000000..a629fd9 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-permission/test/stores/PermissionStore.test.js @@ -0,0 +1,110 @@ +describe('service: PermissionStore', function () { + 'use strict'; + + var $q, $rootScope, PermissionStore, Permission; + + beforeEach(function () { + module('permission'); + + inject(function ($injector) { + $q = $injector.get('$q'); + $rootScope = $injector.get('$rootScope'); + PermissionStore = $injector.get('PermissionStore'); + Permission = $injector.get('Permission'); + }); + }); + + describe('method: definePermission', function () { + it('should add permission definition to store for correct parameters', function () { + // GIVEN + // WHEN + PermissionStore.definePermission('user', function () { + return true; + }); + // THEN + expect(PermissionStore.hasPermissionDefinition('user')).toBe(true); + }); + }); + + describe('method: defineManyPermissions', function () { + it('should throw error if permissionNames is not Array', function () { + // GIVEN + // WHEN + // THEN + expect(function () { + PermissionStore.defineManyPermissions({}, null); + }).toThrow(new TypeError('Parameter "permissionNames" name must be Array')); + }); + + it('should add permission definitions to store for correct set of parameters', function () { + // GIVEN + // WHEN + PermissionStore.defineManyPermissions(['user', 'admin'], function () { + return true; + }); + + // THEN + expect(PermissionStore.hasPermissionDefinition('user')).toBe(true); + expect(PermissionStore.hasPermissionDefinition('admin')).toBe(true); + }); + }); + + describe('method: getPermissionDefinition', function () { + it('should return permission definition object', function () { + // GIVEN + PermissionStore.definePermission('USER', function () { + return true; + }); + // WHEN + var permission = PermissionStore.getPermissionDefinition('USER'); + + // THEN + expect(permission instanceof Permission).toBeTruthy(); + }); + }); + + describe('method: hasPermissionDefinition', function () { + it('should check if permission is defined', function () { + // GIVEN + // WHEN + PermissionStore.definePermission('user', function () { + return true; + }); + + // THEN + expect(PermissionStore.hasPermissionDefinition('user')).toBeTruthy(); + expect(PermissionStore.hasPermissionDefinition('admin')).toBeFalsy(); + }); + }); + + describe('method: clearStore', function () { + it('should remove all permission definitions', function () { + // GIVEN + PermissionStore.defineManyPermissions(['user', 'admin', 'superAdmin'], function () { + return true; + }); + + // WHEN + PermissionStore.clearStore(); + + // THEN + expect(Object.keys(PermissionStore.getStore()).length).toBe(0); + }); + }); + + describe('method: removePermissionDefinition', function () { + it('should remove definition from store', function () { + // GIVEN + PermissionStore.defineManyPermissions(['user', 'admin'], function () { + return true; + }); + + // WHEN + PermissionStore.removePermissionDefinition('user'); + + // THEN + expect(PermissionStore.hasPermissionDefinition('user')).toBeFalsy(); + expect(PermissionStore.hasPermissionDefinition('admin')).toBeTruthy(); + }); + }); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/CONTRIBUTING.md b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/CONTRIBUTING.md new file mode 100644 index 0000000..7e4fcb8 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/CONTRIBUTING.md @@ -0,0 +1,65 @@ + +# Report an Issue + +Help us make UI-Router better! If you think you might have found a bug, or some other weirdness, start by making sure +it hasn't already been reported. You can [search through existing issues](https://github.com/angular-ui/ui-router/search?q=wat%3F&type=Issues) +to see if someone's reported one similar to yours. + +If not, then [create a plunkr](http://bit.ly/UIR-Plunk) that demonstrates the problem (try to use as little code +as possible: the more minimalist, the faster we can debug it). + +Next, [create a new issue](https://github.com/angular-ui/ui-router/issues/new) that briefly explains the problem, +and provides a bit of background as to the circumstances that triggered it. Don't forget to include the link to +that plunkr you created! + +**Note**: If you're unsure how a feature is used, or are encountering some unexpected behavior that you aren't sure +is a bug, it's best to talk it out on +[StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) before reporting it. This +keeps development streamlined, and helps us focus on building great software. + + +Issues only! | +-------------| +Please keep in mind that the issue tracker is for *issues*. Please do *not* post an issue if you need help or support. Instead, see one of the above-mentioned forums or [IRC](irc://irc.freenode.net/#angularjs). | + +####Purple Labels +A purple label means that **you** need to take some further action. + - ![Not Actionable - Need Info](ngdoc_assets/incomplete.png): Your issue is not specific enough, or there is no clear action that we can take. Please clarify and refine your issue. + - ![Plunkr Please](ngdoc_assets/example.png): Please [create a plunkr](http://bit.ly/UIR-Plunk) + - ![StackOverflow](ngdoc_assets/so.png): We suspect your issue is really a help request, or could be answered by the community. Please ask your question on [StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router). If you determine that is an actual issue, please explain why. + +If your issue gets labeled with purple label, no further action will be taken until you respond to the label appropriately. + +# Contribute + +**(1)** See the **[Developing](#developing)** section below, to get the development version of UI-Router up and running on your local machine. + +**(2)** Check out the [roadmap](https://github.com/angular-ui/ui-router/milestones) to see where the project is headed, and if your feature idea fits with where we're headed. + +**(3)** If you're not sure, [open an RFC](https://github.com/angular-ui/ui-router/issues/new?title=RFC:%20My%20idea) to get some feedback on your idea. + +**(4)** Finally, commit some code and open a pull request. Code & commits should abide by the following rules: + +- *Always* have test coverage for new features (or regression tests for bug fixes), and *never* break existing tests +- Commits should represent one logical change each; if a feature goes through multiple iterations, squash your commits down to one +- Make sure to follow the [Angular commit message format](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format) so your change will appear in the changelog of the next release. +- Changes should always respect the coding style of the project + + + +# Developing + +UI-Router uses grunt >= 0.4.x. Make sure to upgrade your environment and read the +[Migration Guide](http://gruntjs.com/upgrading-from-0.3-to-0.4). + +Dependencies for building from source and running tests: + +* [grunt-cli](https://github.com/gruntjs/grunt-cli) - run: `$ npm install -g grunt-cli` +* Then, install the development dependencies by running `$ npm install` from the project directory + +There are a number of targets in the gruntfile that are used to generating different builds: + +* `grunt`: Perform a normal build, runs jshint and karma tests +* `grunt build`: Perform a normal build +* `grunt dist`: Perform a clean build and generate documentation +* `grunt dev`: Run dev server (sample app) and watch for changes, builds and runs karma tests on changes. diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/LICENSE b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/LICENSE new file mode 100644 index 0000000..6413b09 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/release/angular-ui-router.min.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/release/angular-ui-router.min.js new file mode 100644 index 0000000..f1b0e35 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/release/angular-ui-router.min.js @@ -0,0 +1,8 @@ +/** + * State-based routing for AngularJS + * @version v0.2.18 + * @link http://angular-ui.github.com/ + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return R(new(R(function(){},{prototype:a})),b)}function e(a){return Q(arguments,function(b){b!==a&&Q(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return Q(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l]&&i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return R({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e "));if(s[c]=d,N(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);Q(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return O(a)&&a.then&&a.$$promises}if(!O(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return Q(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!L(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;Q(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!O(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),r=n.promise,s=r.$$promises={},t=R({},d),u=1+q.length/3,v=!1;if(L(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,m(f.$$inheritedValues,p)),R(s,f.$$promises),f.$$values?(v=e(t,m(f.$$values,p)),r.$$inheritedValues=m(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=m(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function q(a,b,c){this.fromConfig=function(a,b,c){return L(a.template)?this.fromString(a.template,b):L(a.templateUrl)?this.fromUrl(a.templateUrl,b):L(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return M(a)?a(b):a},this.fromUrl=function(c,d){return M(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function r(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new U.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:f=f.replace(/\/$/,""),e=["(?:/(",")|/)?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),h&&(j=U.type(h)||d(U.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)})),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=R({params:{}},O(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new U.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function s(a){R(this,a)}function t(){function a(a){return null!=a?a.toString().replace(/~/g,"~~").replace(/\//g,"~2F"):a}function e(a){return null!=a?a.toString().replace(/~2F/g,"/").replace(/~~/g,"~"):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return M(a)||P(a)&&M(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(u[a.name],l.invoke(a.def))}}function k(a){R(this,a||{})}U=this;var l,m=!1,p=!0,q=!1,u={},v=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!L(a)||"string"==typeof a},pattern:/[^\/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return L(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^\/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};t.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return L(a)&&(m=a),m},this.strictMode=function(a){return L(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!L(a))return q;if(a!==!0&&a!==!1&&!N(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new r(a,R(f(),b))},this.isMatcher=function(a){if(!O(a))return!1;var b=!0;return Q(r.prototype,function(c,d){M(c)&&(b=b&&L(a[d])&&M(a[d]))}),b},this.type=function(a,b,c){if(!L(b))return u[a];if(u.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return u[a]=new s(R({name:a},b)),c&&(w.push({name:a,def:c}),v||j()),this},Q(x,function(a,b){u[b]=new s(R({name:b},a))}),u=d(u,{}),this.$get=["$injector",function(a){return l=a,v=!1,j(),Q(x,function(a,b){u[b]||(u[b]=new s(a))}),this}],this.Param=function(a,d,e,f){function j(a){var b=O(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function k(c,d,e){if(c.type&&d)throw new Error("Param '"+a+"' has two type configurations.");return d?d:c.type?b.isString(c.type)?u[c.type]:c.type instanceof s?c.type:new s(c.type):"config"===e?u.any:u.string}function m(){var b={array:"search"===f?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return R(b,c,e).array}function p(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!L(c)||null==c)return q;if(c===!0||N(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function r(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=P(a.replace)?a.replace:[],N(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function t(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(e.$$fn);if(null!==a&&a!==c&&!x.type.is(a))throw new Error("Default value ("+a+") for parameter '"+x.id+"' is not an instance of Type ("+x.type.name+")");return a}function v(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(x.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),L(a)?x.type.$normalize(a):t()}function w(){return"{Param:"+a+" "+d+" squash: '"+A+"' optional: "+z+"}"}var x=this;e=j(e),d=k(e,d,f);var y=m();d=y?d.$asArray(y,"search"===f):d,"string"!==d.name||y||"path"!==f||e.value!==c||(e.value="");var z=e.value!==c,A=p(e,z),B=r(e,y,z,A);R(this,{id:a,type:d,location:f,array:y,squash:A,replace:B,isOptional:z,value:v,dynamic:c,config:e,toString:w})},k.prototype={$$new:function(){return d(this,R(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),Q(b,function(b){Q(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return Q(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return Q(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;de;e++)if(b(j[e]))return;k&&b(k)}}function o(){return i=i||e.$on("$locationChangeSuccess",n)}var p,q=g.baseHref(),r=d.url();return l||o(),{sync:function(){n()},listen:function(){return o()},update:function(a){return a?void(r=d.url()):void(d.url()!==r&&(d.url(r),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),p=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled),g=g&&h.history;var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=m(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!M(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(N(a)){var b=a;a=function(){return b}}else if(!M(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=N(b);if(N(a)&&(a=d.compile(a)),!h&&!M(b)&&!P(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),R(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:N(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),R(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser","$sniffer"]}function v(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=N(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=z[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){A[a]||(A[a]=[]),A[a].push(b)}function p(a){for(var b=A[a]||[];b.length;)q(b.shift())}function q(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!N(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(z.hasOwnProperty(c))throw new Error("State '"+c+"' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):N(b.parent)?b.parent:O(b.parent)&&N(b.parent.name)?b.parent.name:"";if(e&&!z[e])return n(e,b.self);for(var f in C)M(C[f])&&(b[f]=C[f](b,C.$delegates[f]));return z[c]=b,!b[B]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){y.$current.navigable==b&&j(a,c)||y.transitionTo(b,a,{inherit:!0,location:!1})}]),p(c),b}function r(a){return a.indexOf("*")>-1}function s(a){for(var b=a.split("."),c=y.$current.name.split("."),d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length?!1:c.join("")===b.join("")}function t(a,b){return N(a)&&!L(b)?C[a]:M(b)&&N(a)?(C[a]&&!C.$delegates[a]&&(C.$delegates[a]=C[a]),C[a]=b,this):this}function u(a,b){return O(a)?b=a:b.name=a,q(b),this}function v(a,e,f,h,l,n,p,q,t){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),D;if(!g.retry)return null;if(f.$retry)return p.update(),E;var h=y.transition=e.when(g.retry);return h.then(function(){return h!==y.transition?A:(b.options.$retry=!0,y.transitionTo(b.to,b.toParams,b.options))},function(){return D}),p.update(),h}function v(a,c,d,g,i,j){function m(){var c=[];return Q(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:j.notify})||""}],c.push(l.resolve(g,i.globals,i.resolve,a).then(function(c){if(M(d.controllerProvider)||P(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=l.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var A=e.reject(new Error("transition superseded")),C=e.reject(new Error("transition prevented")),D=e.reject(new Error("transition aborted")),E=e.reject(new Error("transition failed"));return x.locals={resolve:null,globals:{$stateParams:{}}},y={params:{},current:x.self,$current:x,transition:null},y.reload=function(a){return y.transitionTo(y.current,n,{reload:a||!0,inherit:!1,notify:!0})},y.go=function(a,b,c){return y.transitionTo(a,b,R({inherit:!0,relative:y.$current},c))},y.transitionTo=function(b,c,f){c=c||{},f=R({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=y.$current,l=y.params,o=j.path,q=m(b,f.relative),r=c["#"];if(!L(q)){var s={to:b,toParams:c,options:f},t=u(s,j.self,l,f);if(t)return t;if(b=s.to,c=s.toParams,f=s.options,q=m(b,f.relative),!L(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[B])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(n,c||{},y.$current,q)),!q.params.$$validates(c))return E;c=q.params.$$values(c),b=q;var z=b.path,D=0,F=z[D],G=x.locals,H=[];if(f.reload){if(N(f.reload)||O(f.reload)){if(O(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var I=f.reload===!0?o[0]:m(f.reload);if(f.reload&&!I)throw new Error("No such reload state '"+(N(f.reload)?f.reload:f.reload.name)+"'");for(;F&&F===o[D]&&F!==I;)G=H[D]=F.locals,D++,F=z[D]}}else for(;F&&F===o[D]&&F.ownParams.$$equals(c,l);)G=H[D]=F.locals,D++,F=z[D];if(w(b,c,j,l,G,f))return r&&(c["#"]=r),y.params=c,S(y.params,n),S(k(b.params.$$keys(),n),b.locals.globals.$stateParams),f.location&&b.navigable&&b.navigable.url&&(p.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),p.update(!0)),y.transition=null,e.when(y.current);if(c=k(b.params.$$keys(),c||{}),r&&(c["#"]=r),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,l,f).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,l),null==y.transition&&p.update(),C;for(var J=e.when(G),K=D;K=D;d--)g=o[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d=4?!!j.enabled(a):1===V&&W>=2?!!j.enabled():!!i}var e={enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}};if(a.noanimation)return e;if(j)return{enter:function(a,c,f){d(a)?b.version.minor>2?j.enter(a,null,c).then(f):j.enter(a,null,c,f):e.enter(a,c,f)},leave:function(a,c){d(a)?b.version.minor>2?j.leave(a).then(c):j.leave(a,c):e.leave(a,c)}};if(i){var f=i&&i(c,a);return{enter:function(a,b,c){f.enter(a,null,b),c()},leave:function(a,b){f.leave(a),b()}}}return e}var h=f(),i=h("$animator"),j=h("$animate"),k={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,f,h){return function(c,f,i){function j(){function a(){b&&b.remove(),c&&c.$destroy()}var b=l,c=n;c&&(c._willBeDestroyed=!0),m?(r.leave(m,function(){a(),l=null}),l=m):(a(),l=null),m=null,n=null}function k(g){var k,l=A(c,i,f,e),s=l&&a.$current&&a.$current.locals[l];if((g||s!==o)&&!c._willBeDestroyed){k=c.$new(),o=a.$current.locals[l],k.$emit("$viewContentLoading",l);var t=h(k,function(a){r.enter(a,f,function(){n&&n.$emit("$viewContentAnimationEnded"),(b.isDefined(q)&&!q||c.$eval(q))&&d(a)}),j()});m=t,n=k,n.$emit("$viewContentLoaded",l),n.$eval(p)}}var l,m,n,o,p=i.onload||"",q=i.autoscroll,r=g(i,c);c.$on("$stateChangeSuccess",function(){k(!1)}),k(!0)}}};return k}function z(a,b,c,d){return{restrict:"ECA",priority:-400,compile:function(e){var f=e.html();return function(e,g,h){var i=c.$current,j=A(e,h,g,d),k=i&&i.locals[j];if(k){g.data("$uiView",{name:j,state:k.$$state}),g.html(k.$template?k.$template:f);var l=a(g.contents());if(k.$$controller){k.$scope=e,k.$element=g;var m=b(k.$$controller,k);k.$$controllerAs&&(e[k.$$controllerAs]=m),g.data("$ngControllerController",m),g.children().data("$ngControllerController",m)}l(e)}}}}}function A(a,b,c,d){var e=d(b.uiView||b.name||"")(a),f=c.inheritedData("$uiView");return e.indexOf("@")>=0?e:e+"@"+(f?f.state.name:"")}function B(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function C(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function D(a){var b="[object SVGAnimatedString]"===Object.prototype.toString.call(a.prop("href")),c="FORM"===a[0].nodeName;return{attr:c?"action":b?"xlink:href":"href",isAnchor:"A"===a.prop("tagName").toUpperCase(),clickable:!c}}function E(a,b,c,d,e){return function(f){var g=f.which||f.button,h=e();if(!(g>1||f.ctrlKey||f.metaKey||f.shiftKey||a.attr("target"))){var i=c(function(){b.go(h.state,h.params,h.options)});f.preventDefault();var j=d.isAnchor&&!h.href?1:0;f.preventDefault=function(){j--<=0&&c.cancel(i)}}}}function F(a,b){return{relative:C(a)||b.$current,inherit:!0}}function G(a,c){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(d,e,f,g){var h=B(f.uiSref,a.current.name),i={state:h.state,href:null,params:null},j=D(e),k=g[1]||g[0];i.options=R(F(e,a),f.uiSrefOpts?d.$eval(f.uiSrefOpts):{});var l=function(c){c&&(i.params=b.copy(c)),i.href=a.href(h.state,i.params,i.options),k&&k.$$addStateInfo(h.state,i.params),null!==i.href&&f.$set(j.attr,i.href)};h.paramExpr&&(d.$watch(h.paramExpr,function(a){a!==i.params&&l(a)},!0),i.params=b.copy(d.$eval(h.paramExpr))),l(),j.clickable&&e.bind("click",E(e,a,c,j,function(){return i}))}}}function H(a,b){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(c,d,e,f){function g(b){l.state=b[0],l.params=b[1],l.options=b[2],l.href=a.href(l.state,l.params,l.options),i&&i.$$addStateInfo(l.state,l.params),l.href&&e.$set(h.attr,l.href)}var h=D(d),i=f[1]||f[0],j=[e.uiState,e.uiStateParams||null,e.uiStateOpts||null],k="["+j.map(function(a){return a||"null"}).join(", ")+"]",l={state:null,params:null,options:null,href:null};c.$watch(k,g,!0),g(c.$eval(k)),h.clickable&&d.bind("click",E(d,a,b,h,function(){return l}))}}}function I(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(b,d,e,f){function g(b,c,e){var f=a.get(b,C(d)),g=h(b,c);p.push({state:f||{name:b},params:c,hash:g}),q[g]=e}function h(a,c){if(!N(a))throw new Error("state should be a string");return O(c)?a+T(c):(c=b.$eval(c),O(c)?a+T(c):a)}function i(){for(var a=0;a0||(g(a,b,o),i())},b.$on("$stateChangeSuccess",i),i()}]}}function J(a){var b=function(b,c){return a.is(b,c)};return b.$stateful=!0,b}function K(a){var b=function(b,c,d){return a.includes(b,c,d)};return b.$stateful=!0,b}var L=b.isDefined,M=b.isFunction,N=b.isString,O=b.isObject,P=b.isArray,Q=b.forEach,R=b.extend,S=b.copy,T=b.toJson;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),p.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",p),q.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",q);var U;r.prototype.concat=function(a,b){var c={caseInsensitive:U.caseInsensitive(),strict:U.strictMode(),squash:U.defaultSquashPolicy()};return new r(this.sourcePath+a+this.sourceSearch,R(c,b),this)},r.prototype.toString=function(){return this.source},r.prototype.exec=function(a,b){function c(a){function b(a){return a.split("").reverse().join("")}function c(a){return a.replace(/\\-/g,"-")}var d=b(a).split(/-(?!\\)/),e=o(d,b);return o(e,c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,m;for(e=0;j>e;e++){for(g=h[e],l=this.params[g],m=d[e+1],f=0;fe;e++){for(g=h[e],k[g]=this.params[g].value(b[g]),l=this.params[g],m=b[g],f=0;ff;f++){var k=h>f,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=p?m.squash:!1,r=m.type.encode(n);if(k){var s=c[f+1],t=f+1===h;if(q===!1)null!=r&&(j+=P(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var u=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(u)[1]}else N(q)&&(j+=q+s);t&&m.squash===!0&&"/"===j.slice(-1)&&(j=j.slice(0,-1))}else{if(null==r||p&&q!==!1)continue;if(P(r)||(r=[r]),0===r.length)continue;r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},s.prototype.is=function(a,b){return!0},s.prototype.encode=function(a,b){return a},s.prototype.decode=function(a,b){return a},s.prototype.equals=function(a,b){return a==b},s.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},s.prototype.pattern=/.*/,s.prototype.toString=function(){return"{Type:"+this.name+"}"},s.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},s.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return P(a)?a:L(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){if(P(c)&&0===c.length)return c;c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g>> 0, from = Number(arguments[2]) || 0; + from = (from < 0) ? Math.ceil(from) : Math.floor(from); + + if (from < 0) from += len; + + for (; from < len; from++) { + if (from in array && array[from] === value) return from; + } + return -1; +} + +/** + * Merges a set of parameters with all parameters inherited between the common parents of the + * current state and a given destination state. + * + * @param {Object} currentParams The value of the current state parameters ($stateParams). + * @param {Object} newParams The set of parameters which will be composited with inherited params. + * @param {Object} $current Internal definition of object representing the current state. + * @param {Object} $to Internal definition of object representing state to transition to. + */ +function inheritParams(currentParams, newParams, $current, $to) { + var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = []; + + for (var i in parents) { + if (!parents[i] || !parents[i].params) continue; + parentParams = objectKeys(parents[i].params); + if (!parentParams.length) continue; + + for (var j in parentParams) { + if (indexOf(inheritList, parentParams[j]) >= 0) continue; + inheritList.push(parentParams[j]); + inherited[parentParams[j]] = currentParams[parentParams[j]]; + } + } + return extend({}, inherited, newParams); +} + +/** + * Performs a non-strict comparison of the subset of two objects, defined by a list of keys. + * + * @param {Object} a The first object. + * @param {Object} b The second object. + * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified, + * it defaults to the list of keys in `a`. + * @return {Boolean} Returns `true` if the keys match, otherwise `false`. + */ +function equalForKeys(a, b, keys) { + if (!keys) { + keys = []; + for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility + } + + for (var i=0; i + * + * + * + * + * + * + * + * + * + * + * + * + */ +angular.module('ui.router', ['ui.router.state']); + +angular.module('ui.router.compat', ['ui.router']); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/resolve.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/resolve.js new file mode 100644 index 0000000..019338d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/resolve.js @@ -0,0 +1,252 @@ +/** + * @ngdoc object + * @name ui.router.util.$resolve + * + * @requires $q + * @requires $injector + * + * @description + * Manages resolution of (acyclic) graphs of promises. + */ +$Resolve.$inject = ['$q', '$injector']; +function $Resolve( $q, $injector) { + + var VISIT_IN_PROGRESS = 1, + VISIT_DONE = 2, + NOTHING = {}, + NO_DEPENDENCIES = [], + NO_LOCALS = NOTHING, + NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING }); + + + /** + * @ngdoc function + * @name ui.router.util.$resolve#study + * @methodOf ui.router.util.$resolve + * + * @description + * Studies a set of invocables that are likely to be used multiple times. + *
+   * $resolve.study(invocables)(locals, parent, self)
+   * 
+ * is equivalent to + *
+   * $resolve.resolve(invocables, locals, parent, self)
+   * 
+ * but the former is more efficient (in fact `resolve` just calls `study` + * internally). + * + * @param {object} invocables Invocable objects + * @return {function} a function to pass in locals, parent and self + */ + this.study = function (invocables) { + if (!isObject(invocables)) throw new Error("'invocables' must be an object"); + var invocableKeys = objectKeys(invocables || {}); + + // Perform a topological sort of invocables to build an ordered plan + var plan = [], cycle = [], visited = {}; + function visit(value, key) { + if (visited[key] === VISIT_DONE) return; + + cycle.push(key); + if (visited[key] === VISIT_IN_PROGRESS) { + cycle.splice(0, indexOf(cycle, key)); + throw new Error("Cyclic dependency: " + cycle.join(" -> ")); + } + visited[key] = VISIT_IN_PROGRESS; + + if (isString(value)) { + plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES); + } else { + var params = $injector.annotate(value); + forEach(params, function (param) { + if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param); + }); + plan.push(key, value, params); + } + + cycle.pop(); + visited[key] = VISIT_DONE; + } + forEach(invocables, visit); + invocables = cycle = visited = null; // plan is all that's required + + function isResolve(value) { + return isObject(value) && value.then && value.$$promises; + } + + return function (locals, parent, self) { + if (isResolve(locals) && self === undefined) { + self = parent; parent = locals; locals = null; + } + if (!locals) locals = NO_LOCALS; + else if (!isObject(locals)) { + throw new Error("'locals' must be an object"); + } + if (!parent) parent = NO_PARENT; + else if (!isResolve(parent)) { + throw new Error("'parent' must be a promise returned by $resolve.resolve()"); + } + + // To complete the overall resolution, we have to wait for the parent + // promise and for the promise for each invokable in our plan. + var resolution = $q.defer(), + result = resolution.promise, + promises = result.$$promises = {}, + values = extend({}, locals), + wait = 1 + plan.length/3, + merged = false; + + function done() { + // Merge parent values we haven't got yet and publish our own $$values + if (!--wait) { + if (!merged) merge(values, parent.$$values); + result.$$values = values; + result.$$promises = result.$$promises || true; // keep for isResolve() + delete result.$$inheritedValues; + resolution.resolve(values); + } + } + + function fail(reason) { + result.$$failure = reason; + resolution.reject(reason); + } + + // Short-circuit if parent has already failed + if (isDefined(parent.$$failure)) { + fail(parent.$$failure); + return result; + } + + if (parent.$$inheritedValues) { + merge(values, omit(parent.$$inheritedValues, invocableKeys)); + } + + // Merge parent values if the parent has already resolved, or merge + // parent promises and wait if the parent resolve is still in progress. + extend(promises, parent.$$promises); + if (parent.$$values) { + merged = merge(values, omit(parent.$$values, invocableKeys)); + result.$$inheritedValues = omit(parent.$$values, invocableKeys); + done(); + } else { + if (parent.$$inheritedValues) { + result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys); + } + parent.then(done, fail); + } + + // Process each invocable in the plan, but ignore any where a local of the same name exists. + for (var i=0, ii=plan.length; i + * var app = angular.module('app', ['ui.router.router']); + * + * app.config(function ($urlRouterProvider) { + * // Here's an example of how you might allow case insensitive urls + * $urlRouterProvider.rule(function ($injector, $location) { + * var path = $location.path(), + * normalized = path.toLowerCase(); + * + * if (path !== normalized) { + * return normalized; + * } + * }); + * }); + * + * + * @param {function} rule Handler function that takes `$injector` and `$location` + * services as arguments. You can use them to return a valid path as a string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.rule = function (rule) { + if (!isFunction(rule)) throw new Error("'rule' must be a function"); + rules.push(rule); + return this; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouterProvider#otherwise + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Defines a path that is used when an invalid route is requested. + * + * @example + *
+   * var app = angular.module('app', ['ui.router.router']);
+   *
+   * app.config(function ($urlRouterProvider) {
+   *   // if the path doesn't match any of the urls you configured
+   *   // otherwise will take care of routing the user to the
+   *   // specified url
+   *   $urlRouterProvider.otherwise('/index');
+   *
+   *   // Example of using function rule as param
+   *   $urlRouterProvider.otherwise(function ($injector, $location) {
+   *     return '/a/valid/url';
+   *   });
+   * });
+   * 
+ * + * @param {string|function} rule The url path you want to redirect to or a function + * rule that returns the url path. The function version is passed two params: + * `$injector` and `$location` services, and must return a url string. + * + * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance + */ + this.otherwise = function (rule) { + if (isString(rule)) { + var redirect = rule; + rule = function () { return redirect; }; + } + else if (!isFunction(rule)) throw new Error("'rule' must be a function"); + otherwise = rule; + return this; + }; + + + function handleIfMatch($injector, handler, match) { + if (!match) return false; + var result = $injector.invoke(handler, handler, { $match: match }); + return isDefined(result) ? result : true; + } + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#when + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Registers a handler for a given url matching. + * + * If the handler is a string, it is + * treated as a redirect, and is interpolated according to the syntax of match + * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise). + * + * If the handler is a function, it is injectable. It gets invoked if `$location` + * matches. You have the option of inject the match object as `$match`. + * + * The handler can return + * + * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter` + * will continue trying to find another one that matches. + * - **string** which is treated as a redirect and passed to `$location.url()` + * - **void** or any **truthy** value tells `$urlRouter` that the url was handled. + * + * @example + *
+   * var app = angular.module('app', ['ui.router.router']);
+   *
+   * app.config(function ($urlRouterProvider) {
+   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {
+   *     if ($state.$current.navigable !== state ||
+   *         !equalForKeys($match, $stateParams) {
+   *      $state.transitionTo(state, $match, false);
+   *     }
+   *   });
+   * });
+   * 
+ * + * @param {string|object} what The incoming path that you want to redirect. + * @param {string|function} handler The path you want to redirect your user to. + */ + this.when = function (what, handler) { + var redirect, handlerIsString = isString(handler); + if (isString(what)) what = $urlMatcherFactory.compile(what); + + if (!handlerIsString && !isFunction(handler) && !isArray(handler)) + throw new Error("invalid 'handler' in when()"); + + var strategies = { + matcher: function (what, handler) { + if (handlerIsString) { + redirect = $urlMatcherFactory.compile(handler); + handler = ['$match', function ($match) { return redirect.format($match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path(), $location.search())); + }, { + prefix: isString(what.prefix) ? what.prefix : '' + }); + }, + regex: function (what, handler) { + if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky"); + + if (handlerIsString) { + redirect = handler; + handler = ['$match', function ($match) { return interpolate(redirect, $match); }]; + } + return extend(function ($injector, $location) { + return handleIfMatch($injector, handler, what.exec($location.path())); + }, { + prefix: regExpPrefix(what) + }); + } + }; + + var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp }; + + for (var n in check) { + if (check[n]) return this.rule(strategies[n](what, handler)); + } + + throw new Error("invalid 'what' in when()"); + }; + + /** + * @ngdoc function + * @name ui.router.router.$urlRouterProvider#deferIntercept + * @methodOf ui.router.router.$urlRouterProvider + * + * @description + * Disables (or enables) deferring location change interception. + * + * If you wish to customize the behavior of syncing the URL (for example, if you wish to + * defer a transition but maintain the current URL), call this method at configuration time. + * Then, at run time, call `$urlRouter.listen()` after you have configured your own + * `$locationChangeSuccess` event handler. + * + * @example + *
+   * var app = angular.module('app', ['ui.router.router']);
+   *
+   * app.config(function ($urlRouterProvider) {
+   *
+   *   // Prevent $urlRouter from automatically intercepting URL changes;
+   *   // this allows you to configure custom behavior in between
+   *   // location changes and route synchronization:
+   *   $urlRouterProvider.deferIntercept();
+   *
+   * }).run(function ($rootScope, $urlRouter, UserService) {
+   *
+   *   $rootScope.$on('$locationChangeSuccess', function(e) {
+   *     // UserService is an example service for managing user state
+   *     if (UserService.isLoggedIn()) return;
+   *
+   *     // Prevent $urlRouter's default handler from firing
+   *     e.preventDefault();
+   *
+   *     UserService.handleLogin().then(function() {
+   *       // Once the user has logged in, sync the current URL
+   *       // to the router:
+   *       $urlRouter.sync();
+   *     });
+   *   });
+   *
+   *   // Configures $urlRouter's listener *after* your custom listener
+   *   $urlRouter.listen();
+   * });
+   * 
+ * + * @param {boolean} defer Indicates whether to defer location change interception. Passing + no parameter is equivalent to `true`. + */ + this.deferIntercept = function (defer) { + if (defer === undefined) defer = true; + interceptDeferred = defer; + }; + + /** + * @ngdoc object + * @name ui.router.router.$urlRouter + * + * @requires $location + * @requires $rootScope + * @requires $injector + * @requires $browser + * + * @description + * + */ + this.$get = $get; + $get.$inject = ['$location', '$rootScope', '$injector', '$browser', '$sniffer']; + function $get( $location, $rootScope, $injector, $browser, $sniffer) { + + var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl; + + function appendBasePath(url, isHtml5, absolute) { + if (baseHref === '/') return url; + if (isHtml5) return baseHref.slice(0, -1) + url; + if (absolute) return baseHref.slice(1) + url; + return url; + } + + // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree + function update(evt) { + if (evt && evt.defaultPrevented) return; + var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl; + lastPushedUrl = undefined; + // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573 + //if (ignoreUpdate) return true; + + function check(rule) { + var handled = rule($injector, $location); + + if (!handled) return false; + if (isString(handled)) $location.replace().url(handled); + return true; + } + var n = rules.length, i; + + for (i = 0; i < n; i++) { + if (check(rules[i])) return; + } + // always check otherwise last to allow dynamic updates to the set of rules + if (otherwise) check(otherwise); + } + + function listen() { + listener = listener || $rootScope.$on('$locationChangeSuccess', update); + return listener; + } + + if (!interceptDeferred) listen(); + + return { + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#sync + * @methodOf ui.router.router.$urlRouter + * + * @description + * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`. + * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, + * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed + * with the transition by calling `$urlRouter.sync()`. + * + * @example + *
+       * angular.module('app', ['ui.router'])
+       *   .run(function($rootScope, $urlRouter) {
+       *     $rootScope.$on('$locationChangeSuccess', function(evt) {
+       *       // Halt state change from even starting
+       *       evt.preventDefault();
+       *       // Perform custom logic
+       *       var meetsRequirement = ...
+       *       // Continue with the update and state transition if logic allows
+       *       if (meetsRequirement) $urlRouter.sync();
+       *     });
+       * });
+       * 
+ */ + sync: function() { + update(); + }, + + listen: function() { + return listen(); + }, + + update: function(read) { + if (read) { + location = $location.url(); + return; + } + if ($location.url() === location) return; + + $location.url(location); + $location.replace(); + }, + + push: function(urlMatcher, params, options) { + var url = urlMatcher.format(params || {}); + + // Handle the special hash param, if needed + if (url !== null && params && params['#']) { + url += '#' + params['#']; + } + + $location.url(url); + lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined; + if (options && options.replace) $location.replace(); + }, + + /** + * @ngdoc function + * @name ui.router.router.$urlRouter#href + * @methodOf ui.router.router.$urlRouter + * + * @description + * A URL generation method that returns the compiled URL for a given + * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters. + * + * @example + *
+       * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), {
+       *   person: "bob"
+       * });
+       * // $bob == "/about/bob";
+       * 
+ * + * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate. + * @param {object=} params An object of parameter values to fill the matcher's required parameters. + * @param {object=} options Options object. The options are: + * + * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". + * + * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher` + */ + href: function(urlMatcher, params, options) { + if (!urlMatcher.validates(params)) return null; + + var isHtml5 = $locationProvider.html5Mode(); + if (angular.isObject(isHtml5)) { + isHtml5 = isHtml5.enabled; + } + + isHtml5 = isHtml5 && $sniffer.history; + + var url = urlMatcher.format(params); + options = options || {}; + + if (!isHtml5 && url !== null) { + url = "#" + $locationProvider.hashPrefix() + url; + } + + // Handle special hash param, if needed + if (url !== null && params && params['#']) { + url += '#' + params['#']; + } + + url = appendBasePath(url, isHtml5, options.absolute); + + if (!options.absolute || !url) { + return url; + } + + var slash = (!isHtml5 && url ? '/' : ''), port = $location.port(); + port = (port === 80 || port === 443 ? '' : ':' + port); + + return [$location.protocol(), '://', $location.host(), port, slash, url].join(''); + } + }; + } +} + +angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/view.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/view.js new file mode 100644 index 0000000..94334d3 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/view.js @@ -0,0 +1,45 @@ + +$ViewProvider.$inject = []; +function $ViewProvider() { + + this.$get = $get; + /** + * @ngdoc object + * @name ui.router.state.$view + * + * @requires ui.router.util.$templateFactory + * @requires $rootScope + * + * @description + * + */ + $get.$inject = ['$rootScope', '$templateFactory']; + function $get( $rootScope, $templateFactory) { + return { + // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) + /** + * @ngdoc function + * @name ui.router.state.$view#load + * @methodOf ui.router.state.$view + * + * @description + * + * @param {string} name name + * @param {object} options option object. + */ + load: function load(name, options) { + var result, defaults = { + template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} + }; + options = extend(defaults, options); + + if (options.view) { + result = $templateFactory.fromConfig(options.view, options.params, options.locals); + } + return result; + } + }; + } +} + +angular.module('ui.router.state').provider('$view', $ViewProvider); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/viewDirective.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/viewDirective.js new file mode 100644 index 0000000..c2eaa3d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/viewDirective.js @@ -0,0 +1,351 @@ +var ngMajorVer = angular.version.major; +var ngMinorVer = angular.version.minor; +/** + * @ngdoc directive + * @name ui.router.state.directive:ui-view + * + * @requires ui.router.state.$state + * @requires $compile + * @requires $controller + * @requires $injector + * @requires ui.router.state.$uiViewScroll + * @requires $document + * + * @restrict ECA + * + * @description + * The ui-view directive tells $state where to place your templates. + * + * @param {string=} name A view name. The name should be unique amongst the other views in the + * same state. You can have views of the same name that live in different states. + * + * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window + * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll + * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you + * scroll ui-view elements into view when they are populated during a state activation. + * + * @param {string=} noanimation If truthy, the non-animated renderer will be selected (no animations + * will be applied to the ui-view) + * + * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) + * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.* + * + * @param {string=} onload Expression to evaluate whenever the view updates. + * + * @example + * A view can be unnamed or named. + *
+ * 
+ * 
+ * + * + *
+ *
+ * + * You can only have one unnamed view within any template (or root html). If you are only using a + * single view and it is unnamed then you can populate it like so: + *
+ * 
+ * $stateProvider.state("home", { + * template: "

HELLO!

" + * }) + *
+ * + * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`} + * config property, by name, in this case an empty name: + *
+ * $stateProvider.state("home", {
+ *   views: {
+ *     "": {
+ *       template: "

HELLO!

" + * } + * } + * }) + *
+ * + * But typically you'll only use the views property if you name your view or have more than one view + * in the same template. There's not really a compelling reason to name a view if its the only one, + * but you could if you wanted, like so: + *
+ * 
+ *
+ *
+ * $stateProvider.state("home", {
+ *   views: {
+ *     "main": {
+ *       template: "

HELLO!

" + * } + * } + * }) + *
+ * + * Really though, you'll use views to set up multiple views: + *
+ * 
+ *
+ *
+ *
+ * + *
+ * $stateProvider.state("home", {
+ *   views: {
+ *     "": {
+ *       template: "

HELLO!

" + * }, + * "chart": { + * template: "" + * }, + * "data": { + * template: "" + * } + * } + * }) + *
+ * + * Examples for `autoscroll`: + * + *
+ * 
+ * 
+ *
+ * 
+ * 
+ * 
+ * 
+ * 
+ */ +$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate']; +function $ViewDirective( $state, $injector, $uiViewScroll, $interpolate) { + + function getService() { + return ($injector.has) ? function(service) { + return $injector.has(service) ? $injector.get(service) : null; + } : function(service) { + try { + return $injector.get(service); + } catch (e) { + return null; + } + }; + } + + var service = getService(), + $animator = service('$animator'), + $animate = service('$animate'); + + // Returns a set of DOM manipulation functions based on which Angular version + // it should use + function getRenderer(attrs, scope) { + var statics = { + enter: function (element, target, cb) { target.after(element); cb(); }, + leave: function (element, cb) { element.remove(); cb(); } + }; + + if (!!attrs.noanimation) return statics; + + function animEnabled(element) { + if (ngMajorVer === 1 && ngMinorVer >= 4) return !!$animate.enabled(element); + if (ngMajorVer === 1 && ngMinorVer >= 2) return !!$animate.enabled(); + return (!!$animator); + } + + // ng 1.2+ + if ($animate) { + return { + enter: function(element, target, cb) { + if (!animEnabled(element)) { + statics.enter(element, target, cb); + } else if (angular.version.minor > 2) { + $animate.enter(element, null, target).then(cb); + } else { + $animate.enter(element, null, target, cb); + } + }, + leave: function(element, cb) { + if (!animEnabled(element)) { + statics.leave(element, cb); + } else if (angular.version.minor > 2) { + $animate.leave(element).then(cb); + } else { + $animate.leave(element, cb); + } + } + }; + } + + // ng 1.1.5 + if ($animator) { + var animate = $animator && $animator(scope, attrs); + + return { + enter: function(element, target, cb) {animate.enter(element, null, target); cb(); }, + leave: function(element, cb) { animate.leave(element); cb(); } + }; + } + + return statics; + } + + var directive = { + restrict: 'ECA', + terminal: true, + priority: 400, + transclude: 'element', + compile: function (tElement, tAttrs, $transclude) { + return function (scope, $element, attrs) { + var previousEl, currentEl, currentScope, latestLocals, + onloadExp = attrs.onload || '', + autoScrollExp = attrs.autoscroll, + renderer = getRenderer(attrs, scope); + + scope.$on('$stateChangeSuccess', function() { + updateView(false); + }); + + updateView(true); + + function cleanupLastView() { + var _previousEl = previousEl; + var _currentScope = currentScope; + + if (_currentScope) { + _currentScope._willBeDestroyed = true; + } + + function cleanOld() { + if (_previousEl) { + _previousEl.remove(); + } + + if (_currentScope) { + _currentScope.$destroy(); + } + } + + if (currentEl) { + renderer.leave(currentEl, function() { + cleanOld(); + previousEl = null; + }); + + previousEl = currentEl; + } else { + cleanOld(); + previousEl = null; + } + + currentEl = null; + currentScope = null; + } + + function updateView(firstTime) { + var newScope, + name = getUiViewName(scope, attrs, $element, $interpolate), + previousLocals = name && $state.$current && $state.$current.locals[name]; + + if (!firstTime && previousLocals === latestLocals || scope._willBeDestroyed) return; // nothing to do + newScope = scope.$new(); + latestLocals = $state.$current.locals[name]; + + /** + * @ngdoc event + * @name ui.router.state.directive:ui-view#$viewContentLoading + * @eventOf ui.router.state.directive:ui-view + * @eventType emits on ui-view directive scope + * @description + * + * Fired once the view **begins loading**, *before* the DOM is rendered. + * + * @param {Object} event Event object. + * @param {string} viewName Name of the view. + */ + newScope.$emit('$viewContentLoading', name); + + var clone = $transclude(newScope, function(clone) { + renderer.enter(clone, $element, function onUiViewEnter() { + if(currentScope) { + currentScope.$emit('$viewContentAnimationEnded'); + } + + if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) { + $uiViewScroll(clone); + } + }); + cleanupLastView(); + }); + + currentEl = clone; + currentScope = newScope; + /** + * @ngdoc event + * @name ui.router.state.directive:ui-view#$viewContentLoaded + * @eventOf ui.router.state.directive:ui-view + * @eventType emits on ui-view directive scope + * @description + * Fired once the view is **loaded**, *after* the DOM is rendered. + * + * @param {Object} event Event object. + * @param {string} viewName Name of the view. + */ + currentScope.$emit('$viewContentLoaded', name); + currentScope.$eval(onloadExp); + } + }; + } + }; + + return directive; +} + +$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate']; +function $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) { + return { + restrict: 'ECA', + priority: -400, + compile: function (tElement) { + var initial = tElement.html(); + return function (scope, $element, attrs) { + var current = $state.$current, + name = getUiViewName(scope, attrs, $element, $interpolate), + locals = current && current.locals[name]; + + if (! locals) { + return; + } + + $element.data('$uiView', { name: name, state: locals.$$state }); + $element.html(locals.$template ? locals.$template : initial); + + var link = $compile($element.contents()); + + if (locals.$$controller) { + locals.$scope = scope; + locals.$element = $element; + var controller = $controller(locals.$$controller, locals); + if (locals.$$controllerAs) { + scope[locals.$$controllerAs] = controller; + } + $element.data('$ngControllerController', controller); + $element.children().data('$ngControllerController', controller); + } + + link(scope); + }; + } + }; +} + +/** + * Shared ui-view code for both directives: + * Given scope, element, and its attributes, return the view's name + */ +function getUiViewName(scope, attrs, element, $interpolate) { + var name = $interpolate(attrs.uiView || attrs.name || '')(scope); + var inherited = element.inheritedData('$uiView'); + return name.indexOf('@') >= 0 ? name : (name + '@' + (inherited ? inherited.state.name : '')); +} + +angular.module('ui.router.state').directive('uiView', $ViewDirective); +angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/viewScroll.js b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/viewScroll.js new file mode 100644 index 0000000..81114e2 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular-ui-router/src/viewScroll.js @@ -0,0 +1,52 @@ +/** + * @ngdoc object + * @name ui.router.state.$uiViewScrollProvider + * + * @description + * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. + */ +function $ViewScrollProvider() { + + var useAnchorScroll = false; + + /** + * @ngdoc function + * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll + * @methodOf ui.router.state.$uiViewScrollProvider + * + * @description + * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for + * scrolling based on the url anchor. + */ + this.useAnchorScroll = function () { + useAnchorScroll = true; + }; + + /** + * @ngdoc object + * @name ui.router.state.$uiViewScroll + * + * @requires $anchorScroll + * @requires $timeout + * + * @description + * When called with a jqLite element, it scrolls the element into view (after a + * `$timeout` so the DOM has time to refresh). + * + * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, + * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. + */ + this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { + if (useAnchorScroll) { + return $anchorScroll; + } + + return function ($element) { + return $timeout(function () { + $element[0].scrollIntoView(); + }, 0, false); + }; + }]; +} + +angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular/angular.min.js.map b/src/main/webapp/WEB-INF/views/src/js/components/angular/angular.min.js.map new file mode 100644 index 0000000..af4c6bf --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular/angular.min.js.map @@ -0,0 +1,8 @@ +{ +"version":3, +"file":"angular.min.js", +"lineCount":288, +"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAmBC,CAAnB,CAA8B,CAgCvCC,QAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,SAAAA,EAAAA,CAAAA,IAAAA,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,sCAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,EAAAA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,UAAAA,EAAAA,MAAAA,EAAAA,CAAAA,CAAAA,SAAAA,EAAAA,QAAAA,CAAAA,aAAAA,CAAAA,EAAAA,CAAAA,CAAAA,WAAAA,EAAAA,MAAAA,EAAAA,CAAAA,WAAAA,CAAAA,QAAAA,EAAAA,MAAAA,EAAAA,CAAAA,IAAAA,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAuOAC,QAASA,GAAW,CAACC,CAAD,CAAM,CACxB,GAAW,IAAX,EAAIA,CAAJ,EAAmBC,EAAA,CAASD,CAAT,CAAnB,CACE,MAAO,CAAA,CAKT,KAAIE,EAAS,QAATA,EAAqBC,OAAA,CAAOH,CAAP,CAArBE,EAAoCF,CAAAE,OAExC;MAAIF,EAAAI,SAAJ,GAAqBC,EAArB,EAA0CH,CAA1C,CACS,CAAA,CADT,CAIOI,CAAA,CAASN,CAAT,CAJP,EAIwBO,CAAA,CAAQP,CAAR,CAJxB,EAImD,CAJnD,GAIwCE,CAJxC,EAKyB,QALzB,GAKO,MAAOA,EALd,EAK8C,CAL9C,CAKqCA,CALrC,EAKoDA,CALpD,CAK6D,CAL7D,GAKmEF,EAd3C,CAoD1BQ,QAASA,EAAO,CAACR,CAAD,CAAMS,CAAN,CAAgBC,CAAhB,CAAyB,CAAA,IACnCC,CADmC,CAC9BT,CACT,IAAIF,CAAJ,CACE,GAAIY,CAAA,CAAWZ,CAAX,CAAJ,CACE,IAAKW,CAAL,GAAYX,EAAZ,CAGa,WAAX,EAAIW,CAAJ,EAAiC,QAAjC,EAA0BA,CAA1B,EAAoD,MAApD,EAA6CA,CAA7C,EAAgEX,CAAAa,eAAhE,EAAsF,CAAAb,CAAAa,eAAA,CAAmBF,CAAnB,CAAtF,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CALN,KAQO,IAAIO,CAAA,CAAQP,CAAR,CAAJ,EAAoBD,EAAA,CAAYC,CAAZ,CAApB,CAAsC,CAC3C,IAAIe,EAA6B,QAA7BA,GAAc,MAAOf,EACpBW,EAAA,CAAM,CAAX,KAAcT,CAAd,CAAuBF,CAAAE,OAAvB,CAAmCS,CAAnC,CAAyCT,CAAzC,CAAiDS,CAAA,EAAjD,CACE,CAAII,CAAJ,EAAmBJ,CAAnB,GAA0BX,EAA1B,GACES,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAJuC,CAAtC,IAOA,IAAIA,CAAAQ,QAAJ,EAAmBR,CAAAQ,QAAnB,GAAmCA,CAAnC,CACHR,CAAAQ,QAAA,CAAYC,CAAZ,CAAsBC,CAAtB,CAA+BV,CAA/B,CADG,KAEA,IAAIgB,EAAA,CAAchB,CAAd,CAAJ,CAEL,IAAKW,CAAL,GAAYX,EAAZ,CACES,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAHG,KAKA,IAAkC,UAAlC,GAAI,MAAOA,EAAAa,eAAX,CAEL,IAAKF,CAAL,GAAYX,EAAZ,CACMA,CAAAa,eAAA,CAAmBF,CAAnB,CAAJ;AACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAJC,KASL,KAAKW,CAAL,GAAYX,EAAZ,CACMa,EAAAC,KAAA,CAAoBd,CAApB,CAAyBW,CAAzB,CAAJ,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIW,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCX,CAAtC,CAKR,OAAOA,EAzCgC,CA4CzCiB,QAASA,GAAa,CAACjB,CAAD,CAAMS,CAAN,CAAgBC,CAAhB,CAAyB,CAE7C,IADA,IAAIQ,EAAOf,MAAAe,KAAA,CAAYlB,CAAZ,CAAAmB,KAAA,EAAX,CACSC,EAAI,CAAb,CAAgBA,CAAhB,CAAoBF,CAAAhB,OAApB,CAAiCkB,CAAA,EAAjC,CACEX,CAAAK,KAAA,CAAcJ,CAAd,CAAuBV,CAAA,CAAIkB,CAAA,CAAKE,CAAL,CAAJ,CAAvB,CAAqCF,CAAA,CAAKE,CAAL,CAArC,CAEF,OAAOF,EALsC,CAc/CG,QAASA,GAAa,CAACC,CAAD,CAAa,CACjC,MAAO,SAAQ,CAACC,CAAD,CAAQZ,CAAR,CAAa,CAAEW,CAAA,CAAWX,CAAX,CAAgBY,CAAhB,CAAF,CADK,CAcnCC,QAASA,GAAO,EAAG,CACjB,MAAO,EAAEC,EADQ,CAUnBC,QAASA,GAAU,CAAC1B,CAAD,CAAM2B,CAAN,CAAS,CACtBA,CAAJ,CACE3B,CAAA4B,UADF,CACkBD,CADlB,CAGE,OAAO3B,CAAA4B,UAJiB,CAS5BC,QAASA,GAAU,CAACC,CAAD,CAAMC,CAAN,CAAYC,CAAZ,CAAkB,CAGnC,IAFA,IAAIL,EAAIG,CAAAF,UAAR,CAESR,EAAI,CAFb,CAEgBa,EAAKF,CAAA7B,OAArB,CAAkCkB,CAAlC,CAAsCa,CAAtC,CAA0C,EAAEb,CAA5C,CAA+C,CAC7C,IAAIpB,EAAM+B,CAAA,CAAKX,CAAL,CACV,IAAKc,CAAA,CAASlC,CAAT,CAAL,EAAuBY,CAAA,CAAWZ,CAAX,CAAvB,CAEA,IADA,IAAIkB,EAAOf,MAAAe,KAAA,CAAYlB,CAAZ,CAAX,CACSmC,EAAI,CADb,CACgBC,EAAKlB,CAAAhB,OAArB,CAAkCiC,CAAlC,CAAsCC,CAAtC,CAA0CD,CAAA,EAA1C,CAA+C,CAC7C,IAAIxB,EAAMO,CAAA,CAAKiB,CAAL,CAAV,CACIE,EAAMrC,CAAA,CAAIW,CAAJ,CAENqB,EAAJ,EAAYE,CAAA,CAASG,CAAT,CAAZ,EACOH,CAAA,CAASJ,CAAA,CAAInB,CAAJ,CAAT,CACL,GADyBmB,CAAA,CAAInB,CAAJ,CACzB,CADoCJ,CAAA,CAAQ8B,CAAR,CAAA,CAAe,EAAf,CAAoB,EACxD,EAAAR,EAAA,CAAWC,CAAA,CAAInB,CAAJ,CAAX;AAAqB,CAAC0B,CAAD,CAArB,CAA4B,CAAA,CAA5B,CAFF,EAIEP,CAAA,CAAInB,CAAJ,CAJF,CAIa0B,CARgC,CAJF,CAiB/CX,EAAA,CAAWI,CAAX,CAAgBH,CAAhB,CACA,OAAOG,EArB4B,CA0CrCQ,QAASA,EAAM,CAACR,CAAD,CAAM,CACnB,MAAOD,GAAA,CAAWC,CAAX,CAAgBS,EAAAzB,KAAA,CAAW0B,SAAX,CAAsB,CAAtB,CAAhB,CAA0C,CAAA,CAA1C,CADY,CAuBrBC,QAASA,GAAK,CAACX,CAAD,CAAM,CAClB,MAAOD,GAAA,CAAWC,CAAX,CAAgBS,EAAAzB,KAAA,CAAW0B,SAAX,CAAsB,CAAtB,CAAhB,CAA0C,CAAA,CAA1C,CADW,CAMpBE,QAASA,EAAK,CAACC,CAAD,CAAM,CAClB,MAAOC,SAAA,CAASD,CAAT,CAAc,EAAd,CADW,CAKpBE,QAASA,GAAO,CAACC,CAAD,CAASC,CAAT,CAAgB,CAC9B,MAAOT,EAAA,CAAOnC,MAAA6C,OAAA,CAAcF,CAAd,CAAP,CAA8BC,CAA9B,CADuB,CAoBhCE,QAASA,EAAI,EAAG,EAsBhBC,QAASA,GAAQ,CAACC,CAAD,CAAI,CAAC,MAAOA,EAAR,CAIrBC,QAASA,GAAO,CAAC7B,CAAD,CAAQ,CAAC,MAAO,SAAQ,EAAG,CAAC,MAAOA,EAAR,CAAnB,CAcxB8B,QAASA,EAAW,CAAC9B,CAAD,CAAQ,CAAC,MAAwB,WAAxB,GAAO,MAAOA,EAAf,CAe5B+B,QAASA,EAAS,CAAC/B,CAAD,CAAQ,CAAC,MAAwB,WAAxB,GAAO,MAAOA,EAAf,CAgB1BW,QAASA,EAAQ,CAACX,CAAD,CAAQ,CAEvB,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAFT,CAWzBP,QAASA,GAAa,CAACO,CAAD,CAAQ,CAC5B,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAAhC,EAAsD,CAACgC,EAAA,CAAehC,CAAf,CAD3B,CAiB9BjB,QAASA,EAAQ,CAACiB,CAAD,CAAQ,CAAC,MAAwB,QAAxB;AAAO,MAAOA,EAAf,CAqBzBiC,QAASA,EAAQ,CAACjC,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAezBkC,QAASA,GAAM,CAAClC,CAAD,CAAQ,CACrB,MAAgC,eAAhC,GAAOmC,EAAA5C,KAAA,CAAcS,CAAd,CADc,CA+BvBX,QAASA,EAAU,CAACW,CAAD,CAAQ,CAAC,MAAwB,UAAxB,GAAO,MAAOA,EAAf,CAU3BoC,QAASA,GAAQ,CAACpC,CAAD,CAAQ,CACvB,MAAgC,iBAAhC,GAAOmC,EAAA5C,KAAA,CAAcS,CAAd,CADgB,CAYzBtB,QAASA,GAAQ,CAACD,CAAD,CAAM,CACrB,MAAOA,EAAP,EAAcA,CAAAL,OAAd,GAA6BK,CADR,CAKvB4D,QAASA,GAAO,CAAC5D,CAAD,CAAM,CACpB,MAAOA,EAAP,EAAcA,CAAA6D,WAAd,EAAgC7D,CAAA8D,OADZ,CAoBtBC,QAASA,GAAS,CAACxC,CAAD,CAAQ,CACxB,MAAwB,SAAxB,GAAO,MAAOA,EADU,CAyC1ByC,QAASA,GAAS,CAACC,CAAD,CAAO,CACvB,MAAO,EAAGA,CAAAA,CAAH,EACJ,EAAAA,CAAAC,SAAA,EACGD,CAAAE,KADH,EACgBF,CAAAG,KADhB,EAC6BH,CAAAI,KAD7B,CADI,CADgB,CAUzBC,QAASA,GAAO,CAAC3B,CAAD,CAAM,CAAA,IAChB3C,EAAM,EAAIuE,EAAAA,CAAQ5B,CAAA6B,MAAA,CAAU,GAAV,CAAtB,KAAsCpD,CACtC,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBmD,CAAArE,OAAhB,CAA8BkB,CAAA,EAA9B,CACEpB,CAAA,CAAIuE,CAAA,CAAMnD,CAAN,CAAJ,CAAA,CAAgB,CAAA,CAElB,OAAOpB,EALa,CAStByE,QAASA,GAAS,CAACC,CAAD,CAAU,CAC1B,MAAOC,EAAA,CAAUD,CAAAR,SAAV;AAA+BQ,CAAA,CAAQ,CAAR,CAA/B,EAA6CA,CAAA,CAAQ,CAAR,CAAAR,SAA7C,CADmB,CAQ5BU,QAASA,GAAW,CAACC,CAAD,CAAQtD,CAAR,CAAe,CACjC,IAAIuD,EAAQD,CAAAE,QAAA,CAAcxD,CAAd,CACC,EAAb,EAAIuD,CAAJ,EACED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CAEF,OAAOA,EAL0B,CAkEnCG,QAASA,GAAI,CAACC,CAAD,CAASC,CAAT,CAAsBC,CAAtB,CAAmCC,CAAnC,CAA8C,CAuFzDC,QAASA,EAAQ,CAAC3E,CAAD,CAAM4E,CAAN,CAAWJ,CAAX,CAAwBC,CAAxB,CAAqCC,CAArC,CAAgD,CAE/D,IAAIG,EAASP,EAAA,CAAKM,CAAL,CAAU,IAAV,CAAgBH,CAAhB,CAA6BC,CAA7B,CACTnD,EAAA,CAASqD,CAAT,CAAJ,GACEH,CAAAK,KAAA,CAAiBF,CAAjB,CACA,CAAAF,CAAAI,KAAA,CAAeD,CAAf,CAFF,CAIAL,EAAA,CAAYxE,CAAZ,CAAA,CAAmB6E,CAP4C,CAtFjE,GAAIvF,EAAA,CAASiF,CAAT,CAAJ,EAAwBtB,EAAA,CAAQsB,CAAR,CAAxB,CACE,KAAMQ,GAAA,CAAS,MAAT,CAAN,CAGF,GA/HOC,EAAAC,KAAA,CAAwBlC,EAAA5C,KAAA,CA+HdqE,CA/Hc,CAAxB,CA+HP,CACE,KAAMO,GAAA,CAAS,MAAT,CAAN,CAIF,GAAKP,CAAL,CAiBO,CACL,GAAID,CAAJ,GAAeC,CAAf,CAA4B,KAAMO,GAAA,CAAS,KAAT,CAAN,CAG5BN,CAAA,CAAcA,CAAd,EAA6B,EAC7BC,EAAA,CAAYA,CAAZ,EAAyB,EAEzB,IAAInD,CAAA,CAASgD,CAAT,CAAJ,CAAsB,CACpB,IAAIJ,EAAQM,CAAAL,QAAA,CAAoBG,CAApB,CACZ,IAAe,EAAf,GAAIJ,CAAJ,CAAkB,MAAOO,EAAA,CAAUP,CAAV,CAEzBM,EAAAK,KAAA,CAAiBP,CAAjB,CACAG,EAAAI,KAAA,CAAeN,CAAf,CALoB,CAPjB,IAeDK,CACJ,IAAIjF,CAAA,CAAQ2E,CAAR,CAAJ,CAEE,IAAS9D,CAAT,CADA+D,CAAAjF,OACA,CADqB,CACrB,CAAgBkB,CAAhB,CAAoB8D,CAAAhF,OAApB,CAAmCkB,CAAA,EAAnC,CACEoE,CAKA,CALSP,EAAA,CAAKC,CAAA,CAAO9D,CAAP,CAAL,CAAgB,IAAhB,CAAsBgE,CAAtB,CAAmCC,CAAnC,CAKT,CAJInD,CAAA,CAASgD,CAAA,CAAO9D,CAAP,CAAT,CAIJ,GAHEgE,CAAAK,KAAA,CAAiBP,CAAA,CAAO9D,CAAP,CAAjB,CACA,CAAAiE,CAAAI,KAAA,CAAeD,CAAf,CAEF,EAAAL,CAAAM,KAAA,CAAiBD,CAAjB,CARJ,KAUO,CACD7D,CAAAA,CAAIwD,CAAAvD,UACJrB;CAAA,CAAQ4E,CAAR,CAAJ,CACEA,CAAAjF,OADF,CACuB,CADvB,CAGEM,CAAA,CAAQ2E,CAAR,CAAqB,QAAQ,CAAC5D,CAAD,CAAQZ,CAAR,CAAa,CACxC,OAAOwE,CAAA,CAAYxE,CAAZ,CADiC,CAA1C,CAIF,IAAIK,EAAA,CAAckE,CAAd,CAAJ,CAEE,IAAKvE,CAAL,GAAYuE,EAAZ,CACEI,CAAA,CAAS3E,CAAT,CAAcuE,CAAA,CAAOvE,CAAP,CAAd,CAA2BwE,CAA3B,CAAwCC,CAAxC,CAAqDC,CAArD,CAHJ,KAKO,IAAIH,CAAJ,EAA+C,UAA/C,GAAc,MAAOA,EAAArE,eAArB,CAEL,IAAKF,CAAL,GAAYuE,EAAZ,CACMA,CAAArE,eAAA,CAAsBF,CAAtB,CAAJ,EACE2E,CAAA,CAAS3E,CAAT,CAAcuE,CAAA,CAAOvE,CAAP,CAAd,CAA2BwE,CAA3B,CAAwCC,CAAxC,CAAqDC,CAArD,CAJC,KASL,KAAK1E,CAAL,GAAYuE,EAAZ,CACMrE,EAAAC,KAAA,CAAoBoE,CAApB,CAA4BvE,CAA5B,CAAJ,EACE2E,CAAA,CAAS3E,CAAT,CAAcuE,CAAA,CAAOvE,CAAP,CAAd,CAA2BwE,CAA3B,CAAwCC,CAAxC,CAAqDC,CAArD,CAIN3D,GAAA,CAAWyD,CAAX,CAAuBxD,CAAvB,CA7BK,CA1BF,CAjBP,IAEE,IADAwD,CACA,CADcD,CACd,CACM3E,CAAA,CAAQ2E,CAAR,CAAJ,CACEC,CADF,CACgBF,EAAA,CAAKC,CAAL,CAAa,EAAb,CAAiBE,CAAjB,CAA8BC,CAA9B,CADhB,CAvIGM,EAAAC,KAAA,CAAwBlC,EAAA5C,KAAA,CAyIHoE,CAzIG,CAAxB,CAyII,CACLC,CADK,CACS,IAAID,CAAAW,YAAJ,CAAuBX,CAAvB,CADT,CAEIzB,EAAA,CAAOyB,CAAP,CAAJ,CACLC,CADK,CACS,IAAIW,IAAJ,CAASZ,CAAAa,QAAA,EAAT,CADT,CAEIpC,EAAA,CAASuB,CAAT,CAAJ,EACLC,CACA,CADc,IAAIa,MAAJ,CAAWd,CAAAA,OAAX,CAA0BA,CAAAxB,SAAA,EAAAuC,MAAA,CAAwB,SAAxB,CAAA,CAAmC,CAAnC,CAA1B,CACd,CAAAd,CAAAe,UAAA,CAAwBhB,CAAAgB,UAFnB,EAGIhE,CAAA,CAASgD,CAAT,CAHJ,GAIDiB,CACJ,CADkBhG,MAAA6C,OAAA,CAAcO,EAAA,CAAe2B,CAAf,CAAd,CAClB,CAAAC,CAAA,CAAcF,EAAA,CAAKC,CAAL,CAAaiB,CAAb,CAA0Bf,CAA1B,CAAuCC,CAAvC,CALT,CAkEX,OAAOF,EArFkD,CAuG3DiB,QAASA,GAAW,CAAC/D,CAAD,CAAMP,CAAN,CAAW,CAC7B,GAAIvB,CAAA,CAAQ8B,CAAR,CAAJ,CAAkB,CAChBP,CAAA;AAAMA,CAAN,EAAa,EAEb,KAHgB,IAGPV,EAAI,CAHG,CAGAa,EAAKI,CAAAnC,OAArB,CAAiCkB,CAAjC,CAAqCa,CAArC,CAAyCb,CAAA,EAAzC,CACEU,CAAA,CAAIV,CAAJ,CAAA,CAASiB,CAAA,CAAIjB,CAAJ,CAJK,CAAlB,IAMO,IAAIc,CAAA,CAASG,CAAT,CAAJ,CAGL,IAAS1B,CAAT,GAFAmB,EAEgBO,CAFVP,CAEUO,EAFH,EAEGA,CAAAA,CAAhB,CACE,GAAwB,GAAxB,GAAM1B,CAAA0F,OAAA,CAAW,CAAX,CAAN,EAAiD,GAAjD,GAA+B1F,CAAA0F,OAAA,CAAW,CAAX,CAA/B,CACEvE,CAAA,CAAInB,CAAJ,CAAA,CAAW0B,CAAA,CAAI1B,CAAJ,CAKjB,OAAOmB,EAAP,EAAcO,CAjBe,CAkD/BiE,QAASA,GAAM,CAACC,CAAD,CAAKC,CAAL,CAAS,CACtB,GAAID,CAAJ,GAAWC,CAAX,CAAe,MAAO,CAAA,CACtB,IAAW,IAAX,GAAID,CAAJ,EAA0B,IAA1B,GAAmBC,CAAnB,CAAgC,MAAO,CAAA,CACvC,IAAID,CAAJ,GAAWA,CAAX,EAAiBC,CAAjB,GAAwBA,CAAxB,CAA4B,MAAO,CAAA,CAHb,KAIlBC,EAAK,MAAOF,EAJM,CAIsB5F,CAC5C,IAAI8F,CAAJ,EADyBC,MAAOF,EAChC,EACY,QADZ,EACMC,CADN,CAEI,GAAIlG,CAAA,CAAQgG,CAAR,CAAJ,CAAiB,CACf,GAAK,CAAAhG,CAAA,CAAQiG,CAAR,CAAL,CAAkB,MAAO,CAAA,CACzB,KAAKtG,CAAL,CAAcqG,CAAArG,OAAd,GAA4BsG,CAAAtG,OAA5B,CAAuC,CACrC,IAAKS,CAAL,CAAW,CAAX,CAAcA,CAAd,CAAoBT,CAApB,CAA4BS,CAAA,EAA5B,CACE,GAAK,CAAA2F,EAAA,CAAOC,CAAA,CAAG5F,CAAH,CAAP,CAAgB6F,CAAA,CAAG7F,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CAExC,OAAO,CAAA,CAJ8B,CAFxB,CAAjB,IAQO,CAAA,GAAI8C,EAAA,CAAO8C,CAAP,CAAJ,CACL,MAAK9C,GAAA,CAAO+C,CAAP,CAAL,CACOF,EAAA,CAAOC,CAAAR,QAAA,EAAP,CAAqBS,CAAAT,QAAA,EAArB,CADP,CAAwB,CAAA,CAEnB,IAAIpC,EAAA,CAAS4C,CAAT,CAAJ,CACL,MAAO5C,GAAA,CAAS6C,CAAT,CAAA,CAAeD,CAAA7C,SAAA,EAAf,EAAgC8C,CAAA9C,SAAA,EAAhC,CAAgD,CAAA,CAEvD,IAAIE,EAAA,CAAQ2C,CAAR,CAAJ;AAAmB3C,EAAA,CAAQ4C,CAAR,CAAnB,EAAkCvG,EAAA,CAASsG,CAAT,CAAlC,EAAkDtG,EAAA,CAASuG,CAAT,CAAlD,EACEjG,CAAA,CAAQiG,CAAR,CADF,EACiB/C,EAAA,CAAO+C,CAAP,CADjB,EAC+B7C,EAAA,CAAS6C,CAAT,CAD/B,CAC6C,MAAO,CAAA,CACpDG,EAAA,CAASC,EAAA,EACT,KAAKjG,CAAL,GAAY4F,EAAZ,CACE,GAAsB,GAAtB,GAAI5F,CAAA0F,OAAA,CAAW,CAAX,CAAJ,EAA6B,CAAAzF,CAAA,CAAW2F,CAAA,CAAG5F,CAAH,CAAX,CAA7B,CAAA,CACA,GAAK,CAAA2F,EAAA,CAAOC,CAAA,CAAG5F,CAAH,CAAP,CAAgB6F,CAAA,CAAG7F,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CACtCgG,EAAA,CAAOhG,CAAP,CAAA,CAAc,CAAA,CAFd,CAIF,IAAKA,CAAL,GAAY6F,EAAZ,CACE,GAAI,EAAE7F,CAAF,GAASgG,EAAT,EACkB,GADlB,GACAhG,CAAA0F,OAAA,CAAW,CAAX,CADA,EAEAG,CAAA,CAAG7F,CAAH,CAFA,GAEYd,CAFZ,EAGCe,CAAA,CAAW4F,CAAA,CAAG7F,CAAH,CAAX,CAHD,CAAJ,CAG0B,MAAO,CAAA,CAEnC,OAAO,CAAA,CApBF,CAwBX,MAAO,CAAA,CAvCe,CAkHxBkG,QAASA,GAAM,CAACC,CAAD,CAASC,CAAT,CAAiBjC,CAAjB,CAAwB,CACrC,MAAOgC,EAAAD,OAAA,CAActE,EAAAzB,KAAA,CAAWiG,CAAX,CAAmBjC,CAAnB,CAAd,CAD8B,CA4BvCkC,QAASA,GAAI,CAACC,CAAD,CAAOC,CAAP,CAAW,CACtB,IAAIC,EAA+B,CAAnB,CAAA3E,SAAAtC,OAAA,CAxBTqC,EAAAzB,KAAA,CAwB0C0B,SAxB1C,CAwBqD4E,CAxBrD,CAwBS,CAAiD,EACjE,OAAI,CAAAxG,CAAA,CAAWsG,CAAX,CAAJ,EAAwBA,CAAxB,WAAsClB,OAAtC,CAcSkB,CAdT,CACSC,CAAAjH,OAAA,CACH,QAAQ,EAAG,CACT,MAAOsC,UAAAtC,OAAA,CACHgH,CAAAG,MAAA,CAASJ,CAAT,CAAeJ,EAAA,CAAOM,CAAP,CAAkB3E,SAAlB,CAA6B,CAA7B,CAAf,CADG,CAEH0E,CAAAG,MAAA,CAASJ,CAAT,CAAeE,CAAf,CAHK,CADR,CAMH,QAAQ,EAAG,CACT,MAAO3E,UAAAtC,OAAA,CACHgH,CAAAG,MAAA,CAASJ,CAAT;AAAezE,SAAf,CADG,CAEH0E,CAAApG,KAAA,CAAQmG,CAAR,CAHK,CATK,CAqBxBK,QAASA,GAAc,CAAC3G,CAAD,CAAMY,CAAN,CAAa,CAClC,IAAIgE,EAAMhE,CAES,SAAnB,GAAI,MAAOZ,EAAX,EAAiD,GAAjD,GAA+BA,CAAA0F,OAAA,CAAW,CAAX,CAA/B,EAA0E,GAA1E,GAAwD1F,CAAA0F,OAAA,CAAW,CAAX,CAAxD,CACEd,CADF,CACQ1F,CADR,CAEWI,EAAA,CAASsB,CAAT,CAAJ,CACLgE,CADK,CACC,SADD,CAEIhE,CAAJ,EAAc3B,CAAd,GAA2B2B,CAA3B,CACLgE,CADK,CACC,WADD,CAEI3B,EAAA,CAAQrC,CAAR,CAFJ,GAGLgE,CAHK,CAGC,QAHD,CAMP,OAAOA,EAb2B,CAgCpCgC,QAASA,GAAM,CAACvH,CAAD,CAAMwH,CAAN,CAAc,CAC3B,GAAmB,WAAnB,GAAI,MAAOxH,EAAX,CAAgC,MAAOH,EAClC2D,EAAA,CAASgE,CAAT,CAAL,GACEA,CADF,CACWA,CAAA,CAAS,CAAT,CAAa,IADxB,CAGA,OAAOC,KAAAC,UAAA,CAAe1H,CAAf,CAAoBsH,EAApB,CAAoCE,CAApC,CALoB,CAqB7BG,QAASA,GAAQ,CAACC,CAAD,CAAO,CACtB,MAAOtH,EAAA,CAASsH,CAAT,CAAA,CACDH,IAAAI,MAAA,CAAWD,CAAX,CADC,CAEDA,CAHgB,CAOxBE,QAASA,GAAgB,CAACC,CAAD,CAAWC,CAAX,CAAqB,CAC5C,IAAIC,EAA0BnC,IAAA+B,MAAA,CAAW,wBAAX,CAAsCE,CAAtC,CAA1BE,CAA4E,GAChF,OAAOC,MAAA,CAAMD,CAAN,CAAA,CAAiCD,CAAjC,CAA4CC,CAFP,CAa9CE,QAASA,GAAsB,CAACC,CAAD,CAAOL,CAAP,CAAiBM,CAAjB,CAA0B,CACvDA,CAAA,CAAUA,CAAA,CAAW,EAAX,CAAe,CACzB,KAAIC,EAAiBR,EAAA,CAAiBC,CAAjB,CAA2BK,CAAAG,kBAAA,EAA3B,CACCH,EAAAA,CAAAA,CAAM,EAAA,CAAAC,CAAA,EAAWC,CAAX,CAA4BF,CAAAG,kBAAA,EAA5B,CAT5BH;CAAA,CAAO,IAAItC,IAAJ,CAASsC,CAAArC,QAAA,EAAT,CACPqC,EAAAI,WAAA,CAAgBJ,CAAAK,WAAA,EAAhB,CAAoCC,CAApC,CAQA,OAPON,EAIgD,CAUzDO,QAASA,GAAW,CAACjE,CAAD,CAAU,CAC5BA,CAAA,CAAUkE,CAAA,CAAOlE,CAAP,CAAAmE,MAAA,EACV,IAAI,CAGFnE,CAAAoE,MAAA,EAHE,CAIF,MAAOC,CAAP,CAAU,EACZ,IAAIC,EAAWJ,CAAA,CAAO,OAAP,CAAAK,OAAA,CAAuBvE,CAAvB,CAAAwE,KAAA,EACf,IAAI,CACF,MAAOxE,EAAA,CAAQ,CAAR,CAAAtE,SAAA,GAAwB+I,EAAxB,CAAyCxE,CAAA,CAAUqE,CAAV,CAAzC,CACHA,CAAA/C,MAAA,CACQ,YADR,CAAA,CACsB,CADtB,CAAAmD,QAAA,CAEU,aAFV,CAEyB,QAAQ,CAACnD,CAAD,CAAQ/B,CAAR,CAAkB,CAAE,MAAO,GAAP,CAAaS,CAAA,CAAUT,CAAV,CAAf,CAFnD,CAFF,CAKF,MAAO6E,CAAP,CAAU,CACV,MAAOpE,EAAA,CAAUqE,CAAV,CADG,CAbgB,CA8B9BK,QAASA,GAAqB,CAAC9H,CAAD,CAAQ,CACpC,GAAI,CACF,MAAO+H,mBAAA,CAAmB/H,CAAnB,CADL,CAEF,MAAOwH,CAAP,CAAU,EAHwB,CAatCQ,QAASA,GAAa,CAAYC,CAAZ,CAAsB,CAAA,IACtCxJ,EAAM,EADgC,CAC5ByJ,CAD4B,CACjB9I,CACzBH,EAAA,CAAQgE,CAACgF,CAADhF,EAAa,EAAbA,OAAA,CAAuB,GAAvB,CAAR,CAAqC,QAAQ,CAACgF,CAAD,CAAW,CAClDA,CAAJ,GACEC,CAEA,CAFYD,CAAAJ,QAAA,CAAiB,KAAjB,CAAuB,KAAvB,CAAA5E,MAAA,CAAoC,GAApC,CAEZ,CADA7D,CACA,CADM0I,EAAA,CAAsBI,CAAA,CAAU,CAAV,CAAtB,CACN,CAAInG,CAAA,CAAU3C,CAAV,CAAJ,GACM4E,CACJ,CADUjC,CAAA,CAAUmG,CAAA,CAAU,CAAV,CAAV,CAAA,CAA0BJ,EAAA,CAAsBI,CAAA,CAAU,CAAV,CAAtB,CAA1B,CAAgE,CAAA,CAC1E,CAAK5I,EAAAC,KAAA,CAAoBd,CAApB,CAAyBW,CAAzB,CAAL,CAEWJ,CAAA,CAAQP,CAAA,CAAIW,CAAJ,CAAR,CAAJ;AACLX,CAAA,CAAIW,CAAJ,CAAA8E,KAAA,CAAcF,CAAd,CADK,CAGLvF,CAAA,CAAIW,CAAJ,CAHK,CAGM,CAACX,CAAA,CAAIW,CAAJ,CAAD,CAAU4E,CAAV,CALb,CACEvF,CAAA,CAAIW,CAAJ,CADF,CACa4E,CAHf,CAHF,CADsD,CAAxD,CAgBA,OAAOvF,EAlBmC,CAqB5C0J,QAASA,GAAU,CAAC1J,CAAD,CAAM,CACvB,IAAI2J,EAAQ,EACZnJ,EAAA,CAAQR,CAAR,CAAa,QAAQ,CAACuB,CAAD,CAAQZ,CAAR,CAAa,CAC5BJ,CAAA,CAAQgB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAACqI,CAAD,CAAa,CAClCD,CAAAlE,KAAA,CAAWoE,EAAA,CAAelJ,CAAf,CAAoB,CAAA,CAApB,CAAX,EAC2B,CAAA,CAAf,GAAAiJ,CAAA,CAAsB,EAAtB,CAA2B,GAA3B,CAAiCC,EAAA,CAAeD,CAAf,CAA2B,CAAA,CAA3B,CAD7C,EADkC,CAApC,CADF,CAMAD,CAAAlE,KAAA,CAAWoE,EAAA,CAAelJ,CAAf,CAAoB,CAAA,CAApB,CAAX,EACsB,CAAA,CAAV,GAAAY,CAAA,CAAiB,EAAjB,CAAsB,GAAtB,CAA4BsI,EAAA,CAAetI,CAAf,CAAsB,CAAA,CAAtB,CADxC,EAPgC,CAAlC,CAWA,OAAOoI,EAAAzJ,OAAA,CAAeyJ,CAAAG,KAAA,CAAW,GAAX,CAAf,CAAiC,EAbjB,CA4BzBC,QAASA,GAAgB,CAACxE,CAAD,CAAM,CAC7B,MAAOsE,GAAA,CAAetE,CAAf,CAAoB,CAAA,CAApB,CAAA6D,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,OAHZ,CAGqB,GAHrB,CADsB,CAmB/BS,QAASA,GAAc,CAACtE,CAAD,CAAMyE,CAAN,CAAuB,CAC5C,MAAOC,mBAAA,CAAmB1E,CAAnB,CAAA6D,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,MAHZ,CAGoB,GAHpB,CAAAA,QAAA,CAIY,OAJZ,CAIqB,GAJrB,CAAAA,QAAA,CAKY,OALZ,CAKqB,GALrB,CAAAA,QAAA,CAMY,MANZ,CAMqBY,CAAA,CAAkB,KAAlB,CAA0B,GAN/C,CADqC,CA/0CP;AA21CvCE,QAASA,GAAc,CAACxF,CAAD,CAAUyF,CAAV,CAAkB,CAAA,IACnC/F,CADmC,CAC7BhD,CAD6B,CAC1Ba,EAAKmI,EAAAlK,OAClB,KAAKkB,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBa,CAAhB,CAAoB,EAAEb,CAAtB,CAEE,GADAgD,CACI,CADGgG,EAAA,CAAehJ,CAAf,CACH,CADuB+I,CACvB,CAAA7J,CAAA,CAAS8D,CAAT,CAAgBM,CAAA2F,aAAA,CAAqBjG,CAArB,CAAhB,CAAJ,CACE,MAAOA,EAGX,OAAO,KARgC,CA0IzCkG,QAASA,GAAW,CAAC5F,CAAD,CAAU6F,CAAV,CAAqB,CAAA,IACnCC,CADmC,CAEnCC,CAFmC,CAGnCC,EAAS,EAGblK,EAAA,CAAQ4J,EAAR,CAAwB,QAAQ,CAACO,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KAEfJ,EAAAA,CAAL,EAAmB9F,CAAAmG,aAAnB,EAA2CnG,CAAAmG,aAAA,CAAqBD,CAArB,CAA3C,GACEJ,CACA,CADa9F,CACb,CAAA+F,CAAA,CAAS/F,CAAA2F,aAAA,CAAqBO,CAArB,CAFX,CAHuC,CAAzC,CAQApK,EAAA,CAAQ4J,EAAR,CAAwB,QAAQ,CAACO,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KACpB,KAAIE,CAECN,EAAAA,CAAL,GAAoBM,CAApB,CAAgCpG,CAAAqG,cAAA,CAAsB,GAAtB,CAA4BH,CAAAxB,QAAA,CAAa,GAAb,CAAkB,KAAlB,CAA5B,CAAuD,GAAvD,CAAhC,IACEoB,CACA,CADaM,CACb,CAAAL,CAAA,CAASK,CAAAT,aAAA,CAAuBO,CAAvB,CAFX,CAJuC,CAAzC,CASIJ,EAAJ,GACEE,CAAAM,SACA,CAD8D,IAC9D,GADkBd,EAAA,CAAeM,CAAf,CAA2B,WAA3B,CAClB,CAAAD,CAAA,CAAUC,CAAV,CAAsBC,CAAA,CAAS,CAACA,CAAD,CAAT,CAAoB,EAA1C,CAA8CC,CAA9C,CAFF,CAvBuC,CA+EzCH,QAASA,GAAS,CAAC7F,CAAD,CAAUuG,CAAV,CAAmBP,CAAnB,CAA2B,CACtCxI,CAAA,CAASwI,CAAT,CAAL,GAAuBA,CAAvB,CAAgC,EAAhC,CAIAA,EAAA,CAASpI,CAAA,CAHW4I,CAClBF,SAAU,CAAA,CADQE,CAGX,CAAsBR,CAAtB,CACT,KAAIS,EAAcA,QAAQ,EAAG,CAC3BzG,CAAA,CAAUkE,CAAA,CAAOlE,CAAP,CAEV,IAAIA,CAAA0G,SAAA,EAAJ,CAAwB,CACtB,IAAIC;AAAO3G,CAAA,CAAQ,CAAR,CAAD,GAAgB9E,CAAhB,CAA4B,UAA5B,CAAyC+I,EAAA,CAAYjE,CAAZ,CAEnD,MAAMgB,GAAA,CACF,SADE,CAGF2F,CAAAjC,QAAA,CAAY,GAAZ,CAAgB,MAAhB,CAAAA,QAAA,CAAgC,GAAhC,CAAoC,MAApC,CAHE,CAAN,CAHsB,CASxB6B,CAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAAK,QAAA,CAAgB,CAAC,UAAD,CAAa,QAAQ,CAACC,CAAD,CAAW,CAC9CA,CAAAhK,MAAA,CAAe,cAAf,CAA+BmD,CAA/B,CAD8C,CAAhC,CAAhB,CAIIgG,EAAAc,iBAAJ,EAEEP,CAAAxF,KAAA,CAAa,CAAC,kBAAD,CAAqB,QAAQ,CAACgG,CAAD,CAAmB,CAC3DA,CAAAD,iBAAA,CAAkC,CAAA,CAAlC,CAD2D,CAAhD,CAAb,CAKFP,EAAAK,QAAA,CAAgB,IAAhB,CACIF,EAAAA,CAAWM,EAAA,CAAeT,CAAf,CAAwBP,CAAAM,SAAxB,CACfI,EAAAO,OAAA,CAAgB,CAAC,YAAD,CAAe,cAAf,CAA+B,UAA/B,CAA2C,WAA3C,CACbC,QAAuB,CAACC,CAAD,CAAQnH,CAAR,CAAiBoH,CAAjB,CAA0BV,CAA1B,CAAoC,CAC1DS,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtBrH,CAAAsH,KAAA,CAAa,WAAb,CAA0BZ,CAA1B,CACAU,EAAA,CAAQpH,CAAR,CAAA,CAAiBmH,CAAjB,CAFsB,CAAxB,CAD0D,CAD9C,CAAhB,CAQA,OAAOT,EAlCoB,CAA7B,CAqCIa,EAAuB,wBArC3B,CAsCIC,EAAqB,sBAErBvM,EAAJ,EAAcsM,CAAArG,KAAA,CAA0BjG,CAAAiL,KAA1B,CAAd,GACEF,CAAAc,iBACA;AAD0B,CAAA,CAC1B,CAAA7L,CAAAiL,KAAA,CAAcjL,CAAAiL,KAAAxB,QAAA,CAAoB6C,CAApB,CAA0C,EAA1C,CAFhB,CAKA,IAAItM,CAAJ,EAAe,CAAAuM,CAAAtG,KAAA,CAAwBjG,CAAAiL,KAAxB,CAAf,CACE,MAAOO,EAAA,EAGTxL,EAAAiL,KAAA,CAAcjL,CAAAiL,KAAAxB,QAAA,CAAoB8C,CAApB,CAAwC,EAAxC,CACdC,GAAAC,gBAAA,CAA0BC,QAAQ,CAACC,CAAD,CAAe,CAC/C9L,CAAA,CAAQ8L,CAAR,CAAsB,QAAQ,CAAC7B,CAAD,CAAS,CACrCQ,CAAAxF,KAAA,CAAagF,CAAb,CADqC,CAAvC,CAGA,OAAOU,EAAA,EAJwC,CAO7CvK,EAAA,CAAWuL,EAAAI,wBAAX,CAAJ,EACEJ,EAAAI,wBAAA,EAhEyC,CA8E7CC,QAASA,GAAmB,EAAG,CAC7B7M,CAAAiL,KAAA,CAAc,uBAAd,CAAwCjL,CAAAiL,KACxCjL,EAAA8M,SAAAC,OAAA,EAF6B,CAa/BC,QAASA,GAAc,CAACC,CAAD,CAAc,CAC/BxB,CAAAA,CAAWe,EAAAzH,QAAA,CAAgBkI,CAAhB,CAAAxB,SAAA,EACf,IAAKA,CAAAA,CAAL,CACE,KAAM1F,GAAA,CAAS,MAAT,CAAN,CAGF,MAAO0F,EAAAyB,IAAA,CAAa,eAAb,CAN4B,CAUrCC,QAASA,GAAU,CAAClC,CAAD,CAAOmC,CAAP,CAAkB,CACnCA,CAAA,CAAYA,CAAZ,EAAyB,GACzB,OAAOnC,EAAAxB,QAAA,CAAa4D,EAAb,CAAgC,QAAQ,CAACC,CAAD,CAASC,CAAT,CAAc,CAC3D,OAAQA,CAAA,CAAMH,CAAN,CAAkB,EAA1B,EAAgCE,CAAAE,YAAA,EAD2B,CAAtD,CAF4B,CASrCC,QAASA,GAAU,EAAG,CACpB,IAAIC,CAEJ;GAAIC,CAAAA,EAAJ,CAAA,CAKA,IAAIC,EAASC,EAAA,EACbC,GAAA,CAAS9N,CAAA8N,OACLnK,EAAA,CAAUiK,CAAV,CAAJ,GACEE,EADF,CACsB,IAAX,GAAAF,CAAA,CAAkB1N,CAAlB,CAA8BF,CAAA,CAAO4N,CAAP,CADzC,CAQIE,GAAJ,EAAcA,EAAAvG,GAAAwG,GAAd,EACE9E,CAaA,CAbS6E,EAaT,CAZAnL,CAAA,CAAOmL,EAAAvG,GAAP,CAAkB,CAChB2E,MAAO8B,EAAA9B,MADS,CAEhB+B,aAAcD,EAAAC,aAFE,CAGhBC,WAAYF,EAAAE,WAHI,CAIhBzC,SAAUuC,EAAAvC,SAJM,CAKhB0C,cAAeH,EAAAG,cALC,CAAlB,CAYA,CADAT,CACA,CADoBI,EAAAM,UACpB,CAAAN,EAAAM,UAAA,CAAmBC,QAAQ,CAACC,CAAD,CAAQ,CACjC,IAAIC,CACJ,IAAKC,EAAL,CAQEA,EAAA,CAAmC,CAAA,CARrC,KACE,KADqC,IAC5B/M,EAAI,CADwB,CACrBgN,CAAhB,CAA2C,IAA3C,GAAuBA,CAAvB,CAA8BH,CAAA,CAAM7M,CAAN,CAA9B,EAAiDA,CAAA,EAAjD,CAEE,CADA8M,CACA,CADST,EAAAY,MAAA,CAAaD,CAAb,CAAmB,QAAnB,CACT,GAAcF,CAAAI,SAAd,EACEb,EAAA,CAAOW,CAAP,CAAAG,eAAA,CAA4B,UAA5B,CAMNlB,EAAA,CAAkBY,CAAlB,CAZiC,CAdrC,EA6BErF,CA7BF,CA6BW4F,CAGXrC,GAAAzH,QAAA,CAAkBkE,CAGlB0E,GAAA,CAAkB,CAAA,CAlDlB,CAHoB,CA2DtBmB,QAASA,GAAS,CAACC,CAAD,CAAM9D,CAAN,CAAY+D,CAAZ,CAAoB,CACpC,GAAKD,CAAAA,CAAL,CACE,KAAMhJ,GAAA,CAAS,MAAT,CAA2CkF,CAA3C,EAAmD,GAAnD,CAA0D+D,CAA1D,EAAoE,UAApE,CAAN,CAEF,MAAOD,EAJ6B,CAOtCE,QAASA,GAAW,CAACF,CAAD,CAAM9D,CAAN,CAAYiE,CAAZ,CAAmC,CACjDA,CAAJ;AAA6BtO,CAAA,CAAQmO,CAAR,CAA7B,GACIA,CADJ,CACUA,CAAA,CAAIA,CAAAxO,OAAJ,CAAiB,CAAjB,CADV,CAIAuO,GAAA,CAAU7N,CAAA,CAAW8N,CAAX,CAAV,CAA2B9D,CAA3B,CAAiC,sBAAjC,EACK8D,CAAA,EAAsB,QAAtB,GAAO,MAAOA,EAAd,CAAiCA,CAAA7I,YAAA+E,KAAjC,EAAyD,QAAzD,CAAoE,MAAO8D,EADhF,EAEA,OAAOA,EAP8C,CAevDI,QAASA,GAAuB,CAAClE,CAAD,CAAOlK,CAAP,CAAgB,CAC9C,GAAa,gBAAb,GAAIkK,CAAJ,CACE,KAAMlF,GAAA,CAAS,SAAT,CAA8DhF,CAA9D,CAAN,CAF4C,CAchDqO,QAASA,GAAM,CAAC/O,CAAD,CAAMgP,CAAN,CAAYC,CAAZ,CAA2B,CACxC,GAAKD,CAAAA,CAAL,CAAW,MAAOhP,EACdkB,EAAAA,CAAO8N,CAAAxK,MAAA,CAAW,GAAX,CAKX,KAJA,IAAI7D,CAAJ,CACIuO,EAAelP,CADnB,CAEImP,EAAMjO,CAAAhB,OAFV,CAISkB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB+N,CAApB,CAAyB/N,CAAA,EAAzB,CACET,CACA,CADMO,CAAA,CAAKE,CAAL,CACN,CAAIpB,CAAJ,GACEA,CADF,CACQ,CAACkP,CAAD,CAAgBlP,CAAhB,EAAqBW,CAArB,CADR,CAIF,OAAKsO,CAAAA,CAAL,EAAsBrO,CAAA,CAAWZ,CAAX,CAAtB,CACSgH,EAAA,CAAKkI,CAAL,CAAmBlP,CAAnB,CADT,CAGOA,CAhBiC,CAwB1CoP,QAASA,GAAa,CAACC,CAAD,CAAQ,CAG5B,IAAIpL,EAAOoL,CAAA,CAAM,CAAN,CACPC,EAAAA,CAAUD,CAAA,CAAMA,CAAAnP,OAAN,CAAqB,CAArB,CACd,KAAIqP,EAAa,CAACtL,CAAD,CAEjB,GAAG,CACDA,CAAA,CAAOA,CAAAuL,YACP,IAAKvL,CAAAA,CAAL,CAAW,KACXsL,EAAA9J,KAAA,CAAgBxB,CAAhB,CAHC,CAAH,MAISA,CAJT,GAIkBqL,CAJlB,CAMA,OAAO1G,EAAA,CAAO2G,CAAP,CAbqB,CA4B9B3I,QAASA,GAAS,EAAG,CACnB,MAAOzG,OAAA6C,OAAA,CAAc,IAAd,CADY,CAoBrByM,QAASA,GAAiB,CAAC9P,CAAD,CAAS,CAKjC+P,QAASA,EAAM,CAAC1P,CAAD;AAAM4K,CAAN,CAAY+E,CAAZ,CAAqB,CAClC,MAAO3P,EAAA,CAAI4K,CAAJ,CAAP,GAAqB5K,CAAA,CAAI4K,CAAJ,CAArB,CAAiC+E,CAAA,EAAjC,CADkC,CAHpC,IAAIC,EAAkB9P,CAAA,CAAO,WAAP,CAAtB,CACI4F,EAAW5F,CAAA,CAAO,IAAP,CAMXqM,EAAAA,CAAUuD,CAAA,CAAO/P,CAAP,CAAe,SAAf,CAA0BQ,MAA1B,CAGdgM,EAAA0D,SAAA,CAAmB1D,CAAA0D,SAAnB,EAAuC/P,CAEvC,OAAO4P,EAAA,CAAOvD,CAAP,CAAgB,QAAhB,CAA0B,QAAQ,EAAG,CAE1C,IAAIlB,EAAU,EAqDd,OAAOR,SAAe,CAACG,CAAD,CAAOkF,CAAP,CAAiBC,CAAjB,CAA2B,CAE7C,GAAa,gBAAb,GAKsBnF,CALtB,CACE,KAAMlF,EAAA,CAAS,SAAT,CAIoBhF,QAJpB,CAAN,CAKAoP,CAAJ,EAAgB7E,CAAApK,eAAA,CAAuB+J,CAAvB,CAAhB,GACEK,CAAA,CAAQL,CAAR,CADF,CACkB,IADlB,CAGA,OAAO8E,EAAA,CAAOzE,CAAP,CAAgBL,CAAhB,CAAsB,QAAQ,EAAG,CA0OtCoF,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiCC,CAAjC,CAAwC,CACrDA,CAAL,GAAYA,CAAZ,CAAoBC,CAApB,CACA,OAAO,SAAQ,EAAG,CAChBD,CAAA,CAAMD,CAAN,EAAsB,MAAtB,CAAA,CAA8B,CAACF,CAAD,CAAWC,CAAX,CAAmB1N,SAAnB,CAA9B,CACA,OAAO8N,EAFS,CAFwC,CAzO5D,GAAKR,CAAAA,CAAL,CACE,KAAMF,EAAA,CAAgB,OAAhB,CAEiDhF,CAFjD,CAAN,CAMF,IAAIyF,EAAc,EAAlB,CAGIE,EAAe,EAHnB,CAMIC,EAAY,EANhB,CAQI9F,EAASsF,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CAAmC,MAAnC,CAA2CO,CAA3C,CARb,CAWID,EAAiB,CAEnBG,aAAcJ,CAFK,CAGnBK,cAAeH,CAHI,CAInBI,WAAYH,CAJO,CAenBV,SAAUA,CAfS;AAyBnBlF,KAAMA,CAzBa,CAsCnBqF,SAAUD,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAtCS,CAiDnBL,QAASK,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CAjDU,CA4DnBY,QAASZ,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CA5DU,CAuEnBzO,MAAOyO,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CAvEY,CAmFnBa,SAAUb,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CAnFS,CA+FnBc,UAAWd,CAAA,CAAY,UAAZ,CAAwB,WAAxB,CA/FQ,CAiInBe,UAAWf,CAAA,CAAY,kBAAZ,CAAgC,UAAhC,CAjIQ,CAmJnBgB,OAAQhB,CAAA,CAAY,iBAAZ,CAA+B,UAA/B,CAnJW,CA+JnBnC,WAAYmC,CAAA,CAAY,qBAAZ,CAAmC,UAAnC,CA/JO,CA4KnBiB,UAAWjB,CAAA,CAAY,kBAAZ,CAAgC,WAAhC,CA5KQ,CAyLnBtF,OAAQA,CAzLW,CAqMnBwG,IAAKA,QAAQ,CAACC,CAAD,CAAQ,CACnBX,CAAA/K,KAAA,CAAe0L,CAAf,CACA,OAAO,KAFY,CArMF,CA2MjBpB,EAAJ,EACErF,CAAA,CAAOqF,CAAP,CAGF,OAAOO,EAlO+B,CAAjC,CAXwC,CAvDP,CAArC,CAd0B,CAwdnCc,QAASA,GAAkB,CAACjF,CAAD,CAAU,CACnC7J,CAAA,CAAO6J,CAAP,CAAgB,CACd,UAAa5B,EADC,CAEd,KAAQtF,EAFM,CAGd,OAAU3C,CAHI;AAId,MAASG,EAJK,CAKd,OAAU6D,EALI,CAMd,QAAWsC,CANG,CAOd,QAAWpI,CAPG,CAQd,SAAYkL,EARE,CASd,KAAQzI,CATM,CAUd,KAAQ+D,EAVM,CAWd,OAAUO,EAXI,CAYd,SAAYI,EAZE,CAad,SAAYzE,EAbE,CAcd,YAAeG,CAdD,CAed,UAAaC,CAfC,CAgBd,SAAYhD,CAhBE,CAiBd,WAAcM,CAjBA,CAkBd,SAAYsB,CAlBE,CAmBd,SAAYsB,CAnBE,CAoBd,UAAaQ,EApBC,CAqBd,QAAWzD,CArBG,CAsBd,QAAW8Q,EAtBG,CAuBd,OAAU5N,EAvBI,CAwBd,UAAakB,CAxBC,CAyBd,UAAa2M,EAzBC,CA0Bd,UAAa,CAACC,QAAS,CAAV,CA1BC,CA2Bd,eAAkB5E,EA3BJ,CA4Bd,SAAY7M,CA5BE,CA6Bd,MAAS0R,EA7BK,CA8Bd,oBAAuBhF,EA9BT,CAAhB,CAiCAiF,GAAA,CAAgBhC,EAAA,CAAkB9P,CAAlB,CAChB,IAAI,CACF8R,EAAA,CAAc,UAAd,CADE,CAEF,MAAO1I,CAAP,CAAU,CACV0I,EAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAxB,SAAA,CAAuC,SAAvC,CAAkDyB,EAAlD,CADU,CAIZD,EAAA,CAAc,IAAd,CAAoB,CAAC,UAAD,CAApB,CAAkC,CAAC,UAAD,CAChCE,QAAiB,CAACpG,CAAD,CAAW,CAE1BA,CAAA0E,SAAA,CAAkB,CAChB2B,cAAeC,EADC,CAAlB,CAGAtG,EAAA0E,SAAA,CAAkB,UAAlB;AAA8B6B,EAA9B,CAAAb,UAAA,CACY,CACNc,EAAGC,EADG,CAENC,MAAOC,EAFD,CAGNC,SAAUD,EAHJ,CAINE,KAAMC,EAJA,CAKNC,OAAQC,EALF,CAMNC,OAAQC,EANF,CAONC,MAAOC,EAPD,CAQNC,OAAQC,EARF,CASNC,OAAQC,EATF,CAUNC,WAAYC,EAVN,CAWNC,eAAgBC,EAXV,CAYNC,QAASC,EAZH,CAaNC,YAAaC,EAbP,CAcNC,WAAYC,EAdN,CAeNC,QAASC,EAfH,CAgBNC,aAAcC,EAhBR,CAiBNC,OAAQC,EAjBF,CAkBNC,OAAQC,EAlBF,CAmBNC,KAAMC,EAnBA,CAoBNC,UAAWC,EApBL,CAqBNC,OAAQC,EArBF,CAsBNC,cAAeC,EAtBT,CAuBNC,YAAaC,EAvBP,CAwBNC,SAAUC,EAxBJ,CAyBNC,OAAQC,EAzBF,CA0BNC,QAASC,EA1BH,CA2BNC,SAAUC,EA3BJ,CA4BNC,aAAcC,EA5BR,CA6BNC,gBAAiBC,EA7BX,CA8BNC,UAAWC,EA9BL,CA+BNC,aAAcC,EA/BR,CAgCNC,QAASC,EAhCH,CAiCNC,OAAQC,EAjCF,CAkCNC,SAAUC,EAlCJ,CAmCNC,QAASC,EAnCH,CAoCNC,UAAWD,EApCL,CAqCNE,SAAUC,EArCJ,CAsCNC,WAAYD,EAtCN,CAuCNE,UAAWC,EAvCL,CAwCNC,YAAaD,EAxCP,CAyCNE,UAAWC,EAzCL;AA0CNC,YAAaD,EA1CP,CA2CNE,QAASC,EA3CH,CA4CNC,eAAgBC,EA5CV,CADZ,CAAAhG,UAAA,CA+CY,CACRmD,UAAW8C,EADH,CA/CZ,CAAAjG,UAAA,CAkDYkG,EAlDZ,CAAAlG,UAAA,CAmDYmG,EAnDZ,CAoDA7L,EAAA0E,SAAA,CAAkB,CAChBoH,cAAeC,EADC,CAEhBC,SAAUC,EAFM,CAGhBC,eAAgBC,EAHA,CAIhBC,gBAAiBC,EAJD,CAKhBC,SAAUC,EALM,CAMhBC,cAAeC,EANC,CAOhBC,YAAaC,EAPG,CAQhBC,UAAWC,EARK,CAShBC,kBAAmBC,EATH,CAUhBC,QAASC,EAVO,CAWhBC,aAAcC,EAXE,CAYhBC,UAAWC,EAZK,CAahBC,MAAOC,EAbS,CAchBC,qBAAsBC,EAdN,CAehBC,2BAA4BC,EAfZ,CAgBhBC,aAAcC,EAhBE,CAiBhBC,UAAWC,EAjBK,CAkBhBC,KAAMC,EAlBU,CAmBhBC,OAAQC,EAnBQ,CAoBhBC,WAAYC,EApBI,CAqBhBC,GAAIC,EArBY,CAsBhBC,IAAKC,EAtBW,CAuBhBC,KAAMC,EAvBU,CAwBhBC,aAAcC,EAxBE,CAyBhBC,SAAUC,EAzBM,CA0BhBC,eAAgBC,EA1BA,CA2BhBC,iBAAkBC,EA3BF;AA4BhBC,cAAeC,EA5BC,CA6BhBC,SAAUC,EA7BM,CA8BhBC,QAASC,EA9BO,CA+BhBC,MAAOC,EA/BS,CAgChBC,gBAAiBC,EAhCD,CAiChBC,SAAUC,EAjCM,CAkChBC,UAAWC,EAlCK,CAmChBC,eAAgBC,EAnCA,CAAlB,CAzD0B,CADI,CAAlC,CAzCmC,CA2RrCC,QAASA,GAAS,CAAC/Q,CAAD,CAAO,CACvB,MAAOA,EAAAxB,QAAA,CACGwS,EADH,CACyB,QAAQ,CAACC,CAAD,CAAI9O,CAAJ,CAAeE,CAAf,CAAuB6O,CAAvB,CAA+B,CACnE,MAAOA,EAAA,CAAS7O,CAAA8O,YAAA,EAAT,CAAgC9O,CAD4B,CADhE,CAAA7D,QAAA,CAIG4S,EAJH,CAIoB,OAJpB,CADgB,CAgCzBC,QAASA,GAAiB,CAAChY,CAAD,CAAO,CAG3B7D,CAAAA,CAAW6D,CAAA7D,SACf,OAAOA,EAAP,GAAoBC,EAApB,EAAyC,CAACD,CAA1C,EAnyBuB8b,CAmyBvB,GAAsD9b,CAJvB,CAOjC+b,QAASA,GAAmB,CAACjT,CAAD,CAAOxI,CAAP,CAAgB,CAAA,IACtC0b,CADsC,CACjC/Q,CADiC,CAEtCgR,EAAW3b,CAAA4b,uBAAA,EAF2B,CAGtCjN,EAAQ,EAEZ,IAfQkN,EAAA3W,KAAA,CAeasD,CAfb,CAeR,CAGO,CAELkT,CAAA,CAAMA,CAAN,EAAaC,CAAAG,YAAA,CAAqB9b,CAAA+b,cAAA,CAAsB,KAAtB,CAArB,CACbpR,EAAA,CAAM,CAACqR,EAAAC,KAAA,CAAqBzT,CAArB,CAAD,EAA+B,CAAC,EAAD,CAAK,EAAL,CAA/B,EAAyC,CAAzC,CAAAiE,YAAA,EACNyP,EAAA,CAAOC,EAAA,CAAQxR,CAAR,CAAP,EAAuBwR,EAAAC,SACvBV,EAAAW,UAAA,CAAgBH,CAAA,CAAK,CAAL,CAAhB,CAA0B1T,CAAAE,QAAA,CAAa4T,EAAb,CAA+B,WAA/B,CAA1B,CAAwEJ,CAAA,CAAK,CAAL,CAIxE,KADAxb,CACA;AADIwb,CAAA,CAAK,CAAL,CACJ,CAAOxb,CAAA,EAAP,CAAA,CACEgb,CAAA,CAAMA,CAAAa,UAGR5N,EAAA,CAAQxI,EAAA,CAAOwI,CAAP,CAAc+M,CAAAc,WAAd,CAERd,EAAA,CAAMC,CAAAc,WACNf,EAAAgB,YAAA,CAAkB,EAhBb,CAHP,IAEE/N,EAAA5J,KAAA,CAAW/E,CAAA2c,eAAA,CAAuBnU,CAAvB,CAAX,CAqBFmT,EAAAe,YAAA,CAAuB,EACvBf,EAAAU,UAAA,CAAqB,EACrBvc,EAAA,CAAQ6O,CAAR,CAAe,QAAQ,CAACpL,CAAD,CAAO,CAC5BoY,CAAAG,YAAA,CAAqBvY,CAArB,CAD4B,CAA9B,CAIA,OAAOoY,EAlCmC,CAqD5C7N,QAASA,EAAM,CAAC9J,CAAD,CAAU,CACvB,GAAIA,CAAJ,WAAuB8J,EAAvB,CACE,MAAO9J,EAGT,KAAI4Y,CAEAhd,EAAA,CAASoE,CAAT,CAAJ,GACEA,CACA,CADU6Y,CAAA,CAAK7Y,CAAL,CACV,CAAA4Y,CAAA,CAAc,CAAA,CAFhB,CAIA,IAAM,EAAA,IAAA,WAAgB9O,EAAhB,CAAN,CAA+B,CAC7B,GAAI8O,CAAJ,EAAwC,GAAxC,EAAmB5Y,CAAA2B,OAAA,CAAe,CAAf,CAAnB,CACE,KAAMmX,GAAA,CAAa,OAAb,CAAN,CAEF,MAAO,KAAIhP,CAAJ,CAAW9J,CAAX,CAJsB,CAO/B,GAAI4Y,CAAJ,CAAiB,CAjCjB5c,CAAA,CAAqBd,CACrB,KAAI6d,CAGF,EAAA,CADF,CAAKA,CAAL,CAAcC,EAAAf,KAAA,CAAuBzT,CAAvB,CAAd,EACS,CAACxI,CAAA+b,cAAA,CAAsBgB,CAAA,CAAO,CAAP,CAAtB,CAAD,CADT,CAIA,CAAKA,CAAL,CAActB,EAAA,CAAoBjT,CAApB,CAA0BxI,CAA1B,CAAd,EACS+c,CAAAP,WADT,CAIO,EAsBU,CACfS,EAAA,CAAe,IAAf,CAAqB,CAArB,CAnBqB,CAyBzBC,QAASA,GAAW,CAAClZ,CAAD,CAAU,CAC5B,MAAOA,EAAAmZ,UAAA,CAAkB,CAAA,CAAlB,CADqB,CAI9BC,QAASA,GAAY,CAACpZ,CAAD,CAAUqZ,CAAV,CAA2B,CACzCA,CAAL,EAAsBC,EAAA,CAAiBtZ,CAAjB,CAEtB,IAAIA,CAAAuZ,iBAAJ,CAEE,IADA,IAAIC;AAAcxZ,CAAAuZ,iBAAA,CAAyB,GAAzB,CAAlB,CACS7c,EAAI,CADb,CACgB+c,EAAID,CAAAhe,OAApB,CAAwCkB,CAAxC,CAA4C+c,CAA5C,CAA+C/c,CAAA,EAA/C,CACE4c,EAAA,CAAiBE,CAAA,CAAY9c,CAAZ,CAAjB,CAN0C,CAWhDgd,QAASA,GAAS,CAAC1Z,CAAD,CAAU2Z,CAAV,CAAgBnX,CAAhB,CAAoBoX,CAApB,CAAiC,CACjD,GAAIhb,CAAA,CAAUgb,CAAV,CAAJ,CAA4B,KAAMd,GAAA,CAAa,SAAb,CAAN,CAG5B,IAAItP,GADAqQ,CACArQ,CADesQ,EAAA,CAAmB9Z,CAAnB,CACfwJ,GAAyBqQ,CAAArQ,OAA7B,CACIuQ,EAASF,CAATE,EAAyBF,CAAAE,OAE7B,IAAKA,CAAL,CAEA,GAAKJ,CAAL,CAQE7d,CAAA,CAAQ6d,CAAA7Z,MAAA,CAAW,GAAX,CAAR,CAAyB,QAAQ,CAAC6Z,CAAD,CAAO,CACtC,GAAI/a,CAAA,CAAU4D,CAAV,CAAJ,CAAmB,CACjB,IAAIwX,EAAcxQ,CAAA,CAAOmQ,CAAP,CAClBzZ,GAAA,CAAY8Z,CAAZ,EAA2B,EAA3B,CAA+BxX,CAA/B,CACA,IAAIwX,CAAJ,EAAwC,CAAxC,CAAmBA,CAAAxe,OAAnB,CACE,MAJe,CAQGwE,CAtLtBia,oBAAA,CAsL+BN,CAtL/B,CAsLqCI,CAtLrC,CAAsC,CAAA,CAAtC,CAuLA,QAAOvQ,CAAA,CAAOmQ,CAAP,CAV+B,CAAxC,CARF,KACE,KAAKA,CAAL,GAAanQ,EAAb,CACe,UAGb,GAHImQ,CAGJ,EAFwB3Z,CAxKxBia,oBAAA,CAwKiCN,CAxKjC,CAwKuCI,CAxKvC,CAAsC,CAAA,CAAtC,CA0KA,CAAA,OAAOvQ,CAAA,CAAOmQ,CAAP,CAdsC,CAgCnDL,QAASA,GAAgB,CAACtZ,CAAD,CAAUkG,CAAV,CAAgB,CACvC,IAAIgU,EAAYla,CAAAma,MAAhB,CACIN,EAAeK,CAAfL,EAA4BO,EAAA,CAAQF,CAAR,CAE5BL,EAAJ,GACM3T,CAAJ,CACE,OAAO2T,CAAAvS,KAAA,CAAkBpB,CAAlB,CADT,EAKI2T,CAAAE,OAOJ,GANMF,CAAArQ,OAAAI,SAGJ,EAFEiQ,CAAAE,OAAA,CAAoB,EAApB,CAAwB,UAAxB,CAEF,CAAAL,EAAA,CAAU1Z,CAAV,CAGF,EADA,OAAOoa,EAAA,CAAQF,CAAR,CACP,CAAAla,CAAAma,MAAA;AAAgBhf,CAZhB,CADF,CAJuC,CAsBzC2e,QAASA,GAAkB,CAAC9Z,CAAD,CAAUqa,CAAV,CAA6B,CAAA,IAClDH,EAAYla,CAAAma,MADsC,CAElDN,EAAeK,CAAfL,EAA4BO,EAAA,CAAQF,CAAR,CAE5BG,EAAJ,EAA0BR,CAAAA,CAA1B,GACE7Z,CAAAma,MACA,CADgBD,CAChB,CA7MyB,EAAEI,EA6M3B,CAAAT,CAAA,CAAeO,EAAA,CAAQF,CAAR,CAAf,CAAoC,CAAC1Q,OAAQ,EAAT,CAAalC,KAAM,EAAnB,CAAuByS,OAAQ5e,CAA/B,CAFtC,CAKA,OAAO0e,EAT+C,CAaxDU,QAASA,GAAU,CAACva,CAAD,CAAU/D,CAAV,CAAeY,CAAf,CAAsB,CACvC,GAAI0a,EAAA,CAAkBvX,CAAlB,CAAJ,CAAgC,CAE9B,IAAIwa,EAAiB5b,CAAA,CAAU/B,CAAV,CAArB,CACI4d,EAAiB,CAACD,CAAlBC,EAAoCxe,CAApCwe,EAA2C,CAACjd,CAAA,CAASvB,CAAT,CADhD,CAEIye,EAAa,CAACze,CAEdqL,EAAAA,EADAuS,CACAvS,CADewS,EAAA,CAAmB9Z,CAAnB,CAA4B,CAACya,CAA7B,CACfnT,GAAuBuS,CAAAvS,KAE3B,IAAIkT,CAAJ,CACElT,CAAA,CAAKrL,CAAL,CAAA,CAAYY,CADd,KAEO,CACL,GAAI6d,CAAJ,CACE,MAAOpT,EAEP,IAAImT,CAAJ,CAEE,MAAOnT,EAAP,EAAeA,CAAA,CAAKrL,CAAL,CAEf2B,EAAA,CAAO0J,CAAP,CAAarL,CAAb,CARC,CAVuB,CADO,CA0BzC0e,QAASA,GAAc,CAAC3a,CAAD,CAAU4a,CAAV,CAAoB,CACzC,MAAK5a,EAAA2F,aAAL,CAEqC,EAFrC,CACQjB,CAAC,GAADA,EAAQ1E,CAAA2F,aAAA,CAAqB,OAArB,CAARjB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CAA4D,SAA5D,CAAuE,GAAvE,CAAArE,QAAA,CACI,GADJ,CACUua,CADV,CACqB,GADrB,CADR,CAAkC,CAAA,CADO,CAM3CC,QAASA,GAAiB,CAAC7a,CAAD,CAAU8a,CAAV,CAAsB,CAC1CA,CAAJ,EAAkB9a,CAAA+a,aAAlB,EACEjf,CAAA,CAAQgf,CAAAhb,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAACkb,CAAD,CAAW,CAChDhb,CAAA+a,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAC1BnU,CAAC,GAADA,EAAQ1E,CAAA2F,aAAA,CAAqB,OAArB,CAARjB;AAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACS,SADT,CACoB,GADpB,CAAAA,QAAA,CAES,GAFT,CAEemU,CAAA,CAAKmC,CAAL,CAFf,CAEgC,GAFhC,CAEqC,GAFrC,CAD0B,CAA9B,CADgD,CAAlD,CAF4C,CAYhDC,QAASA,GAAc,CAACjb,CAAD,CAAU8a,CAAV,CAAsB,CAC3C,GAAIA,CAAJ,EAAkB9a,CAAA+a,aAAlB,CAAwC,CACtC,IAAIG,EAAkBxW,CAAC,GAADA,EAAQ1E,CAAA2F,aAAA,CAAqB,OAArB,CAARjB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACW,SADX,CACsB,GADtB,CAGtB5I,EAAA,CAAQgf,CAAAhb,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAACkb,CAAD,CAAW,CAChDA,CAAA,CAAWnC,CAAA,CAAKmC,CAAL,CAC4C,GAAvD,GAAIE,CAAA7a,QAAA,CAAwB,GAAxB,CAA8B2a,CAA9B,CAAyC,GAAzC,CAAJ,GACEE,CADF,EACqBF,CADrB,CACgC,GADhC,CAFgD,CAAlD,CAOAhb,EAAA+a,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAAKqC,CAAL,CAA9B,CAXsC,CADG,CAiB7CjC,QAASA,GAAc,CAACkC,CAAD,CAAOC,CAAP,CAAiB,CAGtC,GAAIA,CAAJ,CAGE,GAAIA,CAAA1f,SAAJ,CACEyf,CAAA,CAAKA,CAAA3f,OAAA,EAAL,CAAA,CAAsB4f,CADxB,KAEO,CACL,IAAI5f,EAAS4f,CAAA5f,OAGb,IAAsB,QAAtB,GAAI,MAAOA,EAAX,EAAkC4f,CAAAngB,OAAlC,GAAsDmgB,CAAtD,CACE,IAAI5f,CAAJ,CACE,IAAS,IAAAkB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBlB,CAApB,CAA4BkB,CAAA,EAA5B,CACEye,CAAA,CAAKA,CAAA3f,OAAA,EAAL,CAAA,CAAsB4f,CAAA,CAAS1e,CAAT,CAF1B,CADF,IAOEye,EAAA,CAAKA,CAAA3f,OAAA,EAAL,CAAA,CAAsB4f,CAXnB,CAR6B,CA0BxCC,QAASA,GAAgB,CAACrb,CAAD,CAAUkG,CAAV,CAAgB,CACvC,MAAOoV,GAAA,CAAoBtb,CAApB,CAA6B,GAA7B,EAAoCkG,CAApC,EAA4C,cAA5C;AAA8D,YAA9D,CADgC,CAIzCoV,QAASA,GAAmB,CAACtb,CAAD,CAAUkG,CAAV,CAAgBrJ,CAAhB,CAAuB,CAjiC1B2a,CAoiCvB,EAAIxX,CAAAtE,SAAJ,GACEsE,CADF,CACYA,CAAAub,gBADZ,CAKA,KAFIC,CAEJ,CAFY3f,CAAA,CAAQqK,CAAR,CAAA,CAAgBA,CAAhB,CAAuB,CAACA,CAAD,CAEnC,CAAOlG,CAAP,CAAA,CAAgB,CACd,IADc,IACLtD,EAAI,CADC,CACEa,EAAKie,CAAAhgB,OAArB,CAAmCkB,CAAnC,CAAuCa,CAAvC,CAA2Cb,CAAA,EAA3C,CACE,IAAKG,CAAL,CAAaqH,CAAAoD,KAAA,CAAYtH,CAAZ,CAAqBwb,CAAA,CAAM9e,CAAN,CAArB,CAAb,IAAiDvB,CAAjD,CAA4D,MAAO0B,EAMrEmD,EAAA,CAAUA,CAAAyb,WAAV,EAhjC8BC,EAgjC9B,GAAiC1b,CAAAtE,SAAjC,EAAqFsE,CAAA2b,KARvE,CARiC,CAoBnDC,QAASA,GAAW,CAAC5b,CAAD,CAAU,CAE5B,IADAoZ,EAAA,CAAapZ,CAAb,CAAsB,CAAA,CAAtB,CACA,CAAOA,CAAAyY,WAAP,CAAA,CACEzY,CAAA6b,YAAA,CAAoB7b,CAAAyY,WAApB,CAH0B,CAO9BqD,QAASA,GAAY,CAAC9b,CAAD,CAAU+b,CAAV,CAAoB,CAClCA,CAAL,EAAe3C,EAAA,CAAapZ,CAAb,CACf,KAAI5B,EAAS4B,CAAAyb,WACTrd,EAAJ,EAAYA,CAAAyd,YAAA,CAAmB7b,CAAnB,CAH2B,CAOzCgc,QAASA,GAAoB,CAACC,CAAD,CAASC,CAAT,CAAc,CACzCA,CAAA,CAAMA,CAAN,EAAajhB,CACb,IAAgC,UAAhC,GAAIihB,CAAAhhB,SAAAihB,WAAJ,CAIED,CAAAE,WAAA,CAAeH,CAAf,CAJF,KAOE/X,EAAA,CAAOgY,CAAP,CAAAlT,GAAA,CAAe,MAAf,CAAuBiT,CAAvB,CATuC,CA0E3CI,QAASA,GAAkB,CAACrc,CAAD,CAAUkG,CAAV,CAAgB,CAEzC,IAAIoW,EAAcC,EAAA,CAAarW,CAAAuC,YAAA,EAAb,CAGlB,OAAO6T,EAAP,EAAsBE,EAAA,CAAiBzc,EAAA,CAAUC,CAAV,CAAjB,CAAtB,EAA8Dsc,CALrB,CAQ3CG,QAASA,GAAkB,CAACzc,CAAD;AAAUkG,CAAV,CAAgB,CACzC,IAAI1G,EAAWQ,CAAAR,SACf,QAAqB,OAArB,GAAQA,CAAR,EAA6C,UAA7C,GAAgCA,CAAhC,GAA4Dkd,EAAA,CAAaxW,CAAb,CAFnB,CAiL3CyW,QAASA,GAAkB,CAAC3c,CAAD,CAAUwJ,CAAV,CAAkB,CAC3C,IAAIoT,EAAeA,QAAQ,CAACC,CAAD,CAAQlD,CAAR,CAAc,CAEvCkD,CAAAC,mBAAA,CAA2BC,QAAQ,EAAG,CACpC,MAAOF,EAAAG,iBAD6B,CAItC,KAAIC,EAAWzT,CAAA,CAAOmQ,CAAP,EAAekD,CAAAlD,KAAf,CAAf,CACIuD,EAAiBD,CAAA,CAAWA,CAAAzhB,OAAX,CAA6B,CAElD,IAAK0hB,CAAL,CAAA,CAEA,GAAIve,CAAA,CAAYke,CAAAM,4BAAZ,CAAJ,CAAoD,CAClD,IAAIC,EAAmCP,CAAAQ,yBACvCR,EAAAQ,yBAAA,CAAiCC,QAAQ,EAAG,CAC1CT,CAAAM,4BAAA,CAAoC,CAAA,CAEhCN,EAAAU,gBAAJ,EACEV,CAAAU,gBAAA,EAGEH,EAAJ,EACEA,CAAAhhB,KAAA,CAAsCygB,CAAtC,CARwC,CAFM,CAepDA,CAAAW,8BAAA,CAAsCC,QAAQ,EAAG,CAC/C,MAA6C,CAAA,CAA7C,GAAOZ,CAAAM,4BADwC,CAK3B,EAAtB,CAAKD,CAAL,GACED,CADF,CACavb,EAAA,CAAYub,CAAZ,CADb,CAIA,KAAS,IAAAvgB;AAAI,CAAb,CAAgBA,CAAhB,CAAoBwgB,CAApB,CAAoCxgB,CAAA,EAApC,CACOmgB,CAAAW,8BAAA,EAAL,EACEP,CAAA,CAASvgB,CAAT,CAAAN,KAAA,CAAiB4D,CAAjB,CAA0B6c,CAA1B,CA5BJ,CATuC,CA4CzCD,EAAAlT,KAAA,CAAoB1J,CACpB,OAAO4c,EA9CoC,CAwS7ChG,QAASA,GAAgB,EAAG,CAC1B,IAAA8G,KAAA,CAAYC,QAAiB,EAAG,CAC9B,MAAO/f,EAAA,CAAOkM,CAAP,CAAe,CACpB8T,SAAUA,QAAQ,CAACre,CAAD,CAAOse,CAAP,CAAgB,CAC5Bte,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAOob,GAAA,CAAepb,CAAf,CAAqBse,CAArB,CAFyB,CADd,CAKpBC,SAAUA,QAAQ,CAACve,CAAD,CAAOse,CAAP,CAAgB,CAC5Bte,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO0b,GAAA,CAAe1b,CAAf,CAAqBse,CAArB,CAFyB,CALd,CASpBE,YAAaA,QAAQ,CAACxe,CAAD,CAAOse,CAAP,CAAgB,CAC/Bte,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAOsb,GAAA,CAAkBtb,CAAlB,CAAwBse,CAAxB,CAF4B,CATjB,CAAf,CADuB,CADN,CA+B5BG,QAASA,GAAO,CAAC1iB,CAAD,CAAM2iB,CAAN,CAAiB,CAC/B,IAAIhiB,EAAMX,CAANW,EAAaX,CAAA4B,UAEjB,IAAIjB,CAAJ,CAIE,MAHmB,UAGZA,GAHH,MAAOA,EAGJA,GAFLA,CAEKA,CAFCX,CAAA4B,UAAA,EAEDjB,EAAAA,CAGLiiB,EAAAA,CAAU,MAAO5iB,EAOrB,OALEW,EAKF,CANe,UAAf,EAAIiiB,CAAJ,EAAyC,QAAzC,EAA8BA,CAA9B,EAA6D,IAA7D,GAAqD5iB,CAArD,CACQA,CAAA4B,UADR,CACwBghB,CADxB,CACkC,GADlC,CACwC,CAACD,CAAD,EAAcnhB,EAAd,GADxC,CAGQohB,CAHR,CAGkB,GAHlB,CAGwB5iB,CAdO,CAuBjC6iB,QAASA,GAAO,CAAChe,CAAD,CAAQie,CAAR,CAAqB,CACnC,GAAIA,CAAJ,CAAiB,CACf,IAAIrhB;AAAM,CACV,KAAAD,QAAA,CAAeuhB,QAAQ,EAAG,CACxB,MAAO,EAAEthB,CADe,CAFX,CAMjBjB,CAAA,CAAQqE,CAAR,CAAe,IAAAme,IAAf,CAAyB,IAAzB,CAPmC,CAgHrCC,QAASA,GAAM,CAAC/b,CAAD,CAAK,CAKlB,MAAA,CADIgc,CACJ,CAFahc,CAAAxD,SAAA,EAAA0F,QAAA+Z,CAAsBC,EAAtBD,CAAsC,EAAtCA,CACFld,MAAA,CAAaod,EAAb,CACX,EACS,WADT,CACuBja,CAAC8Z,CAAA,CAAK,CAAL,CAAD9Z,EAAY,EAAZA,SAAA,CAAwB,WAAxB,CAAqC,GAArC,CADvB,CACmE,GADnE,CAGO,IARW,CAkiBpBsC,QAASA,GAAc,CAAC4X,CAAD,CAAgBtY,CAAhB,CAA0B,CAuC/CuY,QAASA,EAAa,CAACC,CAAD,CAAW,CAC/B,MAAO,SAAQ,CAAC7iB,CAAD,CAAMY,CAAN,CAAa,CAC1B,GAAIW,CAAA,CAASvB,CAAT,CAAJ,CACEH,CAAA,CAAQG,CAAR,CAAaU,EAAA,CAAcmiB,CAAd,CAAb,CADF,KAGE,OAAOA,EAAA,CAAS7iB,CAAT,CAAcY,CAAd,CAJiB,CADG,CAUjC0O,QAASA,EAAQ,CAACrF,CAAD,CAAO6Y,CAAP,CAAkB,CACjC3U,EAAA,CAAwBlE,CAAxB,CAA8B,SAA9B,CACA,IAAIhK,CAAA,CAAW6iB,CAAX,CAAJ,EAA6BljB,CAAA,CAAQkjB,CAAR,CAA7B,CACEA,CAAA,CAAYC,CAAAC,YAAA,CAA6BF,CAA7B,CAEd,IAAKrB,CAAAqB,CAAArB,KAAL,CACE,KAAMxS,GAAA,CAAgB,MAAhB,CAA2EhF,CAA3E,CAAN,CAEF,MAAOgZ,EAAA,CAAchZ,CAAd,CAtDYiZ,UAsDZ,CAAP,CAA8CJ,CARb,CAWnCK,QAASA,EAAkB,CAAClZ,CAAD,CAAO+E,CAAP,CAAgB,CACzC,MAAOoU,SAA4B,EAAG,CACpC,IAAIve,EAASwe,CAAArY,OAAA,CAAwBgE,CAAxB,CAAiC,IAAjC,CACb,IAAItM,CAAA,CAAYmC,CAAZ,CAAJ,CACE,KAAMoK,GAAA,CAAgB,OAAhB,CAAyFhF,CAAzF,CAAN,CAEF,MAAOpF,EAL6B,CADG,CAU3CmK,QAASA,EAAO,CAAC/E,CAAD,CAAOqZ,CAAP,CAAkBC,CAAlB,CAA2B,CACzC,MAAOjU,EAAA,CAASrF,CAAT;AAAe,CACpBwX,KAAkB,CAAA,CAAZ,GAAA8B,CAAA,CAAoBJ,CAAA,CAAmBlZ,CAAnB,CAAyBqZ,CAAzB,CAApB,CAA0DA,CAD5C,CAAf,CADkC,CAiC3CE,QAASA,EAAW,CAACb,CAAD,CAAgB,CAAA,IAC9B9S,EAAY,EADkB,CACd4T,CACpB5jB,EAAA,CAAQ8iB,CAAR,CAAuB,QAAQ,CAAC7Y,CAAD,CAAS,CAItC4Z,QAASA,EAAc,CAACjU,CAAD,CAAQ,CAAA,IACzBhP,CADyB,CACtBa,CACFb,EAAA,CAAI,CAAT,KAAYa,CAAZ,CAAiBmO,CAAAlQ,OAAjB,CAA+BkB,CAA/B,CAAmCa,CAAnC,CAAuCb,CAAA,EAAvC,CAA4C,CAAA,IACtCkjB,EAAalU,CAAA,CAAMhP,CAAN,CADyB,CAEtC6O,EAAWyT,CAAA7W,IAAA,CAAqByX,CAAA,CAAW,CAAX,CAArB,CAEfrU,EAAA,CAASqU,CAAA,CAAW,CAAX,CAAT,CAAAjd,MAAA,CAA8B4I,CAA9B,CAAwCqU,CAAA,CAAW,CAAX,CAAxC,CAJ0C,CAFf,CAH/B,GAAI,CAAAC,CAAA1X,IAAA,CAAkBpC,CAAlB,CAAJ,CAAA,CACA8Z,CAAAvB,IAAA,CAAkBvY,CAAlB,CAA0B,CAAA,CAA1B,CAYA,IAAI,CACEnK,CAAA,CAASmK,CAAT,CAAJ,EACE2Z,CAGA,CAHW3S,EAAA,CAAchH,CAAd,CAGX,CAFA+F,CAEA,CAFYA,CAAA3J,OAAA,CAAiBsd,CAAA,CAAYC,CAAAtU,SAAZ,CAAjB,CAAAjJ,OAAA,CAAwDud,CAAAzT,WAAxD,CAEZ,CADA0T,CAAA,CAAeD,CAAA3T,aAAf,CACA,CAAA4T,CAAA,CAAeD,CAAA1T,cAAf,CAJF,EAKW9P,CAAA,CAAW6J,CAAX,CAAJ,CACH+F,CAAA/K,KAAA,CAAeie,CAAA/X,OAAA,CAAwBlB,CAAxB,CAAf,CADG,CAEIlK,CAAA,CAAQkK,CAAR,CAAJ,CACH+F,CAAA/K,KAAA,CAAeie,CAAA/X,OAAA,CAAwBlB,CAAxB,CAAf,CADG,CAGLmE,EAAA,CAAYnE,CAAZ,CAAoB,QAApB,CAXA,CAaF,MAAO1B,CAAP,CAAU,CAYV,KAXIxI,EAAA,CAAQkK,CAAR,CAWE,GAVJA,CAUI,CAVKA,CAAA,CAAOA,CAAAvK,OAAP,CAAuB,CAAvB,CAUL,EARF6I,CAAAyb,QAQE,EARWzb,CAAA0b,MAQX,EARqD,EAQrD,EARsB1b,CAAA0b,MAAA1f,QAAA,CAAgBgE,CAAAyb,QAAhB,CAQtB,GAFJzb,CAEI,CAFAA,CAAAyb,QAEA,CAFY,IAEZ,CAFmBzb,CAAA0b,MAEnB,EAAA7U,EAAA,CAAgB,UAAhB,CACInF,CADJ,CACY1B,CAAA0b,MADZ,EACuB1b,CAAAyb,QADvB;AACoCzb,CADpC,CAAN,CAZU,CA1BZ,CADsC,CAAxC,CA2CA,OAAOyH,EA7C2B,CAoDpCkU,QAASA,EAAsB,CAACC,CAAD,CAAQhV,CAAR,CAAiB,CAE9CiV,QAASA,EAAU,CAACC,CAAD,CAAcC,CAAd,CAAsB,CACvC,GAAIH,CAAA9jB,eAAA,CAAqBgkB,CAArB,CAAJ,CAAuC,CACrC,GAAIF,CAAA,CAAME,CAAN,CAAJ,GAA2BE,CAA3B,CACE,KAAMnV,GAAA,CAAgB,MAAhB,CACIiV,CADJ,CACkB,MADlB,CAC2B7V,CAAAlF,KAAA,CAAU,MAAV,CAD3B,CAAN,CAGF,MAAO6a,EAAA,CAAME,CAAN,CAL8B,CAOrC,GAAI,CAGF,MAFA7V,EAAA1D,QAAA,CAAauZ,CAAb,CAEO,CADPF,CAAA,CAAME,CAAN,CACO,CADcE,CACd,CAAAJ,CAAA,CAAME,CAAN,CAAA,CAAqBlV,CAAA,CAAQkV,CAAR,CAAqBC,CAArB,CAH1B,CAIF,MAAOE,CAAP,CAAY,CAIZ,KAHIL,EAAA,CAAME,CAAN,CAGEG,GAHqBD,CAGrBC,EAFJ,OAAOL,CAAA,CAAME,CAAN,CAEHG,CAAAA,CAAN,CAJY,CAJd,OASU,CACRhW,CAAAiW,MAAA,EADQ,CAjB2B,CAuBzCtZ,QAASA,EAAM,CAACzE,CAAD,CAAKD,CAAL,CAAWie,CAAX,CAAmBL,CAAnB,CAAgC,CACvB,QAAtB,GAAI,MAAOK,EAAX,GACEL,CACA,CADcK,CACd,CAAAA,CAAA,CAAS,IAFX,CAD6C,KAMzChC,EAAO,EANkC,CAOzCiC,EAAUzZ,EAAA0Z,WAAA,CAA0Ble,CAA1B,CAA8B8D,CAA9B,CAAwC6Z,CAAxC,CAP+B,CAQzC3kB,CARyC,CAQjCkB,CARiC,CASzCT,CAECS,EAAA,CAAI,CAAT,KAAYlB,CAAZ,CAAqBilB,CAAAjlB,OAArB,CAAqCkB,CAArC,CAAyClB,CAAzC,CAAiDkB,CAAA,EAAjD,CAAsD,CACpDT,CAAA,CAAMwkB,CAAA,CAAQ/jB,CAAR,CACN,IAAmB,QAAnB,GAAI,MAAOT,EAAX,CACE,KAAMiP,GAAA,CAAgB,MAAhB,CACyEjP,CADzE,CAAN,CAGFuiB,CAAAzd,KAAA,CACEyf,CAAA,EAAUA,CAAArkB,eAAA,CAAsBF,CAAtB,CAAV,CACEukB,CAAA,CAAOvkB,CAAP,CADF,CAEEikB,CAAA,CAAWjkB,CAAX,CAAgBkkB,CAAhB,CAHJ,CANoD,CAYlDtkB,CAAA,CAAQ2G,CAAR,CAAJ,GACEA,CADF,CACOA,CAAA,CAAGhH,CAAH,CADP,CAMA,OAAOgH,EAAAG,MAAA,CAASJ,CAAT,CAAeic,CAAf,CA7BsC,CA0C/C,MAAO,CACLvX,OAAQA,CADH;AAELgY,YAZFA,QAAoB,CAAC0B,CAAD,CAAOH,CAAP,CAAeL,CAAf,CAA4B,CAI9C,IAAIS,EAAWnlB,MAAA6C,OAAA,CAAcuiB,CAAChlB,CAAA,CAAQ8kB,CAAR,CAAA,CAAgBA,CAAA,CAAKA,CAAAnlB,OAAL,CAAmB,CAAnB,CAAhB,CAAwCmlB,CAAzCE,WAAd,EAA0E,IAA1E,CACXC,EAAAA,CAAgB7Z,CAAA,CAAO0Z,CAAP,CAAaC,CAAb,CAAuBJ,CAAvB,CAA+BL,CAA/B,CAEpB,OAAO3iB,EAAA,CAASsjB,CAAT,CAAA,EAA2B5kB,CAAA,CAAW4kB,CAAX,CAA3B,CAAuDA,CAAvD,CAAuEF,CAPhC,CAUzC,CAGLzY,IAAK+X,CAHA,CAILa,SAAU/Z,EAAA0Z,WAJL,CAKLM,IAAKA,QAAQ,CAAC9a,CAAD,CAAO,CAClB,MAAOgZ,EAAA/iB,eAAA,CAA6B+J,CAA7B,CAjOQiZ,UAiOR,CAAP,EAA8Dc,CAAA9jB,eAAA,CAAqB+J,CAArB,CAD5C,CALf,CAnEuC,CA1JhDI,CAAA,CAAyB,CAAA,CAAzB,GAAYA,CADmC,KAE3C+Z,EAAgB,EAF2B,CAI3C/V,EAAO,EAJoC,CAK3CuV,EAAgB,IAAI1B,EAAJ,CAAY,EAAZ,CAAgB,CAAA,CAAhB,CAL2B,CAM3Ce,EAAgB,CACdrY,SAAU,CACN0E,SAAUsT,CAAA,CAActT,CAAd,CADJ,CAENN,QAAS4T,CAAA,CAAc5T,CAAd,CAFH,CAGNiB,QAAS2S,CAAA,CAkEnB3S,QAAgB,CAAChG,CAAD,CAAO/E,CAAP,CAAoB,CAClC,MAAO8J,EAAA,CAAQ/E,CAAR,CAAc,CAAC,WAAD,CAAc,QAAQ,CAAC+a,CAAD,CAAY,CACrD,MAAOA,EAAAhC,YAAA,CAAsB9d,CAAtB,CAD8C,CAAlC,CAAd,CAD2B,CAlEjB,CAHH,CAINtE,MAAOgiB,CAAA,CAuEjBhiB,QAAc,CAACqJ,CAAD,CAAOrF,CAAP,CAAY,CAAE,MAAOoK,EAAA,CAAQ/E,CAAR,CAAcxH,EAAA,CAAQmC,CAAR,CAAd,CAA4B,CAAA,CAA5B,CAAT,CAvET,CAJD,CAKNsL,SAAU0S,CAAA,CAwEpB1S,QAAiB,CAACjG,CAAD,CAAOrJ,CAAP,CAAc,CAC7BuN,EAAA,CAAwBlE,CAAxB,CAA8B,UAA9B,CACAgZ,EAAA,CAAchZ,CAAd,CAAA,CAAsBrJ,CACtBqkB,EAAA,CAAchb,CAAd,CAAA,CAAsBrJ,CAHO,CAxEX,CALJ;AAMNuP,UA6EVA,QAAkB,CAAC+T,CAAD,CAAcgB,CAAd,CAAuB,CAAA,IACnCC,EAAepC,CAAA7W,IAAA,CAAqBgY,CAArB,CAxFAhB,UAwFA,CADoB,CAEnCkC,EAAWD,CAAA1D,KAEf0D,EAAA1D,KAAA,CAAoB4D,QAAQ,EAAG,CAC7B,IAAIC,EAAejC,CAAArY,OAAA,CAAwBoa,CAAxB,CAAkCD,CAAlC,CACnB,OAAO9B,EAAArY,OAAA,CAAwBka,CAAxB,CAAiC,IAAjC,CAAuC,CAACK,UAAWD,CAAZ,CAAvC,CAFsB,CAJQ,CAnFzB,CADI,CAN2B,CAgB3CvC,EAAoBE,CAAA+B,UAApBjC,CACIgB,CAAA,CAAuBd,CAAvB,CAAsC,QAAQ,CAACiB,CAAD,CAAcC,CAAd,CAAsB,CAC9D3Y,EAAA7L,SAAA,CAAiBwkB,CAAjB,CAAJ,EACE9V,CAAAvJ,KAAA,CAAUqf,CAAV,CAEF,MAAMlV,GAAA,CAAgB,MAAhB,CAAiDZ,CAAAlF,KAAA,CAAU,MAAV,CAAjD,CAAN,CAJkE,CAApE,CAjBuC,CAuB3C8b,EAAgB,EAvB2B,CAwB3C5B,EAAoB4B,CAAAD,UAApB3B,CACIU,CAAA,CAAuBkB,CAAvB,CAAsC,QAAQ,CAACf,CAAD,CAAcC,CAAd,CAAsB,CAClE,IAAI7U,EAAWyT,CAAA7W,IAAA,CAAqBgY,CAArB,CAvBJhB,UAuBI,CAAmDiB,CAAnD,CACf,OAAOd,EAAArY,OAAA,CAAwBsE,CAAAmS,KAAxB,CAAuCnS,CAAvC,CAAiDpQ,CAAjD,CAA4DglB,CAA5D,CAF2D,CAApE,CAMRrkB,EAAA,CAAQ2jB,CAAA,CAAYb,CAAZ,CAAR,CAAoC,QAAQ,CAACpc,CAAD,CAAK,CAAE8c,CAAArY,OAAA,CAAwBzE,CAAxB,EAA8BjE,CAA9B,CAAF,CAAjD,CAEA,OAAO+gB,EAjCwC,CAoPjD1M,QAASA,GAAqB,EAAG,CAE/B,IAAI6O,EAAuB,CAAA,CAe3B,KAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrCF,CAAA,CAAuB,CAAA,CADc,CAiJvC,KAAA/D,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ,CAAyB,YAAzB,CAAuC,QAAQ,CAACrH,CAAD,CAAU1B,CAAV,CAAqBM,CAArB,CAAiC,CAM1F2M,QAASA,EAAc,CAACC,CAAD,CAAO,CAC5B,IAAI/gB;AAAS,IACbghB,MAAAjB,UAAAkB,KAAA3lB,KAAA,CAA0BylB,CAA1B,CAAgC,QAAQ,CAAC7hB,CAAD,CAAU,CAChD,GAA2B,GAA3B,GAAID,EAAA,CAAUC,CAAV,CAAJ,CAEE,MADAc,EACO,CADEd,CACF,CAAA,CAAA,CAHuC,CAAlD,CAMA,OAAOc,EARqB,CAgC9BkhB,QAASA,EAAQ,CAACtY,CAAD,CAAO,CACtB,GAAIA,CAAJ,CAAU,CACRA,CAAAuY,eAAA,EAEA,KAAI7K,CAvBFA,EAAAA,CAAS8K,CAAAC,QAETjmB,EAAA,CAAWkb,CAAX,CAAJ,CACEA,CADF,CACWA,CAAA,EADX,CAEW9X,EAAA,CAAU8X,CAAV,CAAJ,EACD1N,CAGF,CAHS0N,CAAA,CAAO,CAAP,CAGT,CAAAA,CAAA,CADqB,OAAvB,GADYf,CAAA+L,iBAAApU,CAAyBtE,CAAzBsE,CACRqU,SAAJ,CACW,CADX,CAGW3Y,CAAA4Y,sBAAA,EAAAC,OANN,EAQKzjB,CAAA,CAASsY,CAAT,CARL,GASLA,CATK,CASI,CATJ,CAqBDA,EAAJ,GAcMoL,CACJ,CADc9Y,CAAA4Y,sBAAA,EAAAG,IACd,CAAApM,CAAAqM,SAAA,CAAiB,CAAjB,CAAoBF,CAApB,CAA8BpL,CAA9B,CAfF,CALQ,CAAV,IAuBEf,EAAA2L,SAAA,CAAiB,CAAjB,CAAoB,CAApB,CAxBoB,CA4BxBE,QAASA,EAAM,CAACS,CAAD,CAAO,CACpBA,CAAA,CAAO/mB,CAAA,CAAS+mB,CAAT,CAAA,CAAiBA,CAAjB,CAAwBhO,CAAAgO,KAAA,EAC/B,KAAIC,CAGCD,EAAL,CAGK,CAAKC,CAAL,CAAW1nB,CAAA2nB,eAAA,CAAwBF,CAAxB,CAAX,EAA2CX,CAAA,CAASY,CAAT,CAA3C,CAGA,CAAKA,CAAL,CAAWhB,CAAA,CAAe1mB,CAAA4nB,kBAAA,CAA2BH,CAA3B,CAAf,CAAX,EAA8DX,CAAA,CAASY,CAAT,CAA9D,CAGa,KAHb,GAGID,CAHJ,EAGoBX,CAAA,CAAS,IAAT,CATzB,CAAWA,CAAA,CAAS,IAAT,CALS,CAjEtB,IAAI9mB,EAAWmb,CAAAnb,SAoFXumB,EAAJ,EACExM,CAAA7V,OAAA,CAAkB2jB,QAAwB,EAAG,CAAC,MAAOpO,EAAAgO,KAAA,EAAR,CAA7C;AACEK,QAA8B,CAACC,CAAD,CAASC,CAAT,CAAiB,CAEzCD,CAAJ,GAAeC,CAAf,EAAoC,EAApC,GAAyBD,CAAzB,EAEAjH,EAAA,CAAqB,QAAQ,EAAG,CAC9B/G,CAAA9V,WAAA,CAAsB+iB,CAAtB,CAD8B,CAAhC,CAJ6C,CADjD,CAWF,OAAOA,EAjGmF,CAAhF,CAlKmB,CA2QjCiB,QAASA,GAAY,CAAC9V,CAAD,CAAG+V,CAAH,CAAM,CACzB,GAAK/V,CAAAA,CAAL,EAAW+V,CAAAA,CAAX,CAAc,MAAO,EACrB,IAAK/V,CAAAA,CAAL,CAAQ,MAAO+V,EACf,IAAKA,CAAAA,CAAL,CAAQ,MAAO/V,EACXxR,EAAA,CAAQwR,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAAjI,KAAA,CAAO,GAAP,CAApB,CACIvJ,EAAA,CAAQunB,CAAR,CAAJ,GAAgBA,CAAhB,CAAoBA,CAAAhe,KAAA,CAAO,GAAP,CAApB,CACA,OAAOiI,EAAP,CAAW,GAAX,CAAiB+V,CANQ,CAkB3BC,QAASA,GAAY,CAACxF,CAAD,CAAU,CACzBjiB,CAAA,CAASiiB,CAAT,CAAJ,GACEA,CADF,CACYA,CAAA/d,MAAA,CAAc,GAAd,CADZ,CAMA,KAAIxE,EAAM4G,EAAA,EACVpG,EAAA,CAAQ+hB,CAAR,CAAiB,QAAQ,CAACyF,CAAD,CAAQ,CAG3BA,CAAA9nB,OAAJ,GACEF,CAAA,CAAIgoB,CAAJ,CADF,CACe,CAAA,CADf,CAH+B,CAAjC,CAOA,OAAOhoB,EAfsB,CAyB/BioB,QAASA,GAAqB,CAACC,CAAD,CAAU,CACtC,MAAOhmB,EAAA,CAASgmB,CAAT,CAAA,CACDA,CADC,CAED,EAHgC,CA8hBxC9M,QAASA,GAAuB,EAAG,CACjC,IAAAgH,KAAA,CAAY,CAAC,OAAD,CAAU,UAAV,CAAsB,QAAQ,CAACnH,CAAD,CAAQJ,CAAR,CAAkB,CAC1D,MAAOI,EAAAkN,UAAA,CACH,QAAQ,CAACjhB,CAAD,CAAK,CAAE,MAAO+T,EAAA,CAAM/T,CAAN,CAAT,CADV,CAEH,QAAQ,CAACA,CAAD,CAAK,CACb,MAAO2T,EAAA,CAAS3T,CAAT,CAAa,CAAb,CAAgB,CAAA,CAAhB,CADM,CAHyC,CAAhD,CADqB,CAiCnCkhB,QAASA,GAAO,CAACzoB,CAAD,CAASC,CAAT,CAAmB2Z,CAAnB,CAAyBc,CAAzB,CAAmC,CAsBjDgO,QAASA,EAA0B,CAACnhB,CAAD,CAAK,CACtC,GAAI,CACFA,CAAAG,MAAA,CAAS,IAAT;AAnpIG9E,EAAAzB,KAAA,CAmpIsB0B,SAnpItB,CAmpIiC4E,CAnpIjC,CAmpIH,CADE,CAAJ,OAEU,CAER,GADAkhB,CAAA,EACI,CAA4B,CAA5B,GAAAA,CAAJ,CACE,IAAA,CAAOC,CAAAroB,OAAP,CAAA,CACE,GAAI,CACFqoB,CAAAC,IAAA,EAAA,EADE,CAEF,MAAOzf,CAAP,CAAU,CACVwQ,CAAAkP,MAAA,CAAW1f,CAAX,CADU,CANR,CAH4B,CA6IxC2f,QAASA,EAA0B,EAAG,CACpCC,CAAA,EACAC,EAAA,EAFoC,CAetCD,QAASA,EAAU,EAAG,CAVK,CAAA,CAAA,CACzB,GAAI,CACF,CAAA,CAAOE,CAAAC,MAAP,OAAA,CADE,CAEF,MAAO/f,CAAP,CAAU,EAHa,CAAA,CAAA,IAAA,EAAA,CAazBggB,CAAA,CAAc1lB,CAAA,CAAY0lB,CAAZ,CAAA,CAA2B,IAA3B,CAAkCA,CAG5CziB,GAAA,CAAOyiB,CAAP,CAAoBC,CAApB,CAAJ,GACED,CADF,CACgBC,CADhB,CAGAA,EAAA,CAAkBD,CATE,CAYtBH,QAASA,EAAa,EAAG,CACvB,GAAIK,CAAJ,GAAuBhiB,CAAAiiB,IAAA,EAAvB,EAAqCC,CAArC,GAA0DJ,CAA1D,CAIAE,CAEA,CAFiBhiB,CAAAiiB,IAAA,EAEjB,CADAC,CACA,CADmBJ,CACnB,CAAAvoB,CAAA,CAAQ4oB,CAAR,CAA4B,QAAQ,CAACC,CAAD,CAAW,CAC7CA,CAAA,CAASpiB,CAAAiiB,IAAA,EAAT,CAAqBH,CAArB,CAD6C,CAA/C,CAPuB,CA9LwB,IAC7C9hB,EAAO,IADsC,CAG7CwF,EAAW9M,CAAA8M,SAHkC,CAI7Coc,EAAUlpB,CAAAkpB,QAJmC,CAK7C/H,EAAanhB,CAAAmhB,WALgC,CAM7CwI,EAAe3pB,CAAA2pB,aAN8B,CAO7CC,EAAkB,EAEtBtiB,EAAAuiB,OAAA,CAAc,CAAA,CAEd,KAAIlB,EAA0B,CAA9B,CACIC,EAA8B,EAGlCthB,EAAAwiB,6BAAA,CAAoCpB,CACpCphB,EAAAyiB,6BAAA,CAAoCC,QAAQ,EAAG,CAAErB,CAAA,EAAF,CAkC/CrhB,EAAA2iB,gCAAA,CAAuCC,QAAQ,CAACC,CAAD,CAAW,CACxB,CAAhC;AAAIxB,CAAJ,CACEwB,CAAA,EADF,CAGEvB,CAAA9iB,KAAA,CAAiCqkB,CAAjC,CAJsD,CAlDT,KA8D7Cf,CA9D6C,CA8DhCI,CA9DgC,CA+D7CF,EAAiBxc,CAAAsd,KA/D4B,CAgE7CC,EAAcpqB,CAAAyE,KAAA,CAAc,MAAd,CAhE+B,CAiE7C4lB,EAAiB,IAErBtB,EAAA,EACAQ,EAAA,CAAmBJ,CAsBnB9hB,EAAAiiB,IAAA,CAAWgB,QAAQ,CAAChB,CAAD,CAAM9f,CAAN,CAAe0f,CAAf,CAAsB,CAInCzlB,CAAA,CAAYylB,CAAZ,CAAJ,GACEA,CADF,CACU,IADV,CAKIrc,EAAJ,GAAiB9M,CAAA8M,SAAjB,GAAkCA,CAAlC,CAA6C9M,CAAA8M,SAA7C,CACIoc,EAAJ,GAAgBlpB,CAAAkpB,QAAhB,GAAgCA,CAAhC,CAA0ClpB,CAAAkpB,QAA1C,CAGA,IAAIK,CAAJ,CAAS,CACP,IAAIiB,EAAYhB,CAAZgB,GAAiCrB,CAKrC,IAAIG,CAAJ,GAAuBC,CAAvB,GAAgCL,CAAAxO,CAAAwO,QAAhC,EAAoDsB,CAApD,EACE,MAAOljB,EAET,KAAImjB,EAAWnB,CAAXmB,EAA6BC,EAAA,CAAUpB,CAAV,CAA7BmB,GAA2DC,EAAA,CAAUnB,CAAV,CAC/DD,EAAA,CAAiBC,CACjBC,EAAA,CAAmBL,CAKfD,EAAAxO,CAAAwO,QAAJ,EAA0BuB,CAA1B,EAAuCD,CAAvC,EAMOC,CAGL,GAFEH,CAEF,CAFmBf,CAEnB,EAAI9f,CAAJ,CACEqD,CAAArD,QAAA,CAAiB8f,CAAjB,CADF,CAEYkB,CAAL,EAGL3d,CAAA,CAAAA,CAAA,CA7FF3H,CA6FE,CAAwBokB,CA7FlBnkB,QAAA,CAAY,GAAZ,CA6FN,CA5FN,CA4FM,CA5FY,EAAX,GAAAD,CAAA,CAAe,EAAf,CA4FuBokB,CA5FHoB,OAAA,CAAWxlB,CAAX,CAAmB,CAAnB,CA4FrB,CAAA2H,CAAA4a,KAAA,CAAgB,CAHX,EACL5a,CAAAsd,KADK,CACWb,CAZpB,GACEL,CAAA,CAAQzf,CAAA,CAAU,cAAV,CAA2B,WAAnC,CAAA,CAAgD0f,CAAhD,CAAuD,EAAvD,CAA2DI,CAA3D,CAGA,CAFAP,CAAA,EAEA,CAAAQ,CAAA,CAAmBJ,CAJrB,CAiBA,OAAO9hB,EAjCA,CAuCP,MAAOgjB,EAAP,EAAyBxd,CAAAsd,KAAA3gB,QAAA,CAAsB,MAAtB,CAA6B,GAA7B,CApDY,CAkEzCnC,EAAA6hB,MAAA,CAAayB,QAAQ,EAAG,CACtB,MAAOxB,EADe,CA5JyB,KAgK7CK,EAAqB,EAhKwB,CAiK7CoB,EAAgB,CAAA,CAjK6B,CAiL7CxB;AAAkB,IA8CtB/hB,EAAAwjB,YAAA,CAAmBC,QAAQ,CAACZ,CAAD,CAAW,CAEpC,GAAKU,CAAAA,CAAL,CAAoB,CAMlB,GAAInQ,CAAAwO,QAAJ,CAAsBjgB,CAAA,CAAOjJ,CAAP,CAAA+N,GAAA,CAAkB,UAAlB,CAA8Bgb,CAA9B,CAEtB9f,EAAA,CAAOjJ,CAAP,CAAA+N,GAAA,CAAkB,YAAlB,CAAgCgb,CAAhC,CAEA8B,EAAA,CAAgB,CAAA,CAVE,CAapBpB,CAAA3jB,KAAA,CAAwBqkB,CAAxB,CACA,OAAOA,EAhB6B,CAyBtC7iB,EAAA0jB,uBAAA,CAA8BC,QAAQ,EAAG,CACvChiB,CAAA,CAAOjJ,CAAP,CAAAkrB,IAAA,CAAmB,qBAAnB,CAA0CnC,CAA1C,CADuC,CASzCzhB,EAAA6jB,iBAAA,CAAwBlC,CAexB3hB,EAAA8jB,SAAA,CAAgBC,QAAQ,EAAG,CACzB,IAAIjB,EAAOC,CAAA5lB,KAAA,CAAiB,MAAjB,CACX,OAAO2lB,EAAA,CAAOA,CAAA3gB,QAAA,CAAa,wBAAb,CAAuC,EAAvC,CAAP,CAAoD,EAFlC,CAmB3BnC,EAAAgkB,MAAA,CAAaC,QAAQ,CAAChkB,CAAD,CAAKikB,CAAL,CAAY,CAC/B,IAAIC,CACJ9C,EAAA,EACA8C,EAAA,CAAYtK,CAAA,CAAW,QAAQ,EAAG,CAChC,OAAOyI,CAAA,CAAgB6B,CAAhB,CACP/C,EAAA,CAA2BnhB,CAA3B,CAFgC,CAAtB,CAGTikB,CAHS,EAGA,CAHA,CAIZ5B,EAAA,CAAgB6B,CAAhB,CAAA,CAA6B,CAAA,CAC7B,OAAOA,EARwB,CAsBjCnkB,EAAAgkB,MAAAI,OAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAU,CACpC,MAAIhC,EAAA,CAAgBgC,CAAhB,CAAJ,EACE,OAAOhC,CAAA,CAAgBgC,CAAhB,CAGA,CAFPjC,CAAA,CAAaiC,CAAb,CAEO,CADPlD,CAAA,CAA2BplB,CAA3B,CACO,CAAA,CAAA,CAJT,EAMO,CAAA,CAP6B,CAzTW,CAqUnD6U,QAASA,GAAgB,EAAG,CAC1B,IAAAsK,KAAA,CAAY,CAAC,SAAD;AAAY,MAAZ,CAAoB,UAApB,CAAgC,WAAhC,CACR,QAAQ,CAACrH,CAAD,CAAUxB,CAAV,CAAgBc,CAAhB,CAA0BlC,CAA1B,CAAqC,CAC3C,MAAO,KAAIiQ,EAAJ,CAAYrN,CAAZ,CAAqB5C,CAArB,CAAgCoB,CAAhC,CAAsCc,CAAtC,CADoC,CADrC,CADc,CAwF5BrC,QAASA,GAAqB,EAAG,CAE/B,IAAAoK,KAAA,CAAYC,QAAQ,EAAG,CAGrBmJ,QAASA,EAAY,CAACC,CAAD,CAAUvD,CAAV,CAAmB,CAwMtCwD,QAASA,EAAO,CAACC,CAAD,CAAQ,CAClBA,CAAJ,EAAaC,CAAb,GACOC,CAAL,CAEWA,CAFX,EAEuBF,CAFvB,GAGEE,CAHF,CAGaF,CAAAG,EAHb,EACED,CADF,CACaF,CAQb,CAHAI,CAAA,CAAKJ,CAAAG,EAAL,CAAcH,CAAAK,EAAd,CAGA,CAFAD,CAAA,CAAKJ,CAAL,CAAYC,CAAZ,CAEA,CADAA,CACA,CADWD,CACX,CAAAC,CAAAE,EAAA,CAAa,IAVf,CADsB,CAmBxBC,QAASA,EAAI,CAACE,CAAD,CAAYC,CAAZ,CAAuB,CAC9BD,CAAJ,EAAiBC,CAAjB,GACMD,CACJ,GADeA,CAAAD,EACf,CAD6BE,CAC7B,EAAIA,CAAJ,GAAeA,CAAAJ,EAAf,CAA6BG,CAA7B,CAFF,CADkC,CA1NpC,GAAIR,CAAJ,GAAeU,EAAf,CACE,KAAMrsB,EAAA,CAAO,eAAP,CAAA,CAAwB,KAAxB,CAAkE2rB,CAAlE,CAAN,CAFoC,IAKlCW,EAAO,CAL2B,CAMlCC,EAAQ/pB,CAAA,CAAO,EAAP,CAAW4lB,CAAX,CAAoB,CAACoE,GAAIb,CAAL,CAApB,CAN0B,CAOlCzf,EAAO,EAP2B,CAQlCugB,EAAYrE,CAAZqE,EAAuBrE,CAAAqE,SAAvBA,EAA4CC,MAAAC,UARV,CASlCC,EAAU,EATwB,CAUlCd,EAAW,IAVuB,CAWlCC,EAAW,IAyCf,OAAOM,EAAA,CAAOV,CAAP,CAAP,CAAyB,CAoBvBzI,IAAKA,QAAQ,CAACriB,CAAD,CAAMY,CAAN,CAAa,CACxB,GAAI,CAAA8B,CAAA,CAAY9B,CAAZ,CAAJ,CAAA,CACA,GAAIgrB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ/rB,CAAR,CAAXgsB,GAA4BD,CAAA,CAAQ/rB,CAAR,CAA5BgsB,CAA2C,CAAChsB,IAAKA,CAAN,CAA3CgsB,CAEJjB,EAAA,CAAQiB,CAAR,CAH+B,CAM3BhsB,CAAN,GAAaqL,EAAb,EAAoBogB,CAAA,EACpBpgB,EAAA,CAAKrL,CAAL,CAAA,CAAYY,CAER6qB,EAAJ,CAAWG,CAAX,EACE,IAAAK,OAAA,CAAYf,CAAAlrB,IAAZ,CAGF;MAAOY,EAdP,CADwB,CApBH,CAiDvBsL,IAAKA,QAAQ,CAAClM,CAAD,CAAM,CACjB,GAAI4rB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ/rB,CAAR,CAEf,IAAKgsB,CAAAA,CAAL,CAAe,MAEfjB,EAAA,CAAQiB,CAAR,CAL+B,CAQjC,MAAO3gB,EAAA,CAAKrL,CAAL,CATU,CAjDI,CAwEvBisB,OAAQA,QAAQ,CAACjsB,CAAD,CAAM,CACpB,GAAI4rB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ/rB,CAAR,CAEf,IAAKgsB,CAAAA,CAAL,CAAe,MAEXA,EAAJ,EAAgBf,CAAhB,GAA0BA,CAA1B,CAAqCe,CAAAX,EAArC,CACIW,EAAJ,EAAgBd,CAAhB,GAA0BA,CAA1B,CAAqCc,CAAAb,EAArC,CACAC,EAAA,CAAKY,CAAAb,EAAL,CAAgBa,CAAAX,EAAhB,CAEA,QAAOU,CAAA,CAAQ/rB,CAAR,CATwB,CAYjC,OAAOqL,CAAA,CAAKrL,CAAL,CACPyrB,EAAA,EAdoB,CAxEC,CAkGvBS,UAAWA,QAAQ,EAAG,CACpB7gB,CAAA,CAAO,EACPogB,EAAA,CAAO,CACPM,EAAA,CAAU,EACVd,EAAA,CAAWC,CAAX,CAAsB,IAJF,CAlGC,CAmHvBiB,QAASA,QAAQ,EAAG,CAGlBJ,CAAA,CADAL,CACA,CAFArgB,CAEA,CAFO,IAGP,QAAOmgB,CAAA,CAAOV,CAAP,CAJW,CAnHG,CA2IvBsB,KAAMA,QAAQ,EAAG,CACf,MAAOzqB,EAAA,CAAO,EAAP,CAAW+pB,CAAX,CAAkB,CAACD,KAAMA,CAAP,CAAlB,CADQ,CA3IM,CApDa,CAFxC,IAAID,EAAS,EA+ObX,EAAAuB,KAAA,CAAoBC,QAAQ,EAAG,CAC7B,IAAID,EAAO,EACXvsB,EAAA,CAAQ2rB,CAAR,CAAgB,QAAQ,CAACxH,CAAD,CAAQ8G,CAAR,CAAiB,CACvCsB,CAAA,CAAKtB,CAAL,CAAA,CAAgB9G,CAAAoI,KAAA,EADuB,CAAzC,CAGA,OAAOA,EALsB,CAmB/BvB,EAAA3e,IAAA,CAAmBogB,QAAQ,CAACxB,CAAD,CAAU,CACnC,MAAOU,EAAA,CAAOV,CAAP,CAD4B,CAKrC,OAAOD,EAxQc,CAFQ,CAyTjChR,QAASA,GAAsB,EAAG,CAChC,IAAA4H,KAAA;AAAY,CAAC,eAAD,CAAkB,QAAQ,CAACrK,CAAD,CAAgB,CACpD,MAAOA,EAAA,CAAc,WAAd,CAD6C,CAA1C,CADoB,CAqtBlCjG,QAASA,GAAgB,CAACvG,CAAD,CAAW2hB,CAAX,CAAkC,CAazDC,QAASA,EAAoB,CAACthB,CAAD,CAAQuhB,CAAR,CAAuBC,CAAvB,CAAqC,CAChE,IAAIC,EAAe,oCAAnB,CAEIC,EAAW,EAEf/sB,EAAA,CAAQqL,CAAR,CAAe,QAAQ,CAAC2hB,CAAD,CAAaC,CAAb,CAAwB,CAC7C,IAAIxnB,EAAQunB,CAAAvnB,MAAA,CAAiBqnB,CAAjB,CAEZ,IAAKrnB,CAAAA,CAAL,CACE,KAAMynB,GAAA,CAAe,MAAf,CAGFN,CAHE,CAGaK,CAHb,CAGwBD,CAHxB,CAIDH,CAAA,CAAe,gCAAf,CACD,0BALE,CAAN,CAQFE,CAAA,CAASE,CAAT,CAAA,CAAsB,CACpBE,KAAM1nB,CAAA,CAAM,CAAN,CAAA,CAAS,CAAT,CADc,CAEpB2nB,WAAyB,GAAzBA,GAAY3nB,CAAA,CAAM,CAAN,CAFQ,CAGpB4nB,SAAuB,GAAvBA,GAAU5nB,CAAA,CAAM,CAAN,CAHU,CAIpB6nB,SAAU7nB,CAAA,CAAM,CAAN,CAAV6nB,EAAsBL,CAJF,CAZuB,CAA/C,CAoBA,OAAOF,EAzByD,CAiElEQ,QAASA,EAAwB,CAACnjB,CAAD,CAAO,CACtC,IAAIqC,EAASrC,CAAAvE,OAAA,CAAY,CAAZ,CACb,IAAK4G,CAAAA,CAAL,EAAeA,CAAf,GAA0BtI,CAAA,CAAUsI,CAAV,CAA1B,CACE,KAAMygB,GAAA,CAAe,QAAf,CAA4G9iB,CAA5G,CAAN,CAEF,GAAIA,CAAJ,GAAaA,CAAA2S,KAAA,EAAb,CACE,KAAMmQ,GAAA,CAAe,QAAf,CAEA9iB,CAFA,CAAN,CANoC,CA9EiB,IACrDojB,EAAgB,EADqC,CAGrDC,EAA2B,qCAH0B;AAIrDC,EAAyB,6BAJ4B,CAKrDC,EAAuB7pB,EAAA,CAAQ,2BAAR,CAL8B,CAMrD8pB,EAAwB,6BAN6B,CAWrDC,EAA4B,yBA8F/B,KAAApd,UAAA,CAAiBqd,QAASC,EAAiB,CAAC3jB,CAAD,CAAO4jB,CAAP,CAAyB,CACnE1f,EAAA,CAAwBlE,CAAxB,CAA8B,WAA9B,CACItK,EAAA,CAASsK,CAAT,CAAJ,EACEmjB,CAAA,CAAyBnjB,CAAzB,CAiCA,CAhCA6D,EAAA,CAAU+f,CAAV,CAA4B,kBAA5B,CAgCA,CA/BKR,CAAAntB,eAAA,CAA6B+J,CAA7B,CA+BL,GA9BEojB,CAAA,CAAcpjB,CAAd,CACA,CADsB,EACtB,CAAAW,CAAAoE,QAAA,CAAiB/E,CAAjB,CA9GO6jB,WA8GP,CAAgC,CAAC,WAAD,CAAc,mBAAd,CAC9B,QAAQ,CAAC9I,CAAD,CAAYtN,CAAZ,CAA+B,CACrC,IAAIqW,EAAa,EACjBluB,EAAA,CAAQwtB,CAAA,CAAcpjB,CAAd,CAAR,CAA6B,QAAQ,CAAC4jB,CAAD,CAAmB1pB,CAAnB,CAA0B,CAC7D,GAAI,CACF,IAAImM,EAAY0U,CAAAha,OAAA,CAAiB6iB,CAAjB,CACZ5tB,EAAA,CAAWqQ,CAAX,CAAJ,CACEA,CADF,CACc,CAAEnF,QAAS1I,EAAA,CAAQ6N,CAAR,CAAX,CADd,CAEYnF,CAAAmF,CAAAnF,QAFZ,EAEiCmF,CAAA8a,KAFjC,GAGE9a,CAAAnF,QAHF,CAGsB1I,EAAA,CAAQ6N,CAAA8a,KAAR,CAHtB,CAKA9a,EAAA0d,SAAA,CAAqB1d,CAAA0d,SAArB,EAA2C,CAC3C1d,EAAAnM,MAAA,CAAkBA,CAClBmM,EAAArG,KAAA,CAAiBqG,CAAArG,KAAjB,EAAmCA,CACnCqG,EAAA2d,QAAA,CAAoB3d,CAAA2d,QAApB;AAA0C3d,CAAApD,WAA1C,EAAkEoD,CAAArG,KAClEqG,EAAA4d,SAAA,CAAqB5d,CAAA4d,SAArB,EAA2C,IAC5B5d,KAAAA,EAAAA,CAAAA,CACYA,EAAAA,CADZA,CACuBrG,EAAAqG,CAAArG,KADvBqG,CAtFvBsc,EAAW,CACb3f,aAAc,IADD,CAEbkhB,iBAAkB,IAFL,CAIX5sB,EAAA,CAAS+O,CAAApF,MAAT,CAAJ,GACqC,CAAA,CAAnC,GAAIoF,CAAA6d,iBAAJ,EACEvB,CAAAuB,iBAEA,CAF4B3B,CAAA,CAAqBlc,CAAApF,MAArB,CACqBuhB,CADrB,CACoC,CAAA,CADpC,CAE5B,CAAAG,CAAA3f,aAAA,CAAwB,EAH1B,EAKE2f,CAAA3f,aALF,CAK0Buf,CAAA,CAAqBlc,CAAApF,MAArB,CACqBuhB,CADrB,CACoC,CAAA,CADpC,CAN5B,CAUIlrB,EAAA,CAAS+O,CAAA6d,iBAAT,CAAJ,GACEvB,CAAAuB,iBADF,CAEM3B,CAAA,CAAqBlc,CAAA6d,iBAArB,CAAiD1B,CAAjD,CAAgE,CAAA,CAAhE,CAFN,CAIA,IAAIlrB,CAAA,CAASqrB,CAAAuB,iBAAT,CAAJ,CAAyC,CACvC,IAAIjhB,EAAaoD,CAAApD,WAAjB,CACIkhB,GAAe9d,CAAA8d,aACnB,IAAKlhB,CAAAA,CAAL,CAEE,KAAM6f,GAAA,CAAe,QAAf,CAEAN,CAFA,CAAN,CAGU,IAAA,EA65DkC,EAAA,CAClD,GA95DoD2B,EA85DpD,EAAazuB,CAAA,CA95DuCyuB,EA85DvC,CAAb,CAA8B,EAAA,CA95DsBA,EA85DpD,KAAA,CACA,GAAIzuB,CAAA,CA/5DoCuN,CA+5DpC,CAAJ,CAA0B,CACxB,IAAI5H,EAAQ+oB,EAAArS,KAAA,CAh6D0B9O,CAg6D1B,CACZ,IAAI5H,CAAJ,CAAW,CAAA,EAAA,CAAOA,CAAA,CAAM,CAAN,CAAP,OAAA,CAAA,CAFa,CAFwB,EAAA,CAAA,IAAA,EAClD,CA95DW,GAAK,CAAA,EAAL,CAEL,KAAMynB,GAAA,CAAe,SAAf;AAEAN,CAFA,CAAN,CAVqC,CAoE7B,IAAIG,EAAWtc,CAAAge,WAAX1B,CArDTA,CAuDSrrB,EAAA,CAASqrB,CAAA3f,aAAT,CAAJ,GACEqD,CAAAie,kBADF,CACgC3B,CAAA3f,aADhC,CAGA8gB,EAAAjpB,KAAA,CAAgBwL,CAAhB,CAjBE,CAkBF,MAAOlI,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CAnBiD,CAA/D,CAuBA,OAAO2lB,EAzB8B,CADT,CAAhC,CA6BF,EAAAV,CAAA,CAAcpjB,CAAd,CAAAnF,KAAA,CAAyB+oB,CAAzB,CAlCF,EAoCEhuB,CAAA,CAAQoK,CAAR,CAAcvJ,EAAA,CAAcktB,CAAd,CAAd,CAEF,OAAO,KAxC4D,CAgErE,KAAAY,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAI/rB,EAAA,CAAU+rB,CAAV,CAAJ,EACEnC,CAAAiC,2BAAA,CAAiDE,CAAjD,CACO,CAAA,IAFT,EAISnC,CAAAiC,2BAAA,EALwC,CA8BnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAI/rB,EAAA,CAAU+rB,CAAV,CAAJ,EACEnC,CAAAoC,4BAAA,CAAkDD,CAAlD,CACO,CAAA,IAFT,EAISnC,CAAAoC,4BAAA,EALyC,CA+BpD,KAAI9jB,EAAmB,CAAA,CACvB,KAAAA,iBAAA,CAAwBgkB,QAAQ,CAACC,CAAD,CAAU,CACxC,MAAInsB,EAAA,CAAUmsB,CAAV,CAAJ,EACEjkB,CACO,CADYikB,CACZ,CAAA,IAFT,EAIOjkB,CALiC,CAQ1C,KAAA4W,KAAA,CAAY,CACF,WADE;AACW,cADX,CAC2B,mBAD3B,CACgD,kBADhD,CACoE,QADpE,CAEF,aAFE,CAEa,YAFb,CAE2B,WAF3B,CAEwC,MAFxC,CAEgD,UAFhD,CAE4D,eAF5D,CAGV,QAAQ,CAACuD,CAAD,CAAclN,CAAd,CAA8BJ,CAA9B,CAAmDoC,CAAnD,CAAuEhB,CAAvE,CACCxB,CADD,CACgB0B,CADhB,CAC8BxB,CAD9B,CAC2C8B,CAD3C,CACmD1C,CADnD,CAC+D3F,CAD/D,CAC8E,CA2OtF8d,QAASA,EAAY,CAACC,CAAD,CAAWC,CAAX,CAAsB,CACzC,GAAI,CACFD,CAAAnN,SAAA,CAAkBoN,CAAlB,CADE,CAEF,MAAO7mB,CAAP,CAAU,EAH6B,CAgD3C+C,QAASA,EAAO,CAAC+jB,CAAD,CAAgBC,CAAhB,CAA8BC,CAA9B,CAA2CC,CAA3C,CACIC,CADJ,CAC4B,CACpCJ,CAAN,WAA+BjnB,EAA/B,GAGEinB,CAHF,CAGkBjnB,CAAA,CAAOinB,CAAP,CAHlB,CAOArvB,EAAA,CAAQqvB,CAAR,CAAuB,QAAQ,CAAC5rB,CAAD,CAAOa,CAAP,CAAc,CACvCb,CAAA7D,SAAJ,EAAqB+I,EAArB,EAAuClF,CAAAisB,UAAAjqB,MAAA,CAAqB,KAArB,CAAvC,GACE4pB,CAAA,CAAc/qB,CAAd,CADF,CACyB8D,CAAA,CAAO3E,CAAP,CAAA2Y,KAAA,CAAkB,eAAlB,CAAA9Z,OAAA,EAAA,CAA4C,CAA5C,CADzB,CAD2C,CAA7C,CAKA,KAAIqtB,EACIC,CAAA,CAAaP,CAAb,CAA4BC,CAA5B,CAA0CD,CAA1C,CACaE,CADb,CAC0BC,CAD1B,CAC2CC,CAD3C,CAERnkB,EAAAukB,gBAAA,CAAwBR,CAAxB,CACA,KAAIS,EAAY,IAChB,OAAOC,SAAqB,CAAC1kB,CAAD,CAAQ2kB,CAAR,CAAwBtI,CAAxB,CAAiC,CAC3DzZ,EAAA,CAAU5C,CAAV,CAAiB,OAAjB,CAEAqc,EAAA,CAAUA,CAAV,EAAqB,EAHsC,KAIvDuI,EAA0BvI,CAAAuI,wBAJ6B,CAKzDC,EAAwBxI,CAAAwI,sBACxBC;CAAAA,CAAsBzI,CAAAyI,oBAMpBF,EAAJ,EAA+BA,CAAAG,kBAA/B,GACEH,CADF,CAC4BA,CAAAG,kBAD5B,CAIKN,EAAL,GAyCA,CAzCA,CAsCF,CADIrsB,CACJ,CArCgD0sB,CAqChD,EArCgDA,CAoCpB,CAAc,CAAd,CAC5B,EAG6B,eAApB,GAAAlsB,EAAA,CAAUR,CAAV,CAAA,EAAuCA,CAAAP,SAAA,EAAAuC,MAAA,CAAsB,KAAtB,CAAvC,CAAsE,KAAtE,CAA8E,MAHvF,CACS,MAvCP,CAUE4qB,EAAA,CANgB,MAAlB,GAAIP,CAAJ,CAMc1nB,CAAA,CACVkoB,EAAA,CAAaR,CAAb,CAAwB1nB,CAAA,CAAO,OAAP,CAAAK,OAAA,CAAuB4mB,CAAvB,CAAA3mB,KAAA,EAAxB,CADU,CANd,CASWsnB,CAAJ,CAGO7iB,EAAA9E,MAAA/H,KAAA,CAA2B+uB,CAA3B,CAHP,CAKOA,CAGd,IAAIa,CAAJ,CACE,IAASK,IAAAA,CAAT,GAA2BL,EAA3B,CACEG,CAAA7kB,KAAA,CAAe,GAAf,CAAqB+kB,CAArB,CAAsC,YAAtC,CAAoDL,CAAA,CAAsBK,CAAtB,CAAAzL,SAApD,CAIJxZ,EAAAklB,eAAA,CAAuBH,CAAvB,CAAkChlB,CAAlC,CAEI2kB,EAAJ,EAAoBA,CAAA,CAAeK,CAAf,CAA0BhlB,CAA1B,CAChBskB,EAAJ,EAAqBA,CAAA,CAAgBtkB,CAAhB,CAAuBglB,CAAvB,CAAkCA,CAAlC,CAA6CJ,CAA7C,CACrB,OAAOI,EA/CoD,CAlBnB,CA8F5CT,QAASA,EAAY,CAACa,CAAD,CAAWnB,CAAX,CAAyBoB,CAAzB,CAAuCnB,CAAvC,CAAoDC,CAApD,CACGC,CADH,CAC2B,CA0C9CE,QAASA,EAAe,CAACtkB,CAAD,CAAQolB,CAAR,CAAkBC,CAAlB,CAAgCT,CAAhC,CAAyD,CAAA,IAC/DU,CAD+D,CAClDltB,CADkD,CAC5CmtB,CAD4C,CAChChwB,CADgC,CAC7Ba,CAD6B,CACpBovB,CADoB,CAE3EC,CAGJ,IAAIC,CAAJ,CAOE,IAHAD,CAGK,CAHgB9K,KAAJ,CADIyK,CAAA/wB,OACJ,CAGZ,CAAAkB,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgBowB,CAAAtxB,OAAhB,CAAgCkB,CAAhC,EAAmC,CAAnC,CACEqwB,CACA,CADMD,CAAA,CAAQpwB,CAAR,CACN,CAAAkwB,CAAA,CAAeG,CAAf,CAAA,CAAsBR,CAAA,CAASQ,CAAT,CAT1B,KAYEH,EAAA,CAAiBL,CAGd7vB,EAAA,CAAI,CAAT,KAAYa,CAAZ,CAAiBuvB,CAAAtxB,OAAjB,CAAiCkB,CAAjC;AAAqCa,CAArC,CAAA,CAKE,GAJAgC,CAIIytB,CAJGJ,CAAA,CAAeE,CAAA,CAAQpwB,CAAA,EAAR,CAAf,CAIHswB,CAHJA,CAGIA,CAHSF,CAAA,CAAQpwB,CAAA,EAAR,CAGTswB,CAFJP,CAEIO,CAFUF,CAAA,CAAQpwB,CAAA,EAAR,CAEVswB,CAAAA,CAAJ,CAAgB,CACd,GAAIA,CAAA7lB,MAAJ,CAIE,IAHAulB,CAEIO,CAFS9lB,CAAA+lB,KAAA,EAETD,CADJ7lB,CAAAklB,eAAA,CAAuBpoB,CAAA,CAAO3E,CAAP,CAAvB,CAAqCmtB,CAArC,CACIO,CAAAA,CAAAA,CAAkBD,CAAAG,kBACtB,CACEH,CAAAG,kBACA,CAD+B,IAC/B,CAAAT,CAAAU,IAAA,CAAe,YAAf,CAA6BH,CAA7B,CAFF,CAJF,IASEP,EAAA,CAAavlB,CAIbwlB,EAAA,CADEK,CAAAK,wBAAJ,CAC2BC,EAAA,CACrBnmB,CADqB,CACd6lB,CAAAO,WADc,CACSxB,CADT,CAErBiB,CAAAQ,+BAFqB,CAD3B,CAKYC,CAAAT,CAAAS,sBAAL,EAAyC1B,CAAzC,CACoBA,CADpB,CAGKA,CAAAA,CAAL,EAAgCX,CAAhC,CACoBkC,EAAA,CAAwBnmB,CAAxB,CAA+BikB,CAA/B,CADpB,CAIoB,IAG3B4B,EAAA,CAAWP,CAAX,CAAwBC,CAAxB,CAAoCntB,CAApC,CAA0CitB,CAA1C,CAAwDG,CAAxD,CACWK,CADX,CA5Bc,CAAhB,IA+BWP,EAAJ,EACLA,CAAA,CAAYtlB,CAAZ,CAAmB5H,CAAAiZ,WAAnB,CAAoCrd,CAApC,CAA+C4wB,CAA/C,CAzD2E,CAtCjF,IAJ8C,IAC1Ce,EAAU,EADgC,CAE1CY,CAF0C,CAEnC1D,CAFmC,CAEXxR,CAFW,CAEcmV,CAFd,CAE2Bd,CAF3B,CAIrCnwB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB6vB,CAAA/wB,OAApB,CAAqCkB,CAAA,EAArC,CAA0C,CACxCgxB,CAAA,CAAQ,IAAIE,EAGZ5D,EAAA,CAAa6D,EAAA,CAAkBtB,CAAA,CAAS7vB,CAAT,CAAlB,CAA+B,EAA/B,CAAmCgxB,CAAnC,CAAgD,CAAN,GAAAhxB,CAAA,CAAU2uB,CAAV,CAAwBlwB,CAAlE,CACmBmwB,CADnB,CAQb,EALA0B,CAKA,CALchD,CAAAxuB,OAAD,CACPsyB,CAAA,CAAsB9D,CAAtB,CAAkCuC,CAAA,CAAS7vB,CAAT,CAAlC,CAA+CgxB,CAA/C,CAAsDtC,CAAtD,CAAoEoB,CAApE,CACwB,IADxB,CAC8B,EAD9B,CACkC,EADlC,CACsCjB,CADtC,CADO,CAGP,IAEN,GAAkByB,CAAA7lB,MAAlB,EACEC,CAAAukB,gBAAA,CAAwB+B,CAAAK,UAAxB,CAGFtB;CAAA,CAAeO,CAAD,EAAeA,CAAAgB,SAAf,EACE,EAAAxV,CAAA,CAAa+T,CAAA,CAAS7vB,CAAT,CAAA8b,WAAb,CADF,EAEChd,CAAAgd,CAAAhd,OAFD,CAGR,IAHQ,CAIRkwB,CAAA,CAAalT,CAAb,CACGwU,CAAA,EACEA,CAAAK,wBADF,EACwC,CAACL,CAAAS,sBADzC,GAEOT,CAAAO,WAFP,CAEgCnC,CAHnC,CAKN,IAAI4B,CAAJ,EAAkBP,CAAlB,CACEK,CAAA/rB,KAAA,CAAarE,CAAb,CAAgBswB,CAAhB,CAA4BP,CAA5B,CAEA,CADAkB,CACA,CADc,CAAA,CACd,CAAAd,CAAA,CAAkBA,CAAlB,EAAqCG,CAIvCzB,EAAA,CAAyB,IAhCe,CAoC1C,MAAOoC,EAAA,CAAclC,CAAd,CAAgC,IAxCO,CAyGhD6B,QAASA,GAAuB,CAACnmB,CAAD,CAAQikB,CAAR,CAAsB6C,CAAtB,CAAiDC,CAAjD,CAAsE,CAgBpG,MAdwBC,SAAQ,CAACC,CAAD,CAAmBC,CAAnB,CAA4BC,CAA5B,CAAyCrC,CAAzC,CAA8DsC,CAA9D,CAA+E,CAExGH,CAAL,GACEA,CACA,CADmBjnB,CAAA+lB,KAAA,CAAW,CAAA,CAAX,CAAkBqB,CAAlB,CACnB,CAAAH,CAAAI,cAAA,CAAiC,CAAA,CAFnC,CAKA,OAAOpD,EAAA,CAAagD,CAAb,CAA+BC,CAA/B,CAAwC,CAC7CtC,wBAAyBkC,CADoB,CAE7CjC,sBAAuBsC,CAFsB,CAG7CrC,oBAAqBA,CAHwB,CAAxC,CAPsG,CAFX,CA6BtG4B,QAASA,GAAiB,CAACtuB,CAAD,CAAOyqB,CAAP,CAAmB0D,CAAnB,CAA0BrC,CAA1B,CAAuCC,CAAvC,CAAwD,CAAA,IAE5EmD,EAAWf,CAAAgB,MAFiE,CAG5EntB,CAGJ,QALehC,CAAA7D,SAKf,EACE,KAAKC,EAAL,CAEEgzB,CAAA,CAAa3E,CAAb,CACI4E,EAAA,CAAmB7uB,EAAA,CAAUR,CAAV,CAAnB,CADJ,CACyC,GADzC,CAC8C8rB,CAD9C,CAC2DC,CAD3D,CAIA,KANF,IAMW5rB,CANX,CAM0C7C,CAN1C,CAMiDgyB,CANjD,CAM2DC,EAASvvB,CAAAwvB,WANpE,CAOWtxB,EAAI,CAPf,CAOkBC,EAAKoxB,CAALpxB,EAAeoxB,CAAAtzB,OAD/B,CAC8CiC,CAD9C;AACkDC,CADlD,CACsDD,CAAA,EADtD,CAC2D,CACzD,IAAIuxB,EAAgB,CAAA,CAApB,CACIC,EAAc,CAAA,CAElBvvB,EAAA,CAAOovB,CAAA,CAAOrxB,CAAP,CACPyI,EAAA,CAAOxG,CAAAwG,KACPrJ,EAAA,CAAQgc,CAAA,CAAKnZ,CAAA7C,MAAL,CAGRqyB,EAAA,CAAaN,EAAA,CAAmB1oB,CAAnB,CACb,IAAI2oB,CAAJ,CAAeM,EAAAjuB,KAAA,CAAqBguB,CAArB,CAAf,CACEhpB,CAAA,CAAOA,CAAAxB,QAAA,CAAa0qB,EAAb,CAA4B,EAA5B,CAAAxJ,OAAA,CACG,CADH,CAAAlhB,QAAA,CACc,OADd,CACuB,QAAQ,CAACnD,CAAD,CAAQgH,CAAR,CAAgB,CAClD,MAAOA,EAAA8O,YAAA,EAD2C,CAD/C,CAMT,KAAIgY,EAAiBH,CAAAxqB,QAAA,CAAmB,cAAnB,CAAmC,EAAnC,CACjB4qB,EAAA,CAAwBD,CAAxB,CAAJ,EACMH,CADN,GACqBG,CADrB,CACsC,OADtC,GAEIL,CAEA,CAFgB9oB,CAEhB,CADA+oB,CACA,CADc/oB,CAAA0f,OAAA,CAAY,CAAZ,CAAe1f,CAAA1K,OAAf,CAA6B,CAA7B,CACd,CADgD,KAChD,CAAA0K,CAAA,CAAOA,CAAA0f,OAAA,CAAY,CAAZ,CAAe1f,CAAA1K,OAAf,CAA6B,CAA7B,CAJX,CAQA+zB,EAAA,CAAQX,EAAA,CAAmB1oB,CAAAuC,YAAA,EAAnB,CACRgmB,EAAA,CAASc,CAAT,CAAA,CAAkBrpB,CAClB,IAAI2oB,CAAJ,EAAiB,CAAAnB,CAAAvxB,eAAA,CAAqBozB,CAArB,CAAjB,CACI7B,CAAA,CAAM6B,CAAN,CACA,CADe1yB,CACf,CAAIwf,EAAA,CAAmB9c,CAAnB,CAAyBgwB,CAAzB,CAAJ,GACE7B,CAAA,CAAM6B,CAAN,CADF,CACiB,CAAA,CADjB,CAIJC,EAAA,CAA4BjwB,CAA5B,CAAkCyqB,CAAlC,CAA8CntB,CAA9C,CAAqD0yB,CAArD,CAA4DV,CAA5D,CACAF,EAAA,CAAa3E,CAAb,CAAyBuF,CAAzB,CAAgC,GAAhC,CAAqClE,CAArC,CAAkDC,CAAlD,CAAmE0D,CAAnE,CACcC,CADd,CAnCyD,CAwC3D/D,CAAA,CAAY3rB,CAAA2rB,UACR1tB,EAAA,CAAS0tB,CAAT,CAAJ,GAEIA,CAFJ,CAEgBA,CAAAuE,QAFhB,CAIA,IAAI7zB,CAAA,CAASsvB,CAAT,CAAJ,EAAyC,EAAzC,GAA2BA,CAA3B,CACE,IAAA,CAAO3pB,CAAP,CAAeioB,CAAAvR,KAAA,CAA4BiT,CAA5B,CAAf,CAAA,CACEqE,CAIA,CAJQX,EAAA,CAAmBrtB,CAAA,CAAM,CAAN,CAAnB,CAIR,CAHIotB,CAAA,CAAa3E,CAAb,CAAyBuF,CAAzB,CAAgC,GAAhC,CAAqClE,CAArC,CAAkDC,CAAlD,CAGJ,GAFEoC,CAAA,CAAM6B,CAAN,CAEF,CAFiB1W,CAAA,CAAKtX,CAAA,CAAM,CAAN,CAAL,CAEjB,EAAA2pB,CAAA;AAAYA,CAAAtF,OAAA,CAAiBrkB,CAAAnB,MAAjB,CAA+BmB,CAAA,CAAM,CAAN,CAAA/F,OAA/B,CAGhB,MACF,MAAKiJ,EAAL,CACEirB,EAAA,CAA4B1F,CAA5B,CAAwCzqB,CAAAisB,UAAxC,CACA,MACF,MAvoLgBmE,CAuoLhB,CACE,GAAI,CAEF,GADApuB,CACA,CADQgoB,CAAAtR,KAAA,CAA8B1Y,CAAAisB,UAA9B,CACR,CACE+D,CACA,CADQX,EAAA,CAAmBrtB,CAAA,CAAM,CAAN,CAAnB,CACR,CAAIotB,CAAA,CAAa3E,CAAb,CAAyBuF,CAAzB,CAAgC,GAAhC,CAAqClE,CAArC,CAAkDC,CAAlD,CAAJ,GACEoC,CAAA,CAAM6B,CAAN,CADF,CACiB1W,CAAA,CAAKtX,CAAA,CAAM,CAAN,CAAL,CADjB,CAJA,CAQF,MAAO8C,CAAP,CAAU,EA3EhB,CAmFA2lB,CAAAvtB,KAAA,CAAgBmzB,EAAhB,CACA,OAAO5F,EA1FyE,CAqGlF6F,QAASA,GAAS,CAACtwB,CAAD,CAAOuwB,CAAP,CAAkBC,CAAlB,CAA2B,CAC3C,IAAIplB,EAAQ,EAAZ,CACIqlB,EAAQ,CACZ,IAAIF,CAAJ,EAAiBvwB,CAAA4G,aAAjB,EAAsC5G,CAAA4G,aAAA,CAAkB2pB,CAAlB,CAAtC,EACE,EAAG,CACD,GAAKvwB,CAAAA,CAAL,CACE,KAAMypB,GAAA,CAAe,SAAf,CAEI8G,CAFJ,CAEeC,CAFf,CAAN,CAIExwB,CAAA7D,SAAJ,EAAqBC,EAArB,GACM4D,CAAA4G,aAAA,CAAkB2pB,CAAlB,CACJ,EADkCE,CAAA,EAClC,CAAIzwB,CAAA4G,aAAA,CAAkB4pB,CAAlB,CAAJ,EAAgCC,CAAA,EAFlC,CAIArlB,EAAA5J,KAAA,CAAWxB,CAAX,CACAA,EAAA,CAAOA,CAAAuL,YAXN,CAAH,MAYiB,CAZjB,CAYSklB,CAZT,CADF,KAeErlB,EAAA5J,KAAA,CAAWxB,CAAX,CAGF,OAAO2E,EAAA,CAAOyG,CAAP,CArBoC,CAgC7CslB,QAASA,GAA0B,CAACC,CAAD,CAASJ,CAAT,CAAoBC,CAApB,CAA6B,CAC9D,MAAO,SAAQ,CAAC5oB,CAAD,CAAQnH,CAAR,CAAiB0tB,CAAjB,CAAwBY,CAAxB,CAAqClD,CAArC,CAAmD,CAChEprB,CAAA,CAAU6vB,EAAA,CAAU7vB,CAAA,CAAQ,CAAR,CAAV,CAAsB8vB,CAAtB,CAAiCC,CAAjC,CACV,OAAOG,EAAA,CAAO/oB,CAAP,CAAcnH,CAAd,CAAuB0tB,CAAvB,CAA8BY,CAA9B,CAA2ClD,CAA3C,CAFyD,CADJ,CA8BhE0C,QAASA,EAAqB,CAAC9D,CAAD;AAAamG,CAAb,CAA0BC,CAA1B,CAAyChF,CAAzC,CACCiF,CADD,CACeC,CADf,CACyCC,CADzC,CACqDC,CADrD,CAECjF,CAFD,CAEyB,CAgNrDkF,QAASA,EAAU,CAACC,CAAD,CAAMC,CAAN,CAAYb,CAAZ,CAAuBC,CAAvB,CAAgC,CACjD,GAAIW,CAAJ,CAAS,CACHZ,CAAJ,GAAeY,CAAf,CAAqBT,EAAA,CAA2BS,CAA3B,CAAgCZ,CAAhC,CAA2CC,CAA3C,CAArB,CACAW,EAAAxG,QAAA,CAAc3d,CAAA2d,QACdwG,EAAAhI,cAAA,CAAoBA,CACpB,IAAIkI,CAAJ,GAAiCrkB,CAAjC,EAA8CA,CAAAskB,eAA9C,CACEH,CAAA,CAAMI,CAAA,CAAmBJ,CAAnB,CAAwB,CAACxnB,aAAc,CAAA,CAAf,CAAxB,CAERqnB,EAAAxvB,KAAA,CAAgB2vB,CAAhB,CAPO,CAST,GAAIC,CAAJ,CAAU,CACJb,CAAJ,GAAea,CAAf,CAAsBV,EAAA,CAA2BU,CAA3B,CAAiCb,CAAjC,CAA4CC,CAA5C,CAAtB,CACAY,EAAAzG,QAAA,CAAe3d,CAAA2d,QACfyG,EAAAjI,cAAA,CAAqBA,CACrB,IAAIkI,CAAJ,GAAiCrkB,CAAjC,EAA8CA,CAAAskB,eAA9C,CACEF,CAAA,CAAOG,CAAA,CAAmBH,CAAnB,CAAyB,CAACznB,aAAc,CAAA,CAAf,CAAzB,CAETsnB,EAAAzvB,KAAA,CAAiB4vB,CAAjB,CAPQ,CAVuC,CAsBnDI,QAASA,EAAc,CAACrI,CAAD,CAAgBwB,CAAhB,CAAyBe,CAAzB,CAAmC+F,CAAnC,CAAuD,CAC5E,IAAIn0B,CAEJ,IAAIjB,CAAA,CAASsuB,CAAT,CAAJ,CAAuB,CACrB,IAAI3oB,EAAQ2oB,CAAA3oB,MAAA,CAAcmoB,CAAd,CACRxjB,EAAAA,CAAOgkB,CAAA+G,UAAA,CAAkB1vB,CAAA,CAAM,CAAN,CAAA/F,OAAlB,CACX,KAAI01B,EAAc3vB,CAAA,CAAM,CAAN,CAAd2vB,EAA0B3vB,CAAA,CAAM,CAAN,CAA9B,CACI4nB,EAAwB,GAAxBA,GAAW5nB,CAAA,CAAM,CAAN,CAGK,KAApB,GAAI2vB,CAAJ,CACEjG,CADF,CACaA,CAAA7sB,OAAA,EADb,CAMEvB,CANF,EAKEA,CALF,CAKUm0B,CALV,EAKgCA,CAAA,CAAmB9qB,CAAnB,CALhC,GAMmBrJ,CAAA+jB,SAGd/jB,EAAL,GACMs0B,CACJ,CADe,GACf,CADqBjrB,CACrB,CAD4B,YAC5B,CAAArJ,CAAA,CAAQq0B,CAAA,CAAcjG,CAAA7hB,cAAA,CAAuB+nB,CAAvB,CAAd,CAAiDlG,CAAA3jB,KAAA,CAAc6pB,CAAd,CAF3D,CAKA,IAAKt0B,CAAAA,CAAL;AAAessB,CAAAA,CAAf,CACE,KAAMH,GAAA,CAAe,OAAf,CAEF9iB,CAFE,CAEIwiB,CAFJ,CAAN,CAtBmB,CAAvB,IA0BO,IAAI7sB,CAAA,CAAQquB,CAAR,CAAJ,CAEL,IADArtB,CACgBU,CADR,EACQA,CAAPb,CAAOa,CAAH,CAAGA,CAAAA,CAAAA,CAAK2sB,CAAA1uB,OAArB,CAAqCkB,CAArC,CAAyCa,CAAzC,CAA6Cb,CAAA,EAA7C,CACEG,CAAA,CAAMH,CAAN,CAAA,CAAWq0B,CAAA,CAAerI,CAAf,CAA8BwB,CAAA,CAAQxtB,CAAR,CAA9B,CAA0CuuB,CAA1C,CAAoD+F,CAApD,CAIf,OAAOn0B,EAAP,EAAgB,IApC4D,CAuC9Eu0B,QAASA,EAAgB,CAACnG,CAAD,CAAWyC,CAAX,CAAkBtC,CAAlB,CAAgCiG,CAAhC,CAAsDnoB,CAAtD,CAAoE/B,CAApE,CAA2E,CAClG,IAAI6pB,EAAqB9uB,EAAA,EAAzB,CACSovB,CAAT,KAASA,CAAT,GAA0BD,EAA1B,CAAgD,CAC9C,IAAI9kB,EAAY8kB,CAAA,CAAqBC,CAArB,CAAhB,CACI9Q,EAAS,CACX+Q,OAAQhlB,CAAA,GAAcqkB,CAAd,EAA0CrkB,CAAAskB,eAA1C,CAAqE3nB,CAArE,CAAoF/B,CADjF,CAEX8jB,SAAUA,CAFC,CAGXuG,OAAQ9D,CAHG,CAIX+D,YAAarG,CAJF,CADb,CAQIjiB,EAAaoD,CAAApD,WACC,IAAlB,EAAIA,CAAJ,GACEA,CADF,CACeukB,CAAA,CAAMnhB,CAAArG,KAAN,CADf,CAIIwrB,EAAAA,CAAqBne,CAAA,CAAYpK,CAAZ,CAAwBqX,CAAxB,CAAgC,CAAA,CAAhC,CAAsCjU,CAAA8d,aAAtC,CAOzB2G,EAAA,CAAmBzkB,CAAArG,KAAnB,CAAA,CAAqCwrB,CAChCC,EAAL,EACE1G,CAAA3jB,KAAA,CAAc,GAAd,CAAoBiF,CAAArG,KAApB,CAAqC,YAArC,CAAmDwrB,CAAA9Q,SAAnD,CAvB4C,CA0BhD,MAAOoQ,EA5B2F,CA+BpGhE,QAASA,EAAU,CAACP,CAAD,CAActlB,CAAd,CAAqByqB,CAArB,CAA+BpF,CAA/B,CAA6C2B,CAA7C,CACC0D,CADD,CACa,CAyG9BC,QAASA,EAA0B,CAAC3qB,CAAD,CAAQ4qB,CAAR,CAAuB9F,CAAvB,CAA4C,CAC7E,IAAID,CAGC9sB,GAAA,CAAQiI,CAAR,CAAL,GACE8kB,CAEA,CAFsB8F,CAEtB,CADAA,CACA,CADgB5qB,CAChB,CAAAA,CAAA,CAAQhM,CAHV,CAMIw2B,EAAJ,GACE3F,CADF,CAC0BgF,CAD1B,CAGK/E,EAAL,GACEA,CADF,CACwB0F,CAAA,CAAgC1G,EAAA7sB,OAAA,EAAhC,CAAoD6sB,EAD5E,CAGA,OAAOkD,EAAA,CAAkBhnB,CAAlB,CAAyB4qB,CAAzB,CAAwC/F,CAAxC,CAA+DC,CAA/D,CAAoF+F,CAApF,CAhBsE,CAzGjD,IAC1Bt1B,CAD0B,CACnBwzB,CADmB,CACX/mB,CADW;AACCD,CADD,CACe8nB,CADf,CACmC5F,EADnC,CACiDH,EAG3EkF,EAAJ,GAAoByB,CAApB,EACElE,CACA,CADQ0C,CACR,CAAAnF,EAAA,CAAWmF,CAAArC,UAFb,GAIE9C,EACA,CADW/mB,CAAA,CAAO0tB,CAAP,CACX,CAAAlE,CAAA,CAAQ,IAAIE,EAAJ,CAAe3C,EAAf,CAAyBmF,CAAzB,CALV,CAQIQ,EAAJ,GACE1nB,CADF,CACiB/B,CAAA+lB,KAAA,CAAW,CAAA,CAAX,CADjB,CAIIiB,EAAJ,GAGE/C,EACA,CADe0G,CACf,CAAA1G,EAAAc,kBAAA,CAAiCiC,CAJnC,CAOIkD,GAAJ,GACEL,CADF,CACuBI,CAAA,CAAiBnG,EAAjB,CAA2ByC,CAA3B,CAAkCtC,EAAlC,CAAgDiG,EAAhD,CAAsEnoB,CAAtE,CAAoF/B,CAApF,CADvB,CAIIypB,EAAJ,GAEExpB,CAAAklB,eAAA,CAAuBrB,EAAvB,CAAiC/hB,CAAjC,CAA+C,CAAA,CAA/C,CAAqD,EAAE+oB,CAAF,GAAwBA,CAAxB,GAA8CrB,CAA9C,EACjDqB,CADiD,GAC3BrB,CAAAsB,oBAD2B,EAArD,CAKA,CAHA9qB,CAAAukB,gBAAA,CAAwBV,EAAxB,CAAkC,CAAA,CAAlC,CAGA,CAFA/hB,CAAAshB,kBAEA,CADIoG,CAAApG,kBACJ,CAAA2H,CAAA,CAA4BhrB,CAA5B,CAAmCumB,CAAnC,CAA0CxkB,CAA1C,CAC4BA,CAAAshB,kBAD5B,CAE4BoG,CAF5B,CAEsD1nB,CAFtD,CAPF,CAWA,IAAI8nB,CAAJ,CAAwB,CAEtB,IAAIoB,EAAiBxB,CAAjBwB,EAA6CC,CAAjD,CAEIC,CACAF,EAAJ,EAAsBpB,CAAA,CAAmBoB,CAAAlsB,KAAnB,CAAtB,GACE2iB,CAGA,CAHWuJ,CAAA7H,WAAAH,iBAGX,EAFAjhB,CAEA,CAFa6nB,CAAA,CAAmBoB,CAAAlsB,KAAnB,CAEb,GAAkBiD,CAAAopB,WAAlB,EAA2C1J,CAA3C,GACEyJ,CACA,CADwBnpB,CACxB,CAAA0oB,CAAA1E,kBAAA,CACIgF,CAAA,CAA4BhrB,CAA5B,CAAmCumB,CAAnC,CAA0CvkB,CAAAyX,SAA1C,CAC4BiI,CAD5B,CACsCuJ,CADtC,CAHN,CAJF,CAWA,KAAK11B,CAAL,GAAUs0B,EAAV,CAA8B,CAC5B7nB,CAAA,CAAa6nB,CAAA,CAAmBt0B,CAAnB,CACb,KAAI81B,GAAmBrpB,CAAA,EACnBqpB,GAAJ,GAAyBrpB,CAAAyX,SAAzB;CACEzX,CAAAyX,SAEA,CAFsB4R,EAEtB,CADAvH,EAAA3jB,KAAA,CAAc,GAAd,CAAoBiF,CAAArG,KAApB,CAAqC,YAArC,CAAmDssB,EAAnD,CACA,CAAIrpB,CAAJ,GAAmBmpB,CAAnB,GAEET,CAAA1E,kBAAA,EACA,CAAA0E,CAAA1E,kBAAA,CACEgF,CAAA,CAA4BhrB,CAA5B,CAAmCumB,CAAnC,CAA0C8E,EAA1C,CAA4D3J,CAA5D,CAAsEuJ,CAAtE,CAJJ,CAHF,CAH4B,CAhBR,CAiCnB11B,CAAA,CAAI,CAAT,KAAYa,CAAZ,CAAiBgzB,CAAA/0B,OAAjB,CAAoCkB,CAApC,CAAwCa,CAAxC,CAA4Cb,CAAA,EAA5C,CACEwzB,CACA,CADSK,CAAA,CAAW7zB,CAAX,CACT,CAAA+1B,CAAA,CAAavC,CAAb,CACIA,CAAAhnB,aAAA,CAAsBA,CAAtB,CAAqC/B,CADzC,CAEI8jB,EAFJ,CAGIyC,CAHJ,CAIIwC,CAAAhG,QAJJ,EAIsB6G,CAAA,CAAeb,CAAAxH,cAAf,CAAqCwH,CAAAhG,QAArC,CAAqDe,EAArD,CAA+D+F,CAA/D,CAJtB,CAKI5F,EALJ,CAYF,KAAI4G,EAAe7qB,CACfypB,EAAJ,GAAiCA,CAAA8B,SAAjC,EAA+G,IAA/G,GAAsE9B,CAAA+B,YAAtE,IACEX,CADF,CACiB9oB,CADjB,CAGAujB,EAAA,EAAeA,CAAA,CAAYuF,CAAZ,CAA0BJ,CAAApZ,WAA1B,CAA+Crd,CAA/C,CAA0DgzB,CAA1D,CAGf,KAAKzxB,CAAL,CAAS8zB,CAAAh1B,OAAT,CAA8B,CAA9B,CAAsC,CAAtC,EAAiCkB,CAAjC,CAAyCA,CAAA,EAAzC,CACEwzB,CACA,CADSM,CAAA,CAAY9zB,CAAZ,CACT,CAAA+1B,CAAA,CAAavC,CAAb,CACIA,CAAAhnB,aAAA,CAAsBA,CAAtB,CAAqC/B,CADzC,CAEI8jB,EAFJ,CAGIyC,CAHJ,CAIIwC,CAAAhG,QAJJ,EAIsB6G,CAAA,CAAeb,CAAAxH,cAAf,CAAqCwH,CAAAhG,QAArC,CAAqDe,EAArD,CAA+D+F,CAA/D,CAJtB,CAKI5F,EALJ,CA9F4B,CA5ShCG,CAAA,CAAyBA,CAAzB,EAAmD,EAqBnD,KAtBqD,IAGjDqH,EAAmB,CAAC9K,MAAAC,UAH6B,CAIjDsK,CAJiD,CAKjDhB,GAAuB9F,CAAA8F,qBAL0B,CAMjDT,EAA2BrF,CAAAqF,yBANsB;AAOjDqB,EAAoB1G,CAAA0G,kBAP6B,CAQjDY,EAA4BtH,CAAAsH,0BARqB,CASjDC,EAAyB,CAAA,CATwB,CAUjDC,EAAc,CAAA,CAVmC,CAWjDpB,EAAgCpG,CAAAoG,8BAXiB,CAYjDqB,EAAe5C,CAAArC,UAAfiF,CAAyC9uB,CAAA,CAAOisB,CAAP,CAZQ,CAajD5jB,CAbiD,CAcjDmc,CAdiD,CAejDuK,CAfiD,CAiBjDC,GAAoB9H,CAjB6B,CAkBjD8E,EAlBiD,CAsB5CxzB,EAAI,CAtBwC,CAsBrCa,EAAKysB,CAAAxuB,OAArB,CAAwCkB,CAAxC,CAA4Ca,CAA5C,CAAgDb,CAAA,EAAhD,CAAqD,CACnD6P,CAAA,CAAYyd,CAAA,CAAWttB,CAAX,CACZ,KAAIozB,GAAYvjB,CAAA4mB,QAAhB,CACIpD,EAAUxjB,CAAA6mB,MAGVtD,GAAJ,GACEkD,CADF,CACiBnD,EAAA,CAAUM,CAAV,CAAuBL,EAAvB,CAAkCC,CAAlC,CADjB,CAGAkD,EAAA,CAAY93B,CAEZ,IAAIy3B,CAAJ,CAAuBrmB,CAAA0d,SAAvB,CACE,KAGF,IAAIoJ,CAAJ,CAAqB9mB,CAAApF,MAArB,CAIOoF,CAAAomB,YAeL,GAdMn1B,CAAA,CAAS61B,CAAT,CAAJ,EAGEC,CAAA,CAAkB,oBAAlB,CAAwC1C,CAAxC,EAAoEyB,CAApE,CACkB9lB,CADlB,CAC6BymB,CAD7B,CAEA,CAAApC,CAAA,CAA2BrkB,CAL7B,EASE+mB,CAAA,CAAkB,oBAAlB,CAAwC1C,CAAxC,CAAkErkB,CAAlE,CACkBymB,CADlB,CAKJ,EAAAX,CAAA,CAAoBA,CAApB,EAAyC9lB,CAG3Cmc,EAAA,CAAgBnc,CAAArG,KAEXysB,EAAApmB,CAAAomB,YAAL,EAA8BpmB,CAAApD,WAA9B,GACEkqB,CAIA,CAJiB9mB,CAAApD,WAIjB,CAHAkoB,EAGA,CAHuBA,EAGvB,EAH+CnvB,EAAA,EAG/C,CAFAoxB,CAAA,CAAkB,GAAlB,CAAwB5K,CAAxB,CAAwC,cAAxC,CACI2I,EAAA,CAAqB3I,CAArB,CADJ,CACyCnc,CADzC,CACoDymB,CADpD,CAEA,CAAA3B,EAAA,CAAqB3I,CAArB,CAAA,CAAsCnc,CALxC,CAQA,IAAI8mB,CAAJ,CAAqB9mB,CAAAghB,WAArB,CACEuF,CAUA,CAVyB,CAAA,CAUzB,CALKvmB,CAAAgnB,MAKL,GAJED,CAAA,CAAkB,cAAlB;AAAkCT,CAAlC,CAA6DtmB,CAA7D,CAAwEymB,CAAxE,CACA,CAAAH,CAAA,CAA4BtmB,CAG9B,EAAsB,SAAtB,EAAI8mB,CAAJ,EACE1B,CASA,CATgC,CAAA,CAShC,CARAiB,CAQA,CARmBrmB,CAAA0d,SAQnB,CAPAgJ,CAOA,CAPYD,CAOZ,CANAA,CAMA,CANe5C,CAAArC,UAMf,CALI7pB,CAAA,CAAOhJ,CAAAs4B,cAAA,CAAuB,GAAvB,CAA6B9K,CAA7B,CAA6C,IAA7C,CACuB0H,CAAA,CAAc1H,CAAd,CADvB,CACsD,GADtD,CAAP,CAKJ,CAHAyH,CAGA,CAHc6C,CAAA,CAAa,CAAb,CAGd,CAFAS,CAAA,CAAYpD,CAAZ,CAvhNHxyB,EAAAzB,KAAA,CAuhNuC62B,CAvhNvC,CAA+B,CAA/B,CAuhNG,CAAgD9C,CAAhD,CAEA,CAAA+C,EAAA,CAAoB9rB,CAAA,CAAQ6rB,CAAR,CAAmB7H,CAAnB,CAAiCwH,CAAjC,CACQc,CADR,EAC4BA,CAAAxtB,KAD5B,CACmD,CAQzC2sB,0BAA2BA,CARc,CADnD,CAVtB,GAsBEI,CAEA,CAFY/uB,CAAA,CAAOgV,EAAA,CAAYiX,CAAZ,CAAP,CAAAwD,SAAA,EAEZ,CADAX,CAAA5uB,MAAA,EACA,CAAA8uB,EAAA,CAAoB9rB,CAAA,CAAQ6rB,CAAR,CAAmB7H,CAAnB,CAxBtB,CA4BF,IAAI7e,CAAAmmB,SAAJ,CAWE,GAVAK,CAUIruB,CAVU,CAAA,CAUVA,CATJ4uB,CAAA,CAAkB,UAAlB,CAA8BrB,CAA9B,CAAiD1lB,CAAjD,CAA4DymB,CAA5D,CASItuB,CARJutB,CAQIvtB,CARgB6H,CAQhB7H,CANJ2uB,CAMI3uB,CANcxI,CAAA,CAAWqQ,CAAAmmB,SAAX,CAAD,CACXnmB,CAAAmmB,SAAA,CAAmBM,CAAnB,CAAiC5C,CAAjC,CADW,CAEX7jB,CAAAmmB,SAIFhuB,CAFJ2uB,CAEI3uB,CAFakvB,EAAA,CAAoBP,CAApB,CAEb3uB,CAAA6H,CAAA7H,QAAJ,CAAuB,CACrBgvB,CAAA,CAAmBnnB,CAIjB0mB,EAAA,CAnkKJpb,EAAA3W,KAAA,CAgkKuBmyB,CAhkKvB,CAgkKE,CAGcQ,EAAA,CAAezH,EAAA,CAAa7f,CAAAunB,kBAAb,CAA0Cjb,CAAA,CAAKwa,CAAL,CAA1C,CAAf,CAHd,CACc,EAIdlD,EAAA,CAAc8C,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAAz3B,OAAJ,EAA6B20B,CAAAz0B,SAA7B,GAAsDC,EAAtD,CACE,KAAMqtB,GAAA,CAAe,OAAf,CAEFN,CAFE,CAEa,EAFb,CAAN,CAKF+K,CAAA,CAAYpD,CAAZ,CAA0B2C,CAA1B,CAAwC7C,CAAxC,CAEI4D,EAAAA,CAAmB,CAACrF,MAAO,EAAR,CAOnBsF,EAAAA,CAAqBnG,EAAA,CAAkBsC,CAAlB,CAA+B,EAA/B,CAAmC4D,CAAnC,CACzB,KAAIE,EAAwBjK,CAAA1pB,OAAA,CAAkB5D,CAAlB;AAAsB,CAAtB,CAAyBstB,CAAAxuB,OAAzB,EAA8CkB,CAA9C,CAAkD,CAAlD,EAExBk0B,EAAJ,EACEsD,CAAA,CAAwBF,CAAxB,CAEFhK,EAAA,CAAaA,CAAA7nB,OAAA,CAAkB6xB,CAAlB,CAAA7xB,OAAA,CAA6C8xB,CAA7C,CACbE,GAAA,CAAwB/D,CAAxB,CAAuC2D,CAAvC,CAEAx2B,EAAA,CAAKysB,CAAAxuB,OAjCgB,CAAvB,IAmCEw3B,EAAAxuB,KAAA,CAAkB6uB,CAAlB,CAIJ,IAAI9mB,CAAAomB,YAAJ,CACEI,CAeA,CAfc,CAAA,CAed,CAdAO,CAAA,CAAkB,UAAlB,CAA8BrB,CAA9B,CAAiD1lB,CAAjD,CAA4DymB,CAA5D,CAcA,CAbAf,CAaA,CAboB1lB,CAapB,CAXIA,CAAA7H,QAWJ,GAVEgvB,CAUF,CAVqBnnB,CAUrB,EAPAygB,CAOA,CAPaoH,EAAA,CAAmBpK,CAAA1pB,OAAA,CAAkB5D,CAAlB,CAAqBstB,CAAAxuB,OAArB,CAAyCkB,CAAzC,CAAnB,CAAgEs2B,CAAhE,CACT5C,CADS,CACMC,CADN,CACoByC,CADpB,EAC8CI,EAD9C,CACiE3C,CADjE,CAC6EC,CAD7E,CAC0F,CACjGa,qBAAsBA,EAD2E,CAEjGT,yBAA0BA,CAFuE,CAGjGqB,kBAAmBA,CAH8E,CAIjGY,0BAA2BA,CAJsE,CAD1F,CAOb,CAAAt1B,CAAA,CAAKysB,CAAAxuB,OAhBP,KAiBO,IAAI+Q,CAAAnF,QAAJ,CACL,GAAI,CACF8oB,EACA,CADS3jB,CAAAnF,QAAA,CAAkB4rB,CAAlB,CAAgC5C,CAAhC,CAA+C8C,EAA/C,CACT,CAAIh3B,CAAA,CAAWg0B,EAAX,CAAJ,CACEO,CAAA,CAAW,IAAX,CAAiBP,EAAjB,CAAyBJ,EAAzB,CAAoCC,CAApC,CADF,CAEWG,EAFX,EAGEO,CAAA,CAAWP,EAAAQ,IAAX,CAAuBR,EAAAS,KAAvB,CAAoCb,EAApC,CAA+CC,CAA/C,CALA,CAOF,MAAO1rB,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CAAqBJ,EAAA,CAAY+uB,CAAZ,CAArB,CADU,CAKVzmB,CAAAyhB,SAAJ,GACEhB,CAAAgB,SACA,CADsB,CAAA,CACtB,CAAA4E,CAAA,CAAmByB,IAAAC,IAAA,CAAS1B,CAAT,CAA2BrmB,CAAA0d,SAA3B,CAFrB,CAtKmD,CA6KrD+C,CAAA7lB,MAAA,CAAmBkrB,CAAnB,EAAoE,CAAA,CAApE,GAAwCA,CAAAlrB,MACxC6lB,EAAAK,wBAAA;AAAqCyF,CACrC9F,EAAAQ,+BAAA,CAA4CmE,CAC5C3E,EAAAS,sBAAA,CAAmCsF,CACnC/F,EAAAO,WAAA,CAAwB2F,EAExB3H,EAAAoG,8BAAA,CAAuDA,CAGvD,OAAO3E,EA5M8C,CA2avDkH,QAASA,EAAuB,CAAClK,CAAD,CAAa,CAE3C,IAF2C,IAElCvsB,EAAI,CAF8B,CAE3BC,EAAKssB,CAAAxuB,OAArB,CAAwCiC,CAAxC,CAA4CC,CAA5C,CAAgDD,CAAA,EAAhD,CACEusB,CAAA,CAAWvsB,CAAX,CAAA,CAAgBU,EAAA,CAAQ6rB,CAAA,CAAWvsB,CAAX,CAAR,CAAuB,CAACozB,eAAgB,CAAA,CAAjB,CAAvB,CAHyB,CAqB7ClC,QAASA,EAAY,CAAC4F,CAAD,CAAcruB,CAAd,CAAoB6B,CAApB,CAA8BsjB,CAA9B,CAA2CC,CAA3C,CAA4DkJ,CAA5D,CACCC,CADD,CACc,CACjC,GAAIvuB,CAAJ,GAAaolB,CAAb,CAA8B,MAAO,KACjC/pB,EAAAA,CAAQ,IACZ,IAAI+nB,CAAAntB,eAAA,CAA6B+J,CAA7B,CAAJ,CAAwC,CAAA,IAC7BqG,CAAWyd,EAAAA,CAAa/I,CAAA9Y,IAAA,CAAcjC,CAAd,CA51C1B6jB,WA41C0B,CAAjC,KADsC,IAElCrtB,EAAI,CAF8B,CAE3Ba,EAAKysB,CAAAxuB,OADhB,CACmCkB,CADnC,CACuCa,CADvC,CAC2Cb,CAAA,EAD3C,CAEE,GAAI,CACF6P,CACA,CADYyd,CAAA,CAAWttB,CAAX,CACZ,EAAK2uB,CAAL,GAAqBlwB,CAArB,EAAkCkwB,CAAlC,CAAgD9e,CAAA0d,SAAhD,GAC8C,EAD9C,EACK1d,CAAA4d,SAAA9pB,QAAA,CAA2B0H,CAA3B,CADL,GAEMysB,CAIJ,GAHEjoB,CAGF,CAHcpO,EAAA,CAAQoO,CAAR,CAAmB,CAAC4mB,QAASqB,CAAV,CAAyBpB,MAAOqB,CAAhC,CAAnB,CAGd,EADAF,CAAAxzB,KAAA,CAAiBwL,CAAjB,CACA,CAAAhL,CAAA,CAAQgL,CANV,CAFE,CAUF,MAAOlI,CAAP,CAAU,CAAEsP,CAAA,CAAkBtP,CAAlB,CAAF,CAbwB,CAgBxC,MAAO9C,EAnB0B,CA+BnC+tB,QAASA,EAAuB,CAACppB,CAAD,CAAO,CACrC,GAAIojB,CAAAntB,eAAA,CAA6B+J,CAA7B,CAAJ,CACE,IADsC,IAClB8jB;AAAa/I,CAAA9Y,IAAA,CAAcjC,CAAd,CAz3C1B6jB,WAy3C0B,CADK,CAElCrtB,EAAI,CAF8B,CAE3Ba,EAAKysB,CAAAxuB,OADhB,CACmCkB,CADnC,CACuCa,CADvC,CAC2Cb,CAAA,EAD3C,CAGE,GADA6P,CACImoB,CADQ1K,CAAA,CAAWttB,CAAX,CACRg4B,CAAAnoB,CAAAmoB,aAAJ,CACE,MAAO,CAAA,CAIb,OAAO,CAAA,CAV8B,CAqBvCP,QAASA,GAAuB,CAAC/2B,CAAD,CAAMO,CAAN,CAAW,CAAA,IACrCg3B,EAAUh3B,CAAA+wB,MAD2B,CAErCkG,EAAUx3B,CAAAsxB,MAF2B,CAGrCzD,EAAW7tB,CAAA2wB,UAGfjyB,EAAA,CAAQsB,CAAR,CAAa,QAAQ,CAACP,CAAD,CAAQZ,CAAR,CAAa,CACX,GAArB,EAAIA,CAAA0F,OAAA,CAAW,CAAX,CAAJ,GACMhE,CAAA,CAAI1B,CAAJ,CAGJ,EAHgB0B,CAAA,CAAI1B,CAAJ,CAGhB,GAH6BY,CAG7B,GAFEA,CAEF,GAFoB,OAAR,GAAAZ,CAAA,CAAkB,GAAlB,CAAwB,GAEpC,EAF2C0B,CAAA,CAAI1B,CAAJ,CAE3C,EAAAmB,CAAAy3B,KAAA,CAAS54B,CAAT,CAAcY,CAAd,CAAqB,CAAA,CAArB,CAA2B83B,CAAA,CAAQ14B,CAAR,CAA3B,CAJF,CADgC,CAAlC,CAUAH,EAAA,CAAQ6B,CAAR,CAAa,QAAQ,CAACd,CAAD,CAAQZ,CAAR,CAAa,CACrB,OAAX,EAAIA,CAAJ,EACE+uB,CAAA,CAAaC,CAAb,CAAuBpuB,CAAvB,CACA,CAAAO,CAAA,CAAI,OAAJ,CAAA,EAAgBA,CAAA,CAAI,OAAJ,CAAA,CAAeA,CAAA,CAAI,OAAJ,CAAf,CAA8B,GAA9B,CAAoC,EAApD,EAA0DP,CAF5D,EAGkB,OAAX,EAAIZ,CAAJ,EACLgvB,CAAAvrB,KAAA,CAAc,OAAd,CAAuBurB,CAAAvrB,KAAA,CAAc,OAAd,CAAvB,CAAgD,GAAhD,CAAsD7C,CAAtD,CACA,CAAAO,CAAA,MAAA,EAAgBA,CAAA,MAAA,CAAeA,CAAA,MAAf,CAA8B,GAA9B,CAAoC,EAApD,EAA0DP,CAFrD,EAMqB,GANrB,EAMIZ,CAAA0F,OAAA,CAAW,CAAX,CANJ,EAM6BvE,CAAAjB,eAAA,CAAmBF,CAAnB,CAN7B,GAOLmB,CAAA,CAAInB,CAAJ,CACA,CADWY,CACX,CAAA+3B,CAAA,CAAQ34B,CAAR,CAAA,CAAe04B,CAAA,CAAQ14B,CAAR,CARV,CAJyB,CAAlC,CAhByC,CAkC3Cm4B,QAASA,GAAkB,CAACpK,CAAD,CAAagJ,CAAb,CAA2B8B,CAA3B,CACvBtI,CADuB,CACT0G,CADS,CACU3C,CADV;AACsBC,CADtB,CACmCjF,CADnC,CAC2D,CAAA,IAChFwJ,EAAY,EADoE,CAEhFC,CAFgF,CAGhFC,CAHgF,CAIhFC,EAA4BlC,CAAA,CAAa,CAAb,CAJoD,CAKhFmC,EAAqBnL,CAAAzJ,MAAA,EAL2D,CAMhF6U,EAAuBj3B,EAAA,CAAQg3B,CAAR,CAA4B,CACjDxC,YAAa,IADoC,CAC9BpF,WAAY,IADkB,CACZ7oB,QAAS,IADG,CACGwtB,oBAAqBiD,CADxB,CAA5B,CANyD,CAShFxC,EAAez2B,CAAA,CAAWi5B,CAAAxC,YAAX,CAAD,CACRwC,CAAAxC,YAAA,CAA+BK,CAA/B,CAA6C8B,CAA7C,CADQ,CAERK,CAAAxC,YAX0E,CAYhFmB,EAAoBqB,CAAArB,kBAExBd,EAAA5uB,MAAA,EAEA2R,EAAA,CAAiBR,CAAA8f,sBAAA,CAA2B1C,CAA3B,CAAjB,CAAA2C,KAAA,CACQ,QAAQ,CAACC,CAAD,CAAU,CAAA,IAClBpF,CADkB,CACyBxD,CAE/C4I,EAAA,CAAU3B,EAAA,CAAoB2B,CAApB,CAEV,IAAIJ,CAAAzwB,QAAJ,CAAgC,CAI5BuuB,CAAA,CAz/KJpb,EAAA3W,KAAA,CAs/KuBq0B,CAt/KvB,CAs/KE,CAGc1B,EAAA,CAAezH,EAAA,CAAa0H,CAAb,CAAgCjb,CAAA,CAAK0c,CAAL,CAAhC,CAAf,CAHd,CACc,EAIdpF,EAAA,CAAc8C,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAAz3B,OAAJ,EAA6B20B,CAAAz0B,SAA7B,GAAsDC,EAAtD,CACE,KAAMqtB,GAAA,CAAe,OAAf,CAEFmM,CAAAjvB,KAFE,CAEuBysB,CAFvB,CAAN,CAKF6C,CAAA,CAAoB,CAAC9G,MAAO,EAAR,CACpB+E,EAAA,CAAYjH,CAAZ,CAA0BwG,CAA1B,CAAwC7C,CAAxC,CACA,KAAI6D,EAAqBnG,EAAA,CAAkBsC,CAAlB,CAA+B,EAA/B,CAAmCqF,CAAnC,CAErBh4B,EAAA,CAAS23B,CAAAhuB,MAAT,CAAJ,EACE+sB,CAAA,CAAwBF,CAAxB,CAEFhK,EAAA,CAAagK,CAAA7xB,OAAA,CAA0B6nB,CAA1B,CACbmK,GAAA,CAAwBW,CAAxB,CAAgCU,CAAhC,CAtB8B,CAAhC,IAwBErF,EACA,CADc+E,CACd,CAAAlC,CAAAxuB,KAAA,CAAkB+wB,CAAlB,CAGFvL,EAAApjB,QAAA,CAAmBwuB,CAAnB,CAEAJ,EAAA,CAA0BlH,CAAA,CAAsB9D,CAAtB,CAAkCmG,CAAlC,CAA+C2E,CAA/C,CACtB5B,CADsB,CACHF,CADG,CACWmC,CADX,CAC+B5E,CAD/B;AAC2CC,CAD3C,CAEtBjF,CAFsB,CAG1BzvB,EAAA,CAAQ0wB,CAAR,CAAsB,QAAQ,CAACjtB,CAAD,CAAO7C,CAAP,CAAU,CAClC6C,CAAJ,EAAY4wB,CAAZ,GACE3D,CAAA,CAAa9vB,CAAb,CADF,CACoBs2B,CAAA,CAAa,CAAb,CADpB,CADsC,CAAxC,CAOA,KAFAiC,CAEA,CAF2BvJ,CAAA,CAAasH,CAAA,CAAa,CAAb,CAAAxa,WAAb,CAAyC0a,CAAzC,CAE3B,CAAO6B,CAAAv5B,OAAP,CAAA,CAAyB,CACnB2L,CAAAA,CAAQ4tB,CAAAxU,MAAA,EACRkV,EAAAA,CAAyBV,CAAAxU,MAAA,EAFN,KAGnBmV,EAAkBX,CAAAxU,MAAA,EAHC,CAInB4N,EAAoB4G,CAAAxU,MAAA,EAJD,CAKnBqR,EAAWoB,CAAA,CAAa,CAAb,CAEf,IAAI2C,CAAAxuB,CAAAwuB,YAAJ,CAAA,CAEA,GAAIF,CAAJ,GAA+BP,CAA/B,CAA0D,CACxD,IAAIU,GAAaH,CAAAvK,UAEXK,EAAAoG,8BAAN,EACIwD,CAAAzwB,QADJ,GAGEktB,CAHF,CAGa1Y,EAAA,CAAYiX,CAAZ,CAHb,CAKAsD,EAAA,CAAYiC,CAAZ,CAA6BxxB,CAAA,CAAOuxB,CAAP,CAA7B,CAA6D7D,CAA7D,CAGA5G,EAAA,CAAa9mB,CAAA,CAAO0tB,CAAP,CAAb,CAA+BgE,EAA/B,CAXwD,CAcxDjJ,CAAA,CADEqI,CAAA3H,wBAAJ,CAC2BC,EAAA,CAAwBnmB,CAAxB,CAA+B6tB,CAAAzH,WAA/B,CAAmEY,CAAnE,CAD3B,CAG2BA,CAE3B6G,EAAA,CAAwBC,CAAxB,CAAkD9tB,CAAlD,CAAyDyqB,CAAzD,CAAmEpF,CAAnE,CACEG,CADF,CAC0BqI,CAD1B,CApBA,CAPuB,CA8BzBD,CAAA,CAAY,IA3EU,CAD1B,CA+EA,OAAOc,SAA0B,CAACC,CAAD,CAAoB3uB,CAApB,CAA2B5H,CAA3B,CAAiC2I,CAAjC,CAA8CimB,CAA9C,CAAiE,CAC5FxB,CAAAA,CAAyBwB,CACzBhnB,EAAAwuB,YAAJ,GACIZ,CAAJ,CACEA,CAAAh0B,KAAA,CAAeoG,CAAf,CACe5H,CADf,CAEe2I,CAFf,CAGeykB,CAHf,CADF,EAMMqI,CAAA3H,wBAGJ,GAFEV,CAEF,CAF2BW,EAAA,CAAwBnmB,CAAxB,CAA+B6tB,CAAAzH,WAA/B,CAAmEY,CAAnE,CAE3B,EAAA6G,CAAA,CAAwBC,CAAxB,CAAkD9tB,CAAlD,CAAyD5H,CAAzD,CAA+D2I,CAA/D,CAA4EykB,CAA5E,CACwBqI,CADxB,CATF,CADA,CAFgG,CA/Fd,CAqHtFpF,QAASA,GAAU,CAACviB,CAAD,CAAI+V,CAAJ,CAAO,CACxB,IAAI2S,EAAO3S,CAAA6G,SAAP8L;AAAoB1oB,CAAA4c,SACxB,OAAa,EAAb,GAAI8L,CAAJ,CAAuBA,CAAvB,CACI1oB,CAAAnH,KAAJ,GAAekd,CAAAld,KAAf,CAA+BmH,CAAAnH,KAAD,CAAUkd,CAAAld,KAAV,CAAqB,EAArB,CAAyB,CAAvD,CACOmH,CAAAjN,MADP,CACiBgjB,CAAAhjB,MAJO,CAQ1BkzB,QAASA,EAAiB,CAAC0C,CAAD,CAAOC,CAAP,CAA0B1pB,CAA1B,CAAqCvM,CAArC,CAA8C,CACtE,GAAIi2B,CAAJ,CACE,KAAMjN,GAAA,CAAe,UAAf,CACFiN,CAAA/vB,KADE,CACsBqG,CAAArG,KADtB,CACsC8vB,CADtC,CAC4C/xB,EAAA,CAAYjE,CAAZ,CAD5C,CAAN,CAFoE,CAQxE0vB,QAASA,GAA2B,CAAC1F,CAAD,CAAakM,CAAb,CAAmB,CACrD,IAAIC,EAAgBpiB,CAAA,CAAamiB,CAAb,CAAmB,CAAA,CAAnB,CAChBC,EAAJ,EACEnM,CAAAjpB,KAAA,CAAgB,CACdkpB,SAAU,CADI,CAEd7iB,QAASgvB,QAAiC,CAACC,CAAD,CAAe,CACnDC,CAAAA,CAAqBD,CAAAj4B,OAAA,EAAzB,KACIm4B,EAAmB,CAAE/6B,CAAA86B,CAAA96B,OAIrB+6B,EAAJ,EAAsBnvB,CAAAovB,kBAAA,CAA0BF,CAA1B,CAEtB,OAAOG,SAA8B,CAACtvB,CAAD,CAAQ5H,CAAR,CAAc,CACjD,IAAInB,EAASmB,CAAAnB,OAAA,EACRm4B,EAAL,EAAuBnvB,CAAAovB,kBAAA,CAA0Bp4B,CAA1B,CACvBgJ,EAAAsvB,iBAAA,CAAyBt4B,CAAzB,CAAiC+3B,CAAAQ,YAAjC,CACAxvB,EAAA/H,OAAA,CAAa+2B,CAAb,CAA4BS,QAAiC,CAAC/5B,CAAD,CAAQ,CACnE0C,CAAA,CAAK,CAAL,CAAAisB,UAAA,CAAoB3uB,CAD+C,CAArE,CAJiD,CARI,CAF3C,CAAhB,CAHmD,CA2BvDuvB,QAASA,GAAY,CAACzS,CAAD,CAAO+Y,CAAP,CAAiB,CACpC/Y,CAAA,CAAO1Z,CAAA,CAAU0Z,CAAV,EAAkB,MAAlB,CACP,QAAQA,CAAR,EACA,KAAK,KAAL,CACA,KAAK,MAAL,CACE,IAAIkd,EAAU37B,CAAA6c,cAAA,CAAuB,KAAvB,CACd8e;CAAAxe,UAAA,CAAoB,GAApB,CAA0BsB,CAA1B,CAAiC,GAAjC,CAAuC+Y,CAAvC,CAAkD,IAAlD,CAAyD/Y,CAAzD,CAAgE,GAChE,OAAOkd,EAAAre,WAAA,CAAmB,CAAnB,CAAAA,WACT,SACE,MAAOka,EAPT,CAFoC,CActCoE,QAASA,EAAiB,CAACv3B,CAAD,CAAOw3B,CAAP,CAA2B,CACnD,GAA0B,QAA1B,EAAIA,CAAJ,CACE,MAAOxhB,EAAAyhB,KAET,KAAIrwB,EAAM5G,EAAA,CAAUR,CAAV,CAEV,IAA0B,WAA1B,EAAIw3B,CAAJ,EACY,MADZ,EACKpwB,CADL,EAC4C,QAD5C,EACsBowB,CADtB,EAEY,KAFZ,EAEKpwB,CAFL,GAE4C,KAF5C,EAEsBowB,CAFtB,EAG4C,OAH5C,EAGsBA,CAHtB,EAIE,MAAOxhB,EAAA0hB,aAV0C,CAerDzH,QAASA,EAA2B,CAACjwB,CAAD,CAAOyqB,CAAP,CAAmBntB,CAAnB,CAA0BqJ,CAA1B,CAAgCgxB,CAAhC,CAA8C,CAChF,IAAIC,EAAiBL,CAAA,CAAkBv3B,CAAlB,CAAwB2G,CAAxB,CACrBgxB,EAAA,CAAezN,CAAA,CAAqBvjB,CAArB,CAAf,EAA6CgxB,CAE7C,KAAIf,EAAgBpiB,CAAA,CAAalX,CAAb,CAAoB,CAAA,CAApB,CAA0Bs6B,CAA1B,CAA0CD,CAA1C,CAGpB,IAAKf,CAAL,CAAA,CAGA,GAAa,UAAb,GAAIjwB,CAAJ,EAA+C,QAA/C,GAA2BnG,EAAA,CAAUR,CAAV,CAA3B,CACE,KAAMypB,GAAA,CAAe,UAAf,CAEF/kB,EAAA,CAAY1E,CAAZ,CAFE,CAAN,CAKFyqB,CAAAjpB,KAAA,CAAgB,CACdkpB,SAAU,GADI,CAEd7iB,QAASA,QAAQ,EAAG,CAChB,MAAO,CACLspB,IAAK0G,QAAiC,CAACjwB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CACvD23B,CAAAA,CAAe33B,CAAA23B,YAAfA,GAAoC33B,CAAA23B,YAApCA,CAAuD,EAAvDA,CAEJ,IAAI1N,CAAAzoB,KAAA,CAA+BgF,CAA/B,CAAJ,CACE,KAAM8iB,GAAA,CAAe,aAAf,CAAN;AAMF,IAAIsO,EAAW53B,CAAA,CAAKwG,CAAL,CACXoxB,EAAJ,GAAiBz6B,CAAjB,GAIEs5B,CACA,CADgBmB,CAChB,EAD4BvjB,CAAA,CAAaujB,CAAb,CAAuB,CAAA,CAAvB,CAA6BH,CAA7B,CAA6CD,CAA7C,CAC5B,CAAAr6B,CAAA,CAAQy6B,CALV,CAUKnB,EAAL,GAKAz2B,CAAA,CAAKwG,CAAL,CAGA,CAHaiwB,CAAA,CAAchvB,CAAd,CAGb,CADAowB,CAACF,CAAA,CAAYnxB,CAAZ,CAADqxB,GAAuBF,CAAA,CAAYnxB,CAAZ,CAAvBqxB,CAA2C,EAA3CA,UACA,CAD0D,CAAA,CAC1D,CAAAn4B,CAACM,CAAA23B,YAADj4B,EAAqBM,CAAA23B,YAAA,CAAiBnxB,CAAjB,CAAAsxB,QAArBp4B,EAAuD+H,CAAvD/H,QAAA,CACS+2B,CADT,CACwBS,QAAiC,CAACU,CAAD,CAAWG,CAAX,CAAqB,CAO7D,OAAb,GAAIvxB,CAAJ,EAAwBoxB,CAAxB,EAAoCG,CAApC,CACE/3B,CAAAg4B,aAAA,CAAkBJ,CAAlB,CAA4BG,CAA5B,CADF,CAGE/3B,CAAAm1B,KAAA,CAAU3uB,CAAV,CAAgBoxB,CAAhB,CAVwE,CAD9E,CARA,CArB2D,CADxD,CADS,CAFN,CAAhB,CATA,CAPgF,CAgFlF7D,QAASA,EAAW,CAACjH,CAAD,CAAemL,CAAf,CAAiCC,CAAjC,CAA0C,CAAA,IACxDC,EAAuBF,CAAA,CAAiB,CAAjB,CADiC,CAExDG,EAAcH,CAAAn8B,OAF0C,CAGxD4C,EAASy5B,CAAApc,WAH+C,CAIxD/e,CAJwD,CAIrDa,CAEP,IAAIivB,CAAJ,CACE,IAAK9vB,CAAO,CAAH,CAAG,CAAAa,CAAA,CAAKivB,CAAAhxB,OAAjB,CAAsCkB,CAAtC,CAA0Ca,CAA1C,CAA8Cb,CAAA,EAA9C,CACE,GAAI8vB,CAAA,CAAa9vB,CAAb,CAAJ,EAAuBm7B,CAAvB,CAA6C,CAC3CrL,CAAA,CAAa9vB,CAAA,EAAb,CAAA,CAAoBk7B,CACJG,EAAAA,CAAKt6B,CAALs6B,CAASD,CAATC,CAAuB,CAAvC,KAAS,IACAr6B,EAAK8uB,CAAAhxB,OADd,CAEKiC,CAFL,CAESC,CAFT,CAEaD,CAAA,EAAA,CAAKs6B,CAAA,EAFlB,CAGMA,CAAJ,CAASr6B,CAAT,CACE8uB,CAAA,CAAa/uB,CAAb,CADF,CACoB+uB,CAAA,CAAauL,CAAb,CADpB,CAGE,OAAOvL,CAAA,CAAa/uB,CAAb,CAGX+uB,EAAAhxB,OAAA,EAAuBs8B,CAAvB,CAAqC,CAKjCtL,EAAAxwB,QAAJ,GAA6B67B,CAA7B,GACErL,CAAAxwB,QADF,CACyB47B,CADzB,CAGA,MAnB2C,CAwB7Cx5B,CAAJ,EACEA,CAAA45B,aAAA,CAAoBJ,CAApB,CAA6BC,CAA7B,CAIElgB,EAAAA,CAAWzc,CAAA0c,uBAAA,EACfD,EAAAG,YAAA,CAAqB+f,CAArB,CAKA3zB;CAAA,CAAO0zB,CAAP,CAAAtwB,KAAA,CAAqBpD,CAAA,CAAO2zB,CAAP,CAAAvwB,KAAA,EAArB,CAKKyB,GAAL,EAUEU,EACA,CADmC,CAAA,CACnC,CAAAV,EAAAM,UAAA,CAAiB,CAACwuB,CAAD,CAAjB,CAXF,EACE,OAAO3zB,CAAA+b,MAAA,CAAa4X,CAAA,CAAqB3zB,CAAA+zB,QAArB,CAAb,CAaAC,EAAAA,CAAI,CAAb,KAAgBC,CAAhB,CAAqBR,CAAAn8B,OAArB,CAA8C08B,CAA9C,CAAkDC,CAAlD,CAAsDD,CAAA,EAAtD,CACMl4B,CAGJ,CAHc23B,CAAA,CAAiBO,CAAjB,CAGd,CAFAh0B,CAAA,CAAOlE,CAAP,CAAAkoB,OAAA,EAEA,CADAvQ,CAAAG,YAAA,CAAqB9X,CAArB,CACA,CAAA,OAAO23B,CAAA,CAAiBO,CAAjB,CAGTP,EAAA,CAAiB,CAAjB,CAAA,CAAsBC,CACtBD,EAAAn8B,OAAA,CAA0B,CAtEkC,CA0E9Ds1B,QAASA,EAAkB,CAACtuB,CAAD,CAAK41B,CAAL,CAAiB,CAC1C,MAAOx6B,EAAA,CAAO,QAAQ,EAAG,CAAE,MAAO4E,EAAAG,MAAA,CAAS,IAAT,CAAe7E,SAAf,CAAT,CAAlB,CAAyD0E,CAAzD,CAA6D41B,CAA7D,CADmC,CAK5C3F,QAASA,EAAY,CAACvC,CAAD,CAAS/oB,CAAT,CAAgB8jB,CAAhB,CAA0ByC,CAA1B,CAAiCY,CAAjC,CAA8ClD,CAA9C,CAA4D,CAC/E,GAAI,CACF8E,CAAA,CAAO/oB,CAAP,CAAc8jB,CAAd,CAAwByC,CAAxB,CAA+BY,CAA/B,CAA4ClD,CAA5C,CADE,CAEF,MAAO/mB,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CAAqBJ,EAAA,CAAYgnB,CAAZ,CAArB,CADU,CAHmE,CAWjFkH,QAASA,EAA2B,CAAChrB,CAAD,CAAQumB,CAAR,CAAejtB,CAAf,CAA4BooB,CAA5B,CACCtc,CADD,CACY8rB,CADZ,CACsB,CACxD,IAAIC,CACJx8B,EAAA,CAAQ+sB,CAAR,CAAkB,QAAQ,CAACC,CAAD,CAAaC,CAAb,CAAwB,CAAA,IAC5CK,EAAWN,CAAAM,SADiC,CAEhDD,EAAWL,CAAAK,SAFqC,CAIhDoP,CAJgD,CAKhDC,CALgD,CAKrCC,CALqC,CAK1BC,CAEtB,QAJO5P,CAAAG,KAIP,EAEE,KAAK,GAAL,CACEyE,CAAAiL,SAAA,CAAevP,CAAf,CAAyB,QAAQ,CAACvsB,CAAD,CAAQ,CACvC4D,CAAA,CAAYsoB,CAAZ,CAAA,CAAyBlsB,CADc,CAAzC,CAGA6wB,EAAA2J,YAAA,CAAkBjO,CAAlB,CAAAoO,QAAA,CAAsCrwB,CAClCumB,EAAA,CAAMtE,CAAN,CAAJ,GAGE3oB,CAAA,CAAYsoB,CAAZ,CAHF,CAG2BhV,CAAA,CAAa2Z,CAAA,CAAMtE,CAAN,CAAb,CAAA,CAA8BjiB,CAA9B,CAH3B,CAKA;KAEF,MAAK,GAAL,CACE,GAAIgiB,CAAJ,EAAiB,CAAAuE,CAAA,CAAMtE,CAAN,CAAjB,CACE,KAEFoP,EAAA,CAAYzjB,CAAA,CAAO2Y,CAAA,CAAMtE,CAAN,CAAP,CAEVsP,EAAA,CADEF,CAAAI,QAAJ,CACYh3B,EADZ,CAGY82B,QAAQ,CAACrrB,CAAD,CAAI+V,CAAJ,CAAO,CAAE,MAAO/V,EAAP,GAAa+V,CAAb,EAAmB/V,CAAnB,GAAyBA,CAAzB,EAA8B+V,CAA9B,GAAoCA,CAAtC,CAE3BqV,EAAA,CAAYD,CAAAK,OAAZ,EAAgC,QAAQ,EAAG,CAEzCN,CAAA,CAAY93B,CAAA,CAAYsoB,CAAZ,CAAZ,CAAqCyP,CAAA,CAAUrxB,CAAV,CACrC,MAAM6hB,GAAA,CAAe,WAAf,CAEF0E,CAAA,CAAMtE,CAAN,CAFE,CAEe7c,CAAArG,KAFf,CAAN,CAHyC,CAO3CqyB,EAAA,CAAY93B,CAAA,CAAYsoB,CAAZ,CAAZ,CAAqCyP,CAAA,CAAUrxB,CAAV,CACjC2xB,EAAAA,CAAmBA,QAAyB,CAACC,CAAD,CAAc,CACvDL,CAAA,CAAQK,CAAR,CAAqBt4B,CAAA,CAAYsoB,CAAZ,CAArB,CAAL,GAEO2P,CAAA,CAAQK,CAAR,CAAqBR,CAArB,CAAL,CAKEE,CAAA,CAAUtxB,CAAV,CAAiB4xB,CAAjB,CAA+Bt4B,CAAA,CAAYsoB,CAAZ,CAA/B,CALF,CAEEtoB,CAAA,CAAYsoB,CAAZ,CAFF,CAE2BgQ,CAJ7B,CAUA,OAAOR,EAAP,CAAmBQ,CAXyC,CAa9DD,EAAAE,UAAA,CAA6B,CAAA,CAG3BC,EAAA,CADEnQ,CAAAI,WAAJ,CACY/hB,CAAA+xB,iBAAA,CAAuBxL,CAAA,CAAMtE,CAAN,CAAvB,CAAwC0P,CAAxC,CADZ,CAGY3xB,CAAA/H,OAAA,CAAa2V,CAAA,CAAO2Y,CAAA,CAAMtE,CAAN,CAAP,CAAwB0P,CAAxB,CAAb,CAAwD,IAAxD,CAA8DN,CAAAI,QAA9D,CAEZN,EAAA,CAAuBA,CAAvB,EAA8C,EAC9CA,EAAAv3B,KAAA,CAAyBk4B,CAAzB,CACA,MAEF,MAAK,GAAL,CAEE,GAAK,CAAAvL,CAAAvxB,eAAA,CAAqBitB,CAArB,CAAL,EAAuCD,CAAvC,CAAiD,KAEjDqP,EAAA,CAAYzjB,CAAA,CAAO2Y,CAAA,CAAMtE,CAAN,CAAP,CAGZ,IAAIoP,CAAJ,GAAkBj6B,CAAlB,EAA0B4qB,CAA1B,CAAoC,KAEpC1oB,EAAA,CAAYsoB,CAAZ,CAAA,CAAyB,QAAQ,CAACvI,CAAD,CAAS,CACxC,MAAOgY,EAAA,CAAUrxB,CAAV,CAAiBqZ,CAAjB,CADiC,CAjE9C,CAPgD,CAAlD,CA8EIyM,EAAAA,CAAkBqL,CAAA,CAAsBrL,QAAwB,EAAG,CACrE,IADqE,IAC5DvwB,EAAI,CADwD,CACrDa,EAAK+6B,CAAA98B,OAArB,CAAiDkB,CAAjD;AAAqDa,CAArD,CAAyD,EAAEb,CAA3D,CACE47B,CAAA,CAAoB57B,CAApB,CAAA,EAFmE,CAAjD,CAIlB6B,CACJ,OAAI85B,EAAJ,EAAgBpL,CAAhB,GAAoC1uB,CAApC,EACE85B,CAAAjL,IAAA,CAAa,UAAb,CAAyBH,CAAzB,CACO1uB,CAAAA,CAFT,EAIO0uB,CAzFiD,CApiD1D,IAAIW,GAAaA,QAAQ,CAAC5tB,CAAD,CAAUm5B,CAAV,CAA4B,CACnD,GAAIA,CAAJ,CAAsB,CACpB,IAAI38B,EAAOf,MAAAe,KAAA,CAAY28B,CAAZ,CAAX,CACIz8B,CADJ,CACO+c,CADP,CACUxd,CAELS,EAAA,CAAI,CAAT,KAAY+c,CAAZ,CAAgBjd,CAAAhB,OAAhB,CAA6BkB,CAA7B,CAAiC+c,CAAjC,CAAoC/c,CAAA,EAApC,CACET,CACA,CADMO,CAAA,CAAKE,CAAL,CACN,CAAA,IAAA,CAAKT,CAAL,CAAA,CAAYk9B,CAAA,CAAiBl9B,CAAjB,CANM,CAAtB,IASE,KAAAyyB,MAAA,CAAa,EAGf,KAAAX,UAAA,CAAiB/tB,CAbkC,CAgBrD4tB,GAAA/M,UAAA,CAAuB,CAgBrBuY,WAAYxK,EAhBS,CA8BrByK,UAAWA,QAAQ,CAACC,CAAD,CAAW,CACxBA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAA99B,OAAhB,EACEqX,CAAAiL,SAAA,CAAkB,IAAAiQ,UAAlB,CAAkCuL,CAAlC,CAF0B,CA9BT,CA+CrBC,aAAcA,QAAQ,CAACD,CAAD,CAAW,CAC3BA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAA99B,OAAhB,EACEqX,CAAAkL,YAAA,CAAqB,IAAAgQ,UAArB,CAAqCuL,CAArC,CAF6B,CA/CZ,CAiErB5B,aAAcA,QAAQ,CAAC8B,CAAD,CAAa5D,CAAb,CAAyB,CAC7C,IAAI6D,EAAQC,EAAA,CAAgBF,CAAhB,CAA4B5D,CAA5B,CACR6D,EAAJ,EAAaA,CAAAj+B,OAAb,EACEqX,CAAAiL,SAAA,CAAkB,IAAAiQ,UAAlB,CAAkC0L,CAAlC,CAIF,EADIE,CACJ,CADeD,EAAA,CAAgB9D,CAAhB,CAA4B4D,CAA5B,CACf,GAAgBG,CAAAn+B,OAAhB,EACEqX,CAAAkL,YAAA,CAAqB,IAAAgQ,UAArB,CAAqC4L,CAArC,CAR2C,CAjE1B;AAsFrB9E,KAAMA,QAAQ,CAAC54B,CAAD,CAAMY,CAAN,CAAa+8B,CAAb,CAAwBxQ,CAAxB,CAAkC,CAAA,IAK1C7pB,EAAO,IAAAwuB,UAAA,CAAe,CAAf,CALmC,CAM1C8L,EAAaxd,EAAA,CAAmB9c,CAAnB,CAAyBtD,CAAzB,CAN6B,CAO1C69B,EAAard,EAAA,CAAmBld,CAAnB,CAAyBtD,CAAzB,CAP6B,CAQ1C89B,EAAW99B,CAGX49B,EAAJ,EACE,IAAA9L,UAAAtuB,KAAA,CAAoBxD,CAApB,CAAyBY,CAAzB,CACA,CAAAusB,CAAA,CAAWyQ,CAFb,EAGWC,CAHX,GAIE,IAAA,CAAKA,CAAL,CACA,CADmBj9B,CACnB,CAAAk9B,CAAA,CAAWD,CALb,CAQA,KAAA,CAAK79B,CAAL,CAAA,CAAYY,CAGRusB,EAAJ,CACE,IAAAsF,MAAA,CAAWzyB,CAAX,CADF,CACoBmtB,CADpB,EAGEA,CAHF,CAGa,IAAAsF,MAAA,CAAWzyB,CAAX,CAHb,IAKI,IAAAyyB,MAAA,CAAWzyB,CAAX,CALJ,CAKsBmtB,CALtB,CAKiChhB,EAAA,CAAWnM,CAAX,CAAgB,GAAhB,CALjC,CASAuD,EAAA,CAAWO,EAAA,CAAU,IAAAguB,UAAV,CAEX,IAAkB,GAAlB,GAAKvuB,CAAL,EAAiC,MAAjC,GAAyBvD,CAAzB,EACkB,KADlB,GACKuD,CADL,EACmC,KADnC,GAC2BvD,CAD3B,CAGE,IAAA,CAAKA,CAAL,CAAA,CAAYY,CAAZ,CAAoBqQ,CAAA,CAAcrQ,CAAd,CAA6B,KAA7B,GAAqBZ,CAArB,CAHtB,KAIO,IAAiB,KAAjB,GAAIuD,CAAJ,EAAkC,QAAlC,GAA0BvD,CAA1B,CAA4C,CAejD,IAbI6E,IAAAA,EAAS,EAATA,CAGAk5B,EAAgBnhB,CAAA,CAAKhc,CAAL,CAHhBiE,CAKAm5B,EAAa,qCALbn5B,CAMA0Q,EAAU,IAAAtQ,KAAA,CAAU84B,CAAV,CAAA,CAA2BC,CAA3B,CAAwC,KANlDn5B,CASAo5B,EAAUF,CAAAl6B,MAAA,CAAoB0R,CAApB,CATV1Q,CAYAq5B,EAAoB9F,IAAA+F,MAAA,CAAWF,CAAA1+B,OAAX,CAA4B,CAA5B,CAZpBsF,CAaKpE,EAAI,CAAb,CAAgBA,CAAhB,CAAoBy9B,CAApB,CAAuCz9B,CAAA,EAAvC,CACE,IAAI29B,EAAe,CAAfA,CAAW39B,CAAf,CAEAoE,EAAAA,CAAAA,CAAUoM,CAAA,CAAc2L,CAAA,CAAKqhB,CAAA,CAAQG,CAAR,CAAL,CAAd,CAAuC,CAAA,CAAvC,CAFV,CAIAv5B,EAAAA,CAAAA,EAAW,GAAXA,CAAiB+X,CAAA,CAAKqhB,CAAA,CAAQG,CAAR,CAAmB,CAAnB,CAAL,CAAjBv5B,CAIEw5B;CAAAA,CAAYzhB,CAAA,CAAKqhB,CAAA,CAAY,CAAZ,CAAQx9B,CAAR,CAAL,CAAAoD,MAAA,CAA2B,IAA3B,CAGhBgB,EAAA,EAAUoM,CAAA,CAAc2L,CAAA,CAAKyhB,CAAA,CAAU,CAAV,CAAL,CAAd,CAAkC,CAAA,CAAlC,CAGe,EAAzB,GAAIA,CAAA9+B,OAAJ,GACEsF,CADF,EACa,GADb,CACmB+X,CAAA,CAAKyhB,CAAA,CAAU,CAAV,CAAL,CADnB,CAGA,KAAA,CAAKr+B,CAAL,CAAA,CAAYY,CAAZ,CAAoBiE,CAjC6B,CAoCjC,CAAA,CAAlB,GAAI84B,CAAJ,GACgB,IAAd,GAAI/8B,CAAJ,EAAsBA,CAAtB,GAAgC1B,CAAhC,CACE,IAAA4yB,UAAAwM,WAAA,CAA0BnR,CAA1B,CADF,CAGE,IAAA2E,UAAAruB,KAAA,CAAoB0pB,CAApB,CAA8BvsB,CAA9B,CAJJ,CAUA,EADIw6B,CACJ,CADkB,IAAAA,YAClB,GAAev7B,CAAA,CAAQu7B,CAAA,CAAY0C,CAAZ,CAAR,CAA+B,QAAQ,CAACv3B,CAAD,CAAK,CACzD,GAAI,CACFA,CAAA,CAAG3F,CAAH,CADE,CAEF,MAAOwH,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CAH6C,CAA5C,CAnF+B,CAtF3B,CAqMrBs0B,SAAUA,QAAQ,CAAC18B,CAAD,CAAMuG,CAAN,CAAU,CAAA,IACtBkrB,EAAQ,IADc,CAEtB2J,EAAe3J,CAAA2J,YAAfA,GAAqC3J,CAAA2J,YAArCA,CAAyDn1B,EAAA,EAAzDm1B,CAFsB,CAGtBmD,EAAanD,CAAA,CAAYp7B,CAAZ,CAAbu+B,GAAkCnD,CAAA,CAAYp7B,CAAZ,CAAlCu+B,CAAqD,EAArDA,CAEJA,EAAAz5B,KAAA,CAAeyB,CAAf,CACAyS,EAAA9V,WAAA,CAAsB,QAAQ,EAAG,CAC1Bo4B,CAAAiD,CAAAjD,QAAL,EAA0B7J,CAAAvxB,eAAA,CAAqBF,CAArB,CAA1B,EAEEuG,CAAA,CAAGkrB,CAAA,CAAMzxB,CAAN,CAAH,CAH6B,CAAjC,CAOA,OAAO,SAAQ,EAAG,CAChBiE,EAAA,CAAYs6B,CAAZ,CAAuBh4B,CAAvB,CADgB,CAbQ,CArMP,CAlB+D,KAqPlFi4B,GAAc1mB,CAAA0mB,YAAA,EArPoE,CAsPlFC,GAAY3mB,CAAA2mB,UAAA,EAtPsE,CAuPlF9G,GAAsC,IAAhB,EAAC6G,EAAD,EAAsC,IAAtC,EAAwBC,EAAxB,CAChBl8B,EADgB,CAEhBo1B,QAA4B,CAAClB,CAAD,CAAW,CACvC,MAAOA,EAAAhuB,QAAA,CAAiB,OAAjB;AAA0B+1B,EAA1B,CAAA/1B,QAAA,CAA+C,KAA/C,CAAsDg2B,EAAtD,CADgC,CAzPqC,CA4PlFvL,GAAkB,cAEtB/nB,EAAAsvB,iBAAA,CAA2B5vB,CAAA,CAAmB4vB,QAAyB,CAACzL,CAAD,CAAW0P,CAAX,CAAoB,CACzF,IAAI9R,EAAWoC,CAAA3jB,KAAA,CAAc,UAAd,CAAXuhB,EAAwC,EAExChtB,EAAA,CAAQ8+B,CAAR,CAAJ,CACE9R,CADF,CACaA,CAAA1mB,OAAA,CAAgBw4B,CAAhB,CADb,CAGE9R,CAAA9nB,KAAA,CAAc45B,CAAd,CAGF1P,EAAA3jB,KAAA,CAAc,UAAd,CAA0BuhB,CAA1B,CATyF,CAAhE,CAUvBtqB,CAEJ6I,EAAAovB,kBAAA,CAA4B1vB,CAAA,CAAmB0vB,QAA0B,CAACvL,CAAD,CAAW,CAClFD,CAAA,CAAaC,CAAb,CAAuB,YAAvB,CADkF,CAAxD,CAExB1sB,CAEJ6I,EAAAklB,eAAA,CAAyBxlB,CAAA,CAAmBwlB,QAAuB,CAACrB,CAAD,CAAW9jB,CAAX,CAAkByzB,CAAlB,CAA4BC,CAA5B,CAAwC,CAEzG5P,CAAA3jB,KAAA,CADeszB,CAAAzJ,CAAY0J,CAAA,CAAa,yBAAb,CAAyC,eAArD1J,CAAwE,QACvF,CAAwBhqB,CAAxB,CAFyG,CAAlF,CAGrB5I,CAEJ6I,EAAAukB,gBAAA,CAA0B7kB,CAAA,CAAmB6kB,QAAwB,CAACV,CAAD,CAAW2P,CAAX,CAAqB,CACxF5P,CAAA,CAAaC,CAAb,CAAuB2P,CAAA,CAAW,kBAAX,CAAgC,UAAvD,CADwF,CAAhE,CAEtBr8B,CAEJ,OAAO6I,EAvR+E,CAJ5E,CA/O6C,CA43D3DwnB,QAASA,GAAkB,CAAC1oB,CAAD,CAAO,CAChC,MAAO+Q,GAAA,CAAU/Q,CAAAxB,QAAA,CAAa0qB,EAAb,CAA4B,EAA5B,CAAV,CADyB,CAgElCsK,QAASA,GAAe,CAACoB,CAAD,CAAOC,CAAP,CAAa,CAAA,IAC/BC,EAAS,EADsB,CAE/BC,EAAUH,CAAAh7B,MAAA,CAAW,KAAX,CAFqB,CAG/Bo7B,EAAUH,CAAAj7B,MAAA,CAAW,KAAX,CAHqB;AAM1BpD,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBu+B,CAAAz/B,OAApB,CAAoCkB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAIy+B,EAAQF,CAAA,CAAQv+B,CAAR,CAAZ,CACSe,EAAI,CAAb,CAAgBA,CAAhB,CAAoBy9B,CAAA1/B,OAApB,CAAoCiC,CAAA,EAApC,CACE,GAAI09B,CAAJ,EAAaD,CAAA,CAAQz9B,CAAR,CAAb,CAAyB,SAAS,CAEpCu9B,EAAA,GAA2B,CAAhB,CAAAA,CAAAx/B,OAAA,CAAoB,GAApB,CAA0B,EAArC,EAA2C2/B,CALJ,CAOzC,MAAOH,EAb4B,CAgBrCnH,QAASA,GAAc,CAACuH,CAAD,CAAU,CAC/BA,CAAA,CAAUl3B,CAAA,CAAOk3B,CAAP,CACV,KAAI1+B,EAAI0+B,CAAA5/B,OAER,IAAS,CAAT,EAAIkB,CAAJ,CACE,MAAO0+B,EAGT,KAAA,CAAO1+B,CAAA,EAAP,CAAA,CA/xNsBizB,CAiyNpB,GADWyL,CAAA77B,CAAQ7C,CAAR6C,CACP7D,SAAJ,EACE4E,EAAAlE,KAAA,CAAYg/B,CAAZ,CAAqB1+B,CAArB,CAAwB,CAAxB,CAGJ,OAAO0+B,EAdwB,CAwCjC5nB,QAASA,GAAmB,EAAG,CAAA,IACzB8a,EAAc,EADW,CAEzB+M,EAAU,CAAA,CAUd,KAAAC,SAAA,CAAgBC,QAAQ,CAACr1B,CAAD,CAAO/E,CAAP,CAAoB,CAC1CiJ,EAAA,CAAwBlE,CAAxB,CAA8B,YAA9B,CACI1I,EAAA,CAAS0I,CAAT,CAAJ,CACEtI,CAAA,CAAO0wB,CAAP,CAAoBpoB,CAApB,CADF,CAGEooB,CAAA,CAAYpoB,CAAZ,CAHF,CAGsB/E,CALoB,CAc5C,KAAAq6B,aAAA,CAAoBC,QAAQ,EAAG,CAC7BJ,CAAA,CAAU,CAAA,CADmB,CAK/B,KAAA3d,KAAA,CAAY,CAAC,WAAD,CAAc,SAAd,CAAyB,QAAQ,CAACuD,CAAD,CAAY5K,CAAZ,CAAqB,CAyGhEqlB,QAASA,EAAa,CAAClb,CAAD,CAAS+R,CAAT,CAAqB3R,CAArB,CAA+B1a,CAA/B,CAAqC,CACzD,GAAMsa,CAAAA,CAAN,EAAgB,CAAAhjB,CAAA,CAASgjB,CAAA+Q,OAAT,CAAhB,CACE,KAAMn2B,EAAA,CAAO,aAAP,CAAA,CAAsB,OAAtB,CAEJ8K,CAFI,CAEEqsB,CAFF,CAAN,CAKF/R,CAAA+Q,OAAA,CAAcgB,CAAd,CAAA,CAA4B3R,CAP6B,CA5E3D,MAAO,SAAQ,CAAC+a,CAAD;AAAanb,CAAb,CAAqBob,CAArB,CAA4BC,CAA5B,CAAmC,CAAA,IAQ5Cjb,CAR4C,CAQ3Bzf,CAR2B,CAQdoxB,CAClCqJ,EAAA,CAAkB,CAAA,CAAlB,GAAQA,CACJC,EAAJ,EAAajgC,CAAA,CAASigC,CAAT,CAAb,GACEtJ,CADF,CACesJ,CADf,CAIA,IAAIjgC,CAAA,CAAS+/B,CAAT,CAAJ,CAA0B,CACxBp6B,CAAA,CAAQo6B,CAAAp6B,MAAA,CAAiB+oB,EAAjB,CACR,IAAK/oB,CAAAA,CAAL,CACE,KAAMu6B,GAAA,CAAkB,SAAlB,CAE8CH,CAF9C,CAAN,CAIFx6B,CAAA,CAAcI,CAAA,CAAM,CAAN,CACdgxB,EADA,CACaA,CADb,EAC2BhxB,CAAA,CAAM,CAAN,CAC3Bo6B,EAAA,CAAarN,CAAAnyB,eAAA,CAA2BgF,CAA3B,CAAA,CACPmtB,CAAA,CAAYntB,CAAZ,CADO,CAEPkJ,EAAA,CAAOmW,CAAA+Q,OAAP,CAAsBpwB,CAAtB,CAAmC,CAAA,CAAnC,CAFO,GAGJk6B,CAAA,CAAUhxB,EAAA,CAAOgM,CAAP,CAAgBlV,CAAhB,CAA6B,CAAA,CAA7B,CAAV,CAA+ChG,CAH3C,CAKb+O,GAAA,CAAYyxB,CAAZ,CAAwBx6B,CAAxB,CAAqC,CAAA,CAArC,CAdwB,CAiB1B,GAAIy6B,CAAJ,CAoBE,MATIG,EASiB,CATKlb,CAAChlB,CAAA,CAAQ8/B,CAAR,CAAA,CACzBA,CAAA,CAAWA,CAAAngC,OAAX,CAA+B,CAA/B,CADyB,CACWmgC,CADZ9a,WASL,CAPrBD,CAOqB,CAPVnlB,MAAA6C,OAAA,CAAcy9B,CAAd,EAAqC,IAArC,CAOU,CALjBxJ,CAKiB,EAJnBmJ,CAAA,CAAclb,CAAd,CAAsB+R,CAAtB,CAAkC3R,CAAlC,CAA4Czf,CAA5C,EAA2Dw6B,CAAAz1B,KAA3D,CAImB,CAAAtI,CAAA,CAAO,QAAQ,EAAG,CACrC,IAAIkD,EAASmgB,CAAAha,OAAA,CAAiB00B,CAAjB,CAA6B/a,CAA7B,CAAuCJ,CAAvC,CAA+Crf,CAA/C,CACTL,EAAJ,GAAe8f,CAAf,GAA4BpjB,CAAA,CAASsD,CAAT,CAA5B,EAAgD5E,CAAA,CAAW4E,CAAX,CAAhD,IACE8f,CACA,CADW9f,CACX,CAAIyxB,CAAJ,EAEEmJ,CAAA,CAAclb,CAAd,CAAsB+R,CAAtB,CAAkC3R,CAAlC,CAA4Czf,CAA5C,EAA2Dw6B,CAAAz1B,KAA3D,CAJJ,CAOA,OAAO0a,EAT8B,CAAlB,CAUlB,CACDA,SAAUA,CADT,CAED2R,WAAYA,CAFX,CAVkB,CAgBvB3R,EAAA,CAAWK,CAAAhC,YAAA,CAAsB0c,CAAtB,CAAkCnb,CAAlC,CAA0Crf,CAA1C,CAEPoxB,EAAJ,EACEmJ,CAAA,CAAclb,CAAd,CAAsB+R,CAAtB,CAAkC3R,CAAlC,CAA4Czf,CAA5C,EAA2Dw6B,CAAAz1B,KAA3D,CAGF,OAAO0a,EAzEyC,CA7Bc,CAAtD,CA/BiB,CA6K/BlN,QAASA,GAAiB,EAAG,CAC3B,IAAAgK,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAACziB,CAAD,CAAS,CACvC,MAAOiJ,EAAA,CAAOjJ,CAAAC,SAAP,CADgC,CAA7B,CADe,CAxyRU;AAs1RvC0Y,QAASA,GAAyB,EAAG,CACnC,IAAA8J,KAAA,CAAY,CAAC,MAAD,CAAS,QAAQ,CAAC7I,CAAD,CAAO,CAClC,MAAO,SAAQ,CAACmnB,CAAD,CAAYC,CAAZ,CAAmB,CAChCpnB,CAAAkP,MAAAphB,MAAA,CAAiBkS,CAAjB,CAAuB/W,SAAvB,CADgC,CADA,CAAxB,CADuB,CAiBrCo+B,QAASA,GAAc,CAACC,CAAD,CAAI,CACzB,MAAI3+B,EAAA,CAAS2+B,CAAT,CAAJ,CACSp9B,EAAA,CAAOo9B,CAAP,CAAA,CAAYA,CAAAC,YAAA,EAAZ,CAA8Bv5B,EAAA,CAAOs5B,CAAP,CADvC,CAGOA,CAJkB,CAQ3B7nB,QAASA,GAA4B,EAAG,CAatC,IAAAoJ,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO0e,SAA0B,CAACC,CAAD,CAAS,CACxC,GAAKA,CAAAA,CAAL,CAAa,MAAO,EACpB,KAAIr3B,EAAQ,EACZ1I,GAAA,CAAc+/B,CAAd,CAAsB,QAAQ,CAACz/B,CAAD,CAAQZ,CAAR,CAAa,CAC3B,IAAd,GAAIY,CAAJ,EAAsB8B,CAAA,CAAY9B,CAAZ,CAAtB,GACIhB,CAAA,CAAQgB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAACs/B,CAAD,CAAIjE,CAAJ,CAAO,CAC5BjzB,CAAAlE,KAAA,CAAWoE,EAAA,CAAelJ,CAAf,CAAX,CAAkC,GAAlC,CAAwCkJ,EAAA,CAAe+2B,EAAA,CAAeC,CAAf,CAAf,CAAxC,CAD4B,CAA9B,CADF,CAKEl3B,CAAAlE,KAAA,CAAWoE,EAAA,CAAelJ,CAAf,CAAX,CAAiC,GAAjC,CAAuCkJ,EAAA,CAAe+2B,EAAA,CAAer/B,CAAf,CAAf,CAAvC,CANF,CADyC,CAA3C,CAWA,OAAOoI,EAAAG,KAAA,CAAW,GAAX,CAdiC,CADrB,CAbe,CAiCxCoP,QAASA,GAAkC,EAAG,CAQ5C,IAAAkJ,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO4e,SAAkC,CAACD,CAAD,CAAS,CAMhDE,QAASA,EAAS,CAACC,CAAD,CAAcx2B,CAAd,CAAsBy2B,CAAtB,CAAgC,CAC5B,IAApB,GAAID,CAAJ,EAA4B99B,CAAA,CAAY89B,CAAZ,CAA5B,GACI5gC,CAAA,CAAQ4gC,CAAR,CAAJ,CACE3gC,CAAA,CAAQ2gC,CAAR,CAAqB,QAAQ,CAAC5/B,CAAD,CAAQ,CACnC2/B,CAAA,CAAU3/B,CAAV,CAAiBoJ,CAAjB,CAA0B,IAA1B,CADmC,CAArC,CADF,CAIWzI,CAAA,CAASi/B,CAAT,CAAJ;AAA8B,CAAA19B,EAAA,CAAO09B,CAAP,CAA9B,CACLlgC,EAAA,CAAckgC,CAAd,CAA2B,QAAQ,CAAC5/B,CAAD,CAAQZ,CAAR,CAAa,CAC9CugC,CAAA,CAAU3/B,CAAV,CAAiBoJ,CAAjB,EACKy2B,CAAA,CAAW,EAAX,CAAgB,GADrB,EAEIzgC,CAFJ,EAGKygC,CAAA,CAAW,EAAX,CAAgB,GAHrB,EAD8C,CAAhD,CADK,CAQLz3B,CAAAlE,KAAA,CAAWoE,EAAA,CAAec,CAAf,CAAX,CAAoC,GAApC,CAA0Cd,EAAA,CAAe+2B,EAAA,CAAeO,CAAf,CAAf,CAA1C,CAbF,CADgD,CALlD,GAAKH,CAAAA,CAAL,CAAa,MAAO,EACpB,KAAIr3B,EAAQ,EACZu3B,EAAA,CAAUF,CAAV,CAAkB,EAAlB,CAAsB,CAAA,CAAtB,CACA,OAAOr3B,EAAAG,KAAA,CAAW,GAAX,CAJyC,CAD7B,CARqB,CAoC9Cu3B,QAASA,GAA4B,CAACr1B,CAAD,CAAOs1B,CAAP,CAAgB,CACnD,GAAIhhC,CAAA,CAAS0L,CAAT,CAAJ,CAAoB,CAElB,IAAIu1B,EAAWv1B,CAAA5C,QAAA,CAAao4B,EAAb,CAAqC,EAArC,CAAAjkB,KAAA,EAEf,IAAIgkB,CAAJ,CAAc,CACZ,IAAIE,EAAcH,CAAA,CAAQ,cAAR,CACd,EAAC,CAAD,CAAC,CAAD,EAAC,CAAD,GAAC,CAAA,QAAA,CAAA,EAAA,CAAD,IAWN,CAXM,EAUFI,CAVE,CAAkE/+B,CAUxDsD,MAAA,CAAU07B,EAAV,CAVV,GAWcC,EAAA,CAAUF,CAAA,CAAU,CAAV,CAAV,CAAA97B,KAAA,CAXoDjD,CAWpD,CAXd,CAAA,EAAJ,GACEqJ,CADF,CACSrE,EAAA,CAAS45B,CAAT,CADT,CAFY,CAJI,CAYpB,MAAOv1B,EAb4C,CA2BrD61B,QAASA,GAAY,CAACP,CAAD,CAAU,CAAA,IACzB7jB,EAAS7W,EAAA,EADgB,CACHxF,CAQtBd,EAAA,CAASghC,CAAT,CAAJ,CACE9gC,CAAA,CAAQ8gC,CAAA98B,MAAA,CAAc,IAAd,CAAR,CAA6B,QAAQ,CAACs9B,CAAD,CAAO,CAC1C1gC,CAAA,CAAI0gC,CAAA/8B,QAAA,CAAa,GAAb,CACS,KAAA,EAAAJ,CAAA,CAAU4Y,CAAA,CAAKukB,CAAAxX,OAAA,CAAY,CAAZ,CAAelpB,CAAf,CAAL,CAAV,CAAoC,EAAA,CAAAmc,CAAA,CAAKukB,CAAAxX,OAAA,CAAYlpB,CAAZ,CAAgB,CAAhB,CAAL,CAR/CT,EAAJ,GACE8c,CAAA,CAAO9c,CAAP,CADF,CACgB8c,CAAA,CAAO9c,CAAP,CAAA,CAAc8c,CAAA,CAAO9c,CAAP,CAAd,CAA4B,IAA5B,CAAmC4E,CAAnC,CAAyCA,CADzD,CAM4C,CAA5C,CADF,CAKWrD,CAAA,CAASo/B,CAAT,CALX,EAME9gC,CAAA,CAAQ8gC,CAAR,CAAiB,QAAQ,CAACS,CAAD,CAAYC,CAAZ,CAAuB,CACjC,IAAA;AAAAr9B,CAAA,CAAUq9B,CAAV,CAAA,CAAsB,EAAAzkB,CAAA,CAAKwkB,CAAL,CAZjCphC,EAAJ,GACE8c,CAAA,CAAO9c,CAAP,CADF,CACgB8c,CAAA,CAAO9c,CAAP,CAAA,CAAc8c,CAAA,CAAO9c,CAAP,CAAd,CAA4B,IAA5B,CAAmC4E,CAAnC,CAAyCA,CADzD,CAWgD,CAAhD,CAKF,OAAOkY,EApBsB,CAoC/BwkB,QAASA,GAAa,CAACX,CAAD,CAAU,CAC9B,IAAIY,CAEJ,OAAO,SAAQ,CAACt3B,CAAD,CAAO,CACfs3B,CAAL,GAAiBA,CAAjB,CAA+BL,EAAA,CAAaP,CAAb,CAA/B,CAEA,OAAI12B,EAAJ,EACMrJ,CAIGA,CAJK2gC,CAAA,CAAWv9B,CAAA,CAAUiG,CAAV,CAAX,CAILrJ,CAHO,IAAK,EAGZA,GAHHA,CAGGA,GAFLA,CAEKA,CAFG,IAEHA,EAAAA,CALT,EAQO2gC,CAXa,CAHQ,CA8BhCC,QAASA,GAAa,CAACn2B,CAAD,CAAOs1B,CAAP,CAAgBc,CAAhB,CAAwBC,CAAxB,CAA6B,CACjD,GAAIzhC,CAAA,CAAWyhC,CAAX,CAAJ,CACE,MAAOA,EAAA,CAAIr2B,CAAJ,CAAUs1B,CAAV,CAAmBc,CAAnB,CAGT5hC,EAAA,CAAQ6hC,CAAR,CAAa,QAAQ,CAACn7B,CAAD,CAAK,CACxB8E,CAAA,CAAO9E,CAAA,CAAG8E,CAAH,CAASs1B,CAAT,CAAkBc,CAAlB,CADiB,CAA1B,CAIA,OAAOp2B,EAT0C,CAwBnD8M,QAASA,GAAa,EAAG,CAiCvB,IAAIwpB,EAAW,IAAAA,SAAXA,CAA2B,CAE7BC,kBAAmB,CAAClB,EAAD,CAFU,CAK7BmB,iBAAkB,CAAC,QAAQ,CAACC,CAAD,CAAI,CAC7B,MAAOvgC,EAAA,CAASugC,CAAT,CAAA,EAn5QmB,eAm5QnB,GAn5QJ/+B,EAAA5C,KAAA,CAm5Q2B2hC,CAn5Q3B,CAm5QI,EAz4QmB,eAy4QnB,GAz4QJ/+B,EAAA5C,KAAA,CAy4QyC2hC,CAz4QzC,CAy4QI,EA94QmB,mBA84QnB,GA94QJ/+B,EAAA5C,KAAA,CA84Q2D2hC,CA94Q3D,CA84QI,CAA4Dl7B,EAAA,CAAOk7B,CAAP,CAA5D,CAAwEA,CADlD,CAAb,CALW,CAU7BnB,QAAS,CACPoB,OAAQ,CACN,OAAU,mCADJ,CADD,CAIPrN,KAAQjvB,EAAA,CAAYu8B,EAAZ,CAJD;AAKP3f,IAAQ5c,EAAA,CAAYu8B,EAAZ,CALD,CAMPC,MAAQx8B,EAAA,CAAYu8B,EAAZ,CAND,CAVoB,CAmB7BE,eAAgB,YAnBa,CAoB7BC,eAAgB,cApBa,CAsB7BC,gBAAiB,sBAtBY,CAA/B,CAyBIC,EAAgB,CAAA,CAoBpB,KAAAA,cAAA,CAAqBC,QAAQ,CAAC1hC,CAAD,CAAQ,CACnC,MAAI+B,EAAA,CAAU/B,CAAV,CAAJ,EACEyhC,CACO,CADS,CAAEzhC,CAAAA,CACX,CAAA,IAFT,EAIOyhC,CAL4B,CAqBrC,KAAIE,EAAuB,IAAAC,aAAvBD,CAA2C,EAE/C,KAAA9gB,KAAA,CAAY,CAAC,cAAD,CAAiB,gBAAjB,CAAmC,eAAnC,CAAoD,YAApD,CAAkE,IAAlE,CAAwE,WAAxE,CACR,QAAQ,CAACjJ,CAAD,CAAesC,CAAf,CAA+B1D,CAA/B,CAA8C4B,CAA9C,CAA0DE,CAA1D,CAA8D8L,CAA9D,CAAyE,CA+hBnF9M,QAASA,EAAK,CAACuqB,CAAD,CAAgB,CA+E5Bb,QAASA,EAAiB,CAACc,CAAD,CAAW,CAEnC,IAAIC,EAAOhhC,CAAA,CAAO,EAAP,CAAW+gC,CAAX,CAITC,EAAAt3B,KAAA,CAHGq3B,CAAAr3B,KAAL,CAGcm2B,EAAA,CAAckB,CAAAr3B,KAAd,CAA6Bq3B,CAAA/B,QAA7B,CAA+C+B,CAAAjB,OAA/C,CAAgE13B,CAAA63B,kBAAhE,CAHd,CACcc,CAAAr3B,KAIIo2B,EAAAA,CAAAiB,CAAAjB,OAAlB,OAtuBC,IAsuBM,EAtuBCA,CAsuBD,EAtuBoB,GAsuBpB,CAtuBWA,CAsuBX,CACHkB,CADG,CAEHzpB,CAAA0pB,OAAA,CAAUD,CAAV,CAV+B,CAarCE,QAASA,EAAgB,CAAClC,CAAD,CAAU52B,CAAV,CAAkB,CAAA,IACrC+4B,CADqC;AACtBC,EAAmB,EAEtCljC,EAAA,CAAQ8gC,CAAR,CAAiB,QAAQ,CAACqC,CAAD,CAAWC,CAAX,CAAmB,CACtChjC,CAAA,CAAW+iC,CAAX,CAAJ,EACEF,CACA,CADgBE,CAAA,CAASj5B,CAAT,CAChB,CAAqB,IAArB,EAAI+4B,CAAJ,GACEC,CAAA,CAAiBE,CAAjB,CADF,CAC6BH,CAD7B,CAFF,EAMEC,CAAA,CAAiBE,CAAjB,CANF,CAM6BD,CAPa,CAA5C,CAWA,OAAOD,EAdkC,CA1F3C,GAAK,CAAAv3B,EAAAjK,SAAA,CAAiBkhC,CAAjB,CAAL,CACE,KAAMtjC,EAAA,CAAO,OAAP,CAAA,CAAgB,QAAhB,CAA0FsjC,CAA1F,CAAN,CAGF,IAAI14B,EAASpI,CAAA,CAAO,CAClB4N,OAAQ,KADU,CAElBsyB,iBAAkBF,CAAAE,iBAFA,CAGlBD,kBAAmBD,CAAAC,kBAHD,CAIlBQ,gBAAiBT,CAAAS,gBAJC,CAAP,CAKVK,CALU,CAOb14B,EAAA42B,QAAA,CAgGAuC,QAAqB,CAACn5B,CAAD,CAAS,CAAA,IACxBo5B,EAAaxB,CAAAhB,QADW,CAExByC,EAAazhC,CAAA,CAAO,EAAP,CAAWoI,CAAA42B,QAAX,CAFW,CAGxB0C,CAHwB,CAGTC,CAHS,CAGeC,CAHf,CAK5BJ,EAAaxhC,CAAA,CAAO,EAAP,CAAWwhC,CAAApB,OAAX,CAA8BoB,CAAA,CAAWn/B,CAAA,CAAU+F,CAAAwF,OAAV,CAAX,CAA9B,CAGb,EAAA,CACA,IAAK8zB,CAAL,GAAsBF,EAAtB,CAAkC,CAChCG,CAAA,CAAyBt/B,CAAA,CAAUq/B,CAAV,CAEzB,KAAKE,CAAL,GAAsBH,EAAtB,CACE,GAAIp/B,CAAA,CAAUu/B,CAAV,CAAJ,GAAiCD,CAAjC,CACE,SAAS,CAIbF,EAAA,CAAWC,CAAX,CAAA,CAA4BF,CAAA,CAAWE,CAAX,CATI,CAalC,MAAOR,EAAA,CAAiBO,CAAjB,CAA6B39B,EAAA,CAAYsE,CAAZ,CAA7B,CAtBqB,CAhGb,CAAa04B,CAAb,CACjB14B,EAAAwF,OAAA,CAAgBoB,EAAA,CAAU5G,CAAAwF,OAAV,CAChBxF,EAAAq4B,gBAAA,CAAyBziC,CAAA,CAASoK,CAAAq4B,gBAAT,CAAA,CACvBpd,CAAA9Y,IAAA,CAAcnC,CAAAq4B,gBAAd,CADuB;AACiBr4B,CAAAq4B,gBAuB1C,KAAIoB,EAAQ,CArBQC,QAAQ,CAAC15B,CAAD,CAAS,CACnC,IAAI42B,EAAU52B,CAAA42B,QAAd,CACI+C,EAAUlC,EAAA,CAAcz3B,CAAAsB,KAAd,CAA2Bi2B,EAAA,CAAcX,CAAd,CAA3B,CAAmDzhC,CAAnD,CAA8D6K,CAAA83B,iBAA9D,CAGVn/B,EAAA,CAAYghC,CAAZ,CAAJ,EACE7jC,CAAA,CAAQ8gC,CAAR,CAAiB,QAAQ,CAAC//B,CAAD,CAAQqiC,CAAR,CAAgB,CACb,cAA1B,GAAIj/B,CAAA,CAAUi/B,CAAV,CAAJ,EACI,OAAOtC,CAAA,CAAQsC,CAAR,CAF4B,CAAzC,CAOEvgC,EAAA,CAAYqH,CAAA45B,gBAAZ,CAAJ,EAA4C,CAAAjhC,CAAA,CAAYi/B,CAAAgC,gBAAZ,CAA5C,GACE55B,CAAA45B,gBADF,CAC2BhC,CAAAgC,gBAD3B,CAKA,OAAOC,EAAA,CAAQ75B,CAAR,CAAgB25B,CAAhB,CAAArK,KAAA,CAA8BuI,CAA9B,CAAiDA,CAAjD,CAlB4B,CAqBzB,CAAgB1iC,CAAhB,CAAZ,CACI2kC,EAAU3qB,CAAA4qB,KAAA,CAAQ/5B,CAAR,CAYd,KATAlK,CAAA,CAAQkkC,CAAR,CAA8B,QAAQ,CAACC,CAAD,CAAc,CAClD,CAAIA,CAAAC,QAAJ,EAA2BD,CAAAE,aAA3B,GACEV,CAAA74B,QAAA,CAAcq5B,CAAAC,QAAd,CAAmCD,CAAAE,aAAnC,CAEF,EAAIF,CAAAtB,SAAJ,EAA4BsB,CAAAG,cAA5B,GACEX,CAAA1+B,KAAA,CAAWk/B,CAAAtB,SAAX,CAAiCsB,CAAAG,cAAjC,CALgD,CAApD,CASA,CAAOX,CAAAjkC,OAAP,CAAA,CAAqB,CACf6kC,CAAAA,CAASZ,CAAAlf,MAAA,EACb,KAAI+f,EAAWb,CAAAlf,MAAA,EAAf,CAEAuf,EAAUA,CAAAxK,KAAA,CAAa+K,CAAb,CAAqBC,CAArB,CAJS,CAOrBR,CAAAS,QAAA,CAAkBC,QAAQ,CAACh+B,CAAD,CAAK,CAC7B0H,EAAA,CAAY1H,CAAZ;AAAgB,IAAhB,CAEAs9B,EAAAxK,KAAA,CAAa,QAAQ,CAACqJ,CAAD,CAAW,CAC9Bn8B,CAAA,CAAGm8B,CAAAr3B,KAAH,CAAkBq3B,CAAAjB,OAAlB,CAAmCiB,CAAA/B,QAAnC,CAAqD52B,CAArD,CAD8B,CAAhC,CAGA,OAAO85B,EANsB,CAS/BA,EAAA/b,MAAA,CAAgB0c,QAAQ,CAACj+B,CAAD,CAAK,CAC3B0H,EAAA,CAAY1H,CAAZ,CAAgB,IAAhB,CAEAs9B,EAAAxK,KAAA,CAAa,IAAb,CAAmB,QAAQ,CAACqJ,CAAD,CAAW,CACpCn8B,CAAA,CAAGm8B,CAAAr3B,KAAH,CAAkBq3B,CAAAjB,OAAlB,CAAmCiB,CAAA/B,QAAnC,CAAqD52B,CAArD,CADoC,CAAtC,CAGA,OAAO85B,EANoB,CAS7B,OAAOA,EA7EqB,CAkR9BD,QAASA,EAAO,CAAC75B,CAAD,CAAS25B,CAAT,CAAkB,CA+DhCe,QAASA,EAAI,CAAChD,CAAD,CAASiB,CAAT,CAAmBgC,CAAnB,CAAkCC,CAAlC,CAA8C,CAUzDC,QAASA,EAAkB,EAAG,CAC5BC,CAAA,CAAenC,CAAf,CAAyBjB,CAAzB,CAAiCiD,CAAjC,CAAgDC,CAAhD,CAD4B,CAT1B3gB,CAAJ,GAj+BC,GAk+BC,EAAcyd,CAAd,EAl+ByB,GAk+BzB,CAAcA,CAAd,CACEzd,CAAA3B,IAAA,CAAUkG,CAAV,CAAe,CAACkZ,CAAD,CAASiB,CAAT,CAAmBxB,EAAA,CAAawD,CAAb,CAAnB,CAAgDC,CAAhD,CAAf,CADF,CAIE3gB,CAAAiI,OAAA,CAAa1D,CAAb,CALJ,CAaI8Z,EAAJ,CACErpB,CAAA8rB,YAAA,CAAuBF,CAAvB,CADF,EAGEA,CAAA,EACA,CAAK5rB,CAAA+rB,QAAL,EAAyB/rB,CAAA5N,OAAA,EAJ3B,CAdyD,CA0B3Dy5B,QAASA,EAAc,CAACnC,CAAD,CAAWjB,CAAX,CAAmBd,CAAnB,CAA4BgE,CAA5B,CAAwC,CAE7DlD,CAAA,CAASrJ,IAAAC,IAAA,CAASoJ,CAAT,CAAiB,CAAjB,CAET,EA9/BC,GA8/BA,EAAUA,CAAV,EA9/B0B,GA8/B1B,CAAUA,CAAV,CAAoBuD,CAAAC,QAApB,CAAuCD,CAAApC,OAAxC,EAAyD,CACvDv3B,KAAMq3B,CADiD,CAEvDjB,OAAQA,CAF+C,CAGvDd,QAASW,EAAA,CAAcX,CAAd,CAH8C,CAIvD52B,OAAQA,CAJ+C,CAKvD46B,WAAYA,CAL2C,CAAzD,CAJ6D,CAa/DO,QAASA,EAAwB,CAACrgC,CAAD,CAAS,CACxCggC,CAAA,CAAehgC,CAAAwG,KAAf,CAA4BxG,CAAA48B,OAA5B,CAA2Ch8B,EAAA,CAAYZ,CAAA87B,QAAA,EAAZ,CAA3C;AAA0E97B,CAAA8/B,WAA1E,CADwC,CAI1CQ,QAASA,EAAgB,EAAG,CAC1B,IAAIrU,EAAM5Y,CAAAktB,gBAAAhhC,QAAA,CAA8B2F,CAA9B,CACG,GAAb,GAAI+mB,CAAJ,EAAgB5Y,CAAAktB,gBAAA/gC,OAAA,CAA6BysB,CAA7B,CAAkC,CAAlC,CAFU,CA1GI,IAC5BkU,EAAW9rB,CAAAoR,MAAA,EADiB,CAE5BuZ,EAAUmB,CAAAnB,QAFkB,CAG5B7f,CAH4B,CAI5BqhB,CAJ4B,CAK5BjC,EAAar5B,CAAA42B,QALe,CAM5BpY,EAAM+c,CAAA,CAASv7B,CAAAwe,IAAT,CAAqBxe,CAAAq4B,gBAAA,CAAuBr4B,CAAAs2B,OAAvB,CAArB,CAEVnoB,EAAAktB,gBAAAtgC,KAAA,CAA2BiF,CAA3B,CACA85B,EAAAxK,KAAA,CAAa8L,CAAb,CAA+BA,CAA/B,CAGKnhB,EAAAja,CAAAia,MAAL,EAAqBA,CAAA2d,CAAA3d,MAArB,EAAyD,CAAA,CAAzD,GAAwCja,CAAAia,MAAxC,EACuB,KADvB,GACKja,CAAAwF,OADL,EACkD,OADlD,GACgCxF,CAAAwF,OADhC,GAEEyU,CAFF,CAEUziB,CAAA,CAASwI,CAAAia,MAAT,CAAA,CAAyBja,CAAAia,MAAzB,CACAziB,CAAA,CAASogC,CAAA3d,MAAT,CAAA,CAA2B2d,CAAA3d,MAA3B,CACAuhB,CAJV,CAOIvhB,EAAJ,GACEqhB,CACA,CADarhB,CAAA9X,IAAA,CAAUqc,CAAV,CACb,CAAI5lB,CAAA,CAAU0iC,CAAV,CAAJ,CACoBA,CAAlB,EArwSMplC,CAAA,CAqwSYolC,CArwSDhM,KAAX,CAqwSN,CAEEgM,CAAAhM,KAAA,CAAgB6L,CAAhB,CAA0CA,CAA1C,CAFF,CAKMtlC,CAAA,CAAQylC,CAAR,CAAJ,CACER,CAAA,CAAeQ,CAAA,CAAW,CAAX,CAAf,CAA8BA,CAAA,CAAW,CAAX,CAA9B,CAA6C5/B,EAAA,CAAY4/B,CAAA,CAAW,CAAX,CAAZ,CAA7C,CAAyEA,CAAA,CAAW,CAAX,CAAzE,CADF,CAGER,CAAA,CAAeQ,CAAf,CAA2B,GAA3B,CAAgC,EAAhC,CAAoC,IAApC,CATN,CAcErhB,CAAA3B,IAAA,CAAUkG,CAAV,CAAesb,CAAf,CAhBJ,CAuBInhC,EAAA,CAAY2iC,CAAZ,CAAJ,GAQE,CAPIG,CAOJ,CAPgBC,EAAA,CAAgB17B,CAAAwe,IAAhB,CAAA,CACVzN,CAAA,EAAA,CAAiB/Q,CAAAm4B,eAAjB,EAA0CP,CAAAO,eAA1C,CADU;AAEVhjC,CAKN,IAHEkkC,CAAA,CAAYr5B,CAAAo4B,eAAZ,EAAqCR,CAAAQ,eAArC,CAGF,CAHmEqD,CAGnE,EAAAhtB,CAAA,CAAazO,CAAAwF,OAAb,CAA4BgZ,CAA5B,CAAiCmb,CAAjC,CAA0Ce,CAA1C,CAAgDrB,CAAhD,CAA4Dr5B,CAAA27B,QAA5D,CACI37B,CAAA45B,gBADJ,CAC4B55B,CAAA47B,aAD5B,CARF,CAYA,OAAO9B,EAtDyB,CAiHlCyB,QAASA,EAAQ,CAAC/c,CAAD,CAAMqd,CAAN,CAAwB,CACT,CAA9B,CAAIA,CAAArmC,OAAJ,GACEgpB,CADF,GACgC,EAAtB,EAACA,CAAAnkB,QAAA,CAAY,GAAZ,CAAD,CAA2B,GAA3B,CAAiC,GAD3C,EACkDwhC,CADlD,CAGA,OAAOrd,EAJgC,CAh6BzC,IAAIgd,EAAenuB,CAAA,CAAc,OAAd,CAKnBuqB,EAAAS,gBAAA,CAA2BziC,CAAA,CAASgiC,CAAAS,gBAAT,CAAA,CACzBpd,CAAA9Y,IAAA,CAAcy1B,CAAAS,gBAAd,CADyB,CACiBT,CAAAS,gBAO5C,KAAI2B,EAAuB,EAE3BlkC,EAAA,CAAQ0iC,CAAR,CAA8B,QAAQ,CAACsD,CAAD,CAAqB,CACzD9B,CAAAp5B,QAAA,CAA6BhL,CAAA,CAASkmC,CAAT,CAAA,CACvB7gB,CAAA9Y,IAAA,CAAc25B,CAAd,CADuB,CACa7gB,CAAAha,OAAA,CAAiB66B,CAAjB,CAD1C,CADyD,CAA3D,CAqpBA3tB,EAAAktB,gBAAA,CAAwB,EA4GxBU,UAA2B,CAACvmB,CAAD,CAAQ,CACjC1f,CAAA,CAAQgC,SAAR,CAAmB,QAAQ,CAACoI,CAAD,CAAO,CAChCiO,CAAA,CAAMjO,CAAN,CAAA,CAAc,QAAQ,CAACse,CAAD,CAAMxe,CAAN,CAAc,CAClC,MAAOmO,EAAA,CAAMvW,CAAA,CAAO,EAAP,CAAWoI,CAAX,EAAqB,EAArB,CAAyB,CACpCwF,OAAQtF,CAD4B,CAEpCse,IAAKA,CAF+B,CAAzB,CAAN,CAD2B,CADJ,CAAlC,CADiC,CAAnCud,CA1DA,CAAmB,KAAnB,CAA0B,QAA1B,CAAoC,MAApC,CAA4C,OAA5C,CAsEAC;SAAmC,CAAC97B,CAAD,CAAO,CACxCpK,CAAA,CAAQgC,SAAR,CAAmB,QAAQ,CAACoI,CAAD,CAAO,CAChCiO,CAAA,CAAMjO,CAAN,CAAA,CAAc,QAAQ,CAACse,CAAD,CAAMld,CAAN,CAAYtB,CAAZ,CAAoB,CACxC,MAAOmO,EAAA,CAAMvW,CAAA,CAAO,EAAP,CAAWoI,CAAX,EAAqB,EAArB,CAAyB,CACpCwF,OAAQtF,CAD4B,CAEpCse,IAAKA,CAF+B,CAGpCld,KAAMA,CAH8B,CAAzB,CAAN,CADiC,CADV,CAAlC,CADwC,CAA1C06B,CA9BA,CAA2B,MAA3B,CAAmC,KAAnC,CAA0C,OAA1C,CAYA7tB,EAAAypB,SAAA,CAAiBA,CAGjB,OAAOzpB,EA/wB4E,CADzE,CArGW,CAihCzB8tB,QAASA,GAAS,EAAG,CACjB,MAAO,KAAIhnC,CAAAinC,eADM,CAoBrBxtB,QAASA,GAAoB,EAAG,CAC9B,IAAAgJ,KAAA,CAAY,CAAC,UAAD,CAAa,SAAb,CAAwB,WAAxB,CAAqC,QAAQ,CAACvK,CAAD,CAAWkD,CAAX,CAAoB5C,CAApB,CAA+B,CACtF,MAAO0uB,GAAA,CAAkBhvB,CAAlB,CAA4B8uB,EAA5B,CAAuC9uB,CAAAoT,MAAvC,CAAuDlQ,CAAA5O,QAAA26B,UAAvD,CAAkF3uB,CAAA,CAAU,CAAV,CAAlF,CAD+E,CAA5E,CADkB,CAMhC0uB,QAASA,GAAiB,CAAChvB,CAAD,CAAW8uB,CAAX,CAAsBI,CAAtB,CAAqCD,CAArC,CAAgDE,CAAhD,CAA6D,CA8GrFC,QAASA,EAAQ,CAAC/d,CAAD,CAAMge,CAAN,CAAkB9B,CAAlB,CAAwB,CAAA,IAInC9yB,EAAS00B,CAAAvqB,cAAA,CAA0B,QAA1B,CAJ0B,CAIWqN,EAAW,IAC7DxX,EAAA+L,KAAA,CAAc,iBACd/L,EAAAjQ,IAAA,CAAa6mB,CACb5W,EAAA60B,MAAA,CAAe,CAAA,CAEfrd,EAAA,CAAWA,QAAQ,CAACvI,CAAD,CAAQ,CACHjP,CAxqPtBqM,oBAAA,CAwqP8BN,MAxqP9B,CAwqPsCyL,CAxqPtC,CAAsC,CAAA,CAAtC,CAyqPsBxX,EAzqPtBqM,oBAAA,CAyqP8BN,OAzqP9B;AAyqPuCyL,CAzqPvC,CAAsC,CAAA,CAAtC,CA0qPAkd,EAAAI,KAAA7mB,YAAA,CAA6BjO,CAA7B,CACAA,EAAA,CAAS,IACT,KAAI8vB,EAAU,EAAd,CACIxH,EAAO,SAEPrZ,EAAJ,GACqB,MAInB,GAJIA,CAAAlD,KAIJ,EAJ8ByoB,CAAA,CAAUI,CAAV,CAAAG,OAI9B,GAHE9lB,CAGF,CAHU,CAAElD,KAAM,OAAR,CAGV,EADAuc,CACA,CADOrZ,CAAAlD,KACP,CAAA+jB,CAAA,CAAwB,OAAf,GAAA7gB,CAAAlD,KAAA,CAAyB,GAAzB,CAA+B,GAL1C,CAQI+mB,EAAJ,EACEA,CAAA,CAAKhD,CAAL,CAAaxH,CAAb,CAjBuB,CAqBRtoB,EA/rPjBg1B,iBAAA,CA+rPyBjpB,MA/rPzB,CA+rPiCyL,CA/rPjC,CAAmC,CAAA,CAAnC,CAgsPiBxX,EAhsPjBg1B,iBAAA,CAgsPyBjpB,OAhsPzB,CAgsPkCyL,CAhsPlC,CAAmC,CAAA,CAAnC,CAisPFkd,EAAAI,KAAA5qB,YAAA,CAA6BlK,CAA7B,CACA,OAAOwX,EAjCgC,CA5GzC,MAAO,SAAQ,CAAC5Z,CAAD,CAASgZ,CAAT,CAAcmM,CAAd,CAAoBvL,CAApB,CAA8BwX,CAA9B,CAAuC+E,CAAvC,CAAgD/B,CAAhD,CAAiEgC,CAAjE,CAA+E,CA2F5FiB,QAASA,EAAc,EAAG,CACxBC,CAAA,EAAaA,CAAA,EACbC,EAAA,EAAOA,CAAAC,MAAA,EAFiB,CAK1BC,QAASA,EAAe,CAAC7d,CAAD,CAAWsY,CAAX,CAAmBiB,CAAnB,CAA6BgC,CAA7B,CAA4CC,CAA5C,CAAwD,CAE1Ela,CAAJ,GAAkBvrB,CAAlB,EACEknC,CAAA1b,OAAA,CAAqBD,CAArB,CAEFoc,EAAA,CAAYC,CAAZ,CAAkB,IAElB3d,EAAA,CAASsY,CAAT,CAAiBiB,CAAjB,CAA2BgC,CAA3B,CAA0CC,CAA1C,CACAztB,EAAA4R,6BAAA,CAAsCxmB,CAAtC,CAR8E,CA/FhF4U,CAAA6R,6BAAA,EACAR,EAAA,CAAMA,CAAN,EAAarR,CAAAqR,IAAA,EAEb,IAAyB,OAAzB,EAAIvkB,CAAA,CAAUuL,CAAV,CAAJ,CAAkC,CAChC,IAAIg3B,EAAa,GAAbA,CAAmBxjC,CAACojC,CAAAv1B,QAAA,EAAD7N,UAAA,CAA+B,EAA/B,CACvBojC;CAAA,CAAUI,CAAV,CAAA,CAAwB,QAAQ,CAACl7B,CAAD,CAAO,CACrC86B,CAAA,CAAUI,CAAV,CAAAl7B,KAAA,CAA6BA,CAC7B86B,EAAA,CAAUI,CAAV,CAAAG,OAAA,CAA+B,CAAA,CAFM,CAKvC,KAAIG,EAAYP,CAAA,CAAS/d,CAAA9f,QAAA,CAAY,eAAZ,CAA6B,oBAA7B,CAAoD89B,CAApD,CAAT,CACZA,CADY,CACA,QAAQ,CAAC9E,CAAD,CAASxH,CAAT,CAAe,CACrC+M,CAAA,CAAgB7d,CAAhB,CAA0BsY,CAA1B,CAAkC0E,CAAA,CAAUI,CAAV,CAAAl7B,KAAlC,CAA8D,EAA9D,CAAkE4uB,CAAlE,CACAkM,EAAA,CAAUI,CAAV,CAAA,CAAwBjkC,CAFa,CADvB,CAPgB,CAAlC,IAYO,CAEL,IAAIwkC,EAAMd,CAAA,EAEVc,EAAAG,KAAA,CAAS13B,CAAT,CAAiBgZ,CAAjB,CAAsB,CAAA,CAAtB,CACA1oB,EAAA,CAAQ8gC,CAAR,CAAiB,QAAQ,CAAC//B,CAAD,CAAQZ,CAAR,CAAa,CAChC2C,CAAA,CAAU/B,CAAV,CAAJ,EACIkmC,CAAAI,iBAAA,CAAqBlnC,CAArB,CAA0BY,CAA1B,CAFgC,CAAtC,CAMAkmC,EAAAK,OAAA,CAAaC,QAAsB,EAAG,CACpC,IAAIzC,EAAamC,CAAAnC,WAAbA,EAA+B,EAAnC,CAIIjC,EAAY,UAAD,EAAeoE,EAAf,CAAsBA,CAAApE,SAAtB,CAAqCoE,CAAAO,aAJpD,CAOI5F,EAAwB,IAAf,GAAAqF,CAAArF,OAAA,CAAsB,GAAtB,CAA4BqF,CAAArF,OAK1B,EAAf,GAAIA,CAAJ,GACEA,CADF,CACWiB,CAAA,CAAW,GAAX,CAA6C,MAA5B,EAAA4E,EAAA,CAAW/e,CAAX,CAAAgf,SAAA,CAAqC,GAArC,CAA2C,CADvE,CAIAP,EAAA,CAAgB7d,CAAhB,CACIsY,CADJ,CAEIiB,CAFJ,CAGIoE,CAAAU,sBAAA,EAHJ,CAII7C,CAJJ,CAjBoC,CAwBlCT,EAAAA,CAAeA,QAAQ,EAAG,CAG5B8C,CAAA,CAAgB7d,CAAhB,CAA2B,EAA3B,CAA8B,IAA9B,CAAoC,IAApC,CAA0C,EAA1C,CAH4B,CAM9B2d,EAAAW,QAAA,CAAcvD,CACd4C,EAAAY,QAAA,CAAcxD,CAEVP,EAAJ,GACEmD,CAAAnD,gBADF;AACwB,CAAA,CADxB,CAIA,IAAIgC,CAAJ,CACE,GAAI,CACFmB,CAAAnB,aAAA,CAAmBA,CADjB,CAEF,MAAOv9B,CAAP,CAAU,CAQV,GAAqB,MAArB,GAAIu9B,CAAJ,CACE,KAAMv9B,EAAN,CATQ,CAcd0+B,CAAAa,KAAA,CAASjT,CAAT,CAjEK,CAoEP,GAAc,CAAd,CAAIgR,CAAJ,CACE,IAAIjb,EAAY2b,CAAA,CAAcQ,CAAd,CAA8BlB,CAA9B,CADlB,KAEyBA,EAAlB,EA39SKzlC,CAAA,CA29SaylC,CA39SFrM,KAAX,CA29SL,EACLqM,CAAArM,KAAA,CAAauN,CAAb,CAvF0F,CAFT,CAkMvF7uB,QAASA,GAAoB,EAAG,CAC9B,IAAIymB,EAAc,IAAlB,CACIC,EAAY,IAWhB,KAAAD,YAAA,CAAmBoJ,QAAQ,CAAChnC,CAAD,CAAQ,CACjC,MAAIA,EAAJ,EACE49B,CACO,CADO59B,CACP,CAAA,IAFT,EAIS49B,CALwB,CAkBnC,KAAAC,UAAA,CAAiBoJ,QAAQ,CAACjnC,CAAD,CAAQ,CAC/B,MAAIA,EAAJ,EACE69B,CACO,CADK79B,CACL,CAAA,IAFT,EAIS69B,CALsB,CAUjC,KAAAhd,KAAA,CAAY,CAAC,QAAD,CAAW,mBAAX,CAAgC,MAAhC,CAAwC,QAAQ,CAAC3I,CAAD,CAASpB,CAAT,CAA4B4B,CAA5B,CAAkC,CAM5FwuB,QAASA,EAAM,CAACC,CAAD,CAAK,CAClB,MAAO,QAAP,CAAkBA,CADA,CAIpBC,QAASA,EAAY,CAAC/N,CAAD,CAAO,CAC1B,MAAOA,EAAAxxB,QAAA,CAAaw/B,CAAb,CAAiCzJ,CAAjC,CAAA/1B,QAAA,CACGy/B,CADH,CACqBzJ,CADrB,CADmB,CAoH5B3mB,QAASA,EAAY,CAACmiB,CAAD,CAAOkO,CAAP,CAA2BjN,CAA3B,CAA2CD,CAA3C,CAAyD,CA0F5EmN,QAASA,EAAyB,CAACxnC,CAAD,CAAQ,CACxC,GAAI,CACeA,IAAAA,EAAAA,CAvCjB,EAAA,CAAOs6B,CAAA,CACL5hB,CAAA+uB,WAAA,CAAgBnN,CAAhB,CAAgCt6B,CAAhC,CADK,CAEL0Y,CAAAgvB,QAAA,CAAa1nC,CAAb,CAsCK,KAAA,CAAA,IAAAq6B,CAAA,EAAiB,CAAAt4B,CAAA,CAAU/B,CAAV,CAAjB,CAAoCA,CAAAA,CAAAA,CAApC;IA3MX,IAAa,IAAb,EAAIA,CAAJ,CACE,CAAA,CAAO,EADT,KAAA,CAGA,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACE,KACF,MAAK,QAAL,CACEA,CAAA,CAAQ,EAAR,CAAaA,CACb,MACF,SACEA,CAAA,CAAQgG,EAAA,CAAOhG,CAAP,CAPZ,CAUA,CAAA,CAAOA,CAbP,CA2MI,MAAO,EAFL,CAGF,MAAOyjB,CAAP,CAAY,CACZ3M,CAAA,CAAkB6wB,EAAAC,OAAA,CAA0BvO,CAA1B,CAAgC5V,CAAhC,CAAlB,CADY,CAJ0B,CAzF1C4W,CAAA,CAAe,CAAEA,CAAAA,CAWjB,KAZ4E,IAExEx0B,CAFwE,CAGxEgiC,CAHwE,CAIxEtkC,EAAQ,CAJgE,CAKxEu2B,EAAc,EAL0D,CAMxEgO,EAAW,EAN6D,CAOxEC,EAAa1O,CAAA16B,OAP2D,CASxE2G,EAAS,EAT+D,CAUxE0iC,EAAsB,EAE1B,CAAOzkC,CAAP,CAAewkC,CAAf,CAAA,CACE,GAAyD,EAAzD,GAAMliC,CAAN,CAAmBwzB,CAAA71B,QAAA,CAAao6B,CAAb,CAA0Br6B,CAA1B,CAAnB,GAC+E,EAD/E,GACOskC,CADP,CACkBxO,CAAA71B,QAAA,CAAaq6B,CAAb,CAAwBh4B,CAAxB,CAAqCoiC,CAArC,CADlB,EAEM1kC,CAQJ,GARcsC,CAQd,EAPEP,CAAApB,KAAA,CAAYkjC,CAAA,CAAa/N,CAAAjF,UAAA,CAAe7wB,CAAf,CAAsBsC,CAAtB,CAAb,CAAZ,CAOF,CALAqiC,CAKA,CALM7O,CAAAjF,UAAA,CAAevuB,CAAf,CAA4BoiC,CAA5B,CAA+CJ,CAA/C,CAKN,CAJA/N,CAAA51B,KAAA,CAAiBgkC,CAAjB,CAIA,CAHAJ,CAAA5jC,KAAA,CAAcgU,CAAA,CAAOgwB,CAAP,CAAYV,CAAZ,CAAd,CAGA,CAFAjkC,CAEA,CAFQskC,CAER,CAFmBM,CAEnB,CADAH,CAAA9jC,KAAA,CAAyBoB,CAAA3G,OAAzB,CACA,CAAA2G,CAAApB,KAAA,CAAY,EAAZ,CAVF,KAWO,CAEDX,CAAJ,GAAcwkC,CAAd,EACEziC,CAAApB,KAAA,CAAYkjC,CAAA,CAAa/N,CAAAjF,UAAA,CAAe7wB,CAAf,CAAb,CAAZ,CAEF,MALK,CAeL+2B,CAAJ,EAAsC,CAAtC,CAAsBh1B,CAAA3G,OAAtB,EACIgpC,EAAAS,cAAA,CAAiC/O,CAAjC,CAGJ,IAAKkO,CAAAA,CAAL,EAA2BzN,CAAAn7B,OAA3B,CAA+C,CAC7C,IAAI0pC,EAAUA,QAAQ,CAAClK,CAAD,CAAS,CAC7B,IAD6B,IACpBt+B,EAAI,CADgB,CACba,EAAKo5B,CAAAn7B,OAArB,CAAyCkB,CAAzC;AAA6Ca,CAA7C,CAAiDb,CAAA,EAAjD,CAAsD,CACpD,GAAIw6B,CAAJ,EAAoBv4B,CAAA,CAAYq8B,CAAA,CAAOt+B,CAAP,CAAZ,CAApB,CAA4C,MAC5CyF,EAAA,CAAO0iC,CAAA,CAAoBnoC,CAApB,CAAP,CAAA,CAAiCs+B,CAAA,CAAOt+B,CAAP,CAFmB,CAItD,MAAOyF,EAAAiD,KAAA,CAAY,EAAZ,CALsB,CAc/B,OAAOxH,EAAA,CAAOunC,QAAwB,CAACnpC,CAAD,CAAU,CAC5C,IAAIU,EAAI,CAAR,CACIa,EAAKo5B,CAAAn7B,OADT,CAEIw/B,EAAalZ,KAAJ,CAAUvkB,CAAV,CAEb,IAAI,CACF,IAAA,CAAOb,CAAP,CAAWa,CAAX,CAAeb,CAAA,EAAf,CACEs+B,CAAA,CAAOt+B,CAAP,CAAA,CAAYioC,CAAA,CAASjoC,CAAT,CAAA,CAAYV,CAAZ,CAGd,OAAOkpC,EAAA,CAAQlK,CAAR,CALL,CAMF,MAAO1a,CAAP,CAAY,CACZ3M,CAAA,CAAkB6wB,EAAAC,OAAA,CAA0BvO,CAA1B,CAAgC5V,CAAhC,CAAlB,CADY,CAX8B,CAAzC,CAeF,CAEHykB,IAAK7O,CAFF,CAGHS,YAAaA,CAHV,CAIHyO,gBAAiBA,QAAQ,CAACj+B,CAAD,CAAQwd,CAAR,CAAkB,CACzC,IAAI4T,CACJ,OAAOpxB,EAAAk+B,YAAA,CAAkBV,CAAlB,CAA4BW,QAA6B,CAACtK,CAAD,CAASuK,CAAT,CAAoB,CAClF,IAAIC,EAAYN,CAAA,CAAQlK,CAAR,CACZ9+B,EAAA,CAAWyoB,CAAX,CAAJ,EACEA,CAAAvoB,KAAA,CAAc,IAAd,CAAoBopC,CAApB,CAA+BxK,CAAA,GAAWuK,CAAX,CAAuBhN,CAAvB,CAAmCiN,CAAlE,CAA6Er+B,CAA7E,CAEFoxB,EAAA,CAAYiN,CALsE,CAA7E,CAFkC,CAJxC,CAfE,CAfsC,CA3C6B,CA9Hc,IACxFV,EAAoBrK,CAAAj/B,OADoE,CAExFwpC,EAAkBtK,CAAAl/B,OAFsE,CAGxF0oC,EAAqB,IAAI5iC,MAAJ,CAAWm5B,CAAA/1B,QAAA,CAAoB,IAApB,CAA0Bq/B,CAA1B,CAAX,CAA8C,GAA9C,CAHmE,CAIxFI,EAAmB,IAAI7iC,MAAJ,CAAWo5B,CAAAh2B,QAAA,CAAkB,IAAlB,CAAwBq/B,CAAxB,CAAX,CAA4C,GAA5C,CA0OvBhwB,EAAA0mB,YAAA,CAA2BgL,QAAQ,EAAG,CACpC,MAAOhL,EAD6B,CAgBtC1mB,EAAA2mB,UAAA,CAAyBgL,QAAQ,EAAG,CAClC,MAAOhL,EAD2B,CAIpC,OAAO3mB,EAlQqF,CAAlF,CAzCkB,CAtxUO;AAqkVvCG,QAASA,GAAiB,EAAG,CAC3B,IAAAwJ,KAAA,CAAY,CAAC,YAAD,CAAe,SAAf,CAA0B,IAA1B,CAAgC,KAAhC,CACP,QAAQ,CAACzI,CAAD,CAAeoB,CAAf,CAA0BlB,CAA1B,CAAgCE,CAAhC,CAAqC,CAiIhDswB,QAASA,EAAQ,CAACnjC,CAAD,CAAKikB,CAAL,CAAYmf,CAAZ,CAAmBC,CAAnB,CAAgC,CAAA,IAC3CC,EAA+B,CAA/BA,CAAYhoC,SAAAtC,OAD+B,CAE3CgjB,EAAOsnB,CAAA,CAzmTRjoC,EAAAzB,KAAA,CAymT8B0B,SAzmT9B,CAymTyC4E,CAzmTzC,CAymTQ,CAAsC,EAFF,CAG3CqjC,EAAc1vB,CAAA0vB,YAH6B,CAI3CC,EAAgB3vB,CAAA2vB,cAJ2B,CAK3CC,EAAY,CAL+B,CAM3CC,EAAatnC,CAAA,CAAUinC,CAAV,CAAbK,EAAuC,CAACL,CANG,CAO3C5E,EAAW1a,CAAC2f,CAAA,CAAY7wB,CAAZ,CAAkBF,CAAnBoR,OAAA,EAPgC,CAQ3CuZ,EAAUmB,CAAAnB,QAEd8F,EAAA,CAAQhnC,CAAA,CAAUgnC,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,CAEnC9F,EAAAxK,KAAA,CAAa,IAAb,CAAmB,IAAnB,CAA2BwQ,CAAF,CAAoB,QAAQ,EAAG,CACtDtjC,CAAAG,MAAA,CAAS,IAAT,CAAe6b,CAAf,CADsD,CAA/B,CAAehc,CAAxC,CAIAs9B,EAAAqG,aAAA,CAAuBJ,CAAA,CAAYK,QAAa,EAAG,CACjDnF,CAAAoF,OAAA,CAAgBJ,CAAA,EAAhB,CAEY,EAAZ,CAAIL,CAAJ,EAAiBK,CAAjB,EAA8BL,CAA9B,GACE3E,CAAAC,QAAA,CAAiB+E,CAAjB,CAEA,CADAD,CAAA,CAAclG,CAAAqG,aAAd,CACA,CAAA,OAAOG,CAAA,CAAUxG,CAAAqG,aAAV,CAHT,CAMKD,EAAL,EAAgBjxB,CAAA5N,OAAA,EATiC,CAA5B,CAWpBof,CAXoB,CAavB6f,EAAA,CAAUxG,CAAAqG,aAAV,CAAA,CAAkClF,CAElC,OAAOnB,EA/BwC,CAhIjD,IAAIwG,EAAY,EA6KhBX,EAAAhf,OAAA,CAAkB4f,QAAQ,CAACzG,CAAD,CAAU,CAClC,MAAIA,EAAJ,EAAeA,CAAAqG,aAAf;AAAuCG,CAAvC,EACEA,CAAA,CAAUxG,CAAAqG,aAAV,CAAAtH,OAAA,CAAuC,UAAvC,CAGO,CAFPxoB,CAAA2vB,cAAA,CAAsBlG,CAAAqG,aAAtB,CAEO,CADP,OAAOG,CAAA,CAAUxG,CAAAqG,aAAV,CACA,CAAA,CAAA,CAJT,EAMO,CAAA,CAP2B,CAUpC,OAAOR,EAxLyC,CADtC,CADe,CAwM7B34B,QAASA,GAAe,EAAG,CACzB,IAAA0Q,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO,CACLiK,GAAI,OADC,CAGL4e,eAAgB,CACdC,YAAa,GADC,CAEdC,UAAW,GAFG,CAGdC,SAAU,CACR,CACEC,OAAQ,CADV,CAEEC,QAAS,CAFX,CAGEC,QAAS,CAHX,CAIEC,OAAQ,EAJV,CAKEC,OAAQ,EALV,CAMEC,OAAQ,GANV,CAOEC,OAAQ,EAPV,CAQEC,MAAO,CART,CASEC,OAAQ,CATV,CADQ,CAWN,CACAR,OAAQ,CADR,CAEAC,QAAS,CAFT,CAGAC,QAAS,CAHT,CAIAC,OAAQ,QAJR,CAKAC,OAAQ,EALR,CAMAC,OAAQ,SANR,CAOAC,OAAQ,GAPR,CAQAC,MAAO,CARP,CASAC,OAAQ,CATR,CAXM,CAHI,CA0BdC,aAAc,GA1BA,CAHX,CAgCLC,iBAAkB,CAChBC,MACI,uFAAA,MAAA,CAAA,GAAA,CAFY;AAIhBC,WAAa,iDAAA,MAAA,CAAA,GAAA,CAJG,CAKhBC,IAAK,0DAAA,MAAA,CAAA,GAAA,CALW,CAMhBC,SAAU,6BAAA,MAAA,CAAA,GAAA,CANM,CAOhBC,MAAO,CAAC,IAAD,CAAM,IAAN,CAPS,CAQhBC,OAAQ,oBARQ,CAShB,QAAS,eATO,CAUhBC,SAAU,iBAVM,CAWhBC,SAAU,WAXM,CAYhBC,WAAY,UAZI,CAahBC,UAAW,QAbK,CAchBC,WAAY,WAdI,CAehBC,UAAW,QAfK,CAgBhBC,SAAU,CACR,eADQ,CAER,aAFQ,CAhBM,CAoBhBC,KAAM,CACJ,IADI,CAEJ,IAFI,CApBU,CAhCb,CA0DLC,UAAWA,QAAQ,CAACC,CAAD,CAAM,CACvB,MAAY,EAAZ,GAAIA,CAAJ,CACS,KADT,CAGO,OAJgB,CA1DpB,CADc,CADE,CA7wVY;AA81VvCC,QAASA,GAAU,CAACj+B,CAAD,CAAO,CACpBk+B,CAAAA,CAAWl+B,CAAAxK,MAAA,CAAW,GAAX,CAGf,KAHA,IACIpD,EAAI8rC,CAAAhtC,OAER,CAAOkB,CAAA,EAAP,CAAA,CACE8rC,CAAA,CAAS9rC,CAAT,CAAA,CAAc2I,EAAA,CAAiBmjC,CAAA,CAAS9rC,CAAT,CAAjB,CAGhB,OAAO8rC,EAAApjC,KAAA,CAAc,GAAd,CARiB,CAW1BqjC,QAASA,GAAgB,CAACC,CAAD,CAAcC,CAAd,CAA2B,CAClD,IAAIC,EAAYrF,EAAA,CAAWmF,CAAX,CAEhBC,EAAAE,WAAA,CAAyBD,CAAApF,SACzBmF,EAAAG,OAAA,CAAqBF,CAAAG,SACrBJ,EAAAK,OAAA,CAAqBhrC,CAAA,CAAM4qC,CAAAK,KAAN,CAArB,EAA8CC,EAAA,CAAcN,CAAApF,SAAd,CAA9C,EAAmF,IALjC,CASpD2F,QAASA,GAAW,CAACC,CAAD,CAAcT,CAAd,CAA2B,CAC7C,IAAIU,EAAsC,GAAtCA,GAAYD,CAAAznC,OAAA,CAAmB,CAAnB,CACZ0nC,EAAJ,GACED,CADF,CACgB,GADhB,CACsBA,CADtB,CAGA,KAAI7nC,EAAQgiC,EAAA,CAAW6F,CAAX,CACZT,EAAAW,OAAA,CAAqB1kC,kBAAA,CAAmBykC,CAAA,EAAyC,GAAzC,GAAY9nC,CAAAgoC,SAAA5nC,OAAA,CAAsB,CAAtB,CAAZ,CACpCJ,CAAAgoC,SAAAtY,UAAA,CAAyB,CAAzB,CADoC,CACN1vB,CAAAgoC,SADb,CAErBZ,EAAAa,SAAA,CAAuB3kC,EAAA,CAActD,CAAAkoC,OAAd,CACvBd,EAAAe,OAAA,CAAqB9kC,kBAAA,CAAmBrD,CAAAohB,KAAnB,CAGjBgmB,EAAAW,OAAJ,EAA0D,GAA1D,EAA0BX,CAAAW,OAAA3nC,OAAA,CAA0B,CAA1B,CAA1B,GACEgnC,CAAAW,OADF,CACuB,GADvB,CAC6BX,CAAAW,OAD7B,CAZ6C,CAyB/CK,QAASA,GAAU,CAACC,CAAD,CAAQC,CAAR,CAAe,CAChC,GAA6B,CAA7B;AAAIA,CAAAxpC,QAAA,CAAcupC,CAAd,CAAJ,CACE,MAAOC,EAAAjkB,OAAA,CAAagkB,CAAApuC,OAAb,CAFuB,CAOlCmqB,QAASA,GAAS,CAACnB,CAAD,CAAM,CACtB,IAAIpkB,EAAQokB,CAAAnkB,QAAA,CAAY,GAAZ,CACZ,OAAiB,EAAV,EAAAD,CAAA,CAAcokB,CAAd,CAAoBA,CAAAoB,OAAA,CAAW,CAAX,CAAcxlB,CAAd,CAFL,CAKxB0pC,QAASA,GAAa,CAACtlB,CAAD,CAAM,CAC1B,MAAOA,EAAA9f,QAAA,CAAY,UAAZ,CAAwB,IAAxB,CADmB,CAK5BqlC,QAASA,GAAS,CAACvlB,CAAD,CAAM,CACtB,MAAOA,EAAAoB,OAAA,CAAW,CAAX,CAAcD,EAAA,CAAUnB,CAAV,CAAAwlB,YAAA,CAA2B,GAA3B,CAAd,CAAgD,CAAhD,CADe,CAkBxBC,QAASA,GAAgB,CAACC,CAAD,CAAUC,CAAV,CAAsB,CAC7C,IAAAC,QAAA,CAAe,CAAA,CACfD,EAAA,CAAaA,CAAb,EAA2B,EAC3B,KAAIE,EAAgBN,EAAA,CAAUG,CAAV,CACpBzB,GAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAAC/lB,CAAD,CAAM,CAC3B,IAAIgmB,EAAUb,EAAA,CAAWU,CAAX,CAA0B7lB,CAA1B,CACd,IAAK,CAAA5oB,CAAA,CAAS4uC,CAAT,CAAL,CACE,KAAMC,GAAA,CAAgB,UAAhB,CAA6EjmB,CAA7E,CACF6lB,CADE,CAAN,CAIFlB,EAAA,CAAYqB,CAAZ,CAAqB,IAArB,CAEK,KAAAlB,OAAL,GACE,IAAAA,OADF,CACgB,GADhB,CAIA,KAAAoB,UAAA,EAb2B,CAoB7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASzkC,EAAA,CAAW,IAAAwkC,SAAX,CADa,CAEtB7mB,EAAO,IAAA+mB,OAAA,CAAc,GAAd,CAAoBrkC,EAAA,CAAiB,IAAAqkC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA;AAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsE9mB,CACtE,KAAAkoB,SAAA,CAAgBR,CAAhB,CAAgC,IAAAO,MAAAhlB,OAAA,CAAkB,CAAlB,CALN,CAQ5B,KAAAklB,eAAA,CAAsBC,QAAQ,CAACvmB,CAAD,CAAMwmB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAAroB,KAAA,CAAUqoB,CAAAntC,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CALkC,KAOvCotC,CAPuC,CAO/BC,CAGZ,EAAKD,CAAL,CAActB,EAAA,CAAWO,CAAX,CAAoB1lB,CAApB,CAAd,IAA4CrpB,CAA5C,EACE+vC,CAEE,CAFWD,CAEX,CAAAE,CAAA,CADF,CAAKF,CAAL,CAActB,EAAA,CAAWQ,CAAX,CAAuBc,CAAvB,CAAd,IAAkD9vC,CAAlD,CACiBkvC,CADjB,EACkCV,EAAA,CAAW,GAAX,CAAgBsB,CAAhB,CADlC,EAC6DA,CAD7D,EAGiBf,CAHjB,CAG2BgB,CAL7B,EAOO,CAAKD,CAAL,CAActB,EAAA,CAAWU,CAAX,CAA0B7lB,CAA1B,CAAd,IAAkDrpB,CAAlD,CACLgwC,CADK,CACUd,CADV,CAC0BY,CAD1B,CAEIZ,CAFJ,EAEqB7lB,CAFrB,CAE2B,GAF3B,GAGL2mB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CAzBkC,CAxCA,CA+E/CC,QAASA,GAAmB,CAAClB,CAAD,CAAUmB,CAAV,CAAsB,CAChD,IAAIhB,EAAgBN,EAAA,CAAUG,CAAV,CAEpBzB,GAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAAC/lB,CAAD,CAAM,CACvB8mB,CAAAA,CAAiB3B,EAAA,CAAWO,CAAX,CAAoB1lB,CAApB,CAAjB8mB,EAA6C3B,EAAA,CAAWU,CAAX,CAA0B7lB,CAA1B,CACjD,KAAI+mB,CAE6B,IAAjC,GAAID,CAAA3pC,OAAA,CAAsB,CAAtB,CAAJ,EAIE4pC,CACA,CADiB5B,EAAA,CAAW0B,CAAX,CAAuBC,CAAvB,CACjB,CAAI3sC,CAAA,CAAY4sC,CAAZ,CAAJ,GAEEA,CAFF,CAEmBD,CAFnB,CALF,EAcEC,CAdF,CAcmB,IAAAnB,QAAA,CAAekB,CAAf,CAAgC,EAGnDnC,GAAA,CAAYoC,CAAZ,CAA4B,IAA5B,CAEqCjC,EAAAA,CAAAA,IAAAA,OAoBnC,KAAIkC,EAAqB,iBAKC,EAA1B,GAAIhnB,CAAAnkB,QAAA,CAzB4D6pC,CAyB5D,CAAJ;CACE1lB,CADF,CACQA,CAAA9f,QAAA,CA1BwDwlC,CA0BxD,CAAkB,EAAlB,CADR,CAKIsB,EAAAvzB,KAAA,CAAwBuM,CAAxB,CAAJ,GAKA,CALA,CAKO,CADPinB,CACO,CADiBD,CAAAvzB,KAAA,CAAwB3N,CAAxB,CACjB,EAAwBmhC,CAAA,CAAsB,CAAtB,CAAxB,CAAmDnhC,CAL1D,CA9BF,KAAAg/B,OAAA,CAAc,CAEd,KAAAoB,UAAA,EAzB2B,CAkE7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASzkC,EAAA,CAAW,IAAAwkC,SAAX,CADa,CAEtB7mB,EAAO,IAAA+mB,OAAA,CAAc,GAAd,CAAoBrkC,EAAA,CAAiB,IAAAqkC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsE9mB,CACtE,KAAAkoB,SAAA,CAAgBX,CAAhB,EAA2B,IAAAU,MAAA,CAAaS,CAAb,CAA0B,IAAAT,MAA1B,CAAuC,EAAlE,CAL0B,CAQ5B,KAAAE,eAAA,CAAsBC,QAAQ,CAACvmB,CAAD,CAAMwmB,CAAN,CAAe,CAC3C,MAAIrlB,GAAA,CAAUukB,CAAV,CAAJ,EAA0BvkB,EAAA,CAAUnB,CAAV,CAA1B,EACE,IAAA8lB,QAAA,CAAa9lB,CAAb,CACO,CAAA,CAAA,CAFT,EAIO,CAAA,CALoC,CArFG,CAwGlDknB,QAASA,GAA0B,CAACxB,CAAD,CAAUmB,CAAV,CAAsB,CACvD,IAAAjB,QAAA,CAAe,CAAA,CACfgB,GAAAzoC,MAAA,CAA0B,IAA1B,CAAgC7E,SAAhC,CAEA,KAAIusC,EAAgBN,EAAA,CAAUG,CAAV,CAEpB,KAAAY,eAAA,CAAsBC,QAAQ,CAACvmB,CAAD,CAAMwmB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAAroB,KAAA,CAAUqoB,CAAAntC,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CAGT,KAAIstC,CAAJ;AACIF,CAEAf,EAAJ,EAAevkB,EAAA,CAAUnB,CAAV,CAAf,CACE2mB,CADF,CACiB3mB,CADjB,CAEO,CAAKymB,CAAL,CAActB,EAAA,CAAWU,CAAX,CAA0B7lB,CAA1B,CAAd,EACL2mB,CADK,CACUjB,CADV,CACoBmB,CADpB,CACiCJ,CADjC,CAEIZ,CAFJ,GAEsB7lB,CAFtB,CAE4B,GAF5B,GAGL2mB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CArBkC,CAwB7C,KAAAT,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASzkC,EAAA,CAAW,IAAAwkC,SAAX,CADa,CAEtB7mB,EAAO,IAAA+mB,OAAA,CAAc,GAAd,CAAoBrkC,EAAA,CAAiB,IAAAqkC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsE9mB,CAEtE,KAAAkoB,SAAA,CAAgBX,CAAhB,CAA0BmB,CAA1B,CAAuC,IAAAT,MANb,CA9B2B,CA8WzDe,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,MAAO,SAAQ,EAAG,CAChB,MAAO,KAAA,CAAKA,CAAL,CADS,CADc,CAOlCC,QAASA,GAAoB,CAACD,CAAD,CAAWE,CAAX,CAAuB,CAClD,MAAO,SAAQ,CAACjvC,CAAD,CAAQ,CACrB,GAAI8B,CAAA,CAAY9B,CAAZ,CAAJ,CACE,MAAO,KAAA,CAAK+uC,CAAL,CAGT,KAAA,CAAKA,CAAL,CAAA,CAAiBE,CAAA,CAAWjvC,CAAX,CACjB,KAAA6tC,UAAA,EAEA,OAAO,KARc,CAD2B,CA8CpD91B,QAASA,GAAiB,EAAG,CAAA,IACvBy2B,EAAa,EADU,CAEvBU,EAAY,CACVhhB,QAAS,CAAA,CADC,CAEVihB,YAAa,CAAA,CAFH,CAGVC,aAAc,CAAA,CAHJ,CAahB,KAAAZ,WAAA,CAAkBa,QAAQ,CAACjmC,CAAD,CAAS,CACjC,MAAIrH,EAAA,CAAUqH,CAAV,CAAJ;CACEolC,CACO,CADMplC,CACN,CAAA,IAFT,EAISolC,CALwB,CA4BnC,KAAAU,UAAA,CAAiBI,QAAQ,CAACljB,CAAD,CAAO,CAC9B,MAAI5pB,GAAA,CAAU4pB,CAAV,CAAJ,EACE8iB,CAAAhhB,QACO,CADa9B,CACb,CAAA,IAFT,EAGWzrB,CAAA,CAASyrB,CAAT,CAAJ,EAED5pB,EAAA,CAAU4pB,CAAA8B,QAAV,CAYG,GAXLghB,CAAAhhB,QAWK,CAXe9B,CAAA8B,QAWf,EARH1rB,EAAA,CAAU4pB,CAAA+iB,YAAV,CAQG,GAPLD,CAAAC,YAOK,CAPmB/iB,CAAA+iB,YAOnB,EAJH3sC,EAAA,CAAU4pB,CAAAgjB,aAAV,CAIG,GAHLF,CAAAE,aAGK,CAHoBhjB,CAAAgjB,aAGpB,EAAA,IAdF,EAgBEF,CApBqB,CA+DhC,KAAAruB,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,UAA3B,CAAuC,cAAvC,CAAuD,SAAvD,CACR,QAAQ,CAACzI,CAAD,CAAa9B,CAAb,CAAuBwC,CAAvB,CAAiC6W,CAAjC,CAA+CnW,CAA/C,CAAwD,CAyBlE+1B,QAASA,EAAyB,CAAC5nB,CAAD,CAAM9f,CAAN,CAAe0f,CAAf,CAAsB,CACtD,IAAIioB,EAAS13B,CAAA6P,IAAA,EAAb,CACI8nB,EAAW33B,CAAA43B,QACf,IAAI,CACFp5B,CAAAqR,IAAA,CAAaA,CAAb,CAAkB9f,CAAlB,CAA2B0f,CAA3B,CAKA,CAAAzP,CAAA43B,QAAA,CAAoBp5B,CAAAiR,MAAA,EANlB,CAOF,MAAO/f,CAAP,CAAU,CAKV,KAHAsQ,EAAA6P,IAAA,CAAc6nB,CAAd,CAGMhoC,CAFNsQ,CAAA43B,QAEMloC,CAFcioC,CAEdjoC,CAAAA,CAAN,CALU,CAV0C,CA8IxDmoC,QAASA,EAAmB,CAACH,CAAD,CAASC,CAAT,CAAmB,CAC7Cr3B,CAAAw3B,WAAA,CAAsB,wBAAtB,CAAgD93B,CAAA+3B,OAAA,EAAhD;AAAoEL,CAApE,CACE13B,CAAA43B,QADF,CACqBD,CADrB,CAD6C,CAvKmB,IAC9D33B,CAD8D,CAE9Dg4B,CACAtmB,EAAAA,CAAWlT,CAAAkT,SAAA,EAHmD,KAI9DumB,EAAaz5B,CAAAqR,IAAA,EAJiD,CAK9D0lB,CAEJ,IAAI6B,CAAAhhB,QAAJ,CAAuB,CACrB,GAAK1E,CAAAA,CAAL,EAAiB0lB,CAAAC,YAAjB,CACE,KAAMvB,GAAA,CAAgB,QAAhB,CAAN,CAGFP,CAAA,CAAqB0C,CA7tBlB3b,UAAA,CAAc,CAAd,CA6tBkB2b,CA7tBDvsC,QAAA,CAAY,GAAZ,CA6tBCusC,CA7tBgBvsC,QAAA,CAAY,IAAZ,CAAjB,CAAqC,CAArC,CAAjB,CA6tBH,EAAoCgmB,CAApC,EAAgD,GAAhD,CACAsmB,EAAA,CAAeh3B,CAAAwO,QAAA,CAAmB8lB,EAAnB,CAAsCyB,EANhC,CAAvB,IAQExB,EACA,CADUvkB,EAAA,CAAUinB,CAAV,CACV,CAAAD,CAAA,CAAevB,EAEjBz2B,EAAA,CAAY,IAAIg4B,CAAJ,CAAiBzC,CAAjB,CAA0B,GAA1B,CAAgCmB,CAAhC,CACZ12B,EAAAm2B,eAAA,CAAyB8B,CAAzB,CAAqCA,CAArC,CAEAj4B,EAAA43B,QAAA,CAAoBp5B,CAAAiR,MAAA,EAEpB,KAAIyoB,EAAoB,2BAqBxBrgB,EAAAxjB,GAAA,CAAgB,OAAhB,CAAyB,QAAQ,CAAC6T,CAAD,CAAQ,CAIvC,GAAKkvB,CAAAE,aAAL,EAA+Ba,CAAAjwB,CAAAiwB,QAA/B,EAAgDC,CAAAlwB,CAAAkwB,QAAhD,EAAiEC,CAAAnwB,CAAAmwB,SAAjE,EAAkG,CAAlG,EAAmFnwB,CAAAowB,MAAnF,EAAuH,CAAvH,EAAuGpwB,CAAAqwB,OAAvG,CAAA,CAKA,IAHA,IAAItqB,EAAM1e,CAAA,CAAO2Y,CAAAswB,OAAP,CAGV,CAA6B,GAA7B,GAAOptC,EAAA,CAAU6iB,CAAA,CAAI,CAAJ,CAAV,CAAP,CAAA,CAEE,GAAIA,CAAA,CAAI,CAAJ,CAAJ,GAAe4J,CAAA,CAAa,CAAb,CAAf,EAAmC,CAAA,CAAC5J,CAAD,CAAOA,CAAAxkB,OAAA,EAAP,EAAqB,CAArB,CAAnC,CAA4D,MAG9D,KAAIgvC,EAAUxqB,CAAAnjB,KAAA,CAAS,MAAT,CAAd;AAGIurC,EAAUpoB,CAAAljB,KAAA,CAAS,MAAT,CAAVsrC,EAA8BpoB,CAAAljB,KAAA,CAAS,YAAT,CAE9BlC,EAAA,CAAS4vC,CAAT,CAAJ,EAAgD,4BAAhD,GAAyBA,CAAApuC,SAAA,EAAzB,GAGEouC,CAHF,CAGY7J,EAAA,CAAW6J,CAAA3d,QAAX,CAAApK,KAHZ,CAOIwnB,EAAA3rC,KAAA,CAAuBksC,CAAvB,CAAJ,EAEIA,CAAAA,CAFJ,EAEgBxqB,CAAAljB,KAAA,CAAS,QAAT,CAFhB,EAEuCmd,CAAAC,mBAAA,EAFvC,EAGM,CAAAnI,CAAAm2B,eAAA,CAAyBsC,CAAzB,CAAkCpC,CAAlC,CAHN,GAOInuB,CAAAwwB,eAAA,EAEA,CAAI14B,CAAA+3B,OAAA,EAAJ,EAA0Bv5B,CAAAqR,IAAA,EAA1B,GACEvP,CAAA5N,OAAA,EAEA,CAAAgP,CAAA5O,QAAA,CAAgB,0BAAhB,CAAA,CAA8C,CAAA,CAHhD,CATJ,CAtBA,CAJuC,CAAzC,CA8CIqiC,GAAA,CAAcn1B,CAAA+3B,OAAA,EAAd,CAAJ,EAAyC5C,EAAA,CAAc8C,CAAd,CAAzC,EACEz5B,CAAAqR,IAAA,CAAa7P,CAAA+3B,OAAA,EAAb,CAAiC,CAAA,CAAjC,CAGF,KAAIY,EAAe,CAAA,CAGnBn6B,EAAA4S,YAAA,CAAqB,QAAQ,CAACwnB,CAAD,CAASC,CAAT,CAAmB,CAC9Cv4B,CAAA9V,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIktC,EAAS13B,CAAA+3B,OAAA,EAAb,CACIJ,EAAW33B,CAAA43B,QADf,CAEIvvB,CAEJrI,EAAA21B,QAAA,CAAkBiD,CAAlB,CACA54B,EAAA43B,QAAA,CAAoBiB,CAEpBxwB,EAAA,CAAmB/H,CAAAw3B,WAAA,CAAsB,sBAAtB,CAA8Cc,CAA9C,CAAsDlB,CAAtD,CACfmB,CADe,CACLlB,CADK,CAAAtvB,iBAKfrI;CAAA+3B,OAAA,EAAJ,GAA2Ba,CAA3B,GAEIvwB,CAAJ,EACErI,CAAA21B,QAAA,CAAkB+B,CAAlB,CAEA,CADA13B,CAAA43B,QACA,CADoBD,CACpB,CAAAF,CAAA,CAA0BC,CAA1B,CAAkC,CAAA,CAAlC,CAAyCC,CAAzC,CAHF,GAKEgB,CACA,CADe,CAAA,CACf,CAAAd,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CANF,CAFA,CAb+B,CAAjC,CAwBKr3B,EAAA+rB,QAAL,EAAyB/rB,CAAAw4B,QAAA,EAzBqB,CAAhD,CA6BAx4B,EAAA7V,OAAA,CAAkBsuC,QAAuB,EAAG,CAC1C,IAAIrB,EAASvC,EAAA,CAAc32B,CAAAqR,IAAA,EAAd,CAAb,CACI+oB,EAASzD,EAAA,CAAcn1B,CAAA+3B,OAAA,EAAd,CADb,CAEIJ,EAAWn5B,CAAAiR,MAAA,EAFf,CAGIupB,EAAiBh5B,CAAAi5B,UAHrB,CAIIC,EAAoBxB,CAApBwB,GAA+BN,CAA/BM,EACDl5B,CAAAy1B,QADCyD,EACoBl4B,CAAAwO,QADpB0pB,EACwCvB,CADxCuB,GACqDl5B,CAAA43B,QAEzD,IAAIe,CAAJ,EAAoBO,CAApB,CACEP,CAEA,CAFe,CAAA,CAEf,CAAAr4B,CAAA9V,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIouC,EAAS54B,CAAA+3B,OAAA,EAAb,CACI1vB,EAAmB/H,CAAAw3B,WAAA,CAAsB,sBAAtB,CAA8Cc,CAA9C,CAAsDlB,CAAtD,CACnB13B,CAAA43B,QADmB,CACAD,CADA,CAAAtvB,iBAKnBrI,EAAA+3B,OAAA,EAAJ,GAA2Ba,CAA3B,GAEIvwB,CAAJ,EACErI,CAAA21B,QAAA,CAAkB+B,CAAlB,CACA,CAAA13B,CAAA43B,QAAA,CAAoBD,CAFtB,GAIMuB,CAIJ,EAHEzB,CAAA,CAA0BmB,CAA1B,CAAkCI,CAAlC,CAC0BrB,CAAA,GAAa33B,CAAA43B,QAAb,CAAiC,IAAjC,CAAwC53B,CAAA43B,QADlE,CAGF,CAAAC,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CARF,CAFA,CAP+B,CAAjC,CAsBF33B,EAAAi5B,UAAA,CAAsB,CAAA,CAjCoB,CAA5C,CAuCA,OAAOj5B,EArK2D,CADxD,CA1Ge,CAqU7BG,QAASA,GAAY,EAAG,CAAA,IAClBg5B,EAAQ,CAAA,CADU,CAElBvrC,EAAO,IASX;IAAAwrC,aAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAO,CACjC,MAAIrvC,EAAA,CAAUqvC,CAAV,CAAJ,EACEH,CACK,CADGG,CACH,CAAA,IAFP,EAISH,CALwB,CASnC,KAAApwB,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAACrH,CAAD,CAAU,CAwDxC63B,QAASA,EAAW,CAAClkC,CAAD,CAAM,CACpBA,CAAJ,WAAmBmkC,MAAnB,GACMnkC,CAAA+V,MAAJ,CACE/V,CADF,CACSA,CAAA8V,QAAD,EAAoD,EAApD,GAAgB9V,CAAA+V,MAAA1f,QAAA,CAAkB2J,CAAA8V,QAAlB,CAAhB,CACA,SADA,CACY9V,CAAA8V,QADZ,CAC0B,IAD1B,CACiC9V,CAAA+V,MADjC,CAEA/V,CAAA+V,MAHR,CAIW/V,CAAAokC,UAJX,GAKEpkC,CALF,CAKQA,CAAA8V,QALR,CAKsB,IALtB,CAK6B9V,CAAAokC,UAL7B,CAK6C,GAL7C,CAKmDpkC,CAAAozB,KALnD,CADF,CASA,OAAOpzB,EAViB,CAa1BqkC,QAASA,EAAU,CAAC10B,CAAD,CAAO,CAAA,IACpB20B,EAAUj4B,CAAAi4B,QAAVA,EAA6B,EADT,CAEpBC,EAAQD,CAAA,CAAQ30B,CAAR,CAAR40B,EAAyBD,CAAAE,IAAzBD,EAAwChwC,CACxCkwC,EAAAA,CAAW,CAAA,CAIf,IAAI,CACFA,CAAA,CAAW,CAAE9rC,CAAA4rC,CAAA5rC,MADX,CAEF,MAAO0B,CAAP,CAAU,EAEZ,MAAIoqC,EAAJ,CACS,QAAQ,EAAG,CAChB,IAAIjwB,EAAO,EACX1iB,EAAA,CAAQgC,SAAR,CAAmB,QAAQ,CAACkM,CAAD,CAAM,CAC/BwU,CAAAzd,KAAA,CAAUmtC,CAAA,CAAYlkC,CAAZ,CAAV,CAD+B,CAAjC,CAGA,OAAOukC,EAAA5rC,MAAA,CAAY2rC,CAAZ,CAAqB9vB,CAArB,CALS,CADpB,CAYO,QAAQ,CAACkwB,CAAD,CAAOC,CAAP,CAAa,CAC1BJ,CAAA,CAAMG,CAAN,CAAoB,IAAR,EAAAC,CAAA,CAAe,EAAf,CAAoBA,CAAhC,CAD0B,CAvBJ,CApE1B,MAAO,CAQLH,IAAKH,CAAA,CAAW,KAAX,CARA;AAiBLhmB,KAAMgmB,CAAA,CAAW,MAAX,CAjBD,CA0BLO,KAAMP,CAAA,CAAW,MAAX,CA1BD,CAmCLtqB,MAAOsqB,CAAA,CAAW,OAAX,CAnCF,CA4CLP,MAAQ,QAAQ,EAAG,CACjB,IAAItrC,EAAK6rC,CAAA,CAAW,OAAX,CAET,OAAO,SAAQ,EAAG,CACZP,CAAJ,EACEtrC,CAAAG,MAAA,CAASJ,CAAT,CAAezE,SAAf,CAFc,CAHD,CAAX,EA5CH,CADiC,CAA9B,CApBU,CA4JxB+wC,QAASA,GAAoB,CAAC3oC,CAAD,CAAO4oC,CAAP,CAAuB,CAClD,GAAa,kBAAb,GAAI5oC,CAAJ,EAA4C,kBAA5C,GAAmCA,CAAnC,EACgB,kBADhB,GACOA,CADP,EAC+C,kBAD/C,GACsCA,CADtC,EAEgB,WAFhB,GAEOA,CAFP,CAGE,KAAM6oC,GAAA,CAAa,SAAb,CAEmBD,CAFnB,CAAN,CAIF,MAAO5oC,EAR2C,CAWpD8oC,QAASA,GAAgB,CAAC1zC,CAAD,CAAMwzC,CAAN,CAAsB,CAE7C,GAAIxzC,CAAJ,CAAS,CACP,GAAIA,CAAA6F,YAAJ,GAAwB7F,CAAxB,CACE,KAAMyzC,GAAA,CAAa,QAAb,CAEFD,CAFE,CAAN,CAGK,GACHxzC,CAAAL,OADG,GACYK,CADZ,CAEL,KAAMyzC,GAAA,CAAa,YAAb,CAEFD,CAFE,CAAN,CAGK,GACHxzC,CAAA2zC,SADG,GACc3zC,CAAAkE,SADd,EAC+BlE,CAAAmE,KAD/B,EAC2CnE,CAAAoE,KAD3C,EACuDpE,CAAAqE,KADvD,EAEL,KAAMovC,GAAA,CAAa,SAAb,CAEFD,CAFE,CAAN,CAGK,GACHxzC,CADG,GACKG,MADL,CAEL,KAAMszC,GAAA,CAAa,SAAb;AAEFD,CAFE,CAAN,CAjBK,CAsBT,MAAOxzC,EAxBsC,CA+B/C4zC,QAASA,GAAkB,CAAC5zC,CAAD,CAAMwzC,CAAN,CAAsB,CAC/C,GAAIxzC,CAAJ,CAAS,CACP,GAAIA,CAAA6F,YAAJ,GAAwB7F,CAAxB,CACE,KAAMyzC,GAAA,CAAa,QAAb,CAEJD,CAFI,CAAN,CAGK,GAAIxzC,CAAJ,GAAY6zC,EAAZ,EAAoB7zC,CAApB,GAA4B8zC,EAA5B,EAAqC9zC,CAArC,GAA6C+zC,EAA7C,CACL,KAAMN,GAAA,CAAa,QAAb,CAEJD,CAFI,CAAN,CANK,CADsC,CAygBjDQ,QAASA,GAAS,CAACnT,CAAD,CAAI4B,CAAJ,CAAO,CACvB,MAAoB,WAAb,GAAA,MAAO5B,EAAP,CAA2BA,CAA3B,CAA+B4B,CADf,CAIzBwR,QAASA,GAAM,CAAC91B,CAAD,CAAI+1B,CAAJ,CAAO,CACpB,MAAiB,WAAjB,GAAI,MAAO/1B,EAAX,CAAqC+1B,CAArC,CACiB,WAAjB,GAAI,MAAOA,EAAX,CAAqC/1B,CAArC,CACOA,CADP,CACW+1B,CAHS,CAWtBC,QAASA,EAA+B,CAACC,CAAD,CAAM77B,CAAN,CAAe,CACrD,IAAI87B,CAAJ,CACIC,CACJ,QAAQF,CAAA/1B,KAAR,EACA,KAAKk2B,CAAAC,QAAL,CACEH,CAAA,CAAe,CAAA,CACf7zC,EAAA,CAAQ4zC,CAAAhN,KAAR,CAAkB,QAAQ,CAACqN,CAAD,CAAO,CAC/BN,CAAA,CAAgCM,CAAApU,WAAhC,CAAiD9nB,CAAjD,CACA87B,EAAA,CAAeA,CAAf,EAA+BI,CAAApU,WAAAxvB,SAFA,CAAjC,CAIAujC,EAAAvjC,SAAA,CAAewjC,CACf,MACF,MAAKE,CAAAG,QAAL,CACEN,CAAAvjC,SAAA,CAAe,CAAA,CACfujC,EAAAO,QAAA,CAAc,EACd,MACF,MAAKJ,CAAAK,gBAAL,CACET,CAAA,CAAgCC,CAAAS,SAAhC,CAA8Ct8B,CAA9C,CACA67B,EAAAvjC,SAAA,CAAeujC,CAAAS,SAAAhkC,SACfujC;CAAAO,QAAA,CAAcP,CAAAS,SAAAF,QACd,MACF,MAAKJ,CAAAO,iBAAL,CACEX,CAAA,CAAgCC,CAAAW,KAAhC,CAA0Cx8B,CAA1C,CACA47B,EAAA,CAAgCC,CAAAY,MAAhC,CAA2Cz8B,CAA3C,CACA67B,EAAAvjC,SAAA,CAAeujC,CAAAW,KAAAlkC,SAAf,EAAoCujC,CAAAY,MAAAnkC,SACpCujC,EAAAO,QAAA,CAAcP,CAAAW,KAAAJ,QAAA9tC,OAAA,CAAwButC,CAAAY,MAAAL,QAAxB,CACd,MACF,MAAKJ,CAAAU,kBAAL,CACEd,CAAA,CAAgCC,CAAAW,KAAhC,CAA0Cx8B,CAA1C,CACA47B,EAAA,CAAgCC,CAAAY,MAAhC,CAA2Cz8B,CAA3C,CACA67B,EAAAvjC,SAAA,CAAeujC,CAAAW,KAAAlkC,SAAf,EAAoCujC,CAAAY,MAAAnkC,SACpCujC,EAAAO,QAAA,CAAcP,CAAAvjC,SAAA,CAAe,EAAf,CAAoB,CAACujC,CAAD,CAClC,MACF,MAAKG,CAAAW,sBAAL,CACEf,CAAA,CAAgCC,CAAAxuC,KAAhC,CAA0C2S,CAA1C,CACA47B,EAAA,CAAgCC,CAAAe,UAAhC,CAA+C58B,CAA/C,CACA47B,EAAA,CAAgCC,CAAAgB,WAAhC,CAAgD78B,CAAhD,CACA67B,EAAAvjC,SAAA,CAAeujC,CAAAxuC,KAAAiL,SAAf,EAAoCujC,CAAAe,UAAAtkC,SAApC,EAA8DujC,CAAAgB,WAAAvkC,SAC9DujC,EAAAO,QAAA,CAAcP,CAAAvjC,SAAA,CAAe,EAAf,CAAoB,CAACujC,CAAD,CAClC,MACF,MAAKG,CAAAc,WAAL,CACEjB,CAAAvjC,SAAA;AAAe,CAAA,CACfujC,EAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKG,CAAAe,iBAAL,CACEnB,CAAA,CAAgCC,CAAAmB,OAAhC,CAA4Ch9B,CAA5C,CACI67B,EAAAoB,SAAJ,EACErB,CAAA,CAAgCC,CAAA9D,SAAhC,CAA8C/3B,CAA9C,CAEF67B,EAAAvjC,SAAA,CAAeujC,CAAAmB,OAAA1kC,SAAf,GAAuC,CAACujC,CAAAoB,SAAxC,EAAwDpB,CAAA9D,SAAAz/B,SAAxD,CACAujC,EAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKG,CAAAkB,eAAL,CACEpB,CAAA,CAAeD,CAAApjC,OAAA,CAxDV,CAwDmCuH,CAzDjCrR,CAyD0CktC,CAAAsB,OAAA9qC,KAzD1C1D,CACDw2B,UAwDS,CAAqD,CAAA,CACpE4W,EAAA,CAAc,EACd9zC,EAAA,CAAQ4zC,CAAA5xC,UAAR,CAAuB,QAAQ,CAACiyC,CAAD,CAAO,CACpCN,CAAA,CAAgCM,CAAhC,CAAsCl8B,CAAtC,CACA87B,EAAA,CAAeA,CAAf,EAA+BI,CAAA5jC,SAC1B4jC,EAAA5jC,SAAL,EACEyjC,CAAA7uC,KAAA4B,MAAA,CAAuBitC,CAAvB,CAAoCG,CAAAE,QAApC,CAJkC,CAAtC,CAOAP,EAAAvjC,SAAA,CAAewjC,CACfD,EAAAO,QAAA,CAAcP,CAAApjC,OAAA,EAlER0sB,CAkEkCnlB,CAnEjCrR,CAmE0CktC,CAAAsB,OAAA9qC,KAnE1C1D,CACDw2B,UAkEQ,CAAsD4W,CAAtD,CAAoE,CAACF,CAAD,CAClF,MACF,MAAKG,CAAAoB,qBAAL,CACExB,CAAA,CAAgCC,CAAAW,KAAhC,CAA0Cx8B,CAA1C,CACA47B,EAAA,CAAgCC,CAAAY,MAAhC,CAA2Cz8B,CAA3C,CACA67B,EAAAvjC,SAAA,CAAeujC,CAAAW,KAAAlkC,SAAf,EAAoCujC,CAAAY,MAAAnkC,SACpCujC;CAAAO,QAAA,CAAc,CAACP,CAAD,CACd,MACF,MAAKG,CAAAqB,gBAAL,CACEvB,CAAA,CAAe,CAAA,CACfC,EAAA,CAAc,EACd9zC,EAAA,CAAQ4zC,CAAAt0B,SAAR,CAAsB,QAAQ,CAAC20B,CAAD,CAAO,CACnCN,CAAA,CAAgCM,CAAhC,CAAsCl8B,CAAtC,CACA87B,EAAA,CAAeA,CAAf,EAA+BI,CAAA5jC,SAC1B4jC,EAAA5jC,SAAL,EACEyjC,CAAA7uC,KAAA4B,MAAA,CAAuBitC,CAAvB,CAAoCG,CAAAE,QAApC,CAJiC,CAArC,CAOAP,EAAAvjC,SAAA,CAAewjC,CACfD,EAAAO,QAAA,CAAcL,CACd,MACF,MAAKC,CAAAsB,iBAAL,CACExB,CAAA,CAAe,CAAA,CACfC,EAAA,CAAc,EACd9zC,EAAA,CAAQ4zC,CAAA0B,WAAR,CAAwB,QAAQ,CAACxF,CAAD,CAAW,CACzC6D,CAAA,CAAgC7D,CAAA/uC,MAAhC,CAAgDgX,CAAhD,CACA87B,EAAA,CAAeA,CAAf,EAA+B/D,CAAA/uC,MAAAsP,SAC1By/B,EAAA/uC,MAAAsP,SAAL,EACEyjC,CAAA7uC,KAAA4B,MAAA,CAAuBitC,CAAvB,CAAoChE,CAAA/uC,MAAAozC,QAApC,CAJuC,CAA3C,CAOAP,EAAAvjC,SAAA,CAAewjC,CACfD,EAAAO,QAAA,CAAcL,CACd,MACF,MAAKC,CAAAwB,eAAL,CACE3B,CAAAvjC,SACA,CADe,CAAA,CACf,CAAAujC,CAAAO,QAAA,CAAc,EAhGhB,CAHqD,CAwGvDqB,QAASA,GAAS,CAAC5O,CAAD,CAAO,CACvB,GAAmB,CAAnB,EAAIA,CAAAlnC,OAAJ,CAAA,CACI+1C,CAAAA,CAAiB7O,CAAA,CAAK,CAAL,CAAA/G,WACrB,KAAIv1B,EAAYmrC,CAAAtB,QAChB,OAAyB,EAAzB,GAAI7pC,CAAA5K,OAAJ,CAAmC4K,CAAnC,CACOA,CAAA,CAAU,CAAV,CAAA,GAAiBmrC,CAAjB,CAAkCnrC,CAAlC,CAA8CjL,CAJrD,CADuB,CAnpZc;AA2pZvCq2C,QAASA,GAAY,CAAC9B,CAAD,CAAM,CACzB,MAAOA,EAAA/1B,KAAP,GAAoBk2B,CAAAc,WAApB,EAAsCjB,CAAA/1B,KAAtC,GAAmDk2B,CAAAe,iBAD1B,CAI3Ba,QAASA,GAAa,CAAC/B,CAAD,CAAM,CAC1B,GAAwB,CAAxB,GAAIA,CAAAhN,KAAAlnC,OAAJ,EAA6Bg2C,EAAA,CAAa9B,CAAAhN,KAAA,CAAS,CAAT,CAAA/G,WAAb,CAA7B,CACE,MAAO,CAAChiB,KAAMk2B,CAAAoB,qBAAP,CAAiCZ,KAAMX,CAAAhN,KAAA,CAAS,CAAT,CAAA/G,WAAvC,CAA+D2U,MAAO,CAAC32B,KAAMk2B,CAAA6B,iBAAP,CAAtE,CAAoGC,SAAU,GAA9G,CAFiB,CAM5BC,QAASA,GAAS,CAAClC,CAAD,CAAM,CACtB,MAA2B,EAA3B,GAAOA,CAAAhN,KAAAlnC,OAAP,EACwB,CADxB,GACIk0C,CAAAhN,KAAAlnC,OADJ,GAEIk0C,CAAAhN,KAAA,CAAS,CAAT,CAAA/G,WAAAhiB,KAFJ,GAEoCk2B,CAAAG,QAFpC,EAGIN,CAAAhN,KAAA,CAAS,CAAT,CAAA/G,WAAAhiB,KAHJ,GAGoCk2B,CAAAqB,gBAHpC,EAIIxB,CAAAhN,KAAA,CAAS,CAAT,CAAA/G,WAAAhiB,KAJJ,GAIoCk2B,CAAAsB,iBAJpC,CADsB,CAYxBU,QAASA,GAAW,CAACC,CAAD,CAAaj+B,CAAb,CAAsB,CACxC,IAAAi+B,WAAA,CAAkBA,CAClB,KAAAj+B,QAAA,CAAeA,CAFyB,CAqd1Ck+B,QAASA,GAAc,CAACD,CAAD;AAAaj+B,CAAb,CAAsB,CAC3C,IAAAi+B,WAAA,CAAkBA,CAClB,KAAAj+B,QAAA,CAAeA,CAF4B,CAwY7Cm+B,QAASA,GAAM,CAAC12C,CAAD,CAAMgP,CAAN,CAAY2nC,CAAZ,CAAsBC,CAAtB,CAA+B,CAC5ClD,EAAA,CAAiB1zC,CAAjB,CAAsB42C,CAAtB,CAEIlyC,EAAAA,CAAUsK,CAAAxK,MAAA,CAAW,GAAX,CACd,KADA,IAA+B7D,CAA/B,CACSS,EAAI,CAAb,CAAiC,CAAjC,CAAgBsD,CAAAxE,OAAhB,CAAoCkB,CAAA,EAApC,CAAyC,CACvCT,CAAA,CAAM4yC,EAAA,CAAqB7uC,CAAAugB,MAAA,EAArB,CAAsC2xB,CAAtC,CACN,KAAIC,EAAcnD,EAAA,CAAiB1zC,CAAA,CAAIW,CAAJ,CAAjB,CAA2Bi2C,CAA3B,CACbC,EAAL,GACEA,CACA,CADc,EACd,CAAA72C,CAAA,CAAIW,CAAJ,CAAA,CAAWk2C,CAFb,CAIA72C,EAAA,CAAM62C,CAPiC,CASzCl2C,CAAA,CAAM4yC,EAAA,CAAqB7uC,CAAAugB,MAAA,EAArB,CAAsC2xB,CAAtC,CACNlD,GAAA,CAAiB1zC,CAAA,CAAIW,CAAJ,CAAjB,CAA2Bi2C,CAA3B,CAEA,OADA52C,EAAA,CAAIW,CAAJ,CACA,CADWg2C,CAfiC,CAsB9CG,QAASA,GAA6B,CAAClsC,CAAD,CAAO,CAC3C,MAAe,aAAf,EAAOA,CADoC,CAM7CmsC,QAASA,GAAU,CAACx1C,CAAD,CAAQ,CACzB,MAAOX,EAAA,CAAWW,CAAA0nC,QAAX,CAAA,CAA4B1nC,CAAA0nC,QAAA,EAA5B,CAA8C+N,EAAAl2C,KAAA,CAAmBS,CAAnB,CAD5B,CAuD3BmY,QAASA,GAAc,EAAG,CACxB,IAAIu9B,EAAerwC,EAAA,EAAnB,CACIswC,EAAiBtwC,EAAA,EAErB,KAAAwb,KAAA,CAAY,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAAC7J,CAAD,CAAU8B,CAAV,CAAoB,CAkD9D88B,QAASA,EAAyB,CAACnb,CAAD,CAAWob,CAAX,CAA4B,CAE5D,MAAgB,KAAhB,EAAIpb,CAAJ,EAA2C,IAA3C,EAAwBob,CAAxB,CACSpb,CADT,GACsBob,CADtB,CAIwB,QAAxB,GAAI,MAAOpb,EAAX,GAKEA,CAEI,CAFO+a,EAAA,CAAW/a,CAAX,CAEP,CAAoB,QAApB,GAAA,MAAOA,EAPb,EASW,CAAA,CATX,CAgBOA,CAhBP,GAgBoBob,CAhBpB,EAgBwCpb,CAhBxC,GAgBqDA,CAhBrD,EAgBiEob,CAhBjE;AAgBqFA,CAtBzB,CAyB9DC,QAASA,EAAmB,CAACxrC,CAAD,CAAQwd,CAAR,CAAkBiuB,CAAlB,CAAkCC,CAAlC,CAAoDC,CAApD,CAA2E,CACrG,IAAIC,EAAmBF,CAAAG,OAAvB,CACIC,CAEJ,IAAgC,CAAhC,GAAIF,CAAAv3C,OAAJ,CAAmC,CACjC,IAAI03C,EAAkBT,CAAtB,CACAM,EAAmBA,CAAA,CAAiB,CAAjB,CACnB,OAAO5rC,EAAA/H,OAAA,CAAa+zC,QAA6B,CAAChsC,CAAD,CAAQ,CACvD,IAAIisC,EAAgBL,CAAA,CAAiB5rC,CAAjB,CACfsrC,EAAA,CAA0BW,CAA1B,CAAyCF,CAAzC,CAAL,GACED,CACA,CADaJ,CAAA,CAAiB1rC,CAAjB,CAAwBhM,CAAxB,CAAmCA,CAAnC,CAA8C,CAACi4C,CAAD,CAA9C,CACb,CAAAF,CAAA,CAAkBE,CAAlB,EAAmCf,EAAA,CAAWe,CAAX,CAFrC,CAIA,OAAOH,EANgD,CAAlD,CAOJtuB,CAPI,CAOMiuB,CAPN,CAOsBE,CAPtB,CAH0B,CAenC,IAFA,IAAIO,EAAwB,EAA5B,CACIC,EAAiB,EADrB,CAES52C,EAAI,CAFb,CAEgBa,EAAKw1C,CAAAv3C,OAArB,CAA8CkB,CAA9C,CAAkDa,CAAlD,CAAsDb,CAAA,EAAtD,CACE22C,CAAA,CAAsB32C,CAAtB,CACA,CAD2B+1C,CAC3B,CAAAa,CAAA,CAAe52C,CAAf,CAAA,CAAoB,IAGtB,OAAOyK,EAAA/H,OAAA,CAAam0C,QAA8B,CAACpsC,CAAD,CAAQ,CAGxD,IAFA,IAAIqsC,EAAU,CAAA,CAAd,CAES92C,EAAI,CAFb,CAEgBa,EAAKw1C,CAAAv3C,OAArB,CAA8CkB,CAA9C,CAAkDa,CAAlD,CAAsDb,CAAA,EAAtD,CAA2D,CACzD,IAAI02C,EAAgBL,CAAA,CAAiBr2C,CAAjB,CAAA,CAAoByK,CAApB,CACpB,IAAIqsC,CAAJ,GAAgBA,CAAhB,CAA0B,CAACf,CAAA,CAA0BW,CAA1B,CAAyCC,CAAA,CAAsB32C,CAAtB,CAAzC,CAA3B,EACE42C,CAAA,CAAe52C,CAAf,CACA,CADoB02C,CACpB,CAAAC,CAAA,CAAsB32C,CAAtB,CAAA,CAA2B02C,CAA3B,EAA4Cf,EAAA,CAAWe,CAAX,CAJW,CAQvDI,CAAJ,GACEP,CADF,CACeJ,CAAA,CAAiB1rC,CAAjB,CAAwBhM,CAAxB,CAAmCA,CAAnC,CAA8Cm4C,CAA9C,CADf,CAIA,OAAOL,EAfiD,CAAnD,CAgBJtuB,CAhBI,CAgBMiuB,CAhBN,CAgBsBE,CAhBtB,CAxB8F,CA2CvGW,QAASA,EAAoB,CAACtsC,CAAD,CAAQwd,CAAR,CAAkBiuB,CAAlB,CAAkCC,CAAlC,CAAoD,CAAA,IAC3E5Z,CAD2E,CAClEV,CACb,OAAOU,EAAP,CAAiB9xB,CAAA/H,OAAA,CAAas0C,QAAqB,CAACvsC,CAAD,CAAQ,CACzD,MAAO0rC,EAAA,CAAiB1rC,CAAjB,CADkD,CAA1C,CAEdwsC,QAAwB,CAAC92C,CAAD,CAAQ+2C,CAAR,CAAazsC,CAAb,CAAoB,CAC7CoxB,CAAA,CAAY17B,CACRX,EAAA,CAAWyoB,CAAX,CAAJ,EACEA,CAAAhiB,MAAA,CAAe,IAAf,CAAqB7E,SAArB,CAEEc,EAAA,CAAU/B,CAAV,CAAJ;AACEsK,CAAA0sC,aAAA,CAAmB,QAAQ,EAAG,CACxBj1C,CAAA,CAAU25B,CAAV,CAAJ,EACEU,CAAA,EAF0B,CAA9B,CAN2C,CAF9B,CAcd2Z,CAdc,CAF8D,CAmBjFkB,QAASA,EAA2B,CAAC3sC,CAAD,CAAQwd,CAAR,CAAkBiuB,CAAlB,CAAkCC,CAAlC,CAAoD,CAgBtFkB,QAASA,EAAY,CAACl3C,CAAD,CAAQ,CAC3B,IAAIm3C,EAAa,CAAA,CACjBl4C,EAAA,CAAQe,CAAR,CAAe,QAAQ,CAACgE,CAAD,CAAM,CACtBjC,CAAA,CAAUiC,CAAV,CAAL,GAAqBmzC,CAArB,CAAkC,CAAA,CAAlC,CAD2B,CAA7B,CAGA,OAAOA,EALoB,CAhByD,IAClF/a,CADkF,CACzEV,CACb,OAAOU,EAAP,CAAiB9xB,CAAA/H,OAAA,CAAas0C,QAAqB,CAACvsC,CAAD,CAAQ,CACzD,MAAO0rC,EAAA,CAAiB1rC,CAAjB,CADkD,CAA1C,CAEdwsC,QAAwB,CAAC92C,CAAD,CAAQ+2C,CAAR,CAAazsC,CAAb,CAAoB,CAC7CoxB,CAAA,CAAY17B,CACRX,EAAA,CAAWyoB,CAAX,CAAJ,EACEA,CAAAvoB,KAAA,CAAc,IAAd,CAAoBS,CAApB,CAA2B+2C,CAA3B,CAAgCzsC,CAAhC,CAEE4sC,EAAA,CAAal3C,CAAb,CAAJ,EACEsK,CAAA0sC,aAAA,CAAmB,QAAQ,EAAG,CACxBE,CAAA,CAAaxb,CAAb,CAAJ,EAA6BU,CAAA,EADD,CAA9B,CAN2C,CAF9B,CAYd2Z,CAZc,CAFqE,CAyBxFqB,QAASA,EAAqB,CAAC9sC,CAAD,CAAQwd,CAAR,CAAkBiuB,CAAlB,CAAkCC,CAAlC,CAAoD,CAChF,IAAI5Z,CACJ,OAAOA,EAAP,CAAiB9xB,CAAA/H,OAAA,CAAa80C,QAAsB,CAAC/sC,CAAD,CAAQ,CAC1D,MAAO0rC,EAAA,CAAiB1rC,CAAjB,CADmD,CAA3C,CAEdgtC,QAAyB,CAACt3C,CAAD,CAAQ+2C,CAAR,CAAazsC,CAAb,CAAoB,CAC1CjL,CAAA,CAAWyoB,CAAX,CAAJ,EACEA,CAAAhiB,MAAA,CAAe,IAAf,CAAqB7E,SAArB,CAEFm7B,EAAA,EAJ8C,CAF/B,CAOd2Z,CAPc,CAF+D,CAYlFwB,QAASA,EAAc,CAACvB,CAAD,CAAmBwB,CAAnB,CAAkC,CACvD,GAAKA,CAAAA,CAAL,CAAoB,MAAOxB,EAC3B,KAAIyB,EAAgBzB,CAAAzN,gBAApB,CAMI5iC,EAHA8xC,CAGK,GAHaR,CAGb,EAFLQ,CAEK,GAFab,CAEb,CAAec,QAAqC,CAACptC,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACvFn2C,CAAAA,CAAQg2C,CAAA,CAAiB1rC,CAAjB,CAAwBqZ,CAAxB,CAAgCqY,CAAhC,CAAwCma,CAAxC,CACZ,OAAOqB,EAAA,CAAcx3C,CAAd;AAAqBsK,CAArB,CAA4BqZ,CAA5B,CAFoF,CAApF,CAGLg0B,QAAqC,CAACrtC,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACnEn2C,CAAAA,CAAQg2C,CAAA,CAAiB1rC,CAAjB,CAAwBqZ,CAAxB,CAAgCqY,CAAhC,CAAwCma,CAAxC,CACRlyC,EAAAA,CAASuzC,CAAA,CAAcx3C,CAAd,CAAqBsK,CAArB,CAA4BqZ,CAA5B,CAGb,OAAO5hB,EAAA,CAAU/B,CAAV,CAAA,CAAmBiE,CAAnB,CAA4BjE,CALoC,CASrEg2C,EAAAzN,gBAAJ,EACIyN,CAAAzN,gBADJ,GACyCuN,CADzC,CAEEnwC,CAAA4iC,gBAFF,CAEuByN,CAAAzN,gBAFvB,CAGYiP,CAAArb,UAHZ,GAMEx2B,CAAA4iC,gBACA,CADqBuN,CACrB,CAAAnwC,CAAAwwC,OAAA,CAAYH,CAAAG,OAAA,CAA0BH,CAAAG,OAA1B,CAAoD,CAACH,CAAD,CAPlE,CAUA,OAAOrwC,EA9BgD,CA9KK,IAC1DiyC,EAAgB,CACd3nC,IAAK6I,CAAA7I,IADS,CAEd4nC,gBAAiB,CAAA,CAFH,CAD0C,CAK1DC,EAAyB,CACvB7nC,IAAK6I,CAAA7I,IADkB,CAEvB4nC,gBAAiB,CAAA,CAFM,CAK7B,OAAO3/B,SAAe,CAACgwB,CAAD,CAAMsP,CAAN,CAAqBK,CAArB,CAAsC,CAAA,IACtD7B,CADsD,CACpC+B,CADoC,CAC3BC,CAE/B,QAAQ,MAAO9P,EAAf,EACE,KAAK,QAAL,CAEE8P,CAAA,CADA9P,CACA,CADMA,CAAAlsB,KAAA,EAGN,KAAIoH,EAASy0B,CAAA,CAAkBlC,CAAlB,CAAmCD,CAChDM,EAAA,CAAmB5yB,CAAA,CAAM40B,CAAN,CAEdhC,EAAL,GACwB,GAgBtB,GAhBI9N,CAAApjC,OAAA,CAAW,CAAX,CAgBJ,EAhB+C,GAgB/C,GAhB6BojC,CAAApjC,OAAA,CAAW,CAAX,CAgB7B,GAfEizC,CACA,CADU,CAAA,CACV,CAAA7P,CAAA,CAAMA,CAAA9T,UAAA,CAAc,CAAd,CAcR,EAZI6jB,CAYJ,CAZmBJ,CAAA,CAAkBC,CAAlB,CAA2CF,CAY9D,CAXIM,CAWJ,CAXY,IAAIC,EAAJ,CAAUF,CAAV,CAWZ,CATAjC,CASA,CATmB1vC,CADN8xC,IAAIC,EAAJD,CAAWF,CAAXE,CAAkBphC,CAAlBohC,CAA2BH,CAA3BG,CACM9xC,OAAA,CAAa4hC,CAAb,CASnB,CARI8N,CAAA1mC,SAAJ;AACE0mC,CAAAzN,gBADF,CACqC6O,CADrC,CAEWW,CAAJ,CACL/B,CAAAzN,gBADK,CAC8ByN,CAAAja,QAAA,CAC/Bkb,CAD+B,CACDL,CAF7B,CAGIZ,CAAAG,OAHJ,GAILH,CAAAzN,gBAJK,CAI8BuN,CAJ9B,CAMP,CAAA1yB,CAAA,CAAM40B,CAAN,CAAA,CAAkBhC,CAjBpB,CAmBA,OAAOuB,EAAA,CAAevB,CAAf,CAAiCwB,CAAjC,CAET,MAAK,UAAL,CACE,MAAOD,EAAA,CAAerP,CAAf,CAAoBsP,CAApB,CAET,SACE,MAAO91C,EAjCX,CAH0D,CAVE,CAApD,CAJY,CA2a1B6W,QAASA,GAAU,EAAG,CAEpB,IAAAsI,KAAA,CAAY,CAAC,YAAD,CAAe,mBAAf,CAAoC,QAAQ,CAACzI,CAAD,CAAatB,CAAb,CAAgC,CACtF,MAAOwhC,GAAA,CAAS,QAAQ,CAAC/vB,CAAD,CAAW,CACjCnQ,CAAA9V,WAAA,CAAsBimB,CAAtB,CADiC,CAA5B,CAEJzR,CAFI,CAD+E,CAA5E,CAFQ,CAStB2B,QAASA,GAAW,EAAG,CACrB,IAAAoI,KAAA,CAAY,CAAC,UAAD,CAAa,mBAAb,CAAkC,QAAQ,CAACvK,CAAD,CAAWQ,CAAX,CAA8B,CAClF,MAAOwhC,GAAA,CAAS,QAAQ,CAAC/vB,CAAD,CAAW,CACjCjS,CAAAoT,MAAA,CAAenB,CAAf,CADiC,CAA5B,CAEJzR,CAFI,CAD2E,CAAxE,CADS,CAgBvBwhC,QAASA,GAAQ,CAACC,CAAD,CAAWC,CAAX,CAA6B,CAE5CC,QAASA,EAAQ,CAAC/yC,CAAD,CAAOgzC,CAAP,CAAkBjV,CAAlB,CAA4B,CAE3CpoB,QAASA,EAAI,CAAC1V,CAAD,CAAK,CAChB,MAAO,SAAQ,CAAC3F,CAAD,CAAQ,CACjB8lC,CAAJ,GACAA,CACA,CADS,CAAA,CACT,CAAAngC,CAAApG,KAAA,CAAQmG,CAAR,CAAc1F,CAAd,CAFA,CADqB,CADP,CADlB,IAAI8lC,EAAS,CAAA,CASb,OAAO,CAACzqB,CAAA,CAAKq9B,CAAL,CAAD,CAAkBr9B,CAAA,CAAKooB,CAAL,CAAlB,CAVoC,CAFD;AA6B5CkV,QAASA,EAAO,EAAG,CACjB,IAAAjJ,QAAA,CAAe,CAAE7O,OAAQ,CAAV,CADE,CA6BnB+X,QAASA,EAAU,CAACz5C,CAAD,CAAUwG,CAAV,CAAc,CAC/B,MAAO,SAAQ,CAAC3F,CAAD,CAAQ,CACrB2F,CAAApG,KAAA,CAAQJ,CAAR,CAAiBa,CAAjB,CADqB,CADQ,CA8BjC64C,QAASA,EAAoB,CAACtxB,CAAD,CAAQ,CAC/BuxB,CAAAvxB,CAAAuxB,iBAAJ,EAA+BvxB,CAAAwxB,QAA/B,GACAxxB,CAAAuxB,iBACA,CADyB,CAAA,CACzB,CAAAP,CAAA,CAAS,QAAQ,EAAG,CA3BO,IACvB5yC,CADuB,CACnBy+B,CADmB,CACT2U,CAElBA,EAAA,CAwBmCxxB,CAxBzBwxB,QAwByBxxB,EAvBnCuxB,iBAAA,CAAyB,CAAA,CAuBUvxB,EAtBnCwxB,QAAA,CAAgBz6C,CAChB,KAN2B,IAMlBuB,EAAI,CANc,CAMXa,EAAKq4C,CAAAp6C,OAArB,CAAqCkB,CAArC,CAAyCa,CAAzC,CAA6C,EAAEb,CAA/C,CAAkD,CAChDukC,CAAA,CAAW2U,CAAA,CAAQl5C,CAAR,CAAA,CAAW,CAAX,CACX8F,EAAA,CAAKozC,CAAA,CAAQl5C,CAAR,CAAA,CAmB4B0nB,CAnBjBsZ,OAAX,CACL,IAAI,CACExhC,CAAA,CAAWsG,CAAX,CAAJ,CACEy+B,CAAAC,QAAA,CAAiB1+B,CAAA,CAgBY4hB,CAhBTvnB,MAAH,CAAjB,CADF,CAE4B,CAArB,GAewBunB,CAfpBsZ,OAAJ,CACLuD,CAAAC,QAAA,CAc6B9c,CAdZvnB,MAAjB,CADK,CAGLokC,CAAApC,OAAA,CAY6Bza,CAZbvnB,MAAhB,CANA,CAQF,MAAOwH,CAAP,CAAU,CACV48B,CAAApC,OAAA,CAAgBx6B,CAAhB,CACA,CAAAgxC,CAAA,CAAiBhxC,CAAjB,CAFU,CAXoC,CAqB9B,CAApB,CAFA,CADmC,CAMrCwxC,QAASA,EAAQ,EAAG,CAClB,IAAA/V,QAAA,CAAe,IAAI0V,CAEnB,KAAAtU,QAAA,CAAeuU,CAAA,CAAW,IAAX,CAAiB,IAAAvU,QAAjB,CACf,KAAArC,OAAA,CAAc4W,CAAA,CAAW,IAAX,CAAiB,IAAA5W,OAAjB,CACd,KAAAwH,OAAA;AAAcoP,CAAA,CAAW,IAAX,CAAiB,IAAApP,OAAjB,CALI,CA7FpB,IAAIyP,EAAW16C,CAAA,CAAO,IAAP,CAAa26C,SAAb,CAgCfP,EAAA30B,UAAA,CAAoB,CAClByU,KAAMA,QAAQ,CAAC0gB,CAAD,CAAcC,CAAd,CAA0BC,CAA1B,CAAwC,CACpD,IAAIp1C,EAAS,IAAI+0C,CAEjB,KAAAtJ,QAAAqJ,QAAA,CAAuB,IAAArJ,QAAAqJ,QAAvB,EAA+C,EAC/C,KAAArJ,QAAAqJ,QAAA70C,KAAA,CAA0B,CAACD,CAAD,CAASk1C,CAAT,CAAsBC,CAAtB,CAAkCC,CAAlC,CAA1B,CAC0B,EAA1B,CAAI,IAAA3J,QAAA7O,OAAJ,EAA6BgY,CAAA,CAAqB,IAAAnJ,QAArB,CAE7B,OAAOzrC,EAAAg/B,QAP6C,CADpC,CAWlB,QAASqW,QAAQ,CAAC/wB,CAAD,CAAW,CAC1B,MAAO,KAAAkQ,KAAA,CAAU,IAAV,CAAgBlQ,CAAhB,CADmB,CAXV,CAelB,UAAWgxB,QAAQ,CAAChxB,CAAD,CAAW8wB,CAAX,CAAyB,CAC1C,MAAO,KAAA5gB,KAAA,CAAU,QAAQ,CAACz4B,CAAD,CAAQ,CAC/B,MAAOw5C,EAAA,CAAex5C,CAAf,CAAsB,CAAA,CAAtB,CAA4BuoB,CAA5B,CADwB,CAA1B,CAEJ,QAAQ,CAACrB,CAAD,CAAQ,CACjB,MAAOsyB,EAAA,CAAetyB,CAAf,CAAsB,CAAA,CAAtB,CAA6BqB,CAA7B,CADU,CAFZ,CAIJ8wB,CAJI,CADmC,CAf1B,CAqEpBL,EAAAh1B,UAAA,CAAqB,CACnBqgB,QAASA,QAAQ,CAACrgC,CAAD,CAAM,CACjB,IAAAi/B,QAAAyM,QAAA7O,OAAJ,GACI78B,CAAJ,GAAY,IAAAi/B,QAAZ,CACE,IAAAwW,SAAA,CAAcR,CAAA,CACZ,QADY,CAGZj1C,CAHY,CAAd,CADF,CAME,IAAA01C,UAAA,CAAe11C,CAAf,CAPF,CADqB,CADJ;AAcnB01C,UAAWA,QAAQ,CAAC11C,CAAD,CAAM,CAAA,IACnBy0B,CADmB,CACbqI,CAEVA,EAAA,CAAM2X,CAAA,CAAS,IAAT,CAAe,IAAAiB,UAAf,CAA+B,IAAAD,SAA/B,CACN,IAAI,CACF,GAAK94C,CAAA,CAASqD,CAAT,CAAL,EAAsB3E,CAAA,CAAW2E,CAAX,CAAtB,CAAwCy0B,CAAA,CAAOz0B,CAAP,EAAcA,CAAAy0B,KAClDp5B,EAAA,CAAWo5B,CAAX,CAAJ,EACE,IAAAwK,QAAAyM,QAAA7O,OACA,CAD+B,EAC/B,CAAApI,CAAAl5B,KAAA,CAAUyE,CAAV,CAAe88B,CAAA,CAAI,CAAJ,CAAf,CAAuBA,CAAA,CAAI,CAAJ,CAAvB,CAA+B,IAAA0I,OAA/B,CAFF,GAIE,IAAAvG,QAAAyM,QAAA1vC,MAEA,CAF6BgE,CAE7B,CADA,IAAAi/B,QAAAyM,QAAA7O,OACA,CAD8B,CAC9B,CAAAgY,CAAA,CAAqB,IAAA5V,QAAAyM,QAArB,CANF,CAFE,CAUF,MAAOloC,CAAP,CAAU,CACVs5B,CAAA,CAAI,CAAJ,CAAA,CAAOt5B,CAAP,CACA,CAAAgxC,CAAA,CAAiBhxC,CAAjB,CAFU,CAdW,CAdN,CAkCnBw6B,OAAQA,QAAQ,CAAC50B,CAAD,CAAS,CACnB,IAAA61B,QAAAyM,QAAA7O,OAAJ,EACA,IAAA4Y,SAAA,CAAcrsC,CAAd,CAFuB,CAlCN,CAuCnBqsC,SAAUA,QAAQ,CAACrsC,CAAD,CAAS,CACzB,IAAA61B,QAAAyM,QAAA1vC,MAAA,CAA6BoN,CAC7B,KAAA61B,QAAAyM,QAAA7O,OAAA,CAA8B,CAC9BgY,EAAA,CAAqB,IAAA5V,QAAAyM,QAArB,CAHyB,CAvCR,CA6CnBlG,OAAQA,QAAQ,CAACmQ,CAAD,CAAW,CACzB,IAAIpU,EAAY,IAAAtC,QAAAyM,QAAAqJ,QAEoB;CAApC,EAAK,IAAA9V,QAAAyM,QAAA7O,OAAL,EAA0C0E,CAA1C,EAAuDA,CAAA5mC,OAAvD,EACE45C,CAAA,CAAS,QAAQ,EAAG,CAElB,IAFkB,IACdhwB,CADc,CACJtkB,CADI,CAETpE,EAAI,CAFK,CAEFa,EAAK6kC,CAAA5mC,OAArB,CAAuCkB,CAAvC,CAA2Ca,CAA3C,CAA+Cb,CAAA,EAA/C,CAAoD,CAClDoE,CAAA,CAASshC,CAAA,CAAU1lC,CAAV,CAAA,CAAa,CAAb,CACT0oB,EAAA,CAAWgd,CAAA,CAAU1lC,CAAV,CAAA,CAAa,CAAb,CACX,IAAI,CACFoE,CAAAulC,OAAA,CAAcnqC,CAAA,CAAWkpB,CAAX,CAAA,CAAuBA,CAAA,CAASoxB,CAAT,CAAvB,CAA4CA,CAA1D,CADE,CAEF,MAAOnyC,CAAP,CAAU,CACVgxC,CAAA,CAAiBhxC,CAAjB,CADU,CALsC,CAFlC,CAApB,CAJuB,CA7CR,CA2GrB,KAAIoyC,EAAcA,QAAoB,CAAC55C,CAAD,CAAQ65C,CAAR,CAAkB,CACtD,IAAI51C,EAAS,IAAI+0C,CACba,EAAJ,CACE51C,CAAAogC,QAAA,CAAerkC,CAAf,CADF,CAGEiE,CAAA+9B,OAAA,CAAchiC,CAAd,CAEF,OAAOiE,EAAAg/B,QAP+C,CAAxD,CAUIuW,EAAiBA,QAAuB,CAACx5C,CAAD,CAAQ85C,CAAR,CAAoBvxB,CAApB,CAA8B,CACxE,IAAIwxB,EAAiB,IACrB,IAAI,CACE16C,CAAA,CAAWkpB,CAAX,CAAJ,GAA0BwxB,CAA1B,CAA2CxxB,CAAA,EAA3C,CADE,CAEF,MAAO/gB,CAAP,CAAU,CACV,MAAOoyC,EAAA,CAAYpyC,CAAZ,CAAe,CAAA,CAAf,CADG,CAGZ,MAAkBuyC,EAAlB,EAtjbY16C,CAAA,CAsjbM06C,CAtjbKthB,KAAX,CAsjbZ,CACSshB,CAAAthB,KAAA,CAAoB,QAAQ,EAAG,CACpC,MAAOmhB,EAAA,CAAY55C,CAAZ,CAAmB85C,CAAnB,CAD6B,CAA/B,CAEJ,QAAQ,CAAC5yB,CAAD,CAAQ,CACjB,MAAO0yB,EAAA,CAAY1yB,CAAZ,CAAmB,CAAA,CAAnB,CADU,CAFZ,CADT,CAOS0yB,CAAA,CAAY55C,CAAZ,CAAmB85C,CAAnB,CAd+D,CAV1E,CA2CI5W,EAAOA,QAAQ,CAACljC,CAAD,CAAQuoB,CAAR,CAAkByxB,CAAlB,CAA2BX,CAA3B,CAAyC,CAC1D,IAAIp1C,EAAS,IAAI+0C,CACjB/0C,EAAAogC,QAAA,CAAerkC,CAAf,CACA,OAAOiE,EAAAg/B,QAAAxK,KAAA,CAAoBlQ,CAApB,CAA8ByxB,CAA9B,CAAuCX,CAAvC,CAHmD,CA3C5D,CAyFIY,EAAKA,QAASC,EAAC,CAACC,CAAD,CAAW,CAC5B,GAAK,CAAA96C,CAAA,CAAW86C,CAAX,CAAL,CACE,KAAMlB,EAAA,CAAS,SAAT;AAAsDkB,CAAtD,CAAN,CAGF,GAAM,EAAA,IAAA,WAAgBD,EAAhB,CAAN,CAEE,MAAO,KAAIA,CAAJ,CAAMC,CAAN,CAGT,KAAI/V,EAAW,IAAI4U,CAUnBmB,EAAA,CARAzB,QAAkB,CAAC14C,CAAD,CAAQ,CACxBokC,CAAAC,QAAA,CAAiBrkC,CAAjB,CADwB,CAQ1B,CAJAyjC,QAAiB,CAACr2B,CAAD,CAAS,CACxBg3B,CAAApC,OAAA,CAAgB50B,CAAhB,CADwB,CAI1B,CAEA,OAAOg3B,EAAAnB,QAtBqB,CAyB9BgX,EAAAvwB,MAAA,CA1SYA,QAAQ,EAAG,CACrB,MAAO,KAAIsvB,CADU,CA2SvBiB,EAAAjY,OAAA,CAzHaA,QAAQ,CAAC50B,CAAD,CAAS,CAC5B,IAAInJ,EAAS,IAAI+0C,CACjB/0C,EAAA+9B,OAAA,CAAc50B,CAAd,CACA,OAAOnJ,EAAAg/B,QAHqB,CA0H9BgX,EAAA/W,KAAA,CAAUA,CACV+W,EAAAG,IAAA,CApDAA,QAAY,CAACC,CAAD,CAAW,CAAA,IACjBjW,EAAW,IAAI4U,CADE,CAEjBhpC,EAAU,CAFO,CAGjBsqC,EAAUt7C,CAAA,CAAQq7C,CAAR,CAAA,CAAoB,EAApB,CAAyB,EAEvCp7C,EAAA,CAAQo7C,CAAR,CAAkB,QAAQ,CAACpX,CAAD,CAAU7jC,CAAV,CAAe,CACvC4Q,CAAA,EACAkzB,EAAA,CAAKD,CAAL,CAAAxK,KAAA,CAAmB,QAAQ,CAACz4B,CAAD,CAAQ,CAC7Bs6C,CAAAh7C,eAAA,CAAuBF,CAAvB,CAAJ,GACAk7C,CAAA,CAAQl7C,CAAR,CACA,CADeY,CACf,CAAM,EAAEgQ,CAAR,EAAkBo0B,CAAAC,QAAA,CAAiBiW,CAAjB,CAFlB,CADiC,CAAnC,CAIG,QAAQ,CAACltC,CAAD,CAAS,CACdktC,CAAAh7C,eAAA,CAAuBF,CAAvB,CAAJ,EACAglC,CAAApC,OAAA,CAAgB50B,CAAhB,CAFkB,CAJpB,CAFuC,CAAzC,CAYgB,EAAhB,GAAI4C,CAAJ,EACEo0B,CAAAC,QAAA,CAAiBiW,CAAjB,CAGF,OAAOlW,EAAAnB,QArBc,CAsDvB,OAAOgX,EAxUqC,CA2U9CtgC,QAASA,GAAa,EAAG,CACvB,IAAAkH,KAAA,CAAY,CAAC,SAAD;AAAY,UAAZ,CAAwB,QAAQ,CAACrH,CAAD,CAAUF,CAAV,CAAoB,CA8B9DihC,QAASA,EAAK,EAAG,CACf,IAAS,IAAA16C,EAAI,CAAb,CAAgBA,CAAhB,CAAoB26C,CAAA77C,OAApB,CAAsCkB,CAAA,EAAtC,CAA2C,CACzC,IAAI46C,EAAOD,CAAA,CAAU36C,CAAV,CACP46C,EAAJ,GACED,CAAA,CAAU36C,CAAV,CACA,CADe,IACf,CAAA46C,CAAA,EAFF,CAFyC,CAO3CC,CAAA,CAAYF,CAAA77C,OAAZ,CAA+B,CARhB,CAWjBg8C,QAASA,EAAO,CAACC,CAAD,CAAU,CACxB,IAAIr3C,EAAQi3C,CAAA77C,OAEZ+7C,EAAA,EACAF,EAAAt2C,KAAA,CAAe02C,CAAf,CAEc,EAAd,GAAIr3C,CAAJ,GACEs3C,CADF,CACkBC,CAAA,CAAMP,CAAN,CADlB,CAIA,OAAOQ,SAAsB,EAAG,CACjB,CAAb,EAAIx3C,CAAJ,GAEEA,CAEA,CAHAi3C,CAAA,CAAUj3C,CAAV,CAGA,CAHmB,IAGnB,CAAoB,CAApB,GAAI,EAAEm3C,CAAN,EAAyBG,CAAzB,GACEA,CAAA,EAEA,CADAA,CACA,CADgB,IAChB,CAAAL,CAAA77C,OAAA,CAAmB,CAHrB,CAJF,CAD8B,CAVR,CAxC1B,IAAIq8C,EAAwBxhC,CAAAwhC,sBAAxBA,EACwBxhC,CAAAyhC,4BAD5B,CAGIC,EAAuB1hC,CAAA0hC,qBAAvBA,EACuB1hC,CAAA2hC,2BADvBD,EAEuB1hC,CAAA4hC,kCAL3B,CAOIC,EAAe,CAAEL,CAAAA,CAPrB,CAQIF,EAAQO,CAAA,CACR,QAAQ,CAAC11C,CAAD,CAAK,CACX,IAAIolB,EAAKiwB,CAAA,CAAsBr1C,CAAtB,CACT,OAAO,SAAQ,EAAG,CAChBu1C,CAAA,CAAqBnwB,CAArB,CADgB,CAFP,CADL,CAOR,QAAQ,CAACplB,CAAD,CAAK,CACX,IAAI21C,EAAQhiC,CAAA,CAAS3T,CAAT,CAAa,KAAb,CAAoB,CAAA,CAApB,CACZ,OAAO,SAAQ,EAAG,CAChB2T,CAAAwQ,OAAA,CAAgBwxB,CAAhB,CADgB,CAFP,CAOjBX;CAAA/zB,UAAA,CAAoBy0B,CAEpB,KAAIR,CAAJ,CACIH,EAAY,CADhB,CAEIF,EAAY,EAChB,OAAOG,EA5BuD,CAApD,CADW,CAuIzBtiC,QAASA,GAAkB,EAAG,CAa5BkjC,QAASA,EAAqB,CAACh6C,CAAD,CAAS,CACrCi6C,QAASA,EAAU,EAAG,CACpB,IAAAC,WAAA,CAAkB,IAAAC,cAAlB,CACI,IAAAC,YADJ,CACuB,IAAAC,YADvB,CAC0C,IAC1C,KAAAC,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAC,gBAAA,CAAuB,CACvB,KAAAC,IAAA,CAvocG,EAAE97C,EAwocL,KAAA+7C,aAAA,CAAoB,IAPA,CAStBT,CAAAx3B,UAAA,CAAuBziB,CACvB,OAAOi6C,EAX8B,CAZvC,IAAIU,EAAM,EAAV,CACIC,EAAmB59C,CAAA,CAAO,YAAP,CADvB,CAEI69C,EAAiB,IAFrB,CAGIC,EAAe,IAEnB,KAAAC,UAAA,CAAiBC,QAAQ,CAACv8C,CAAD,CAAQ,CAC3BiB,SAAAtC,OAAJ,GACEu9C,CADF,CACQl8C,CADR,CAGA,OAAOk8C,EAJwB,CAqBjC,KAAAr7B,KAAA,CAAY,CAAC,WAAD,CAAc,mBAAd,CAAmC,QAAnC,CAA6C,UAA7C,CACR,QAAQ,CAACuD,CAAD,CAAYtN,CAAZ,CAA+BoB,CAA/B,CAAuC5B,CAAvC,CAAiD,CAE3DkmC,QAASA,EAAiB,CAACC,CAAD,CAAS,CAC/BA,CAAAC,aAAA5jB,YAAA;AAAkC,CAAA,CADH,CA+CnC6jB,QAASA,EAAK,EAAG,CACf,IAAAX,IAAA,CAjscG,EAAE97C,EAkscL,KAAAikC,QAAA,CAAe,IAAAyY,QAAf,CAA8B,IAAAnB,WAA9B,CACe,IAAAC,cADf,CACoC,IAAAmB,cADpC,CAEe,IAAAlB,YAFf,CAEkC,IAAAC,YAFlC,CAEqD,IACrD,KAAAkB,MAAA,CAAa,IACb,KAAAhkB,YAAA,CAAmB,CAAA,CACnB,KAAA+iB,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAC,gBAAA,CAAuB,CACvB,KAAApuB,kBAAA,CAAyB,IAVV,CA6nCjBovB,QAASA,EAAU,CAACC,CAAD,CAAQ,CACzB,GAAI5kC,CAAA+rB,QAAJ,CACE,KAAMgY,EAAA,CAAiB,QAAjB,CAAsD/jC,CAAA+rB,QAAtD,CAAN,CAGF/rB,CAAA+rB,QAAA,CAAqB6Y,CALI,CAY3BC,QAASA,EAAsB,CAACC,CAAD,CAAUnU,CAAV,CAAiB,CAC9C,EACEmU,EAAAnB,gBAAA,EAA2BhT,CAD7B,OAEUmU,CAFV,CAEoBA,CAAAN,QAFpB,CAD8C,CAMhDO,QAASA,EAAsB,CAACD,CAAD,CAAUnU,CAAV,CAAiB1/B,CAAjB,CAAuB,CACpD,EACE6zC,EAAApB,gBAAA,CAAwBzyC,CAAxB,CAEA,EAFiC0/B,CAEjC,CAAsC,CAAtC,GAAImU,CAAApB,gBAAA,CAAwBzyC,CAAxB,CAAJ,EACE,OAAO6zC,CAAApB,gBAAA,CAAwBzyC,CAAxB,CAJX;MAMU6zC,CANV,CAMoBA,CAAAN,QANpB,CADoD,CActDQ,QAASA,EAAY,EAAG,EAExBC,QAASA,EAAe,EAAG,CACzB,IAAA,CAAOC,CAAA3+C,OAAP,CAAA,CACE,GAAI,CACF2+C,CAAA55B,MAAA,EAAA,EADE,CAEF,MAAOlc,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CAId60C,CAAA,CAAe,IARU,CAW3BkB,QAASA,EAAkB,EAAG,CACP,IAArB,GAAIlB,CAAJ,GACEA,CADF,CACiB/lC,CAAAoT,MAAA,CAAe,QAAQ,EAAG,CACvCtR,CAAA5N,OAAA,CAAkB6yC,CAAlB,CADuC,CAA1B,CADjB,CAD4B,CAroC9BV,CAAA34B,UAAA,CAAkB,CAChB1f,YAAaq4C,CADG,CA+BhBtsB,KAAMA,QAAQ,CAACmtB,CAAD,CAAUj8C,CAAV,CAAkB,CAC9B,IAAIk8C,CAEJl8C,EAAA,CAASA,CAAT,EAAmB,IAEfi8C,EAAJ,EACEC,CACA,CADQ,IAAId,CACZ,CAAAc,CAAAX,MAAA,CAAc,IAAAA,MAFhB,GAMO,IAAAb,aAGL,GAFE,IAAAA,aAEF,CAFsBV,CAAA,CAAsB,IAAtB,CAEtB,EAAAkC,CAAA,CAAQ,IAAI,IAAAxB,aATd,CAWAwB,EAAAb,QAAA,CAAgBr7C,CAChBk8C,EAAAZ,cAAA,CAAsBt7C,CAAAq6C,YAClBr6C,EAAAo6C,YAAJ,EACEp6C,CAAAq6C,YAAAF,cACA,CADmC+B,CACnC,CAAAl8C,CAAAq6C,YAAA,CAAqB6B,CAFvB,EAIEl8C,CAAAo6C,YAJF,CAIuBp6C,CAAAq6C,YAJvB,CAI4C6B,CAQ5C,EAAID,CAAJ,EAAej8C,CAAf,EAAyB,IAAzB,GAA+Bk8C,CAAAltB,IAAA,CAAU,UAAV,CAAsBisB,CAAtB,CAE/B,OAAOiB,EAhCuB,CA/BhB;AAsLhBl7C,OAAQA,QAAQ,CAACm7C,CAAD,CAAW51B,CAAX,CAAqBiuB,CAArB,CAAqCE,CAArC,CAA4D,CAC1E,IAAI3qC,EAAM4M,CAAA,CAAOwlC,CAAP,CAEV,IAAIpyC,CAAAi9B,gBAAJ,CACE,MAAOj9B,EAAAi9B,gBAAA,CAAoB,IAApB,CAA0BzgB,CAA1B,CAAoCiuB,CAApC,CAAoDzqC,CAApD,CAAyDoyC,CAAzD,CAJiE,KAMtEpzC,EAAQ,IAN8D,CAOtEhH,EAAQgH,CAAAmxC,WAP8D,CAQtEkC,EAAU,CACRh4C,GAAImiB,CADI,CAER81B,KAAMR,CAFE,CAGR9xC,IAAKA,CAHG,CAIR48B,IAAK+N,CAAL/N,EAA8BwV,CAJtB,CAKRG,GAAI,CAAE9H,CAAAA,CALE,CAQdqG,EAAA,CAAiB,IAEZ/8C,EAAA,CAAWyoB,CAAX,CAAL,GACE61B,CAAAh4C,GADF,CACejE,CADf,CAIK4B,EAAL,GACEA,CADF,CACUgH,CAAAmxC,WADV,CAC6B,EAD7B,CAKAn4C,EAAAyG,QAAA,CAAc4zC,CAAd,CACAV,EAAA,CAAuB,IAAvB,CAA6B,CAA7B,CAEA,OAAOa,SAAwB,EAAG,CACG,CAAnC,EAAIz6C,EAAA,CAAYC,CAAZ,CAAmBq6C,CAAnB,CAAJ,EACEV,CAAA,CAAuB3yC,CAAvB,CAA+B,EAA/B,CAEF8xC,EAAA,CAAiB,IAJe,CA9BwC,CAtL5D,CAqPhB5T,YAAaA,QAAQ,CAACuV,CAAD,CAAmBj2B,CAAnB,CAA6B,CAwChDk2B,QAASA,EAAgB,EAAG,CAC1BC,CAAA,CAA0B,CAAA,CAEtBC,EAAJ,EACEA,CACA,CADW,CAAA,CACX,CAAAp2B,CAAA,CAASq2B,CAAT,CAAoBA,CAApB,CAA+Bz4C,CAA/B,CAFF,EAIEoiB,CAAA,CAASq2B,CAAT,CAAoBzV,CAApB,CAA+BhjC,CAA/B,CAPwB,CAvC5B,IAAIgjC,EAAgBzjB,KAAJ,CAAU84B,CAAAp/C,OAAV,CAAhB,CACIw/C,EAAgBl5B,KAAJ,CAAU84B,CAAAp/C,OAAV,CADhB,CAEIy/C,EAAgB,EAFpB,CAGI14C,EAAO,IAHX,CAIIu4C,EAA0B,CAAA,CAJ9B,CAKIC,EAAW,CAAA,CAEf,IAAKv/C,CAAAo/C,CAAAp/C,OAAL,CAA8B,CAE5B,IAAI0/C,EAAa,CAAA,CACjB34C,EAAApD,WAAA,CAAgB,QAAQ,EAAG,CACrB+7C,CAAJ,EAAgBv2B,CAAA,CAASq2B,CAAT,CAAoBA,CAApB,CAA+Bz4C,CAA/B,CADS,CAA3B,CAGA,OAAO44C,SAA6B,EAAG,CACrCD,CAAA,CAAa,CAAA,CADwB,CANX,CAW9B,GAAgC,CAAhC,GAAIN,CAAAp/C,OAAJ,CAEE,MAAO,KAAA4D,OAAA,CAAYw7C,CAAA,CAAiB,CAAjB,CAAZ;AAAiCC,QAAyB,CAACh+C,CAAD,CAAQ46B,CAAR,CAAkBtwB,CAAlB,CAAyB,CACxF6zC,CAAA,CAAU,CAAV,CAAA,CAAen+C,CACf0oC,EAAA,CAAU,CAAV,CAAA,CAAe9N,CACf9S,EAAA,CAASq2B,CAAT,CAAqBn+C,CAAD,GAAW46B,CAAX,CAAuBujB,CAAvB,CAAmCzV,CAAvD,CAAkEp+B,CAAlE,CAHwF,CAAnF,CAOTrL,EAAA,CAAQ8+C,CAAR,CAA0B,QAAQ,CAAC7K,CAAD,CAAOrzC,CAAP,CAAU,CAC1C,IAAI0+C,EAAY74C,CAAAnD,OAAA,CAAY2wC,CAAZ,CAAkBsL,QAA4B,CAACx+C,CAAD,CAAQ46B,CAAR,CAAkB,CAC9EujB,CAAA,CAAUt+C,CAAV,CAAA,CAAeG,CACf0oC,EAAA,CAAU7oC,CAAV,CAAA,CAAe+6B,CACVqjB,EAAL,GACEA,CACA,CAD0B,CAAA,CAC1B,CAAAv4C,CAAApD,WAAA,CAAgB07C,CAAhB,CAFF,CAH8E,CAAhE,CAQhBI,EAAAl6C,KAAA,CAAmBq6C,CAAnB,CAT0C,CAA5C,CAuBA,OAAOD,SAA6B,EAAG,CACrC,IAAA,CAAOF,CAAAz/C,OAAP,CAAA,CACEy/C,CAAA16B,MAAA,EAAA,EAFmC,CAnDS,CArPlC,CAuWhB2Y,iBAAkBA,QAAQ,CAAC59B,CAAD,CAAMqpB,CAAN,CAAgB,CAoBxC22B,QAASA,EAA2B,CAACC,CAAD,CAAS,CAC3CjkB,CAAA,CAAWikB,CADgC,KAE5Bt/C,CAF4B,CAEvBu/C,CAFuB,CAEdC,CAFc,CAELC,CAGtC,IAAI,CAAA/8C,CAAA,CAAY24B,CAAZ,CAAJ,CAAA,CAEA,GAAK95B,CAAA,CAAS85B,CAAT,CAAL,CAKO,GAAIj8B,EAAA,CAAYi8B,CAAZ,CAAJ,CAgBL,IAfIG,CAeK/6B,GAfQi/C,CAeRj/C,GAbP+6B,CAEA,CAFWkkB,CAEX,CADAC,CACA,CADYnkB,CAAAj8B,OACZ,CAD8B,CAC9B,CAAAqgD,CAAA,EAWOn/C,EARTo/C,CAQSp/C,CARG46B,CAAA97B,OAQHkB,CANLk/C,CAMKl/C,GANSo/C,CAMTp/C,GAJPm/C,CAAA,EACA,CAAApkB,CAAAj8B,OAAA,CAAkBogD,CAAlB,CAA8BE,CAGvBp/C,EAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoBo/C,CAApB,CAA+Bp/C,CAAA,EAA/B,CACEg/C,CAIA,CAJUjkB,CAAA,CAAS/6B,CAAT,CAIV,CAHA++C,CAGA,CAHUnkB,CAAA,CAAS56B,CAAT,CAGV,CADA8+C,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAApkB,CAAA,CAAS/6B,CAAT,CAAA,CAAc++C,CAFhB,CArBG,KA0BA,CACDhkB,CAAJ,GAAiBskB,CAAjB,GAEEtkB,CAEA,CAFWskB,CAEX,CAF4B,EAE5B,CADAH,CACA,CADY,CACZ,CAAAC,CAAA,EAJF,CAOAC,EAAA,CAAY,CACZ,KAAK7/C,CAAL,GAAYq7B,EAAZ,CACMA,CAAAn7B,eAAA,CAAwBF,CAAxB,CAAJ,GACE6/C,CAAA,EAIA,CAHAL,CAGA,CAHUnkB,CAAA,CAASr7B,CAAT,CAGV,CAFAy/C,CAEA;AAFUjkB,CAAA,CAASx7B,CAAT,CAEV,CAAIA,CAAJ,GAAWw7B,EAAX,EACE+jB,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAApkB,CAAA,CAASx7B,CAAT,CAAA,CAAgBw/C,CAFlB,CAFF,GAOEG,CAAA,EAEA,CADAnkB,CAAA,CAASx7B,CAAT,CACA,CADgBw/C,CAChB,CAAAI,CAAA,EATF,CALF,CAkBF,IAAID,CAAJ,CAAgBE,CAAhB,CAGE,IAAK7/C,CAAL,GADA4/C,EAAA,EACYpkB,CAAAA,CAAZ,CACOH,CAAAn7B,eAAA,CAAwBF,CAAxB,CAAL,GACE2/C,CAAA,EACA,CAAA,OAAOnkB,CAAA,CAASx7B,CAAT,CAFT,CAhCC,CA/BP,IACMw7B,EAAJ,GAAiBH,CAAjB,GACEG,CACA,CADWH,CACX,CAAAukB,CAAA,EAFF,CAqEF,OAAOA,EAxEP,CAL2C,CAnB7CP,CAAAtiB,UAAA,CAAwC,CAAA,CAExC,KAAIz2B,EAAO,IAAX,CAEI+0B,CAFJ,CAKIG,CALJ,CAOIukB,CAPJ,CASIC,EAAuC,CAAvCA,CAAqBt3B,CAAAnpB,OATzB,CAUIqgD,EAAiB,CAVrB,CAWIK,EAAiBnnC,CAAA,CAAOzZ,CAAP,CAAYggD,CAAZ,CAXrB,CAYIK,EAAgB,EAZpB,CAaII,EAAiB,EAbrB,CAcII,EAAU,CAAA,CAdd,CAeIP,EAAY,CA+GhB,OAAO,KAAAx8C,OAAA,CAAY88C,CAAZ,CA7BPE,QAA+B,EAAG,CAC5BD,CAAJ,EACEA,CACA,CADU,CAAA,CACV,CAAAx3B,CAAA,CAAS2S,CAAT,CAAmBA,CAAnB,CAA6B/0B,CAA7B,CAFF,EAIEoiB,CAAA,CAAS2S,CAAT,CAAmB0kB,CAAnB,CAAiCz5C,CAAjC,CAIF,IAAI05C,CAAJ,CACE,GAAKz+C,CAAA,CAAS85B,CAAT,CAAL,CAGO,GAAIj8B,EAAA,CAAYi8B,CAAZ,CAAJ,CAA2B,CAChC0kB,CAAA,CAAmBl6B,KAAJ,CAAUwV,CAAA97B,OAAV,CACf,KAAS,IAAAkB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB46B,CAAA97B,OAApB,CAAqCkB,CAAA,EAArC,CACEs/C,CAAA,CAAat/C,CAAb,CAAA,CAAkB46B,CAAA,CAAS56B,CAAT,CAHY,CAA3B,IAOL,KAAST,CAAT,GADA+/C,EACgB1kB,CADD,EACCA,CAAAA,CAAhB,CACMn7B,EAAAC,KAAA,CAAoBk7B,CAApB,CAA8Br7B,CAA9B,CAAJ,GACE+/C,CAAA,CAAa//C,CAAb,CADF,CACsBq7B,CAAA,CAASr7B,CAAT,CADtB,CAXJ,KAEE+/C,EAAA,CAAe1kB,CAZa,CA6B3B,CAjIiC,CAvW1B,CA8hBhBmW,QAASA,QAAQ,EAAG,CAAA,IACd4O,CADc,CACPx/C,CADO,CACA49C,CADA,CAEd6B,CAFc,CAGd9gD,CAHc,CAId+gD,CAJc,CAIPC,EAAMzD,CAJC,CAKRgB,CALQ,CAMd0C,EAAW,EANG,CAOdC,CAPc,CAOEC,CAEpB/C,EAAA,CAAW,SAAX,CAEAzmC,EAAAiT,iBAAA,EAEI;IAAJ,GAAanR,CAAb,EAA4C,IAA5C,GAA2BikC,CAA3B,GAGE/lC,CAAAoT,MAAAI,OAAA,CAAsBuyB,CAAtB,CACA,CAAAgB,CAAA,EAJF,CAOAjB,EAAA,CAAiB,IAEjB,GAAG,CACDsD,CAAA,CAAQ,CAAA,CAGR,KAFAxC,CAEA,CArB0B5M,IAqB1B,CAAOyP,CAAAphD,OAAP,CAAA,CAA0B,CACxB,GAAI,CACFmhD,CACA,CADYC,CAAAr8B,MAAA,EACZ,CAAAo8B,CAAAx1C,MAAA01C,MAAA,CAAsBF,CAAAhhB,WAAtB,CAA4CghB,CAAAn8B,OAA5C,CAFE,CAGF,MAAOnc,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CAGZ40C,CAAA,CAAiB,IAPO,CAU1B,CAAA,CACA,EAAG,CACD,GAAKqD,CAAL,CAAgBvC,CAAAzB,WAAhB,CAGE,IADA98C,CACA,CADS8gD,CAAA9gD,OACT,CAAOA,CAAA,EAAP,CAAA,CACE,GAAI,CAIF,GAHA6gD,CAGA,CAHQC,CAAA,CAAS9gD,CAAT,CAGR,CACE,IAAKqB,CAAL,CAAaw/C,CAAAl0C,IAAA,CAAU4xC,CAAV,CAAb,KAAsCU,CAAtC,CAA6C4B,CAAA5B,KAA7C,GACM,EAAA4B,CAAA3B,GAAA,CACI94C,EAAA,CAAO/E,CAAP,CAAc49C,CAAd,CADJ,CAEsB,QAFtB,GAEK,MAAO59C,EAFZ,EAEkD,QAFlD,GAEkC,MAAO49C,EAFzC,EAGQj3C,KAAA,CAAM3G,CAAN,CAHR,EAGwB2G,KAAA,CAAMi3C,CAAN,CAHxB,CADN,CAKE8B,CAIA,CAJQ,CAAA,CAIR,CAHAtD,CAGA,CAHiBoD,CAGjB,CAFAA,CAAA5B,KAEA,CAFa4B,CAAA3B,GAAA,CAAWn6C,EAAA,CAAK1D,CAAL,CAAY,IAAZ,CAAX,CAA+BA,CAE5C,CADAw/C,CAAA75C,GAAA,CAAS3F,CAAT,CAAkB49C,CAAD,GAAUR,CAAV,CAA0Bp9C,CAA1B,CAAkC49C,CAAnD,CAA0DV,CAA1D,CACA,CAAU,CAAV,CAAIyC,CAAJ,GACEE,CAEA,CAFS,CAET,CAFaF,CAEb,CADKC,CAAA,CAASC,CAAT,CACL,GADuBD,CAAA,CAASC,CAAT,CACvB,CAD0C,EAC1C,EAAAD,CAAA,CAASC,CAAT,CAAA37C,KAAA,CAAsB,CACpB+7C,IAAK5gD,CAAA,CAAWmgD,CAAAtX,IAAX,CAAA,CAAwB,MAAxB,EAAkCsX,CAAAtX,IAAA7+B,KAAlC,EAAoDm2C,CAAAtX,IAAA/lC,SAAA,EAApD,EAA4Eq9C,CAAAtX,IAD7D,CAEpB9hB,OAAQpmB,CAFY,CAGpBqmB,OAAQu3B,CAHY,CAAtB,CAHF,CATF,KAkBO,IAAI4B,CAAJ;AAAcpD,CAAd,CAA8B,CAGnCsD,CAAA,CAAQ,CAAA,CACR,OAAM,CAJ6B,CAvBrC,CA8BF,MAAOl4C,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CAShB,GAAM,EAAA04C,CAAA,CAAShD,CAAAnB,gBAAT,EAAoCmB,CAAAvB,YAApC,EACDuB,CADC,GA5EkB5M,IA4ElB,EACqB4M,CAAAxB,cADrB,CAAN,CAEE,IAAA,CAAOwB,CAAP,GA9EsB5M,IA8EtB,EAA+B,EAAA4P,CAAA,CAAOhD,CAAAxB,cAAP,CAA/B,CAAA,CACEwB,CAAA,CAAUA,CAAAN,QA/Cb,CAAH,MAkDUM,CAlDV,CAkDoBgD,CAlDpB,CAsDA,KAAKR,CAAL,EAAcK,CAAAphD,OAAd,GAAsC,CAAAghD,CAAA,EAAtC,CAEE,KAseNvnC,EAAA+rB,QAteY,CAseS,IAteT,CAAAgY,CAAA,CAAiB,QAAjB,CAGFD,CAHE,CAGG0D,CAHH,CAAN,CAvED,CAAH,MA6ESF,CA7ET,EA6EkBK,CAAAphD,OA7ElB,CAiFA,KA4dFyZ,CAAA+rB,QA5dE,CA4dmB,IA5dnB,CAAOgc,CAAAxhD,OAAP,CAAA,CACE,GAAI,CACFwhD,CAAAz8B,MAAA,EAAA,EADE,CAEF,MAAOlc,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CA1GI,CA9hBJ,CAirBhBuF,SAAUA,QAAQ,EAAG,CAEnB,GAAI+rB,CAAA,IAAAA,YAAJ,CAAA,CACA,IAAIv3B,EAAS,IAAAq7C,QAEb,KAAAhN,WAAA,CAAgB,UAAhB,CACA,KAAA9W,YAAA,CAAmB,CAAA,CAEf,KAAJ,GAAa1gB,CAAb,EAEE9B,CAAA8S,uBAAA,EAGF6zB,EAAA,CAAuB,IAAvB,CAA6B,CAAC,IAAAlB,gBAA9B,CACA,KAASqE,IAAAA,CAAT,GAAsB,KAAAtE,gBAAtB,CACEqB,CAAA,CAAuB,IAAvB;AAA6B,IAAArB,gBAAA,CAAqBsE,CAArB,CAA7B,CAA8DA,CAA9D,CAKE7+C,EAAJ,EAAcA,CAAAo6C,YAAd,EAAoC,IAApC,GAA0Cp6C,CAAAo6C,YAA1C,CAA+D,IAAAD,cAA/D,CACIn6C,EAAJ,EAAcA,CAAAq6C,YAAd,EAAoC,IAApC,GAA0Cr6C,CAAAq6C,YAA1C,CAA+D,IAAAiB,cAA/D,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAnB,cAAxB,CAA2D,IAAAA,cAA3D,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAmB,cAAxB,CAA2D,IAAAA,cAA3D,CAGA,KAAA9vC,SAAA,CAAgB,IAAA6jC,QAAhB,CAA+B,IAAApmC,OAA/B,CAA6C,IAAAlI,WAA7C,CAA+D,IAAA4hC,YAA/D,CAAkFxiC,CAClF,KAAA6uB,IAAA,CAAW,IAAAhuB,OAAX,CAAyB,IAAAimC,YAAzB,CAA4C6X,QAAQ,EAAG,CAAE,MAAO3+C,EAAT,CACvD,KAAAm6C,YAAA,CAAmB,EAUnB,KAAAe,QAAA,CAAe,IAAAlB,cAAf,CAAoC,IAAAmB,cAApC,CAAyD,IAAAlB,YAAzD;AACI,IAAAC,YADJ,CACuB,IAAAkB,MADvB,CACoC,IAAArB,WADpC,CACsD,IArCtD,CAFmB,CAjrBL,CAuvBhBuE,MAAOA,QAAQ,CAAC9M,CAAD,CAAOvvB,CAAP,CAAe,CAC5B,MAAOzL,EAAA,CAAOg7B,CAAP,CAAA,CAAa,IAAb,CAAmBvvB,CAAnB,CADqB,CAvvBd,CAyxBhBrhB,WAAYA,QAAQ,CAAC4wC,CAAD,CAAOvvB,CAAP,CAAe,CAG5BvL,CAAA+rB,QAAL,EAA4B4b,CAAAphD,OAA5B,EACE2X,CAAAoT,MAAA,CAAe,QAAQ,EAAG,CACpBq2B,CAAAphD,OAAJ,EACEyZ,CAAAw4B,QAAA,EAFsB,CAA1B,CAOFmP,EAAA77C,KAAA,CAAgB,CAACoG,MAAO,IAAR,CAAcw0B,WAAYoU,CAA1B,CAAgCvvB,OAAQA,CAAxC,CAAhB,CAXiC,CAzxBnB,CAuyBhBqzB,aAAcA,QAAQ,CAACrxC,CAAD,CAAK,CACzBw6C,CAAAj8C,KAAA,CAAqByB,CAArB,CADyB,CAvyBX,CAw1BhB6E,OAAQA,QAAQ,CAAC0oC,CAAD,CAAO,CACrB,GAAI,CAEF,MADA6J,EAAA,CAAW,QAAX,CACO,CAAA,IAAAiD,MAAA,CAAW9M,CAAX,CAFL,CAGF,MAAO1rC,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CAHZ,OAKU,CAmQZ4Q,CAAA+rB,QAAA,CAAqB,IAjQjB,IAAI,CACF/rB,CAAAw4B,QAAA,EADE,CAEF,MAAOppC,CAAP,CAAU,CAEV,KADAsP,EAAA,CAAkBtP,CAAlB,CACMA,CAAAA,CAAN,CAFU,CAJJ,CANW,CAx1BP,CA03BhB08B,YAAaA,QAAQ,CAACgP,CAAD,CAAO,CAK1BoN,QAASA,EAAqB,EAAG,CAC/Bh2C,CAAA01C,MAAA,CAAY9M,CAAZ,CAD+B,CAJjC,IAAI5oC,EAAQ,IACZ4oC,EAAA,EAAQoK,CAAAp5C,KAAA,CAAqBo8C,CAArB,CACR/C,EAAA,EAH0B,CA13BZ,CA+5BhBhtB,IAAKA,QAAQ,CAAClnB,CAAD,CAAOye,CAAP,CAAiB,CAC5B,IAAIy4B,EAAiB,IAAA1E,YAAA,CAAiBxyC,CAAjB,CAChBk3C;CAAL,GACE,IAAA1E,YAAA,CAAiBxyC,CAAjB,CADF,CAC2Bk3C,CAD3B,CAC4C,EAD5C,CAGAA,EAAAr8C,KAAA,CAAoB4jB,CAApB,CAEA,KAAIo1B,EAAU,IACd,GACOA,EAAApB,gBAAA,CAAwBzyC,CAAxB,CAGL,GAFE6zC,CAAApB,gBAAA,CAAwBzyC,CAAxB,CAEF,CAFkC,CAElC,EAAA6zC,CAAApB,gBAAA,CAAwBzyC,CAAxB,CAAA,EAJF,OAKU6zC,CALV,CAKoBA,CAAAN,QALpB,CAOA,KAAIl3C,EAAO,IACX,OAAO,SAAQ,EAAG,CAChB,IAAI86C,EAAkBD,CAAA/8C,QAAA,CAAuBskB,CAAvB,CACG,GAAzB,GAAI04B,CAAJ,GACED,CAAA,CAAeC,CAAf,CACA,CADkC,IAClC,CAAArD,CAAA,CAAuBz3C,CAAvB,CAA6B,CAA7B,CAAgC2D,CAAhC,CAFF,CAFgB,CAhBU,CA/5Bd,CA+8BhBo3C,MAAOA,QAAQ,CAACp3C,CAAD,CAAOsY,CAAP,CAAa,CAAA,IACtBpa,EAAQ,EADc,CAEtBg5C,CAFsB,CAGtBj2C,EAAQ,IAHc,CAItBoW,EAAkB,CAAA,CAJI,CAKtBV,EAAQ,CACN3W,KAAMA,CADA,CAENq3C,YAAap2C,CAFP,CAGNoW,gBAAiBA,QAAQ,EAAG,CAACA,CAAA,CAAkB,CAAA,CAAnB,CAHtB,CAIN8vB,eAAgBA,QAAQ,EAAG,CACzBxwB,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAJrB,CAONA,iBAAkB,CAAA,CAPZ,CALc,CActBwgC,EAAer7C,EAAA,CAAO,CAAC0a,CAAD,CAAP,CAAgB/e,SAAhB,CAA2B,CAA3B,CAdO,CAetBpB,CAfsB,CAenBlB,CAEP,GAAG,CACD4hD,CAAA,CAAiBj2C,CAAAuxC,YAAA,CAAkBxyC,CAAlB,CAAjB,EAA4C9B,CAC5CyY,EAAA08B,aAAA,CAAqBpyC,CAChBzK,EAAA,CAAI,CAAT,KAAYlB,CAAZ,CAAqB4hD,CAAA5hD,OAArB,CAA4CkB,CAA5C,CAAgDlB,CAAhD,CAAwDkB,CAAA,EAAxD,CAGE,GAAK0gD,CAAA,CAAe1gD,CAAf,CAAL,CAMA,GAAI,CAEF0gD,CAAA,CAAe1gD,CAAf,CAAAiG,MAAA,CAAwB,IAAxB;AAA8B66C,CAA9B,CAFE,CAGF,MAAOn5C,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CATZ,IACE+4C,EAAA98C,OAAA,CAAsB5D,CAAtB,CAAyB,CAAzB,CAEA,CADAA,CAAA,EACA,CAAAlB,CAAA,EAWJ,IAAI+hB,CAAJ,CAEE,MADAV,EAAA08B,aACO18B,CADc,IACdA,CAAAA,CAGT1V,EAAA,CAAQA,CAAAsyC,QAzBP,CAAH,MA0BStyC,CA1BT,CA4BA0V,EAAA08B,aAAA,CAAqB,IAErB,OAAO18B,EA/CmB,CA/8BZ,CAuhChB4vB,WAAYA,QAAQ,CAACvmC,CAAD,CAAOsY,CAAP,CAAa,CAAA,IAE3Bu7B,EADS5M,IADkB,CAG3B4P,EAFS5P,IADkB,CAI3BtwB,EAAQ,CACN3W,KAAMA,CADA,CAENq3C,YALOpQ,IAGD,CAGNE,eAAgBA,QAAQ,EAAG,CACzBxwB,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAHrB,CAMNA,iBAAkB,CAAA,CANZ,CASZ,IAAK,CAZQmwB,IAYRwL,gBAAA,CAAuBzyC,CAAvB,CAAL,CAAmC,MAAO2W,EAM1C,KAnB+B,IAe3B2gC,EAAer7C,EAAA,CAAO,CAAC0a,CAAD,CAAP,CAAgB/e,SAAhB,CAA2B,CAA3B,CAfY,CAgBhBpB,CAhBgB,CAgBblB,CAGlB,CAAQu+C,CAAR,CAAkBgD,CAAlB,CAAA,CAAyB,CACvBlgC,CAAA08B,aAAA,CAAqBQ,CACrBvf,EAAA,CAAYuf,CAAArB,YAAA,CAAoBxyC,CAApB,CAAZ,EAAyC,EACpCxJ,EAAA,CAAI,CAAT,KAAYlB,CAAZ,CAAqBg/B,CAAAh/B,OAArB,CAAuCkB,CAAvC,CAA2ClB,CAA3C,CAAmDkB,CAAA,EAAnD,CAEE,GAAK89B,CAAA,CAAU99B,CAAV,CAAL,CAOA,GAAI,CACF89B,CAAA,CAAU99B,CAAV,CAAAiG,MAAA,CAAmB,IAAnB,CAAyB66C,CAAzB,CADE,CAEF,MAAOn5C,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CATZ,IACEm2B,EAAAl6B,OAAA,CAAiB5D,CAAjB,CAAoB,CAApB,CAEA,CADAA,CAAA,EACA,CAAAlB,CAAA,EAeJ,IAAM,EAAAuhD,CAAA,CAAShD,CAAApB,gBAAA,CAAwBzyC,CAAxB,CAAT;AAA0C6zC,CAAAvB,YAA1C,EACDuB,CADC,GAzCK5M,IAyCL,EACqB4M,CAAAxB,cADrB,CAAN,CAEE,IAAA,CAAOwB,CAAP,GA3CS5M,IA2CT,EAA+B,EAAA4P,CAAA,CAAOhD,CAAAxB,cAAP,CAA/B,CAAA,CACEwB,CAAA,CAAUA,CAAAN,QA1BS,CA+BzB58B,CAAA08B,aAAA,CAAqB,IACrB,OAAO18B,EAnDwB,CAvhCjB,CA8kClB,KAAI5H,EAAa,IAAIukC,CAArB,CAGIoD,EAAa3nC,CAAAwoC,aAAbb,CAAuC,EAH3C,CAIII,EAAkB/nC,CAAAyoC,kBAAlBV,CAAiD,EAJrD,CAKI7C,EAAkBllC,CAAA0oC,kBAAlBxD,CAAiD,EAErD,OAAOllC,EA3qCoD,CADjD,CA3BgB,CAqwC9B9H,QAASA,GAAqB,EAAG,CAAA,IAC3Bsd,EAA6B,mCADF,CAE7BG,EAA8B,4CAkBhC,KAAAH,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAI/rB,EAAA,CAAU+rB,CAAV,CAAJ,EACEF,CACO,CADsBE,CACtB,CAAA,IAFT,EAIOF,CAL0C,CAyBnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAI/rB,EAAA,CAAU+rB,CAAV,CAAJ,EACEC,CACO,CADuBD,CACvB,CAAA,IAFT,EAIOC,CAL2C,CAQpD,KAAAlN,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAOigC,SAAoB,CAACC,CAAD,CAAMC,CAAN,CAAe,CACxC,IAAIC;AAAQD,CAAA,CAAUlzB,CAAV,CAAwCH,CAApD,CACIuzB,CACJA,EAAA,CAAgBza,EAAA,CAAWsa,CAAX,CAAAx4B,KAChB,OAAsB,EAAtB,GAAI24B,CAAJ,EAA6BA,CAAAz8C,MAAA,CAAoBw8C,CAApB,CAA7B,CAGOF,CAHP,CACS,SADT,CACqBG,CALmB,CADrB,CArDQ,CA2FjCC,QAASA,GAAa,CAACC,CAAD,CAAU,CAC9B,GAAgB,MAAhB,GAAIA,CAAJ,CACE,MAAOA,EACF,IAAItiD,CAAA,CAASsiD,CAAT,CAAJ,CAAuB,CAK5B,GAA8B,EAA9B,CAAIA,CAAA79C,QAAA,CAAgB,KAAhB,CAAJ,CACE,KAAM89C,GAAA,CAAW,QAAX,CACsDD,CADtD,CAAN,CAGFA,CAAA,CAAUE,EAAA,CAAgBF,CAAhB,CAAAx5C,QAAA,CACY,QADZ,CACsB,IADtB,CAAAA,QAAA,CAEY,KAFZ,CAEmB,YAFnB,CAGV,OAAO,KAAIpD,MAAJ,CAAW,GAAX,CAAiB48C,CAAjB,CAA2B,GAA3B,CAZqB,CAavB,GAAIj/C,EAAA,CAASi/C,CAAT,CAAJ,CAIL,MAAO,KAAI58C,MAAJ,CAAW,GAAX,CAAiB48C,CAAA19C,OAAjB,CAAkC,GAAlC,CAEP,MAAM29C,GAAA,CAAW,UAAX,CAAN,CAtB4B,CA4BhCE,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,IAAIC,EAAmB,EACnB3/C,EAAA,CAAU0/C,CAAV,CAAJ,EACExiD,CAAA,CAAQwiD,CAAR,CAAkB,QAAQ,CAACJ,CAAD,CAAU,CAClCK,CAAAx9C,KAAA,CAAsBk9C,EAAA,CAAcC,CAAd,CAAtB,CADkC,CAApC,CAIF,OAAOK,EAPyB,CA8ElC7oC,QAASA,GAAoB,EAAG,CAC9B,IAAA8oC,aAAA,CAAoBA,EADU,KAI1BC,EAAuB,CAAC,MAAD,CAJG,CAK1BC,EAAuB,EAwB3B,KAAAD,qBAAA,CAA4BE,QAAQ,CAAC9hD,CAAD,CAAQ,CACtCiB,SAAAtC,OAAJ,GACEijD,CADF,CACyBJ,EAAA,CAAexhD,CAAf,CADzB,CAGA,OAAO4hD,EAJmC,CAkC5C;IAAAC,qBAAA,CAA4BE,QAAQ,CAAC/hD,CAAD,CAAQ,CACtCiB,SAAAtC,OAAJ,GACEkjD,CADF,CACyBL,EAAA,CAAexhD,CAAf,CADzB,CAGA,OAAO6hD,EAJmC,CAO5C,KAAAhhC,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAACuD,CAAD,CAAY,CAW5C49B,QAASA,EAAQ,CAACX,CAAD,CAAUtV,CAAV,CAAqB,CACpC,MAAgB,MAAhB,GAAIsV,CAAJ,CACSxc,EAAA,CAAgBkH,CAAhB,CADT,CAIS,CAAE,CAAAsV,CAAAjmC,KAAA,CAAa2wB,CAAAvjB,KAAb,CALyB,CA+BtCy5B,QAASA,EAAkB,CAACC,CAAD,CAAO,CAChC,IAAIC,EAAaA,QAA+B,CAACC,CAAD,CAAe,CAC7D,IAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrC,MAAOF,EAD8B,CADsB,CAK3DF,EAAJ,GACEC,CAAAn+B,UADF,CACyB,IAAIk+B,CAD7B,CAGAC,EAAAn+B,UAAA0jB,QAAA,CAA+B6a,QAAmB,EAAG,CACnD,MAAO,KAAAF,qBAAA,EAD4C,CAGrDF,EAAAn+B,UAAA7hB,SAAA,CAAgCqgD,QAAoB,EAAG,CACrD,MAAO,KAAAH,qBAAA,EAAAlgD,SAAA,EAD8C,CAGvD,OAAOggD,EAfyB,CAxClC,IAAIM,EAAgBA,QAAsB,CAAC96C,CAAD,CAAO,CAC/C,KAAM25C,GAAA,CAAW,QAAX,CAAN,CAD+C,CAI7Cl9B,EAAAD,IAAA,CAAc,WAAd,CAAJ,GACEs+B,CADF,CACkBr+B,CAAA9Y,IAAA,CAAc,WAAd,CADlB,CAN4C;IA4DxCo3C,EAAyBT,CAAA,EA5De,CA6DxCU,EAAS,EAEbA,EAAA,CAAOhB,EAAAxnB,KAAP,CAAA,CAA4B8nB,CAAA,CAAmBS,CAAnB,CAC5BC,EAAA,CAAOhB,EAAAiB,IAAP,CAAA,CAA2BX,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAkB,IAAP,CAAA,CAA2BZ,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAmB,GAAP,CAAA,CAA0Bb,CAAA,CAAmBS,CAAnB,CAC1BC,EAAA,CAAOhB,EAAAvnB,aAAP,CAAA,CAAoC6nB,CAAA,CAAmBU,CAAA,CAAOhB,EAAAkB,IAAP,CAAnB,CAyGpC,OAAO,CAAEE,QAtFTA,QAAgB,CAACjmC,CAAD,CAAOslC,CAAP,CAAqB,CACnC,IAAIY,EAAeL,CAAArjD,eAAA,CAAsBwd,CAAtB,CAAA,CAA8B6lC,CAAA,CAAO7lC,CAAP,CAA9B,CAA6C,IAChE,IAAKkmC,CAAAA,CAAL,CACE,KAAM1B,GAAA,CAAW,UAAX,CAEFxkC,CAFE,CAEIslC,CAFJ,CAAN,CAIF,GAAqB,IAArB,GAAIA,CAAJ,EAA6BA,CAA7B,GAA8C9jD,CAA9C,EAA4E,EAA5E,GAA2D8jD,CAA3D,CACE,MAAOA,EAIT,IAA4B,QAA5B,GAAI,MAAOA,EAAX,CACE,KAAMd,GAAA,CAAW,OAAX,CAEFxkC,CAFE,CAAN,CAIF,MAAO,KAAIkmC,CAAJ,CAAgBZ,CAAhB,CAjB4B,CAsF9B,CACE3a,WA1BTA,QAAmB,CAAC3qB,CAAD,CAAOmmC,CAAP,CAAqB,CACtC,GAAqB,IAArB,GAAIA,CAAJ,EAA6BA,CAA7B,GAA8C3kD,CAA9C,EAA4E,EAA5E,GAA2D2kD,CAA3D,CACE,MAAOA,EAET,KAAI3+C,EAAeq+C,CAAArjD,eAAA,CAAsBwd,CAAtB,CAAA,CAA8B6lC,CAAA,CAAO7lC,CAAP,CAA9B,CAA6C,IAChE,IAAIxY,CAAJ,EAAmB2+C,CAAnB,WAA2C3+C,EAA3C,CACE,MAAO2+C,EAAAZ,qBAAA,EAKT,IAAIvlC,CAAJ,GAAa6kC,EAAAvnB,aAAb,CAAwC,CAzIpC2R,IAAAA,EAAYrF,EAAA,CA0ImBuc,CA1IR9gD,SAAA,EAAX,CAAZ4pC,CACAlsC,CADAksC,CACGxhB,CADHwhB,CACMmX;AAAU,CAAA,CAEfrjD,EAAA,CAAI,CAAT,KAAY0qB,CAAZ,CAAgBq3B,CAAAjjD,OAAhB,CAA6CkB,CAA7C,CAAiD0qB,CAAjD,CAAoD1qB,CAAA,EAApD,CACE,GAAImiD,CAAA,CAASJ,CAAA,CAAqB/hD,CAArB,CAAT,CAAkCksC,CAAlC,CAAJ,CAAkD,CAChDmX,CAAA,CAAU,CAAA,CACV,MAFgD,CAKpD,GAAIA,CAAJ,CAEE,IAAKrjD,CAAO,CAAH,CAAG,CAAA0qB,CAAA,CAAIs3B,CAAAljD,OAAhB,CAA6CkB,CAA7C,CAAiD0qB,CAAjD,CAAoD1qB,CAAA,EAApD,CACE,GAAImiD,CAAA,CAASH,CAAA,CAAqBhiD,CAArB,CAAT,CAAkCksC,CAAlC,CAAJ,CAAkD,CAChDmX,CAAA,CAAU,CAAA,CACV,MAFgD,CA8HpD,GAxHKA,CAwHL,CACE,MAAOD,EAEP,MAAM3B,GAAA,CAAW,UAAX,CAEF2B,CAAA9gD,SAAA,EAFE,CAAN,CAJoC,CAQjC,GAAI2a,CAAJ,GAAa6kC,EAAAxnB,KAAb,CACL,MAAOsoB,EAAA,CAAcQ,CAAd,CAET,MAAM3B,GAAA,CAAW,QAAX,CAAN,CAtBsC,CAyBjC,CAEE5Z,QAlDTA,QAAgB,CAACub,CAAD,CAAe,CAC7B,MAAIA,EAAJ,WAA4BP,EAA5B,CACSO,CAAAZ,qBAAA,EADT,CAGSY,CAJoB,CAgDxB,CA5KqC,CAAlC,CAtEkB,CAkhBhCtqC,QAASA,GAAY,EAAG,CACtB,IAAIuV,EAAU,CAAA,CAad,KAAAA,QAAA,CAAei1B,QAAQ,CAACnjD,CAAD,CAAQ,CACzBiB,SAAAtC,OAAJ,GACEuvB,CADF,CACY,CAAEluB,CAAAA,CADd,CAGA,OAAOkuB,EAJsB,CAsD/B,KAAArN,KAAA,CAAY,CAAC,QAAD,CAAW,cAAX,CAA2B,QAAQ,CACjC3I,CADiC,CACvBU,CADuB,CACT,CAGpC,GAAIsV,CAAJ,EAAsB,CAAtB,CAAek1B,EAAf,CACE,KAAM9B,GAAA,CAAW,UAAX,CAAN,CAMF,IAAI+B,EAAMx+C,EAAA,CAAY88C,EAAZ,CAaV0B,EAAAC,UAAA,CAAgBC,QAAQ,EAAG,CACzB,MAAOr1B,EADkB,CAG3Bm1B,EAAAN,QAAA;AAAcnqC,CAAAmqC,QACdM,EAAA5b,WAAA,CAAiB7uB,CAAA6uB,WACjB4b,EAAA3b,QAAA,CAAc9uB,CAAA8uB,QAETxZ,EAAL,GACEm1B,CAAAN,QACA,CADcM,CAAA5b,WACd,CAD+B+b,QAAQ,CAAC1mC,CAAD,CAAO9c,CAAP,CAAc,CAAE,MAAOA,EAAT,CACrD,CAAAqjD,CAAA3b,QAAA,CAAc/lC,EAFhB,CAwBA0hD,EAAAI,QAAA,CAAcC,QAAmB,CAAC5mC,CAAD,CAAOo2B,CAAP,CAAa,CAC5C,IAAIh3B,EAAShE,CAAA,CAAOg7B,CAAP,CACb,OAAIh3B,EAAA6f,QAAJ,EAAsB7f,CAAA5M,SAAtB,CACS4M,CADT,CAGShE,CAAA,CAAOg7B,CAAP,CAAa,QAAQ,CAAClzC,CAAD,CAAQ,CAClC,MAAOqjD,EAAA5b,WAAA,CAAe3qB,CAAf,CAAqB9c,CAArB,CAD2B,CAA7B,CALmC,CAtDV,KAoThCsG,EAAQ+8C,CAAAI,QApTwB,CAqThChc,EAAa4b,CAAA5b,WArTmB,CAsThCsb,EAAUM,CAAAN,QAEd9jD,EAAA,CAAQ0iD,EAAR,CAAsB,QAAQ,CAACgC,CAAD,CAAYt6C,CAAZ,CAAkB,CAC9C,IAAIu6C,EAAQxgD,CAAA,CAAUiG,CAAV,CACZg6C,EAAA,CAAIjpC,EAAA,CAAU,WAAV,CAAwBwpC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAAC1Q,CAAD,CAAO,CACnD,MAAO5sC,EAAA,CAAMq9C,CAAN,CAAiBzQ,CAAjB,CAD4C,CAGrDmQ,EAAA,CAAIjpC,EAAA,CAAU,cAAV,CAA2BwpC,CAA3B,CAAJ,CAAA,CAAyC,QAAQ,CAAC5jD,CAAD,CAAQ,CACvD,MAAOynC,EAAA,CAAWkc,CAAX,CAAsB3jD,CAAtB,CADgD,CAGzDqjD,EAAA,CAAIjpC,EAAA,CAAU,WAAV,CAAwBwpC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAAC5jD,CAAD,CAAQ,CACpD,MAAO+iD,EAAA,CAAQY,CAAR,CAAmB3jD,CAAnB,CAD6C,CARR,CAAhD,CAaA,OAAOqjD,EArU6B,CAD1B,CApEU,CA4ZxBtqC,QAASA,GAAgB,EAAG,CAC1B,IAAA8H,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ;AAAyB,QAAQ,CAACrH,CAAD,CAAU5C,CAAV,CAAqB,CAAA,IAC5DitC,EAAe,EAD6C,CAE5DC,EACE3iD,CAAA,CAAM,CAAC,eAAAia,KAAA,CAAqBhY,CAAA,CAAU2gD,CAACvqC,CAAAwqC,UAADD,EAAsB,EAAtBA,WAAV,CAArB,CAAD,EAAyE,EAAzE,EAA6E,CAA7E,CAAN,CAH0D,CAI5DE,EAAQ,QAAA5/C,KAAA,CAAc0/C,CAACvqC,CAAAwqC,UAADD,EAAsB,EAAtBA,WAAd,CAJoD,CAK5D1lD,EAAWuY,CAAA,CAAU,CAAV,CAAXvY,EAA2B,EALiC,CAM5D6lD,CAN4D,CAO5DC,EAAc,2BAP8C,CAQ5DC,EAAY/lD,CAAAwnC,KAAZue,EAA6B/lD,CAAAwnC,KAAA10B,MAR+B,CAS5DkzC,EAAc,CAAA,CAT8C,CAU5DC,EAAa,CAAA,CAGjB,IAAIF,CAAJ,CAAe,CACb,IAASxhD,IAAAA,CAAT,GAAiBwhD,EAAjB,CACE,GAAI1/C,CAAJ,CAAYy/C,CAAA/oC,KAAA,CAAiBxY,CAAjB,CAAZ,CAAoC,CAClCshD,CAAA,CAAex/C,CAAA,CAAM,CAAN,CACfw/C,EAAA,CAAeA,CAAAn7B,OAAA,CAAoB,CAApB,CAAuB,CAAvB,CAAAvO,YAAA,EAAf,CAAyD0pC,CAAAn7B,OAAA,CAAoB,CAApB,CACzD,MAHkC,CAOjCm7B,CAAL,GACEA,CADF,CACkB,eADlB,EACqCE,EADrC,EACmD,QADnD,CAIAC,EAAA,CAAc,CAAG,EAAC,YAAD,EAAiBD,EAAjB,EAAgCF,CAAhC,CAA+C,YAA/C,EAA+DE,EAA/D,CACjBE,EAAA,CAAc,CAAG,EAAC,WAAD,EAAgBF,EAAhB,EAA+BF,CAA/B,CAA8C,WAA9C,EAA6DE,EAA7D,CAEbN,EAAAA,CAAJ,EAAiBO,CAAjB,EAAkCC,CAAlC,GACED,CACA,CADctlD,CAAA,CAASqlD,CAAAG,iBAAT,CACd,CAAAD,CAAA,CAAavlD,CAAA,CAASqlD,CAAAI,gBAAT,CAFf,CAhBa,CAuBf,MAAO,CAULl9B,QAAS,EAAGA,CAAA9N,CAAA8N,QAAH;AAAsBm9B,CAAAjrC,CAAA8N,QAAAm9B,UAAtB,EAA+D,CAA/D,CAAqDX,CAArD,EAAsEG,CAAtE,CAVJ,CAYLS,SAAUA,QAAQ,CAAC1kC,CAAD,CAAQ,CAMxB,GAAc,OAAd,GAAIA,CAAJ,EAAiC,EAAjC,EAAyBojC,EAAzB,CAAqC,MAAO,CAAA,CAE5C,IAAIthD,CAAA,CAAY+hD,CAAA,CAAa7jC,CAAb,CAAZ,CAAJ,CAAsC,CACpC,IAAI2kC,EAAStmD,CAAA6c,cAAA,CAAuB,KAAvB,CACb2oC,EAAA,CAAa7jC,CAAb,CAAA,CAAsB,IAAtB,CAA6BA,CAA7B,GAAsC2kC,EAFF,CAKtC,MAAOd,EAAA,CAAa7jC,CAAb,CAbiB,CAZrB,CA2BL/P,IAAKA,EAAA,EA3BA,CA4BLi0C,aAAcA,CA5BT,CA6BLG,YAAaA,CA7BR,CA8BLC,WAAYA,CA9BP,CA+BLR,QAASA,CA/BJ,CApCyD,CAAtD,CADc,CA4F5B3qC,QAASA,GAAwB,EAAG,CAClC,IAAA0H,KAAA,CAAY,CAAC,gBAAD,CAAmB,OAAnB,CAA4B,IAA5B,CAAkC,QAAQ,CAAC7H,CAAD,CAAiB1B,CAAjB,CAAwBgB,CAAxB,CAA4B,CAChFssC,QAASA,EAAe,CAACC,CAAD,CAAMC,CAAN,CAA0B,CAChDF,CAAAG,qBAAA,EAEA,KAAI/jB,EAAoB1pB,CAAAypB,SAApBC,EAAsC1pB,CAAAypB,SAAAC,kBAEtChiC,EAAA,CAAQgiC,CAAR,CAAJ,CACEA,CADF,CACsBA,CAAAvxB,OAAA,CAAyB,QAAQ,CAACu1C,CAAD,CAAc,CACjE,MAAOA,EAAP,GAAuBllB,EAD0C,CAA/C,CADtB,CAIWkB,CAJX,GAIiClB,EAJjC,GAKEkB,CALF,CAKsB,IALtB,CAaA,OAAO1pB,EAAAhM,IAAA,CAAUu5C,CAAV,CALWI,CAChB7hC,MAAOpK,CADSisC,CAEhBjkB,kBAAmBA,CAFHikB,CAKX,CAAA,CACJ,SADI,CAAA,CACO,QAAQ,EAAG,CACrBL,CAAAG,qBAAA,EADqB,CADlB,CAAAtsB,KAAA,CAIC,QAAQ,CAACqJ,CAAD,CAAW,CACvB9oB,CAAAyI,IAAA,CAAmBojC,CAAnB;AAAwB/iB,CAAAr3B,KAAxB,CACA,OAAOq3B,EAAAr3B,KAFgB,CAJpB,CASPy6C,QAAoB,CAACnjB,CAAD,CAAO,CACzB,GAAK+iB,CAAAA,CAAL,CACE,KAAM34B,GAAA,CAAe,QAAf,CACJ04B,CADI,CACC9iB,CAAAlB,OADD,CACckB,CAAAgC,WADd,CAAN,CAGF,MAAOzrB,EAAA0pB,OAAA,CAAUD,CAAV,CALkB,CATpB,CAlByC,CAoClD6iB,CAAAG,qBAAA,CAAuC,CAEvC,OAAOH,EAvCyE,CAAtE,CADsB,CA4CpCvrC,QAASA,GAAqB,EAAG,CAC/B,IAAAwH,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,WAA3B,CACP,QAAQ,CAACzI,CAAD,CAAe9B,CAAf,CAA2BwB,CAA3B,CAAsC,CA6GjD,MApGkBqtC,CAcN,aAAeC,QAAQ,CAACjiD,CAAD,CAAU27B,CAAV,CAAsBumB,CAAtB,CAAsC,CACnEr5B,CAAAA,CAAW7oB,CAAAmiD,uBAAA,CAA+B,YAA/B,CACf,KAAIC,EAAU,EACdtmD,EAAA,CAAQ+sB,CAAR,CAAkB,QAAQ,CAAC8R,CAAD,CAAU,CAClC,IAAI0nB,EAAc56C,EAAAzH,QAAA,CAAgB26B,CAAhB,CAAArzB,KAAA,CAA8B,UAA9B,CACd+6C,EAAJ,EACEvmD,CAAA,CAAQumD,CAAR,CAAqB,QAAQ,CAACC,CAAD,CAAc,CACrCJ,CAAJ,CAEMhhD,CADUg9C,IAAI58C,MAAJ48C,CAAW,SAAXA,CAAuBE,EAAA,CAAgBziB,CAAhB,CAAvBuiB,CAAqD,aAArDA,CACVh9C,MAAA,CAAaohD,CAAb,CAFN,EAGIF,CAAArhD,KAAA,CAAa45B,CAAb,CAHJ,CAM0C,EAN1C,EAMM2nB,CAAAjiD,QAAA,CAAoBs7B,CAApB,CANN,EAOIymB,CAAArhD,KAAA,CAAa45B,CAAb,CARqC,CAA3C,CAHgC,CAApC,CAiBA,OAAOynB,EApBgE,CAdvDJ,CAiDN,WAAaO,QAAQ,CAACviD,CAAD;AAAU27B,CAAV,CAAsBumB,CAAtB,CAAsC,CAErE,IADA,IAAIM,EAAW,CAAC,KAAD,CAAQ,UAAR,CAAoB,OAApB,CAAf,CACSl7B,EAAI,CAAb,CAAgBA,CAAhB,CAAoBk7B,CAAAhnD,OAApB,CAAqC,EAAE8rB,CAAvC,CAA0C,CAGxC,IAAIlM,EAAWpb,CAAAuZ,iBAAA,CADA,GACA,CADMipC,CAAA,CAASl7B,CAAT,CACN,CADoB,OACpB,EAFO46B,CAAAO,CAAiB,GAAjBA,CAAuB,IAE9B,EADgD,GAChD,CADsD9mB,CACtD,CADmE,IACnE,CACf,IAAIvgB,CAAA5f,OAAJ,CACE,MAAO4f,EAL+B,CAF2B,CAjDrD4mC,CAoEN,YAAcU,QAAQ,EAAG,CACnC,MAAO/tC,EAAA6P,IAAA,EAD4B,CApEnBw9B,CAiFN,YAAcW,QAAQ,CAACn+B,CAAD,CAAM,CAClCA,CAAJ,GAAY7P,CAAA6P,IAAA,EAAZ,GACE7P,CAAA6P,IAAA,CAAcA,CAAd,CACA,CAAAvP,CAAAw4B,QAAA,EAFF,CADsC,CAjFtBuU,CAgGN,WAAaY,QAAQ,CAACx9B,CAAD,CAAW,CAC1CjS,CAAA+R,gCAAA,CAAyCE,CAAzC,CAD0C,CAhG1B48B,CAT+B,CADvC,CADmB,CAmHjC5rC,QAASA,GAAgB,EAAG,CAC1B,IAAAsH,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,IAA3B,CAAiC,KAAjC,CAAwC,mBAAxC,CACP,QAAQ,CAACzI,CAAD,CAAe9B,CAAf,CAA2BgC,CAA3B,CAAiCE,CAAjC,CAAwC1B,CAAxC,CAA2D,CAkCtEguB,QAASA,EAAO,CAACn/B,CAAD,CAAKikB,CAAL,CAAYof,CAAZ,CAAyB,CAClC3pC,CAAA,CAAWsG,CAAX,CAAL,GACEqjC,CAEA,CAFcpf,CAEd,CADAA,CACA,CADQjkB,CACR,CAAAA,CAAA,CAAKjE,CAHP,CADuC,KAOnCigB,EApjgBD3gB,EAAAzB,KAAA,CAojgBkB0B,SApjgBlB,CAojgB6B4E,CApjgB7B,CA6igBoC,CAQnCwjC,EAAatnC,CAAA,CAAUinC,CAAV,CAAbK,EAAuC,CAACL,CARL,CASnC5E,EAAW1a,CAAC2f,CAAA,CAAY7wB,CAAZ,CAAkBF,CAAnBoR,OAAA,EATwB;AAUnCuZ,EAAUmB,CAAAnB,QAVyB,CAWnCpZ,CAEJA,EAAA,CAAYvT,CAAAoT,MAAA,CAAe,QAAQ,EAAG,CACpC,GAAI,CACF0a,CAAAC,QAAA,CAAiB1+B,CAAAG,MAAA,CAAS,IAAT,CAAe6b,CAAf,CAAjB,CADE,CAEF,MAAOna,CAAP,CAAU,CACV48B,CAAApC,OAAA,CAAgBx6B,CAAhB,CACA,CAAAsP,CAAA,CAAkBtP,CAAlB,CAFU,CAFZ,OAMQ,CACN,OAAOw+C,CAAA,CAAU/iB,CAAAgjB,YAAV,CADD,CAIH5c,CAAL,EAAgBjxB,CAAA5N,OAAA,EAXoB,CAA1B,CAYTof,CAZS,CAcZqZ,EAAAgjB,YAAA,CAAsBp8B,CACtBm8B,EAAA,CAAUn8B,CAAV,CAAA,CAAuBua,CAEvB,OAAOnB,EA9BgC,CAhCzC,IAAI+iB,EAAY,EA8EhBlhB,EAAAhb,OAAA,CAAiBo8B,QAAQ,CAACjjB,CAAD,CAAU,CACjC,MAAIA,EAAJ,EAAeA,CAAAgjB,YAAf,GAAsCD,EAAtC,EACEA,CAAA,CAAU/iB,CAAAgjB,YAAV,CAAAjkB,OAAA,CAAsC,UAAtC,CAEO,CADP,OAAOgkB,CAAA,CAAU/iB,CAAAgjB,YAAV,CACA,CAAA3vC,CAAAoT,MAAAI,OAAA,CAAsBmZ,CAAAgjB,YAAtB,CAHT,EAKO,CAAA,CAN0B,CASnC,OAAOnhB,EAzF+D,CAD5D,CADc,CA8J5B4B,QAASA,GAAU,CAAC/e,CAAD,CAAM,CAGnBy7B,EAAJ,GAGE+C,CAAAjoC,aAAA,CAA4B,MAA5B,CAAoCsK,CAApC,CACA,CAAAA,CAAA,CAAO29B,CAAA39B,KAJT,CAOA29B,EAAAjoC,aAAA,CAA4B,MAA5B,CAAoCsK,CAApC,CAGA,OAAO,CACLA,KAAM29B,CAAA39B,KADD,CAELme,SAAUwf,CAAAxf,SAAA,CAA0Bwf,CAAAxf,SAAA9+B,QAAA,CAAgC,IAAhC,CAAsC,EAAtC,CAA1B,CAAsE,EAF3E,CAGLiX,KAAMqnC,CAAArnC,KAHD;AAIL8tB,OAAQuZ,CAAAvZ,OAAA,CAAwBuZ,CAAAvZ,OAAA/kC,QAAA,CAA8B,KAA9B,CAAqC,EAArC,CAAxB,CAAmE,EAJtE,CAKLie,KAAMqgC,CAAArgC,KAAA,CAAsBqgC,CAAArgC,KAAAje,QAAA,CAA4B,IAA5B,CAAkC,EAAlC,CAAtB,CAA8D,EAL/D,CAMLqkC,SAAUia,CAAAja,SANL,CAOLE,KAAM+Z,CAAA/Z,KAPD,CAQLM,SAAiD,GAAvC,GAACyZ,CAAAzZ,SAAA5nC,OAAA,CAA+B,CAA/B,CAAD,CACNqhD,CAAAzZ,SADM,CAEN,GAFM,CAEAyZ,CAAAzZ,SAVL,CAbgB,CAkCzB7H,QAASA,GAAe,CAACuhB,CAAD,CAAa,CAC/BlqC,CAAAA,CAAUnd,CAAA,CAASqnD,CAAT,CAAD,CAAyB1f,EAAA,CAAW0f,CAAX,CAAzB,CAAkDA,CAC/D,OAAQlqC,EAAAyqB,SAAR,GAA4B0f,EAAA1f,SAA5B,EACQzqB,CAAA4C,KADR,GACwBunC,EAAAvnC,KAHW,CA+CrCrF,QAASA,GAAe,EAAG,CACzB,IAAAoH,KAAA,CAAYhf,EAAA,CAAQzD,CAAR,CADa,CAa3BkoD,QAASA,GAAc,CAAC1vC,CAAD,CAAY,CAKjC2vC,QAASA,EAAsB,CAACnlD,CAAD,CAAM,CACnC,GAAI,CACF,MAAO2G,mBAAA,CAAmB3G,CAAnB,CADL,CAEF,MAAOoG,CAAP,CAAU,CACV,MAAOpG,EADG,CAHuB,CAJrC,IAAIqkC,EAAc7uB,CAAA,CAAU,CAAV,CAAd6uB,EAA8B,EAAlC,CACI+gB,EAAc,EADlB,CAEIC,EAAmB,EAUvB,OAAO,SAAQ,EAAG,CAAA,IACZC,CADY,CACCC,CADD,CACS9mD,CADT,CACY0D,CADZ,CACmB8F,CAC/Bu9C,EAAAA,CAAsBnhB,CAAAkhB,OAAtBC,EAA4C,EAEhD,IAAIA,CAAJ,GAA4BH,CAA5B,CAKE,IAJAA,CAIK,CAJcG,CAId,CAHLF,CAGK,CAHSD,CAAAxjD,MAAA,CAAuB,IAAvB,CAGT,CAFLujD,CAEK,CAFS,EAET,CAAA3mD,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgB6mD,CAAA/nD,OAAhB,CAAoCkB,CAAA,EAApC,CACE8mD,CAEA;AAFSD,CAAA,CAAY7mD,CAAZ,CAET,CADA0D,CACA,CADQojD,CAAAnjD,QAAA,CAAe,GAAf,CACR,CAAY,CAAZ,CAAID,CAAJ,GACE8F,CAIA,CAJOk9C,CAAA,CAAuBI,CAAAvyB,UAAA,CAAiB,CAAjB,CAAoB7wB,CAApB,CAAvB,CAIP,CAAIijD,CAAA,CAAYn9C,CAAZ,CAAJ,GAA0B/K,CAA1B,GACEkoD,CAAA,CAAYn9C,CAAZ,CADF,CACsBk9C,CAAA,CAAuBI,CAAAvyB,UAAA,CAAiB7wB,CAAjB,CAAyB,CAAzB,CAAvB,CADtB,CALF,CAWJ,OAAOijD,EAvBS,CAbe,CA0CnCrsC,QAASA,GAAsB,EAAG,CAChC,IAAA0G,KAAA,CAAYylC,EADoB,CAwGlCrvC,QAASA,GAAe,CAACjN,CAAD,CAAW,CAkBjCy0B,QAASA,EAAQ,CAACp1B,CAAD,CAAO+E,CAAP,CAAgB,CAC/B,GAAIzN,CAAA,CAAS0I,CAAT,CAAJ,CAAoB,CAClB,IAAIw9C,EAAU,EACd5nD,EAAA,CAAQoK,CAAR,CAAc,QAAQ,CAACoG,CAAD,CAASrQ,CAAT,CAAc,CAClCynD,CAAA,CAAQznD,CAAR,CAAA,CAAeq/B,CAAA,CAASr/B,CAAT,CAAcqQ,CAAd,CADmB,CAApC,CAGA,OAAOo3C,EALW,CAOlB,MAAO78C,EAAAoE,QAAA,CAAiB/E,CAAjB,CAzBEy9C,QAyBF,CAAgC14C,CAAhC,CARsB,CAWjC,IAAAqwB,SAAA,CAAgBA,CAEhB,KAAA5d,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAACuD,CAAD,CAAY,CAC5C,MAAO,SAAQ,CAAC/a,CAAD,CAAO,CACpB,MAAO+a,EAAA9Y,IAAA,CAAcjC,CAAd,CAhCEy9C,QAgCF,CADa,CADsB,CAAlC,CAoBZroB,EAAA,CAAS,UAAT,CAAqBsoB,EAArB,CACAtoB,EAAA,CAAS,MAAT,CAAiBuoB,EAAjB,CACAvoB,EAAA,CAAS,QAAT,CAAmBwoB,EAAnB,CACAxoB,EAAA,CAAS,MAAT,CAAiByoB,EAAjB,CACAzoB,EAAA,CAAS,SAAT,CAAoB0oB,EAApB,CACA1oB,EAAA,CAAS,WAAT,CAAsB2oB,EAAtB,CACA3oB,EAAA,CAAS,QAAT,CAAmB4oB,EAAnB,CACA5oB,EAAA,CAAS,SAAT,CAAoB6oB,EAApB,CACA7oB,EAAA,CAAS,WAAT,CAAsB8oB,EAAtB,CA3DiC,CA2LnCN,QAASA,GAAY,EAAG,CACtB,MAAO,SAAQ,CAAC3jD,CAAD;AAAQw7B,CAAR,CAAoB0oB,CAApB,CAAgC,CAC7C,GAAK,CAAAhpD,EAAA,CAAY8E,CAAZ,CAAL,CAAyB,CACvB,GAAa,IAAb,EAAIA,CAAJ,CACE,MAAOA,EAEP,MAAM/E,EAAA,CAAO,QAAP,CAAA,CAAiB,UAAjB,CAAiE+E,CAAjE,CAAN,CAJqB,CAUzB,IAAImkD,CAEJ,QAJqBC,EAAAC,CAAiB7oB,CAAjB6oB,CAIrB,EACE,KAAK,UAAL,CAEE,KACF,MAAK,SAAL,CACA,KAAK,MAAL,CACA,KAAK,QAAL,CACA,KAAK,QAAL,CACEF,CAAA,CAAsB,CAAA,CAExB,MAAK,QAAL,CAEEG,CAAA,CAAcC,EAAA,CAAkB/oB,CAAlB,CAA8B0oB,CAA9B,CAA0CC,CAA1C,CACd,MACF,SACE,MAAOnkD,EAfX,CAkBA,MAAO2hB,MAAAjB,UAAAvU,OAAAlQ,KAAA,CAA4B+D,CAA5B,CAAmCskD,CAAnC,CA/BsC,CADzB,CAyCxBC,QAASA,GAAiB,CAAC/oB,CAAD,CAAa0oB,CAAb,CAAyBC,CAAzB,CAA8C,CACtE,IAAIK,EAAwBnnD,CAAA,CAASm+B,CAAT,CAAxBgpB,EAAiD,GAAjDA,EAAwDhpB,EAGzC,EAAA,CAAnB,GAAI0oB,CAAJ,CACEA,CADF,CACeziD,EADf,CAEY1F,CAAA,CAAWmoD,CAAX,CAFZ,GAGEA,CAHF,CAGeA,QAAQ,CAACO,CAAD,CAASC,CAAT,CAAmB,CACtC,GAAIlmD,CAAA,CAAYimD,CAAZ,CAAJ,CAEE,MAAO,CAAA,CAET,IAAgB,IAAhB,GAAKA,CAAL,EAAuC,IAAvC,GAA0BC,CAA1B,CAEE,MAAOD,EAAP,GAAkBC,CAEhB,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAuB,CAAvB,CAAuB,CAAA,CAAA,CAAA,CAAvB,IAAuB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EApBxB3oD,CAAA,CAAWZ,CAAA0D,SAAX,CAoBwB,EApBI1D,CAAA0D,SAoBJ,GApBqBvD,MAAAolB,UAAA7hB,SAoBrB,CAAvB,CAAJ,IAAI,CAAJ,CAEE,MAAO,CAAA,CAGT4lD,EAAA,CAAS3kD,CAAA,CAAU,EAAV,CAAe2kD,CAAf,CACTC;CAAA,CAAW5kD,CAAA,CAAU,EAAV,CAAe4kD,CAAf,CACX,OAAqC,EAArC,GAAOD,CAAAvkD,QAAA,CAAewkD,CAAf,CAhB+B,CAH1C,CA8BA,OAPcJ,SAAQ,CAACK,CAAD,CAAO,CAC3B,MAAIH,EAAJ,EAA8B,CAAAnnD,CAAA,CAASsnD,CAAT,CAA9B,CACSC,EAAA,CAAYD,CAAZ,CAAkBnpB,CAAAl9B,EAAlB,CAAgC4lD,CAAhC,CAA4C,CAAA,CAA5C,CADT,CAGOU,EAAA,CAAYD,CAAZ,CAAkBnpB,CAAlB,CAA8B0oB,CAA9B,CAA0CC,CAA1C,CAJoB,CA3ByC,CAqCxES,QAASA,GAAW,CAACH,CAAD,CAASC,CAAT,CAAmBR,CAAnB,CAA+BC,CAA/B,CAAoDU,CAApD,CAA0E,CAC5F,IAAIC,EAAaV,EAAA,CAAiBK,CAAjB,CAAjB,CACIM,EAAeX,EAAA,CAAiBM,CAAjB,CAEnB,IAAsB,QAAtB,GAAKK,CAAL,EAA2D,GAA3D,GAAoCL,CAAAljD,OAAA,CAAgB,CAAhB,CAApC,CACE,MAAO,CAACojD,EAAA,CAAYH,CAAZ,CAAoBC,CAAA5zB,UAAA,CAAmB,CAAnB,CAApB,CAA2CozB,CAA3C,CAAuDC,CAAvD,CACH,IAAIzoD,CAAA,CAAQ+oD,CAAR,CAAJ,CAGL,MAAOA,EAAA7iC,KAAA,CAAY,QAAQ,CAAC+iC,CAAD,CAAO,CAChC,MAAOC,GAAA,CAAYD,CAAZ,CAAkBD,CAAlB,CAA4BR,CAA5B,CAAwCC,CAAxC,CADyB,CAA3B,CAKT,QAAQW,CAAR,EACE,KAAK,QAAL,CACE,IAAIhpD,CACJ,IAAIqoD,CAAJ,CAAyB,CACvB,IAAKroD,CAAL,GAAY2oD,EAAZ,CACE,GAAuB,GAAvB,GAAK3oD,CAAA0F,OAAA,CAAW,CAAX,CAAL,EAA+BojD,EAAA,CAAYH,CAAA,CAAO3oD,CAAP,CAAZ,CAAyB4oD,CAAzB,CAAmCR,CAAnC,CAA+C,CAAA,CAA/C,CAA/B,CACE,MAAO,CAAA,CAGX,OAAOW,EAAA,CAAuB,CAAA,CAAvB,CAA+BD,EAAA,CAAYH,CAAZ,CAAoBC,CAApB,CAA8BR,CAA9B,CAA0C,CAAA,CAA1C,CANf,CAOlB,GAAqB,QAArB,GAAIa,CAAJ,CAA+B,CACpC,IAAKjpD,CAAL,GAAY4oD,EAAZ,CAEE,GADIM,CACA,CADcN,CAAA,CAAS5oD,CAAT,CACd,CAAA,CAAAC,CAAA,CAAWipD,CAAX,CAAA,EAA2B,CAAAxmD,CAAA,CAAYwmD,CAAZ,CAA3B,GAIAC,CAEC,CAF0B,GAE1B,GAFkBnpD,CAElB,CAAA,CAAA8oD,EAAA,CADWK,CAAAC,CAAmBT,CAAnBS,CAA4BT,CAAA,CAAO3oD,CAAP,CACvC,CAAuBkpD,CAAvB,CAAoCd,CAApC,CAAgDe,CAAhD,CAAkEA,CAAlE,CAND,CAAJ,CAOE,MAAO,CAAA,CAGX,OAAO,CAAA,CAb6B,CAepC,MAAOf,EAAA,CAAWO,CAAX,CAAmBC,CAAnB,CAGX;KAAK,UAAL,CACE,MAAO,CAAA,CACT,SACE,MAAOR,EAAA,CAAWO,CAAX,CAAmBC,CAAnB,CA/BX,CAd4F,CAkD9FN,QAASA,GAAgB,CAAC1jD,CAAD,CAAM,CAC7B,MAAgB,KAAT,GAACA,CAAD,CAAiB,MAAjB,CAA0B,MAAOA,EADX,CAyD/B+iD,QAASA,GAAc,CAAC0B,CAAD,CAAU,CAC/B,IAAIC,EAAUD,CAAA9e,eACd,OAAO,SAAQ,CAACgf,CAAD,CAASC,CAAT,CAAyBC,CAAzB,CAAuC,CAChD/mD,CAAA,CAAY8mD,CAAZ,CAAJ,GACEA,CADF,CACmBF,CAAAle,aADnB,CAII1oC,EAAA,CAAY+mD,CAAZ,CAAJ,GACEA,CADF,CACiBH,CAAA5e,SAAA,CAAiB,CAAjB,CAAAG,QADjB,CAKA,OAAkB,KAAX,EAAC0e,CAAD,CACDA,CADC,CAEDG,EAAA,CAAaH,CAAb,CAAqBD,CAAA5e,SAAA,CAAiB,CAAjB,CAArB,CAA0C4e,CAAA7e,UAA1C,CAA6D6e,CAAA9e,YAA7D,CAAkFif,CAAlF,CAAAhhD,QAAA,CACU,SADV,CACqB+gD,CADrB,CAZ8C,CAFvB,CAyEjCvB,QAASA,GAAY,CAACoB,CAAD,CAAU,CAC7B,IAAIC,EAAUD,CAAA9e,eACd,OAAO,SAAQ,CAACof,CAAD,CAASF,CAAT,CAAuB,CAGpC,MAAkB,KAAX,EAACE,CAAD,CACDA,CADC,CAEDD,EAAA,CAAaC,CAAb,CAAqBL,CAAA5e,SAAA,CAAiB,CAAjB,CAArB,CAA0C4e,CAAA7e,UAA1C,CAA6D6e,CAAA9e,YAA7D,CACaif,CADb,CAL8B,CAFT,CAa/BC,QAASA,GAAY,CAACC,CAAD,CAASp0C,CAAT,CAAkBq0C,CAAlB,CAA4BC,CAA5B,CAAwCJ,CAAxC,CAAsD,CACzE,GAAIloD,CAAA,CAASooD,CAAT,CAAJ,CAAsB,MAAO,EAE7B,KAAIG,EAAsB,CAAtBA,CAAaH,CACjBA,EAAA,CAASvxB,IAAA2xB,IAAA,CAASJ,CAAT,CAET,KAAIK,EAAwBC,QAAxBD;AAAaL,CACjB,IAAKK,CAAAA,CAAL,EAAoB,CAAAE,QAAA,CAASP,CAAT,CAApB,CAAsC,MAAO,EAP4B,KASrEQ,EAASR,CAATQ,CAAkB,EATmD,CAUrEC,EAAe,EAVsD,CAWrEC,EAAc,CAAA,CAXuD,CAYrErhD,EAAQ,EAERghD,EAAJ,GAAgBI,CAAhB,CAA+B,QAA/B,CAEA,IAAKJ,CAAAA,CAAL,EAA4C,EAA5C,GAAmBG,CAAA/lD,QAAA,CAAe,GAAf,CAAnB,CAA+C,CAC7C,IAAIkB,EAAQ6kD,CAAA7kD,MAAA,CAAa,qBAAb,CACRA,EAAJ,EAAyB,GAAzB,EAAaA,CAAA,CAAM,CAAN,CAAb,EAAgCA,CAAA,CAAM,CAAN,CAAhC,CAA2CmkD,CAA3C,CAA0D,CAA1D,CACEE,CADF,CACW,CADX,EAGES,CACA,CADeD,CACf,CAAAE,CAAA,CAAc,CAAA,CAJhB,CAF6C,CAU/C,GAAKL,CAAL,EAAoBK,CAApB,CA6CqB,CAAnB,CAAIZ,CAAJ,EAAiC,CAAjC,CAAwBE,CAAxB,GACES,CACA,CADeT,CAAAW,QAAA,CAAeb,CAAf,CACf,CAAAE,CAAA,CAASY,UAAA,CAAWH,CAAX,CAFX,CA7CF,KAAiC,CAC3BI,CAAAA,CAAcjrD,CAAC4qD,CAAAtmD,MAAA,CAAa2mC,EAAb,CAAA,CAA0B,CAA1B,CAADjrC,EAAiC,EAAjCA,QAGdmD,EAAA,CAAY+mD,CAAZ,CAAJ,GACEA,CADF,CACiBrxB,IAAAqyB,IAAA,CAASryB,IAAAC,IAAA,CAAS9iB,CAAAq1B,QAAT,CAA0B4f,CAA1B,CAAT,CAAiDj1C,CAAAs1B,QAAjD,CADjB,CAOA8e,EAAA,CAAS,EAAEvxB,IAAAsyB,MAAA,CAAW,EAAEf,CAAA5mD,SAAA,EAAF,CAAsB,GAAtB,CAA4B0mD,CAA5B,CAAX,CAAA1mD,SAAA,EAAF,CAAqE,GAArE,CAA2E,CAAC0mD,CAA5E,CAELkB,KAAAA,EAAW9mD,CAAC,EAADA,CAAM8lD,CAAN9lD,OAAA,CAAoB2mC,EAApB,CAAXmgB,CACA/c,EAAQ+c,CAAA,CAAS,CAAT,CADRA,CAEJA,EAAWA,CAAA,CAAS,CAAT,CAAXA,EAA0B,EAFtBA,CAIGp+C,EAAM,CAJTo+C,CAKAC,EAASr1C,CAAA41B,OALTwf,CAMAE,EAAQt1C,CAAA21B,MAEZ,IAAI0C,CAAAruC,OAAJ,EAAqBqrD,CAArB,CAA8BC,CAA9B,CAEE,IADAt+C,CACK,CADCqhC,CAAAruC,OACD,CADgBqrD,CAChB,CAAAnqD,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgB8L,CAAhB,CAAqB9L,CAAA,EAArB,CAC4B,CAG1B,IAHK8L,CAGL,CAHW9L,CAGX,EAHgBoqD,CAGhB,EAHqC,CAGrC,GAH+BpqD,CAG/B;CAFE2pD,CAEF,EAFkBR,CAElB,EAAAQ,CAAA,EAAgBxc,CAAAloC,OAAA,CAAajF,CAAb,CAIpB,KAAKA,CAAL,CAAS8L,CAAT,CAAc9L,CAAd,CAAkBmtC,CAAAruC,OAAlB,CAAgCkB,CAAA,EAAhC,CACsC,CAGpC,IAHKmtC,CAAAruC,OAGL,CAHoBkB,CAGpB,EAHyBmqD,CAGzB,EAH+C,CAG/C,GAHyCnqD,CAGzC,GAFE2pD,CAEF,EAFkBR,CAElB,EAAAQ,CAAA,EAAgBxc,CAAAloC,OAAA,CAAajF,CAAb,CAIlB,KAAA,CAAOkqD,CAAAprD,OAAP,CAAyBkqD,CAAzB,CAAA,CACEkB,CAAA,EAAY,GAGVlB,EAAJ,EAAqC,GAArC,GAAoBA,CAApB,GAA0CW,CAA1C,EAA0DP,CAA1D,CAAuEc,CAAAhhC,OAAA,CAAgB,CAAhB,CAAmB8/B,CAAnB,CAAvE,CA3C+B,CAmDlB,CAAf,GAAIE,CAAJ,GACEG,CADF,CACe,CAAA,CADf,CAIA9gD,EAAAlE,KAAA,CAAWglD,CAAA,CAAav0C,CAAAy1B,OAAb,CAA8Bz1B,CAAAu1B,OAAzC,CACWsf,CADX,CAEWN,CAAA,CAAav0C,CAAA01B,OAAb,CAA8B11B,CAAAw1B,OAFzC,CAGA,OAAO/hC,EAAAG,KAAA,CAAW,EAAX,CApFkE,CAuF3E2hD,QAASA,GAAS,CAACze,CAAD,CAAM0e,CAAN,CAAcnuC,CAAd,CAAoB,CACpC,IAAIouC,EAAM,EACA,EAAV,CAAI3e,CAAJ,GACE2e,CACA,CADO,GACP,CAAA3e,CAAA,CAAM,CAACA,CAFT,CAKA,KADAA,CACA,CADM,EACN,CADWA,CACX,CAAOA,CAAA9sC,OAAP,CAAoBwrD,CAApB,CAAA,CAA4B1e,CAAA,CAAM,GAAN,CAAYA,CACpCzvB,EAAJ,GACEyvB,CADF,CACQA,CAAA1iB,OAAA,CAAW0iB,CAAA9sC,OAAX,CAAwBwrD,CAAxB,CADR,CAGA,OAAOC,EAAP,CAAa3e,CAXuB,CAetC4e,QAASA,EAAU,CAAChhD,CAAD,CAAOwhB,CAAP,CAAatQ,CAAb,CAAqByB,CAArB,CAA2B,CAC5CzB,CAAA,CAASA,CAAT,EAAmB,CACnB,OAAO,SAAQ,CAAC1T,CAAD,CAAO,CAChB7G,CAAAA,CAAQ6G,CAAA,CAAK,KAAL,CAAawC,CAAb,CAAA,EACZ,IAAa,CAAb,CAAIkR,CAAJ,EAAkBva,CAAlB,CAA0B,CAACua,CAA3B,CACEva,CAAA,EAASua,CAEG,EAAd,GAAIva,CAAJ,EAA8B,GAA9B,EAAmBua,CAAnB,GAAkCva,CAAlC,CAA0C,EAA1C,CACA,OAAOkqD,GAAA,CAAUlqD,CAAV,CAAiB6qB,CAAjB,CAAuB7O,CAAvB,CANa,CAFsB,CAY9CsuC,QAASA,GAAa,CAACjhD,CAAD,CAAOkhD,CAAP,CAAkB,CACtC,MAAO,SAAQ,CAAC1jD,CAAD;AAAO6hD,CAAP,CAAgB,CAC7B,IAAI1oD,EAAQ6G,CAAA,CAAK,KAAL,CAAawC,CAAb,CAAA,EAAZ,CACIiC,EAAMyE,EAAA,CAAUw6C,CAAA,CAAa,OAAb,CAAuBlhD,CAAvB,CAA+BA,CAAzC,CAEV,OAAOq/C,EAAA,CAAQp9C,CAAR,CAAA,CAAatL,CAAb,CAJsB,CADO,CAmBxCwqD,QAASA,GAAsB,CAACC,CAAD,CAAO,CAElC,IAAIC,EAAmBC,CAAC,IAAIpmD,IAAJ,CAASkmD,CAAT,CAAe,CAAf,CAAkB,CAAlB,CAADE,QAAA,EAGvB,OAAO,KAAIpmD,IAAJ,CAASkmD,CAAT,CAAe,CAAf,EAAwC,CAArB,EAACC,CAAD,CAA0B,CAA1B,CAA8B,EAAjD,EAAuDA,CAAvD,CAL2B,CActCE,QAASA,GAAU,CAAC//B,CAAD,CAAO,CACvB,MAAO,SAAQ,CAAChkB,CAAD,CAAO,CAAA,IACfgkD,EAAaL,EAAA,CAAuB3jD,CAAAikD,YAAA,EAAvB,CAGb5xB,EAAAA,CAAO,CAVN6xB,IAAIxmD,IAAJwmD,CAQ8BlkD,CARrBikD,YAAA,EAATC,CAQ8BlkD,CARGmkD,SAAA,EAAjCD,CAQ8BlkD,CANnCokD,QAAA,EAFKF,EAEiB,CAFjBA,CAQ8BlkD,CANT8jD,OAAA,EAFrBI,EAUD7xB,CAAoB,CAAC2xB,CACtB5mD,EAAAA,CAAS,CAATA,CAAauzB,IAAAsyB,MAAA,CAAW5wB,CAAX,CAAkB,MAAlB,CAEhB,OAAOgxB,GAAA,CAAUjmD,CAAV,CAAkB4mB,CAAlB,CAPY,CADC,CAgB1BqgC,QAASA,GAAS,CAACrkD,CAAD,CAAO6hD,CAAP,CAAgB,CAChC,MAA6B,EAAtB,EAAA7hD,CAAAikD,YAAA,EAAA,CAA0BpC,CAAAnd,KAAA,CAAa,CAAb,CAA1B,CAA4Cmd,CAAAnd,KAAA,CAAa,CAAb,CADnB,CA0IlCyb,QAASA,GAAU,CAACyB,CAAD,CAAU,CAK3B0C,QAASA,EAAgB,CAACC,CAAD,CAAS,CAChC,IAAI1mD,CACJ,IAAIA,CAAJ,CAAY0mD,CAAA1mD,MAAA,CAAa2mD,CAAb,CAAZ,CAAyC,CACnCxkD,CAAAA,CAAO,IAAItC,IAAJ,CAAS,CAAT,CAD4B,KAEnC+mD,EAAS,CAF0B,CAGnCC,EAAS,CAH0B,CAInCC,EAAa9mD,CAAA,CAAM,CAAN,CAAA,CAAWmC,CAAA4kD,eAAX,CAAiC5kD,CAAA6kD,YAJX,CAKnCC,EAAajnD,CAAA,CAAM,CAAN,CAAA,CAAWmC,CAAA+kD,YAAX;AAA8B/kD,CAAAglD,SAE3CnnD,EAAA,CAAM,CAAN,CAAJ,GACE4mD,CACA,CADSnqD,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,CAAiBA,CAAA,CAAM,EAAN,CAAjB,CACT,CAAA6mD,CAAA,CAAQpqD,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,CAAiBA,CAAA,CAAM,EAAN,CAAjB,CAFV,CAIA8mD,EAAAjsD,KAAA,CAAgBsH,CAAhB,CAAsB1F,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,CAAtB,CAAuCvD,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,CAAvC,CAAyD,CAAzD,CAA4DvD,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,CAA5D,CACItE,EAAAA,CAAIe,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CAAJtE,CAA2BkrD,CAC3BQ,EAAAA,CAAI3qD,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CAAJonD,CAA2BP,CAC3BQ,EAAAA,CAAI5qD,CAAA,CAAMuD,CAAA,CAAM,CAAN,CAAN,EAAkB,CAAlB,CACJsnD,EAAAA,CAAKx0B,IAAAsyB,MAAA,CAAgD,GAAhD,CAAWH,UAAA,CAAW,IAAX,EAAmBjlD,CAAA,CAAM,CAAN,CAAnB,EAA+B,CAA/B,EAAX,CACTinD,EAAApsD,KAAA,CAAgBsH,CAAhB,CAAsBzG,CAAtB,CAAyB0rD,CAAzB,CAA4BC,CAA5B,CAA+BC,CAA/B,CAhBuC,CAmBzC,MAAOZ,EArByB,CAFlC,IAAIC,EAAgB,sGA2BpB,OAAO,SAAQ,CAACxkD,CAAD,CAAOolD,CAAP,CAAezlD,CAAf,CAAyB,CAAA,IAClC6yB,EAAO,EAD2B,CAElCjxB,EAAQ,EAF0B,CAGlCzC,CAHkC,CAG9BjB,CAERunD,EAAA,CAASA,CAAT,EAAmB,YACnBA,EAAA,CAASxD,CAAAhe,iBAAA,CAAyBwhB,CAAzB,CAAT,EAA6CA,CACzCltD,EAAA,CAAS8H,CAAT,CAAJ,GACEA,CADF,CACSqlD,EAAA7nD,KAAA,CAAmBwC,CAAnB,CAAA,CAA2B1F,CAAA,CAAM0F,CAAN,CAA3B,CAAyCskD,CAAA,CAAiBtkD,CAAjB,CADlD,CAII5E,EAAA,CAAS4E,CAAT,CAAJ,GACEA,CADF,CACS,IAAItC,IAAJ,CAASsC,CAAT,CADT,CAIA,IAAK,CAAA3E,EAAA,CAAO2E,CAAP,CAAL,EAAsB,CAAAyiD,QAAA,CAASziD,CAAArC,QAAA,EAAT,CAAtB,CACE,MAAOqC,EAGT,KAAA,CAAOolD,CAAP,CAAA,CAEE,CADAvnD,CACA;AADQynD,EAAA/wC,KAAA,CAAwB6wC,CAAxB,CACR,GACE7jD,CACA,CADQ9C,EAAA,CAAO8C,CAAP,CAAc1D,CAAd,CAAqB,CAArB,CACR,CAAAunD,CAAA,CAAS7jD,CAAA6e,IAAA,EAFX,GAIE7e,CAAAlE,KAAA,CAAW+nD,CAAX,CACA,CAAAA,CAAA,CAAS,IALX,CASF,KAAIG,EAAqBvlD,CAAAG,kBAAA,EACrBR,EAAJ,GACE4lD,CACA,CADqB7lD,EAAA,CAAiBC,CAAjB,CAA2BK,CAAAG,kBAAA,EAA3B,CACrB,CAAAH,CAAA,CAAOD,EAAA,CAAuBC,CAAvB,CAA6BL,CAA7B,CAAuC,CAAA,CAAvC,CAFT,CAIAvH,EAAA,CAAQmJ,CAAR,CAAe,QAAQ,CAACpI,CAAD,CAAQ,CAC7B2F,CAAA,CAAK0mD,EAAA,CAAarsD,CAAb,CACLq5B,EAAA,EAAQ1zB,CAAA,CAAKA,CAAA,CAAGkB,CAAH,CAAS4hD,CAAAhe,iBAAT,CAAmC2hB,CAAnC,CAAL,CACKpsD,CAAA6H,QAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAA,QAAA,CAAsC,KAAtC,CAA6C,GAA7C,CAHgB,CAA/B,CAMA,OAAOwxB,EAzC+B,CA9Bb,CA2G7B6tB,QAASA,GAAU,EAAG,CACpB,MAAO,SAAQ,CAAClT,CAAD,CAASsY,CAAT,CAAkB,CAC3BxqD,CAAA,CAAYwqD,CAAZ,CAAJ,GACIA,CADJ,CACc,CADd,CAGA,OAAOtmD,GAAA,CAAOguC,CAAP,CAAesY,CAAf,CAJwB,CADb,CAiItBnF,QAASA,GAAa,EAAG,CACvB,MAAO,SAAQ,CAACz2C,CAAD,CAAQ67C,CAAR,CAAexf,CAAf,CAAsB,CAEjCwf,CAAA,CAD8BlD,QAAhC,GAAI7xB,IAAA2xB,IAAA,CAASl+B,MAAA,CAAOshC,CAAP,CAAT,CAAJ,CACUthC,MAAA,CAAOshC,CAAP,CADV,CAGUprD,CAAA,CAAMorD,CAAN,CAEV,IAAI5lD,KAAA,CAAM4lD,CAAN,CAAJ,CAAkB,MAAO77C,EAErBzO,EAAA,CAASyO,CAAT,CAAJ,GAAqBA,CAArB,CAA6BA,CAAAvO,SAAA,EAA7B,CACA,IAAK,CAAAnD,CAAA,CAAQ0R,CAAR,CAAL,EAAwB,CAAA3R,CAAA,CAAS2R,CAAT,CAAxB,CAAyC,MAAOA,EAEhDq8B,EAAA,CAAUA,CAAAA,CAAF,EAAWpmC,KAAA,CAAMomC,CAAN,CAAX,CAA2B,CAA3B,CAA+B5rC,CAAA,CAAM4rC,CAAN,CACvCA,EAAA,CAAiB,CAAT,CAACA,CAAD,EAAcA,CAAd,EAAuB,CAACr8B,CAAA/R,OAAxB;AAAwC+R,CAAA/R,OAAxC,CAAuDouC,CAAvD,CAA+DA,CAEvE,OAAa,EAAb,EAAIwf,CAAJ,CACS77C,CAAA1P,MAAA,CAAY+rC,CAAZ,CAAmBA,CAAnB,CAA2Bwf,CAA3B,CADT,CAGgB,CAAd,GAAIxf,CAAJ,CACSr8B,CAAA1P,MAAA,CAAYurD,CAAZ,CAAmB77C,CAAA/R,OAAnB,CADT,CAGS+R,CAAA1P,MAAA,CAAYw2B,IAAAC,IAAA,CAAS,CAAT,CAAYsV,CAAZ,CAAoBwf,CAApB,CAAZ,CAAwCxf,CAAxC,CApBwB,CADd,CAoLzBua,QAASA,GAAa,CAACpvC,CAAD,CAAS,CAC7B,MAAO,SAAQ,CAAC5U,CAAD,CAAQkpD,CAAR,CAAuBC,CAAvB,CAAqC,CAoClDC,QAASA,EAAiB,CAACC,CAAD,CAAOC,CAAP,CAAmB,CAC3C,MAAOA,EAAA,CACD,QAAQ,CAACp8C,CAAD,CAAI+V,CAAJ,CAAO,CAAC,MAAOomC,EAAA,CAAKpmC,CAAL,CAAO/V,CAAP,CAAR,CADd,CAEDm8C,CAHqC,CAM7CntD,QAASA,EAAW,CAACQ,CAAD,CAAQ,CAC1B,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACA,KAAK,SAAL,CACA,KAAK,QAAL,CACE,MAAO,CAAA,CACT,SACE,MAAO,CAAA,CANX,CAD0B,CAW5B6sD,QAASA,EAAc,CAAC7sD,CAAD,CAAQ,CAC7B,MAAc,KAAd,GAAIA,CAAJ,CAA2B,MAA3B,CAC6B,UAI7B,GAJI,MAAOA,EAAA0nC,QAIX,GAHE1nC,CACI,CADIA,CAAA0nC,QAAA,EACJ,CAAAloC,CAAA,CAAYQ,CAAZ,CAEN,GAA8B,UAA9B,GAAI,MAAOA,EAAAmC,SAAX,GACEnC,CACI,CADIA,CAAAmC,SAAA,EACJ,CAAA3C,CAAA,CAAYQ,CAAZ,CAFN,EAEiCA,CAFjC,CAIO,EAVsB,CAa/B67B,QAASA,EAAO,CAACixB,CAAD,CAAKC,CAAL,CAAS,CACvB,IAAI7nD,EAAK,MAAO4nD,EAAhB,CACI3nD,EAAK,MAAO4nD,EACZ7nD,EAAJ,GAAWC,CAAX,EAAwB,QAAxB,GAAiBD,CAAjB;CACE4nD,CACA,CADKD,CAAA,CAAeC,CAAf,CACL,CAAAC,CAAA,CAAKF,CAAA,CAAeE,CAAf,CAFP,CAIA,OAAI7nD,EAAJ,GAAWC,CAAX,EACa,QAIX,GAJID,CAIJ,GAHG4nD,CACA,CADKA,CAAAlhD,YAAA,EACL,CAAAmhD,CAAA,CAAKA,CAAAnhD,YAAA,EAER,EAAIkhD,CAAJ,GAAWC,CAAX,CAAsB,CAAtB,CACOD,CAAA,CAAKC,CAAL,CAAW,EAAX,CAAe,CANxB,EAQS7nD,CAAA,CAAKC,CAAL,CAAW,EAAX,CAAe,CAfD,CAjEzB,GAAM,CAAA3G,EAAA,CAAY8E,CAAZ,CAAN,CAA2B,MAAOA,EAClCkpD,EAAA,CAAgBxtD,CAAA,CAAQwtD,CAAR,CAAA,CAAyBA,CAAzB,CAAyC,CAACA,CAAD,CAC5B,EAA7B,GAAIA,CAAA7tD,OAAJ,GAAkC6tD,CAAlC,CAAkD,CAAC,GAAD,CAAlD,CACAA,EAAA,CAAgBA,CAAAQ,IAAA,CAAkB,QAAQ,CAACC,CAAD,CAAY,CAAA,IAChDL,EAAa,CAAA,CADmC,CAC5BthD,EAAM2hD,CAAN3hD,EAAmB3J,EAC3C,IAAI5C,CAAA,CAASkuD,CAAT,CAAJ,CAAyB,CACvB,GAA4B,GAA5B,EAAKA,CAAAnoD,OAAA,CAAiB,CAAjB,CAAL,EAA0D,GAA1D,EAAmCmoD,CAAAnoD,OAAA,CAAiB,CAAjB,CAAnC,CACE8nD,CACA,CADoC,GACpC,EADaK,CAAAnoD,OAAA,CAAiB,CAAjB,CACb,CAAAmoD,CAAA,CAAYA,CAAA74B,UAAA,CAAoB,CAApB,CAEd,IAAkB,EAAlB,GAAI64B,CAAJ,CAEE,MAAOP,EAAA,CAAkB7wB,CAAlB,CAA2B+wB,CAA3B,CAETthD,EAAA,CAAM4M,CAAA,CAAO+0C,CAAP,CACN,IAAI3hD,CAAAgE,SAAJ,CAAkB,CAChB,IAAIlQ,EAAMkM,CAAA,EACV,OAAOohD,EAAA,CAAkB,QAAQ,CAACl8C,CAAD,CAAI+V,CAAJ,CAAO,CACtC,MAAOsV,EAAA,CAAQrrB,CAAA,CAAEpR,CAAF,CAAR,CAAgBmnB,CAAA,CAAEnnB,CAAF,CAAhB,CAD+B,CAAjC,CAEJwtD,CAFI,CAFS,CAVK,CAiBzB,MAAOF,EAAA,CAAkB,QAAQ,CAACl8C,CAAD,CAAI+V,CAAJ,CAAO,CACtC,MAAOsV,EAAA,CAAQvwB,CAAA,CAAIkF,CAAJ,CAAR,CAAelF,CAAA,CAAIib,CAAJ,CAAf,CAD+B,CAAjC,CAEJqmC,CAFI,CAnB6C,CAAtC,CAuBhB,OAAO5rD,GAAAzB,KAAA,CAAW+D,CAAX,CAAA1D,KAAA,CAAuB8sD,CAAA,CAE9BlF,QAAmB,CAACxiD,CAAD,CAAKC,CAAL,CAAS,CAC1B,IAAS,IAAApF,EAAI,CAAb,CAAgBA,CAAhB,CAAoB2sD,CAAA7tD,OAApB,CAA0CkB,CAAA,EAA1C,CAA+C,CAC7C,IAAI8sD;AAAOH,CAAA,CAAc3sD,CAAd,CAAA,CAAiBmF,CAAjB,CAAqBC,CAArB,CACX,IAAa,CAAb,GAAI0nD,CAAJ,CAAgB,MAAOA,EAFsB,CAI/C,MAAO,EALmB,CAFE,CAA8BF,CAA9B,CAAvB,CA3B2C,CADvB,CAwF/BS,QAASA,GAAW,CAACx9C,CAAD,CAAY,CAC1BrQ,CAAA,CAAWqQ,CAAX,CAAJ,GACEA,CADF,CACc,CACV8a,KAAM9a,CADI,CADd,CAKAA,EAAA4d,SAAA,CAAqB5d,CAAA4d,SAArB,EAA2C,IAC3C,OAAOzrB,GAAA,CAAQ6N,CAAR,CAPuB,CAgiBhCy9C,QAASA,GAAc,CAAChqD,CAAD,CAAU0tB,CAAV,CAAiB6D,CAAjB,CAAyB1e,CAAzB,CAAmCkB,CAAnC,CAAiD,CAAA,IAClErG,EAAO,IAD2D,CAElEu8C,EAAW,EAFuD,CAIlEC,EAAax8C,CAAAy8C,aAAbD,CAAiClqD,CAAA5B,OAAA,EAAA+K,WAAA,CAA4B,MAA5B,CAAjC+gD,EAAwEE,EAG5E18C,EAAA28C,OAAA,CAAc,EACd38C,EAAA48C,UAAA,CAAiB,EACjB58C,EAAA68C,SAAA,CAAgBpvD,CAChBuS,EAAA88C,MAAA,CAAaz2C,CAAA,CAAa2Z,CAAAxnB,KAAb,EAA2BwnB,CAAAte,OAA3B,EAA2C,EAA3C,CAAA,CAA+CmiB,CAA/C,CACb7jB,EAAA+8C,OAAA,CAAc,CAAA,CACd/8C,EAAAg9C,UAAA,CAAiB,CAAA,CACjBh9C,EAAAi9C,OAAA,CAAc,CAAA,CACdj9C,EAAAk9C,SAAA,CAAgB,CAAA,CAChBl9C,EAAAm9C,WAAA,CAAkB,CAAA,CAElBX,EAAAY,YAAA,CAAuBp9C,CAAvB,CAaAA,EAAAq9C,mBAAA,CAA0BC,QAAQ,EAAG,CACnClvD,CAAA,CAAQmuD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAF,mBAAA,EADkC,CAApC,CADmC,CAiBrCr9C,EAAAw9C,iBAAA,CAAwBC,QAAQ,EAAG,CACjCrvD,CAAA,CAAQmuD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAC,iBAAA,EADkC,CAApC,CADiC,CAenCx9C;CAAAo9C,YAAA,CAAmBM,QAAQ,CAACH,CAAD,CAAU,CAGnC7gD,EAAA,CAAwB6gD,CAAAT,MAAxB,CAAuC,OAAvC,CACAP,EAAAlpD,KAAA,CAAckqD,CAAd,CAEIA,EAAAT,MAAJ,GACE98C,CAAA,CAAKu9C,CAAAT,MAAL,CADF,CACwBS,CADxB,CANmC,CAYrCv9C,EAAA29C,gBAAA,CAAuBC,QAAQ,CAACL,CAAD,CAAUM,CAAV,CAAmB,CAChD,IAAIC,EAAUP,CAAAT,MAEV98C,EAAA,CAAK89C,CAAL,CAAJ,GAAsBP,CAAtB,EACE,OAAOv9C,CAAA,CAAK89C,CAAL,CAET99C,EAAA,CAAK69C,CAAL,CAAA,CAAgBN,CAChBA,EAAAT,MAAA,CAAgBe,CAPgC,CAmBlD79C,EAAA+9C,eAAA,CAAsBC,QAAQ,CAACT,CAAD,CAAU,CAClCA,CAAAT,MAAJ,EAAqB98C,CAAA,CAAKu9C,CAAAT,MAAL,CAArB,GAA6CS,CAA7C,EACE,OAAOv9C,CAAA,CAAKu9C,CAAAT,MAAL,CAET1uD,EAAA,CAAQ4R,CAAA68C,SAAR,CAAuB,QAAQ,CAAC1tD,CAAD,CAAQqJ,CAAR,CAAc,CAC3CwH,CAAAi+C,aAAA,CAAkBzlD,CAAlB,CAAwB,IAAxB,CAA8B+kD,CAA9B,CAD2C,CAA7C,CAGAnvD,EAAA,CAAQ4R,CAAA28C,OAAR,CAAqB,QAAQ,CAACxtD,CAAD,CAAQqJ,CAAR,CAAc,CACzCwH,CAAAi+C,aAAA,CAAkBzlD,CAAlB,CAAwB,IAAxB,CAA8B+kD,CAA9B,CADyC,CAA3C,CAGAnvD,EAAA,CAAQ4R,CAAA48C,UAAR,CAAwB,QAAQ,CAACztD,CAAD,CAAQqJ,CAAR,CAAc,CAC5CwH,CAAAi+C,aAAA,CAAkBzlD,CAAlB,CAAwB,IAAxB,CAA8B+kD,CAA9B,CAD4C,CAA9C,CAIA/qD,GAAA,CAAY+pD,CAAZ,CAAsBgB,CAAtB,CAdsC,CA2BxCW,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnB5gC,SAAUjrB,CAFS,CAGnB8rD,IAAKA,QAAQ,CAACjb,CAAD,CAASjF,CAAT,CAAmBziC,CAAnB,CAA+B,CAC1C,IAAI0Y,EAAOgvB,CAAA,CAAOjF,CAAP,CACN/pB,EAAL,CAIiB,EAJjB,GAGcA,CAAAxhB,QAAAD,CAAa+I,CAAb/I,CAHd,EAKIyhB,CAAA9gB,KAAA,CAAUoI,CAAV,CALJ,CACE0nC,CAAA,CAAOjF,CAAP,CADF;AACqB,CAACziC,CAAD,CAHqB,CAHzB,CAcnB4iD,MAAOA,QAAQ,CAAClb,CAAD,CAASjF,CAAT,CAAmBziC,CAAnB,CAA+B,CAC5C,IAAI0Y,EAAOgvB,CAAA,CAAOjF,CAAP,CACN/pB,EAAL,GAGA3hB,EAAA,CAAY2hB,CAAZ,CAAkB1Y,CAAlB,CACA,CAAoB,CAApB,GAAI0Y,CAAArmB,OAAJ,EACE,OAAOq1C,CAAA,CAAOjF,CAAP,CALT,CAF4C,CAd3B,CAwBnBse,WAAYA,CAxBO,CAyBnBr3C,SAAUA,CAzBS,CAArB,CAsCAnF,EAAAs+C,UAAA,CAAiBC,QAAQ,EAAG,CAC1Bp5C,CAAAkL,YAAA,CAAqB/d,CAArB,CAA8BksD,EAA9B,CACAr5C,EAAAiL,SAAA,CAAkB9d,CAAlB,CAA2BmsD,EAA3B,CACAz+C,EAAA+8C,OAAA,CAAc,CAAA,CACd/8C,EAAAg9C,UAAA,CAAiB,CAAA,CACjBR,EAAA8B,UAAA,EAL0B,CAsB5Bt+C,EAAA0+C,aAAA,CAAoBC,QAAQ,EAAG,CAC7Bx5C,CAAAy5C,SAAA,CAAkBtsD,CAAlB,CAA2BksD,EAA3B,CAA2CC,EAA3C,CAtOcI,eAsOd,CACA7+C,EAAA+8C,OAAA,CAAc,CAAA,CACd/8C,EAAAg9C,UAAA,CAAiB,CAAA,CACjBh9C,EAAAm9C,WAAA,CAAkB,CAAA,CAClB/uD,EAAA,CAAQmuD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAmB,aAAA,EADkC,CAApC,CAL6B,CAuB/B1+C,EAAA8+C,cAAA,CAAqBC,QAAQ,EAAG,CAC9B3wD,CAAA,CAAQmuD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAuB,cAAA,EADkC,CAApC,CAD8B,CAahC9+C,EAAAg/C,cAAA,CAAqBC,QAAQ,EAAG,CAC9B95C,CAAAiL,SAAA,CAAkB9d,CAAlB,CA1QcusD,cA0Qd,CACA7+C,EAAAm9C,WAAA,CAAkB,CAAA,CAClBX,EAAAwC,cAAA,EAH8B,CAxNsC,CAvwmBjC;AAitpBvCE,QAASA,GAAoB,CAACf,CAAD,CAAO,CAClCA,CAAAgB,YAAA9rD,KAAA,CAAsB,QAAQ,CAAClE,CAAD,CAAQ,CACpC,MAAOgvD,EAAAiB,SAAA,CAAcjwD,CAAd,CAAA,CAAuBA,CAAvB,CAA+BA,CAAAmC,SAAA,EADF,CAAtC,CADkC,CAWpC+tD,QAASA,GAAa,CAAC5lD,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bl2C,CAA7B,CAAuCxC,CAAvC,CAAiD,CACrE,IAAIwG,EAAO1Z,CAAA,CAAUD,CAAA,CAAQ,CAAR,CAAA2Z,KAAV,CAKX,IAAKgnC,CAAAhrC,CAAAgrC,QAAL,CAAuB,CACrB,IAAIqM,EAAY,CAAA,CAEhBhtD,EAAAgJ,GAAA,CAAW,kBAAX,CAA+B,QAAQ,CAAC1B,CAAD,CAAO,CAC5C0lD,CAAA,CAAY,CAAA,CADgC,CAA9C,CAIAhtD,EAAAgJ,GAAA,CAAW,gBAAX,CAA6B,QAAQ,EAAG,CACtCgkD,CAAA,CAAY,CAAA,CACZroC,EAAA,EAFsC,CAAxC,CAPqB,CAavB,IAAIA,EAAWA,QAAQ,CAACsoC,CAAD,CAAK,CACtBtrB,CAAJ,GACExuB,CAAAoT,MAAAI,OAAA,CAAsBgb,CAAtB,CACA,CAAAA,CAAA,CAAU,IAFZ,CAIA,IAAIqrB,CAAAA,CAAJ,CAAA,CAL0B,IAMtBnwD,EAAQmD,CAAAa,IAAA,EACRgc,EAAAA,CAAQowC,CAARpwC,EAAcowC,CAAAtzC,KAKL,WAAb,GAAIA,CAAJ,EAA6Bja,CAAAwtD,OAA7B,EAA4D,OAA5D,GAA4CxtD,CAAAwtD,OAA5C,GACErwD,CADF,CACUgc,CAAA,CAAKhc,CAAL,CADV,CAOA,EAAIgvD,CAAAsB,WAAJ,GAAwBtwD,CAAxB,EAA4C,EAA5C,GAAkCA,CAAlC,EAAkDgvD,CAAAuB,sBAAlD,GACEvB,CAAAwB,cAAA,CAAmBxwD,CAAnB,CAA0BggB,CAA1B,CAfF,CAL0B,CA0B5B,IAAIlH,CAAA4rC,SAAA,CAAkB,OAAlB,CAAJ,CACEvhD,CAAAgJ,GAAA,CAAW,OAAX,CAAoB2b,CAApB,CADF,KAEO,CACL,IAAIgd,CAAJ;AAEI2rB,EAAgBA,QAAQ,CAACL,CAAD,CAAK1/C,CAAL,CAAYggD,CAAZ,CAAuB,CAC5C5rB,CAAL,GACEA,CADF,CACYxuB,CAAAoT,MAAA,CAAe,QAAQ,EAAG,CAClCob,CAAA,CAAU,IACLp0B,EAAL,EAAcA,CAAA1Q,MAAd,GAA8B0wD,CAA9B,EACE5oC,CAAA,CAASsoC,CAAT,CAHgC,CAA1B,CADZ,CADiD,CAWnDjtD,EAAAgJ,GAAA,CAAW,SAAX,CAAsB,QAAQ,CAAC6T,CAAD,CAAQ,CACpC,IAAI5gB,EAAM4gB,CAAA2wC,QAIE,GAAZ,GAAIvxD,CAAJ,EAAmB,EAAnB,CAAwBA,CAAxB,EAAqC,EAArC,CAA+BA,CAA/B,EAA6C,EAA7C,EAAmDA,CAAnD,EAAiE,EAAjE,EAA0DA,CAA1D,EAEAqxD,CAAA,CAAczwC,CAAd,CAAqB,IAArB,CAA2B,IAAAhgB,MAA3B,CAPoC,CAAtC,CAWA,IAAI8Y,CAAA4rC,SAAA,CAAkB,OAAlB,CAAJ,CACEvhD,CAAAgJ,GAAA,CAAW,WAAX,CAAwBskD,CAAxB,CA1BG,CAgCPttD,CAAAgJ,GAAA,CAAW,QAAX,CAAqB2b,CAArB,CAEAknC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxB1tD,CAAAa,IAAA,CAAYgrD,CAAAiB,SAAA,CAAcjB,CAAAsB,WAAd,CAAA,CAAiC,EAAjC,CAAsCtB,CAAAsB,WAAlD,CADwB,CAjF2C,CAsHvEQ,QAASA,GAAgB,CAAChjC,CAAD,CAASijC,CAAT,CAAkB,CACzC,MAAO,SAAQ,CAACC,CAAD,CAAMnqD,CAAN,CAAY,CAAA,IACrBuB,CADqB,CACd4kD,CAEX,IAAI9qD,EAAA,CAAO8uD,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAIjyD,CAAA,CAASiyD,CAAT,CAAJ,CAAmB,CAII,GAArB,EAAIA,CAAAlsD,OAAA,CAAW,CAAX,CAAJ,EAA0D,GAA1D,EAA4BksD,CAAAlsD,OAAA,CAAWksD,CAAAryD,OAAX,CAAwB,CAAxB,CAA5B,GACEqyD,CADF,CACQA,CAAA58B,UAAA,CAAc,CAAd,CAAiB48B,CAAAryD,OAAjB,CAA8B,CAA9B,CADR,CAGA,IAAIsyD,EAAA5sD,KAAA,CAAqB2sD,CAArB,CAAJ,CACE,MAAO,KAAIzsD,IAAJ,CAASysD,CAAT,CAETljC,EAAAnpB,UAAA,CAAmB,CAGnB,IAFAyD,CAEA;AAFQ0lB,CAAA1S,KAAA,CAAY41C,CAAZ,CAER,CAqBE,MApBA5oD,EAAAsb,MAAA,EAoBO,CAlBLspC,CAkBK,CAnBHnmD,CAAJ,CACQ,CACJqqD,KAAMrqD,CAAAikD,YAAA,EADF,CAEJqG,GAAItqD,CAAAmkD,SAAA,EAAJmG,CAAsB,CAFlB,CAGJC,GAAIvqD,CAAAokD,QAAA,EAHA,CAIJoG,GAAIxqD,CAAAyqD,SAAA,EAJA,CAKJC,GAAI1qD,CAAAK,WAAA,EALA,CAMJsqD,GAAI3qD,CAAA4qD,WAAA,EANA,CAOJC,IAAK7qD,CAAA8qD,gBAAA,EAALD,CAA8B,GAP1B,CADR,CAWQ,CAAER,KAAM,IAAR,CAAcC,GAAI,CAAlB,CAAqBC,GAAI,CAAzB,CAA4BC,GAAI,CAAhC,CAAmCE,GAAI,CAAvC,CAA0CC,GAAI,CAA9C,CAAiDE,IAAK,CAAtD,CAQD,CALPzyD,CAAA,CAAQmJ,CAAR,CAAe,QAAQ,CAACwpD,CAAD,CAAOruD,CAAP,CAAc,CAC/BA,CAAJ,CAAYwtD,CAAApyD,OAAZ,GACEquD,CAAA,CAAI+D,CAAA,CAAQxtD,CAAR,CAAJ,CADF,CACwB,CAACquD,CADzB,CADmC,CAArC,CAKO,CAAA,IAAIrtD,IAAJ,CAASyoD,CAAAkE,KAAT,CAAmBlE,CAAAmE,GAAnB,CAA4B,CAA5B,CAA+BnE,CAAAoE,GAA/B,CAAuCpE,CAAAqE,GAAvC,CAA+CrE,CAAAuE,GAA/C,CAAuDvE,CAAAwE,GAAvD,EAAiE,CAAjE,CAA8E,GAA9E,CAAoExE,CAAA0E,IAApE,EAAsF,CAAtF,CAlCQ,CAsCnB,MAAOG,IA7CkB,CADc,CAkD3CC,QAASA,GAAmB,CAACh1C,CAAD,CAAOgR,CAAP,CAAeikC,CAAf,CAA0B9F,CAA1B,CAAkC,CAC5D,MAAO+F,SAA6B,CAAC1nD,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bl2C,CAA7B,CAAuCxC,CAAvC,CAAiDU,CAAjD,CAA0D,CA4D5Fi7C,QAASA,EAAW,CAACjyD,CAAD,CAAQ,CAE1B,MAAOA,EAAP,EAAgB,EAAEA,CAAAwE,QAAF,EAAmBxE,CAAAwE,QAAA,EAAnB,GAAuCxE,CAAAwE,QAAA,EAAvC,CAFU,CAK5B0tD,QAASA,EAAsB,CAACluD,CAAD,CAAM,CACnC,MAAOjC,EAAA,CAAUiC,CAAV,CAAA,CAAkB9B,EAAA,CAAO8B,CAAP,CAAA,CAAcA,CAAd,CAAoB+tD,CAAA,CAAU/tD,CAAV,CAAtC,CAAwD1F,CAD5B,CAhErC6zD,EAAA,CAAgB7nD,CAAhB,CAAuBnH,CAAvB,CAAgCN,CAAhC,CAAsCmsD,CAAtC,CACAkB,GAAA,CAAc5lD,CAAd;AAAqBnH,CAArB,CAA8BN,CAA9B,CAAoCmsD,CAApC,CAA0Cl2C,CAA1C,CAAoDxC,CAApD,CACA,KAAI9P,EAAWwoD,CAAXxoD,EAAmBwoD,CAAAoD,SAAnB5rD,EAAoCwoD,CAAAoD,SAAA5rD,SAAxC,CACI6rD,CAEJrD,EAAAsD,aAAA,CAAoBx1C,CACpBkyC,EAAAuD,SAAAruD,KAAA,CAAmB,QAAQ,CAAClE,CAAD,CAAQ,CACjC,MAAIgvD,EAAAiB,SAAA,CAAcjwD,CAAd,CAAJ,CAAiC,IAAjC,CACI8tB,CAAAzpB,KAAA,CAAYrE,CAAZ,CAAJ,EAIMwyD,CAIGA,CAJUT,CAAA,CAAU/xD,CAAV,CAAiBqyD,CAAjB,CAIVG,CAHHhsD,CAGGgsD,GAFLA,CAEKA,CAFQ5rD,EAAA,CAAuB4rD,CAAvB,CAAmChsD,CAAnC,CAERgsD,EAAAA,CART,EAUOl0D,CAZ0B,CAAnC,CAeA0wD,EAAAgB,YAAA9rD,KAAA,CAAsB,QAAQ,CAAClE,CAAD,CAAQ,CACpC,GAAIA,CAAJ,EAAc,CAAAkC,EAAA,CAAOlC,CAAP,CAAd,CACE,KAAMyyD,GAAA,CAAe,SAAf,CAAyDzyD,CAAzD,CAAN,CAEF,GAAIiyD,CAAA,CAAYjyD,CAAZ,CAAJ,CAKE,MAAO,CAJPqyD,CAIO,CAJQryD,CAIR,GAHawG,CAGb,GAFL6rD,CAEK,CAFUzrD,EAAA,CAAuByrD,CAAvB,CAAqC7rD,CAArC,CAA+C,CAAA,CAA/C,CAEV,EAAAwQ,CAAA,CAAQ,MAAR,CAAA,CAAgBhX,CAAhB,CAAuBisD,CAAvB,CAA+BzlD,CAA/B,CAEP6rD,EAAA,CAAe,IACf,OAAO,EAZ2B,CAAtC,CAgBA,IAAItwD,CAAA,CAAUc,CAAAgnD,IAAV,CAAJ,EAA2BhnD,CAAA6vD,MAA3B,CAAuC,CACrC,IAAIC,CACJ3D,EAAA4D,YAAA/I,IAAA,CAAuBgJ,QAAQ,CAAC7yD,CAAD,CAAQ,CACrC,MAAO,CAACiyD,CAAA,CAAYjyD,CAAZ,CAAR,EAA8B8B,CAAA,CAAY6wD,CAAZ,CAA9B,EAAqDZ,CAAA,CAAU/xD,CAAV,CAArD,EAAyE2yD,CADpC,CAGvC9vD,EAAAi5B,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC93B,CAAD,CAAM,CACjC2uD,CAAA,CAAST,CAAA,CAAuBluD,CAAvB,CACTgrD,EAAA8D,UAAA,EAFiC,CAAnC,CALqC,CAWvC,GAAI/wD,CAAA,CAAUc,CAAA40B,IAAV,CAAJ,EAA2B50B,CAAAkwD,MAA3B,CAAuC,CACrC,IAAIC,CACJhE,EAAA4D,YAAAn7B,IAAA,CAAuBw7B,QAAQ,CAACjzD,CAAD,CAAQ,CACrC,MAAO,CAACiyD,CAAA,CAAYjyD,CAAZ,CAAR;AAA8B8B,CAAA,CAAYkxD,CAAZ,CAA9B,EAAqDjB,CAAA,CAAU/xD,CAAV,CAArD,EAAyEgzD,CADpC,CAGvCnwD,EAAAi5B,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC93B,CAAD,CAAM,CACjCgvD,CAAA,CAASd,CAAA,CAAuBluD,CAAvB,CACTgrD,EAAA8D,UAAA,EAFiC,CAAnC,CALqC,CAjDqD,CADlC,CAwE9DX,QAASA,GAAe,CAAC7nD,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6B,CAGnD,CADuBA,CAAAuB,sBACvB,CADoD5vD,CAAA,CADzCwC,CAAAT,CAAQ,CAARA,CACkDwwD,SAAT,CACpD,GACElE,CAAAuD,SAAAruD,KAAA,CAAmB,QAAQ,CAAClE,CAAD,CAAQ,CACjC,IAAIkzD,EAAW/vD,CAAAP,KAAA,CA1xpBSuwD,UA0xpBT,CAAXD,EAAoD,EAKxD,OAAOA,EAAAE,SAAA,EAAsBC,CAAAH,CAAAG,aAAtB,CAA8C/0D,CAA9C,CAA0D0B,CANhC,CAAnC,CAJiD,CAqHrDszD,QAASA,GAAiB,CAACp7C,CAAD,CAAS/Y,CAAT,CAAkBkK,CAAlB,CAAwBy1B,CAAxB,CAAoCr4B,CAApC,CAA8C,CAEtE,GAAI1E,CAAA,CAAU+8B,CAAV,CAAJ,CAA2B,CACzBy0B,CAAA,CAAUr7C,CAAA,CAAO4mB,CAAP,CACV,IAAKxvB,CAAAikD,CAAAjkD,SAAL,CACE,KAAM/Q,EAAA,CAAO,SAAP,CAAA,CAAkB,WAAlB,CACiC8K,CADjC,CACuCy1B,CADvC,CAAN,CAGF,MAAOy0B,EAAA,CAAQp0D,CAAR,CANkB,CAQ3B,MAAOsH,EAV+D,CAolBxE+sD,QAASA,GAAc,CAACnqD,CAAD,CAAO0U,CAAP,CAAiB,CACtC1U,CAAA,CAAO,SAAP,CAAmBA,CACnB,OAAO,CAAC,UAAD,CAAa,QAAQ,CAAC2M,CAAD,CAAW,CAiFrCy9C,QAASA,EAAe,CAACr1B,CAAD,CAAUC,CAAV,CAAmB,CACzC,IAAIF,EAAS,EAAb,CAGSt+B,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBu+B,CAAAz/B,OAApB,CAAoCkB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAIy+B,EAAQF,CAAA,CAAQv+B,CAAR,CAAZ,CACSe,EAAI,CAAb,CAAgBA,CAAhB,CAAoBy9B,CAAA1/B,OAApB,CAAoCiC,CAAA,EAApC,CACE,GAAI09B,CAAJ,EAAaD,CAAA,CAAQz9B,CAAR,CAAb,CAAyB,SAAS,CAEpCu9B;CAAAj6B,KAAA,CAAYo6B,CAAZ,CALuC,CAOzC,MAAOH,EAXkC,CAc3Cu1B,QAASA,EAAY,CAACj3B,CAAD,CAAW,CAC9B,IAAIzb,EAAU,EACd,OAAIhiB,EAAA,CAAQy9B,CAAR,CAAJ,EACEx9B,CAAA,CAAQw9B,CAAR,CAAkB,QAAQ,CAAC6C,CAAD,CAAI,CAC5Bte,CAAA,CAAUA,CAAA1b,OAAA,CAAeouD,CAAA,CAAap0B,CAAb,CAAf,CADkB,CAA9B,CAGOte,CAAAA,CAJT,EAKWjiB,CAAA,CAAS09B,CAAT,CAAJ,CACEA,CAAAx5B,MAAA,CAAe,GAAf,CADF,CAEItC,CAAA,CAAS87B,CAAT,CAAJ,EACLx9B,CAAA,CAAQw9B,CAAR,CAAkB,QAAQ,CAAC6C,CAAD,CAAIjE,CAAJ,CAAO,CAC3BiE,CAAJ,GACEte,CADF,CACYA,CAAA1b,OAAA,CAAe+1B,CAAAp4B,MAAA,CAAQ,GAAR,CAAf,CADZ,CAD+B,CAAjC,CAKO+d,CAAAA,CANF,EAQAyb,CAjBuB,CA9FhC,MAAO,CACLnP,SAAU,IADL,CAEL9C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAiCnC8wD,QAASA,EAAiB,CAAC3yC,CAAD,CAAU+nB,CAAV,CAAiB,CAGzC,IAAI6qB,EAAczwD,CAAAsH,KAAA,CAAa,cAAb,CAAdmpD,EAA8CvuD,EAAA,EAAlD,CACIwuD,EAAkB,EACtB50D,EAAA,CAAQ+hB,CAAR,CAAiB,QAAQ,CAACqN,CAAD,CAAY,CACnC,GAAY,CAAZ,CAAI0a,CAAJ,EAAiB6qB,CAAA,CAAYvlC,CAAZ,CAAjB,CACEulC,CAAA,CAAYvlC,CAAZ,CACA,EAD0BulC,CAAA,CAAYvlC,CAAZ,CAC1B,EADoD,CACpD,EADyD0a,CACzD,CAAI6qB,CAAA,CAAYvlC,CAAZ,CAAJ,GAA+B,EAAU,CAAV,CAAE0a,CAAF,CAA/B,EACE8qB,CAAA3vD,KAAA,CAAqBmqB,CAArB,CAJ+B,CAArC,CAQAlrB,EAAAsH,KAAA,CAAa,cAAb,CAA6BmpD,CAA7B,CACA,OAAOC,EAAAtrD,KAAA,CAAqB,GAArB,CAdkC,CA8B3CurD,QAASA,EAAkB,CAAC1tC,CAAD,CAAS,CAClC,GAAiB,CAAA,CAAjB,GAAIrI,CAAJ,EAAyBzT,CAAAypD,OAAzB,CAAwC,CAAxC,GAA8Ch2C,CAA9C,CAAwD,CACtD,IAAI4e,EAAa+2B,CAAA,CAAattC,CAAb,EAAuB,EAAvB,CACjB,IAAKC,CAAAA,CAAL,CAAa,CA1Cf,IAAIsW,EAAag3B,CAAA,CA2CFh3B,CA3CE,CAA2B,CAA3B,CACjB95B,EAAA25B,UAAA,CAAeG,CAAf,CAyCe,CAAb,IAEO,IAAK,CAAA53B,EAAA,CAAOqhB,CAAP,CAAcC,CAAd,CAAL,CAA4B,CAEnB0S,IAAAA;AADG26B,CAAA36B,CAAa1S,CAAb0S,CACHA,CAnBd6D,EAAQ62B,CAAA,CAmBkB92B,CAnBlB,CAA4B5D,CAA5B,CAmBMA,CAlBd+D,EAAW22B,CAAA,CAAgB16B,CAAhB,CAkBe4D,CAlBf,CAkBG5D,CAjBlB6D,EAAQ+2B,CAAA,CAAkB/2B,CAAlB,CAAyB,CAAzB,CAiBU7D,CAhBlB+D,EAAW62B,CAAA,CAAkB72B,CAAlB,CAA6B,EAA7B,CACPF,EAAJ,EAAaA,CAAAj+B,OAAb,EACEqX,CAAAiL,SAAA,CAAkB9d,CAAlB,CAA2By5B,CAA3B,CAEEE,EAAJ,EAAgBA,CAAAn+B,OAAhB,EACEqX,CAAAkL,YAAA,CAAqB/d,CAArB,CAA8B25B,CAA9B,CASmC,CAJmB,CASxDzW,CAAA,CAASxhB,EAAA,CAAYuhB,CAAZ,CAVyB,CA9DpC,IAAIC,CAEJ/b,EAAA/H,OAAA,CAAaM,CAAA,CAAKwG,CAAL,CAAb,CAAyByqD,CAAzB,CAA6C,CAAA,CAA7C,CAEAjxD,EAAAi5B,SAAA,CAAc,OAAd,CAAuB,QAAQ,CAAC97B,CAAD,CAAQ,CACrC8zD,CAAA,CAAmBxpD,CAAA01C,MAAA,CAAYn9C,CAAA,CAAKwG,CAAL,CAAZ,CAAnB,CADqC,CAAvC,CAKa,UAAb,GAAIA,CAAJ,EACEiB,CAAA/H,OAAA,CAAa,QAAb,CAAuB,QAAQ,CAACwxD,CAAD,CAASC,CAAT,CAAoB,CAEjD,IAAIC,EAAMF,CAANE,CAAe,CACnB,IAAIA,CAAJ,IAAaD,CAAb,CAAyB,CAAzB,EAA6B,CAC3B,IAAIhzC,EAAU0yC,CAAA,CAAappD,CAAA01C,MAAA,CAAYn9C,CAAA,CAAKwG,CAAL,CAAZ,CAAb,CACd4qD,EAAA,GAAQl2C,CAAR,EAQA4e,CACJ,CADiBg3B,CAAA,CAPA3yC,CAOA,CAA2B,CAA3B,CACjB,CAAAne,CAAA25B,UAAA,CAAeG,CAAf,CATI,GAaAA,CACJ,CADiBg3B,CAAA,CAXG3yC,CAWH,CAA4B,EAA5B,CACjB,CAAAne,CAAA65B,aAAA,CAAkBC,CAAlB,CAdI,CAF2B,CAHoB,CAAnD,CAXiC,CAFhC,CAD8B,CAAhC,CAF+B,CAooGxCoyB,QAASA,GAAoB,CAAC5vD,CAAD,CAAU,CA6ErC+0D,QAASA,EAAiB,CAAC7lC,CAAD,CAAY8lC,CAAZ,CAAyB,CAC7CA,CAAJ,EAAoB,CAAAC,CAAA,CAAW/lC,CAAX,CAApB,EACErY,CAAAiL,SAAA,CAAkBmN,CAAlB,CAA4BC,CAA5B,CACA,CAAA+lC,CAAA,CAAW/lC,CAAX,CAAA,CAAwB,CAAA,CAF1B,EAGY8lC,CAAAA,CAHZ,EAG2BC,CAAA,CAAW/lC,CAAX,CAH3B,GAIErY,CAAAkL,YAAA,CAAqBkN,CAArB,CAA+BC,CAA/B,CACA,CAAA+lC,CAAA,CAAW/lC,CAAX,CAAA,CAAwB,CAAA,CAL1B,CADiD,CAUnDgmC,QAASA,EAAmB,CAACC,CAAD,CAAqBC,CAArB,CAA8B,CACxDD,CAAA,CAAqBA,CAAA,CAAqB,GAArB,CAA2B/oD,EAAA,CAAW+oD,CAAX,CAA+B,GAA/B,CAA3B,CAAiE,EAEtFJ,EAAA,CAAkBM,EAAlB,CAAgCF,CAAhC,CAAgE,CAAA,CAAhE;AAAoDC,CAApD,CACAL,EAAA,CAAkBO,EAAlB,CAAkCH,CAAlC,CAAkE,CAAA,CAAlE,GAAsDC,CAAtD,CAJwD,CAvFrB,IACjCvF,EAAO7vD,CAAA6vD,KAD0B,CAEjC5gC,EAAWjvB,CAAAivB,SAFsB,CAGjCgmC,EAAa,EAHoB,CAIjCnF,EAAM9vD,CAAA8vD,IAJ2B,CAKjCC,EAAQ/vD,CAAA+vD,MALyB,CAMjC7B,EAAaluD,CAAAkuD,WANoB,CAOjCr3C,EAAW7W,CAAA6W,SAEfo+C,EAAA,CAAWK,EAAX,CAAA,CAA4B,EAAEL,CAAA,CAAWI,EAAX,CAAF,CAA4BpmC,CAAArN,SAAA,CAAkByzC,EAAlB,CAA5B,CAE5BxF,EAAAF,aAAA,CAEA4F,QAAoB,CAACJ,CAAD,CAAqB/sC,CAArB,CAA4Bjb,CAA5B,CAAwC,CACtDib,CAAJ,GAAcjpB,CAAd,EAgDK0wD,CAAA,SAGL,GAFEA,CAAA,SAEF,CAFe,EAEf,EAAAC,CAAA,CAAID,CAAA,SAAJ,CAlD2BsF,CAkD3B,CAlD+ChoD,CAkD/C,CAnDA,GAuDI0iD,CAAA,SAGJ,EAFEE,CAAA,CAAMF,CAAA,SAAN,CArD4BsF,CAqD5B,CArDgDhoD,CAqDhD,CAEF,CAAIqoD,EAAA,CAAc3F,CAAA,SAAd,CAAJ,GACEA,CAAA,SADF,CACe1wD,CADf,CA1DA,CAKKkE,GAAA,CAAU+kB,CAAV,CAAL,CAIMA,CAAJ,EACE2nC,CAAA,CAAMF,CAAAxB,OAAN,CAAmB8G,CAAnB,CAAuChoD,CAAvC,CACA,CAAA2iD,CAAA,CAAID,CAAAvB,UAAJ,CAAoB6G,CAApB,CAAwChoD,CAAxC,CAFF,GAIE2iD,CAAA,CAAID,CAAAxB,OAAJ,CAAiB8G,CAAjB,CAAqChoD,CAArC,CACA,CAAA4iD,CAAA,CAAMF,CAAAvB,UAAN,CAAsB6G,CAAtB,CAA0ChoD,CAA1C,CALF,CAJF,EACE4iD,CAAA,CAAMF,CAAAxB,OAAN,CAAmB8G,CAAnB,CAAuChoD,CAAvC,CACA,CAAA4iD,CAAA,CAAMF,CAAAvB,UAAN,CAAsB6G,CAAtB,CAA0ChoD,CAA1C,CAFF,CAYI0iD,EAAAtB,SAAJ,EACEwG,CAAA,CAAkBU,EAAlB,CAAiC,CAAA,CAAjC,CAEA,CADA5F,CAAAlB,OACA,CADckB,CAAAjB,SACd,CAD8BzvD,CAC9B,CAAA+1D,CAAA,CAAoB,EAApB,CAAwB,IAAxB,CAHF,GAKEH,CAAA,CAAkBU,EAAlB,CAAiC,CAAA,CAAjC,CAGA,CAFA5F,CAAAlB,OAEA,CAFc6G,EAAA,CAAc3F,CAAAxB,OAAd,CAEd,CADAwB,CAAAjB,SACA,CADgB,CAACiB,CAAAlB,OACjB,CAAAuG,CAAA,CAAoB,EAApB;AAAwBrF,CAAAlB,OAAxB,CARF,CAiBE+G,EAAA,CADE7F,CAAAtB,SAAJ,EAAqBsB,CAAAtB,SAAA,CAAc4G,CAAd,CAArB,CACkBh2D,CADlB,CAEW0wD,CAAAxB,OAAA,CAAY8G,CAAZ,CAAJ,CACW,CAAA,CADX,CAEItF,CAAAvB,UAAA,CAAe6G,CAAf,CAAJ,CACW,CAAA,CADX,CAGW,IAGlBD,EAAA,CAAoBC,CAApB,CAAwCO,CAAxC,CACAxH,EAAAyB,aAAA,CAAwBwF,CAAxB,CAA4CO,CAA5C,CAA2D7F,CAA3D,CA7C0D,CAbvB,CA+FvC2F,QAASA,GAAa,CAACl2D,CAAD,CAAM,CAC1B,GAAIA,CAAJ,CACE,IAASmE,IAAAA,CAAT,GAAiBnE,EAAjB,CACE,MAAO,CAAA,CAGX,OAAO,CAAA,CANmB,CArsxB5B,IAAIq2D,GAAsB,oBAA1B,CAgBI1xD,EAAYA,QAAQ,CAACgoD,CAAD,CAAS,CAAC,MAAOrsD,EAAA,CAASqsD,CAAT,CAAA,CAAmBA,CAAAx/C,YAAA,EAAnB,CAA0Cw/C,CAAlD,CAhBjC,CAiBI9rD,GAAiBV,MAAAolB,UAAA1kB,eAjBrB,CA6BIyQ,GAAYA,QAAQ,CAACq7C,CAAD,CAAS,CAAC,MAAOrsD,EAAA,CAASqsD,CAAT,CAAA,CAAmBA,CAAA5wC,YAAA,EAAnB,CAA0C4wC,CAAlD,CA7BjC,CAwDIhI,EAxDJ,CAyDI/7C,CAzDJ,CA0DI6E,EA1DJ,CA2DIlL,GAAoB,EAAAA,MA3DxB,CA4DIyC,GAAoB,EAAAA,OA5DxB,CA6DIS,GAAoB,EAAAA,KA7DxB,CA8DI/B,GAAoBvD,MAAAolB,UAAA7hB,SA9DxB,CA+DIH,GAAoBpD,MAAAoD,eA/DxB,CAgEImC,GAAoB5F,CAAA,CAAO,IAAP,CAhExB,CAmEIqM,GAAoBxM,CAAAwM,QAApBA,GAAuCxM,CAAAwM,QAAvCA,CAAwD,EAAxDA,CAnEJ,CAoEIsF,EApEJ,CAqEIhQ,GAAoB,CAMxBkjD,GAAA,CAAO/kD,CAAA02D,aAyPPrzD,EAAAkiB,QAAA,CAAe,EAsBfjiB,GAAAiiB,QAAA;AAAmB,EAiInB,KAAI5kB,EAAUimB,KAAAjmB,QAAd,CAuEIoF,GAAqB,+FAvEzB,CA6EI4X,EAAOA,QAAQ,CAAChc,CAAD,CAAQ,CACzB,MAAOjB,EAAA,CAASiB,CAAT,CAAA,CAAkBA,CAAAgc,KAAA,EAAlB,CAAiChc,CADf,CA7E3B,CAoFIuhD,GAAkBA,QAAQ,CAACwK,CAAD,CAAI,CAChC,MAAOA,EAAAlkD,QAAA,CAAU,+BAAV,CAA2C,MAA3C,CAAAA,QAAA,CACU,OADV,CACmB,OADnB,CADyB,CApFlC,CAsYIoI,GAAMA,QAAQ,EAAG,CACnB,GAAIlO,CAAA,CAAUkO,EAAA+kD,UAAV,CAAJ,CAA8B,MAAO/kD,GAAA+kD,UAErC,KAAIC,EAAS,EAAG,CAAA52D,CAAAmL,cAAA,CAAuB,UAAvB,CAAH,EACG,CAAAnL,CAAAmL,cAAA,CAAuB,eAAvB,CADH,CAGb,IAAKyrD,CAAAA,CAAL,CACE,GAAI,CAEF,IAAIC,QAAJ,CAAa,EAAb,CAFE,CAIF,MAAO1tD,CAAP,CAAU,CACVytD,CAAA,CAAS,CAAA,CADC,CAKd,MAAQhlD,GAAA+kD,UAAR,CAAwBC,CAhBL,CAtYrB,CA+bIhpD,GAAKA,QAAQ,EAAG,CAClB,GAAIlK,CAAA,CAAUkK,EAAAkpD,MAAV,CAAJ,CAAyB,MAAOlpD,GAAAkpD,MAChC,KAAIC,CAAJ,CACIv1D,CADJ;AACOa,EAAKmI,EAAAlK,OADZ,CACmCyK,CADnC,CAC2CC,CAC3C,KAAKxJ,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBa,CAAhB,CAAoB,EAAEb,CAAtB,CAEE,GADAuJ,CACI,CADKP,EAAA,CAAehJ,CAAf,CACL,CAAAu1D,CAAA,CAAK/2D,CAAAmL,cAAA,CAAuB,GAAvB,CAA6BJ,CAAAvB,QAAA,CAAe,GAAf,CAAoB,KAApB,CAA7B,CAA0D,KAA1D,CAAT,CAA2E,CACzEwB,CAAA,CAAO+rD,CAAAtsD,aAAA,CAAgBM,CAAhB,CAAyB,IAAzB,CACP,MAFyE,CAM7E,MAAQ6C,GAAAkpD,MAAR,CAAmB9rD,CAZD,CA/bpB,CA2sBIR,GAAiB,CAAC,KAAD,CAAQ,UAAR,CAAoB,KAApB,CAA2B,OAA3B,CA3sBrB,CA0gCI4C,GAAoB,QA1gCxB,CAkhCIM,GAAkB,CAAA,CAlhCtB,CAmhCIa,EAnhCJ,CA2qCI9N,GAAoB,CA3qCxB,CA6qCI8I,GAAiB,CA7qCrB,CA0oDIkI,GAAU,CACZulD,KAAM,OADM,CAEZC,MAAO,CAFK,CAGZC,MAAO,CAHK,CAIZC,IAAK,CAJO,CAKZC,SAAU,uBALE,CAoQdxoD,EAAAmuB,QAAA,CAAiB,OA5hFsB,KA8hFnC7d,GAAUtQ,CAAAmW,MAAV7F,CAAyB,EA9hFU,CA+hFnCE,GAAO,CAWXxQ,EAAAH,MAAA,CAAe4oD,QAAQ,CAAChzD,CAAD,CAAO,CAE5B,MAAO,KAAA0gB,MAAA,CAAW1gB,CAAA,CAAK,IAAA04B,QAAL,CAAX,CAAP,EAAyC,EAFb,CAQ9B,KAAI/gB,GAAuB,iBAA3B,CACII,GAAkB,aADtB,CAEIk7C,GAAiB,CAAEC,WAAY,UAAd,CAA0BC,WAAY,WAAtC,CAFrB,CAGI55C,GAAe1d,CAAA,CAAO,QAAP,CAHnB,CAkBI4d,GAAoB,4BAlBxB;AAmBInB,GAAc,WAnBlB,CAoBIG,GAAkB,WApBtB,CAqBIM,GAAmB,yEArBvB,CAuBIH,GAAU,CACZ,OAAU,CAAC,CAAD,CAAI,8BAAJ,CAAoC,WAApC,CADE,CAGZ,MAAS,CAAC,CAAD,CAAI,SAAJ,CAAe,UAAf,CAHG,CAIZ,IAAO,CAAC,CAAD,CAAI,mBAAJ,CAAyB,qBAAzB,CAJK,CAKZ,GAAM,CAAC,CAAD,CAAI,gBAAJ,CAAsB,kBAAtB,CALM,CAMZ,GAAM,CAAC,CAAD,CAAI,oBAAJ,CAA0B,uBAA1B,CANM,CAOZ,SAAY,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAPA,CAUdA,GAAAw6C,SAAA,CAAmBx6C,EAAAjK,OACnBiK,GAAAy6C,MAAA,CAAgBz6C,EAAA06C,MAAhB,CAAgC16C,EAAA26C,SAAhC,CAAmD36C,EAAA46C,QAAnD,CAAqE56C,EAAA66C,MACrE76C,GAAA86C,GAAA,CAAa96C,EAAA+6C,GA2Tb,KAAIjqD,GAAkBa,CAAA+W,UAAlB5X,CAAqC,CACvCkqD,MAAOA,QAAQ,CAAC3wD,CAAD,CAAK,CAGlB4wD,QAASA,EAAO,EAAG,CACbC,CAAJ,GACAA,CACA;AADQ,CAAA,CACR,CAAA7wD,CAAA,EAFA,CADiB,CAFnB,IAAI6wD,EAAQ,CAAA,CASgB,WAA5B,GAAIn4D,CAAAihB,WAAJ,CACEC,UAAA,CAAWg3C,CAAX,CADF,EAGE,IAAApqD,GAAA,CAAQ,kBAAR,CAA4BoqD,CAA5B,CAGA,CAAAtpD,CAAA,CAAO7O,CAAP,CAAA+N,GAAA,CAAkB,MAAlB,CAA0BoqD,CAA1B,CANF,CAVkB,CADmB,CAqBvCp0D,SAAUA,QAAQ,EAAG,CACnB,IAAInC,EAAQ,EACZf,EAAA,CAAQ,IAAR,CAAc,QAAQ,CAACuI,CAAD,CAAI,CAAExH,CAAAkE,KAAA,CAAW,EAAX,CAAgBsD,CAAhB,CAAF,CAA1B,CACA,OAAO,GAAP,CAAaxH,CAAAuI,KAAA,CAAW,IAAX,CAAb,CAAgC,GAHb,CArBkB,CA2BvCs1C,GAAIA,QAAQ,CAACt6C,CAAD,CAAQ,CAChB,MAAiB,EAAV,EAACA,CAAD,CAAe8D,CAAA,CAAO,IAAA,CAAK9D,CAAL,CAAP,CAAf,CAAqC8D,CAAA,CAAO,IAAA,CAAK,IAAA1I,OAAL,CAAmB4E,CAAnB,CAAP,CAD5B,CA3BmB,CA+BvC5E,OAAQ,CA/B+B,CAgCvCuF,KAAMA,EAhCiC,CAiCvCtE,KAAM,EAAAA,KAjCiC,CAkCvC6D,OAAQ,EAAAA,OAlC+B,CAAzC,CA0CIic,GAAe,EACnBzgB,EAAA,CAAQ,2DAAA,MAAA,CAAA,GAAA,CAAR,CAAgF,QAAQ,CAACe,CAAD,CAAQ,CAC9F0f,EAAA,CAAatc,CAAA,CAAUpD,CAAV,CAAb,CAAA,CAAiCA,CAD6D,CAAhG,CAGA,KAAI2f,GAAmB,EACvB1gB,EAAA,CAAQ,kDAAA,MAAA,CAAA,GAAA,CAAR,CAAuE,QAAQ,CAACe,CAAD,CAAQ,CACrF2f,EAAA,CAAiB3f,CAAjB,CAAA;AAA0B,CAAA,CAD2D,CAAvF,CAGA,KAAI6f,GAAe,CACjB,YAAe,WADE,CAEjB,YAAe,WAFE,CAGjB,MAAS,KAHQ,CAIjB,MAAS,KAJQ,CAKjB,UAAa,SALI,CAqBnB5gB,EAAA,CAAQ,CACNwL,KAAMiT,EADA,CAEN+4C,WAAYh6C,EAFN,CAAR,CAGG,QAAQ,CAAC9W,CAAD,CAAK0D,CAAL,CAAW,CACpB4D,CAAA,CAAO5D,CAAP,CAAA,CAAe1D,CADK,CAHtB,CAOA1G,EAAA,CAAQ,CACNwL,KAAMiT,EADA,CAENnR,cAAekS,EAFT,CAINnU,MAAOA,QAAQ,CAACnH,CAAD,CAAU,CAEvB,MAAOkE,EAAAoD,KAAA,CAAYtH,CAAZ,CAAqB,QAArB,CAAP,EAAyCsb,EAAA,CAAoBtb,CAAAyb,WAApB,EAA0Czb,CAA1C,CAAmD,CAAC,eAAD,CAAkB,QAAlB,CAAnD,CAFlB,CAJnB,CASNkJ,aAAcA,QAAQ,CAAClJ,CAAD,CAAU,CAE9B,MAAOkE,EAAAoD,KAAA,CAAYtH,CAAZ,CAAqB,eAArB,CAAP,EAAgDkE,CAAAoD,KAAA,CAAYtH,CAAZ,CAAqB,yBAArB,CAFlB,CAT1B,CAcNmJ,WAAYkS,EAdN,CAgBN3U,SAAUA,QAAQ,CAAC1G,CAAD,CAAU,CAC1B,MAAOsb,GAAA,CAAoBtb,CAApB,CAA6B,WAA7B,CADmB,CAhBtB,CAoBNu6B,WAAYA,QAAQ,CAACv6B,CAAD,CAAUkG,CAAV,CAAgB,CAClClG,CAAAuzD,gBAAA,CAAwBrtD,CAAxB,CADkC,CApB9B,CAwBN0X,SAAUjD,EAxBJ,CA0BN64C,IAAKA,QAAQ,CAACxzD,CAAD;AAAUkG,CAAV,CAAgBrJ,CAAhB,CAAuB,CAClCqJ,CAAA,CAAO+Q,EAAA,CAAU/Q,CAAV,CAEP,IAAItH,CAAA,CAAU/B,CAAV,CAAJ,CACEmD,CAAAgO,MAAA,CAAc9H,CAAd,CAAA,CAAsBrJ,CADxB,KAGE,OAAOmD,EAAAgO,MAAA,CAAc9H,CAAd,CANyB,CA1B9B,CAoCNxG,KAAMA,QAAQ,CAACM,CAAD,CAAUkG,CAAV,CAAgBrJ,CAAhB,CAAuB,CACnC,IAAInB,EAAWsE,CAAAtE,SACf,IAAIA,CAAJ,GAAiB+I,EAAjB,EA1sCsBgvD,CA0sCtB,GAAmC/3D,CAAnC,EAxsCoBi0B,CAwsCpB,GAAuEj0B,CAAvE,CAIA,GADIg4D,CACA,CADiBzzD,CAAA,CAAUiG,CAAV,CACjB,CAAAqW,EAAA,CAAam3C,CAAb,CAAJ,CACE,GAAI90D,CAAA,CAAU/B,CAAV,CAAJ,CACQA,CAAN,EACEmD,CAAA,CAAQkG,CAAR,CACA,CADgB,CAAA,CAChB,CAAAlG,CAAA+a,aAAA,CAAqB7U,CAArB,CAA2BwtD,CAA3B,CAFF,GAIE1zD,CAAA,CAAQkG,CAAR,CACA,CADgB,CAAA,CAChB,CAAAlG,CAAAuzD,gBAAA,CAAwBG,CAAxB,CALF,CADF,KASE,OAAQ1zD,EAAA,CAAQkG,CAAR,CAAD,EACEytD,CAAC3zD,CAAA+uB,WAAA6kC,aAAA,CAAgC1tD,CAAhC,CAADytD,EAA0Cp1D,CAA1Co1D,WADF,CAEED,CAFF,CAGEv4D,CAbb,KAeO,IAAIyD,CAAA,CAAU/B,CAAV,CAAJ,CACLmD,CAAA+a,aAAA,CAAqB7U,CAArB,CAA2BrJ,CAA3B,CADK,KAEA,IAAImD,CAAA2F,aAAJ,CAKL,MAFIkuD,EAEG,CAFG7zD,CAAA2F,aAAA,CAAqBO,CAArB,CAA2B,CAA3B,CAEH,CAAQ,IAAR,GAAA2tD,CAAA,CAAe14D,CAAf,CAA2B04D,CA5BD,CApC/B,CAoENp0D,KAAMA,QAAQ,CAACO,CAAD,CAAUkG,CAAV,CAAgBrJ,CAAhB,CAAuB,CACnC,GAAI+B,CAAA,CAAU/B,CAAV,CAAJ,CACEmD,CAAA,CAAQkG,CAAR,CAAA,CAAgBrJ,CADlB,KAGE,OAAOmD,EAAA,CAAQkG,CAAR,CAJ0B,CApE/B,CA4ENgwB,KAAO,QAAQ,EAAG,CAIhB49B,QAASA,EAAO,CAAC9zD,CAAD,CAAUnD,CAAV,CAAiB,CAC/B,GAAI8B,CAAA,CAAY9B,CAAZ,CAAJ,CAAwB,CACtB,IAAInB,EAAWsE,CAAAtE,SACf,OAAQA,EAAD,GAAcC,EAAd,EAAmCD,CAAnC;AAAgD+I,EAAhD,CAAkEzE,CAAA0Y,YAAlE,CAAwF,EAFzE,CAIxB1Y,CAAA0Y,YAAA,CAAsB7b,CALS,CAHjCi3D,CAAAC,IAAA,CAAc,EACd,OAAOD,EAFS,CAAZ,EA5EA,CAyFNjzD,IAAKA,QAAQ,CAACb,CAAD,CAAUnD,CAAV,CAAiB,CAC5B,GAAI8B,CAAA,CAAY9B,CAAZ,CAAJ,CAAwB,CACtB,GAAImD,CAAAg0D,SAAJ,EAA+C,QAA/C,GAAwBj0D,EAAA,CAAUC,CAAV,CAAxB,CAAyD,CACvD,IAAIc,EAAS,EACbhF,EAAA,CAAQkE,CAAAwjB,QAAR,CAAyB,QAAQ,CAACtV,CAAD,CAAS,CACpCA,CAAA+lD,SAAJ,EACEnzD,CAAAC,KAAA,CAAYmN,CAAArR,MAAZ,EAA4BqR,CAAAgoB,KAA5B,CAFsC,CAA1C,CAKA,OAAyB,EAAlB,GAAAp1B,CAAAtF,OAAA,CAAsB,IAAtB,CAA6BsF,CAPmB,CASzD,MAAOd,EAAAnD,MAVe,CAYxBmD,CAAAnD,MAAA,CAAgBA,CAbY,CAzFxB,CAyGN2H,KAAMA,QAAQ,CAACxE,CAAD,CAAUnD,CAAV,CAAiB,CAC7B,GAAI8B,CAAA,CAAY9B,CAAZ,CAAJ,CACE,MAAOmD,EAAAqY,UAETe,GAAA,CAAapZ,CAAb,CAAsB,CAAA,CAAtB,CACAA,EAAAqY,UAAA,CAAoBxb,CALS,CAzGzB,CAiHNuH,MAAOwX,EAjHD,CAAR,CAkHG,QAAQ,CAACpZ,CAAD,CAAK0D,CAAL,CAAW,CAIpB4D,CAAA+W,UAAA,CAAiB3a,CAAjB,CAAA,CAAyB,QAAQ,CAACwoC,CAAD,CAAOC,CAAP,CAAa,CAAA,IACxCjyC,CADwC,CACrCT,CADqC,CAExCi4D,EAAY,IAAA14D,OAKhB,IAAIgH,CAAJ,GAAWoZ,EAAX,GACoB,CAAd,EAACpZ,CAAAhH,OAAD,EAAoBgH,CAApB,GAA2BmY,EAA3B,EAA6CnY,CAA7C,GAAoD6Y,EAApD,CAAyEqzB,CAAzE,CAAgFC,CADtF,IACgGxzC,CADhG,CAC4G,CAC1G,GAAIqC,CAAA,CAASkxC,CAAT,CAAJ,CAAoB,CAGlB,IAAKhyC,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBw3D,CAAhB,CAA2Bx3D,CAAA,EAA3B,CACE,GAAI8F,CAAJ,GAAW+X,EAAX,CAEE/X,CAAA,CAAG,IAAA,CAAK9F,CAAL,CAAH,CAAYgyC,CAAZ,CAFF,KAIE,KAAKzyC,CAAL,GAAYyyC,EAAZ,CACElsC,CAAA,CAAG,IAAA,CAAK9F,CAAL,CAAH;AAAYT,CAAZ,CAAiByyC,CAAA,CAAKzyC,CAAL,CAAjB,CAKN,OAAO,KAdW,CAkBdY,CAAAA,CAAQ2F,CAAAuxD,IAERr2D,EAAAA,CAAMb,CAAD,GAAW1B,CAAX,CAAwBk5B,IAAAqyB,IAAA,CAASwN,CAAT,CAAoB,CAApB,CAAxB,CAAiDA,CAC1D,KAASz2D,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBC,CAApB,CAAwBD,CAAA,EAAxB,CAA6B,CAC3B,IAAI+tB,EAAYhpB,CAAA,CAAG,IAAA,CAAK/E,CAAL,CAAH,CAAYixC,CAAZ,CAAkBC,CAAlB,CAChB9xC,EAAA,CAAQA,CAAA,CAAQA,CAAR,CAAgB2uB,CAAhB,CAA4BA,CAFT,CAI7B,MAAO3uB,EA1BiG,CA8B1G,IAAKH,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBw3D,CAAhB,CAA2Bx3D,CAAA,EAA3B,CACE8F,CAAA,CAAG,IAAA,CAAK9F,CAAL,CAAH,CAAYgyC,CAAZ,CAAkBC,CAAlB,CAGF,OAAO,KA1CmC,CAJ1B,CAlHtB,CA2NA7yC,EAAA,CAAQ,CACNw3D,WAAYh6C,EADN,CAGNtQ,GAAImrD,QAASA,EAAQ,CAACn0D,CAAD,CAAU2Z,CAAV,CAAgBnX,CAAhB,CAAoBoX,CAApB,CAAiC,CACpD,GAAIhb,CAAA,CAAUgb,CAAV,CAAJ,CAA4B,KAAMd,GAAA,CAAa,QAAb,CAAN,CAG5B,GAAKvB,EAAA,CAAkBvX,CAAlB,CAAL,CAAA,CAIA,IAAI6Z,EAAeC,EAAA,CAAmB9Z,CAAnB,CAA4B,CAAA,CAA5B,CACfwJ,EAAAA,CAASqQ,CAAArQ,OACb,KAAIuQ,EAASF,CAAAE,OAERA,EAAL,GACEA,CADF,CACWF,CAAAE,OADX,CACiC4C,EAAA,CAAmB3c,CAAnB,CAA4BwJ,CAA5B,CADjC,CAQA,KAHI4qD,IAAAA,EAA6B,CAArB,EAAAz6C,CAAAtZ,QAAA,CAAa,GAAb,CAAA,CAAyBsZ,CAAA7Z,MAAA,CAAW,GAAX,CAAzB,CAA2C,CAAC6Z,CAAD,CAAnDy6C,CACA13D,EAAI03D,CAAA54D,OAER,CAAOkB,CAAA,EAAP,CAAA,CAAY,CACVid,CAAA,CAAOy6C,CAAA,CAAM13D,CAAN,CACP,KAAIugB,EAAWzT,CAAA,CAAOmQ,CAAP,CAEVsD,EAAL,GACEzT,CAAA,CAAOmQ,CAAP,CAqBA,CArBe,EAqBf,CAnBa,YAAb,GAAIA,CAAJ,EAAsC,YAAtC,GAA6BA,CAA7B,CAKEw6C,CAAA,CAASn0D,CAAT,CAAkBwyD,EAAA,CAAgB74C,CAAhB,CAAlB,CAAyC,QAAQ,CAACkD,CAAD,CAAQ,CACvD,IAAmBw3C,EAAUx3C,CAAAy3C,cAGxBD,EAAL,GAAiBA,CAAjB,GAHalnB,IAGb,EAHaA,IAG2BonB,SAAA,CAAgBF,CAAhB,CAAxC;AACEt6C,CAAA,CAAO8C,CAAP,CAAclD,CAAd,CALqD,CAAzD,CALF,CAee,UAff,GAeMA,CAfN,EAgBuB3Z,CAtsBzB4iC,iBAAA,CAssBkCjpB,CAtsBlC,CAssBwCI,CAtsBxC,CAAmC,CAAA,CAAnC,CAysBE,CAAAkD,CAAA,CAAWzT,CAAA,CAAOmQ,CAAP,CAtBb,CAwBAsD,EAAAlc,KAAA,CAAcyB,CAAd,CA5BU,CAhBZ,CAJoD,CAHhD,CAuDN2jB,IAAKzM,EAvDC,CAyDN86C,IAAKA,QAAQ,CAACx0D,CAAD,CAAU2Z,CAAV,CAAgBnX,CAAhB,CAAoB,CAC/BxC,CAAA,CAAUkE,CAAA,CAAOlE,CAAP,CAKVA,EAAAgJ,GAAA,CAAW2Q,CAAX,CAAiB86C,QAASA,EAAI,EAAG,CAC/Bz0D,CAAAmmB,IAAA,CAAYxM,CAAZ,CAAkBnX,CAAlB,CACAxC,EAAAmmB,IAAA,CAAYxM,CAAZ,CAAkB86C,CAAlB,CAF+B,CAAjC,CAIAz0D,EAAAgJ,GAAA,CAAW2Q,CAAX,CAAiBnX,CAAjB,CAV+B,CAzD3B,CAsENixB,YAAaA,QAAQ,CAACzzB,CAAD,CAAU00D,CAAV,CAAuB,CAAA,IACtCt0D,CADsC,CAC/BhC,EAAS4B,CAAAyb,WACpBrC,GAAA,CAAapZ,CAAb,CACAlE,EAAA,CAAQ,IAAIgO,CAAJ,CAAW4qD,CAAX,CAAR,CAAiC,QAAQ,CAACn1D,CAAD,CAAO,CAC1Ca,CAAJ,CACEhC,CAAAu2D,aAAA,CAAoBp1D,CAApB,CAA0Ba,CAAA0K,YAA1B,CADF,CAGE1M,CAAA45B,aAAA,CAAoBz4B,CAApB,CAA0BS,CAA1B,CAEFI,EAAA,CAAQb,CANsC,CAAhD,CAH0C,CAtEtC,CAmFN0vC,SAAUA,QAAQ,CAACjvC,CAAD,CAAU,CAC1B,IAAIivC,EAAW,EACfnzC,EAAA,CAAQkE,CAAAwY,WAAR,CAA4B,QAAQ,CAACxY,CAAD,CAAU,CACxCA,CAAAtE,SAAJ,GAAyBC,EAAzB,EACEszC,CAAAluC,KAAA,CAAcf,CAAd,CAF0C,CAA9C,CAKA,OAAOivC,EAPmB,CAnFtB,CA6FNtb,SAAUA,QAAQ,CAAC3zB,CAAD,CAAU,CAC1B,MAAOA,EAAA40D,gBAAP,EAAkC50D,CAAAwY,WAAlC,EAAwD,EAD9B,CA7FtB,CAiGNjU,OAAQA,QAAQ,CAACvE,CAAD,CAAUT,CAAV,CAAgB,CAC9B,IAAI7D,EAAWsE,CAAAtE,SACf,IAAIA,CAAJ;AAAiBC,EAAjB,EA99C8B+f,EA89C9B,GAAsChgB,CAAtC,CAAA,CAEA6D,CAAA,CAAO,IAAIuK,CAAJ,CAAWvK,CAAX,CAEP,KAAS7C,IAAAA,EAAI,CAAJA,CAAOa,EAAKgC,CAAA/D,OAArB,CAAkCkB,CAAlC,CAAsCa,CAAtC,CAA0Cb,CAAA,EAA1C,CAEEsD,CAAA8X,YAAA,CADYvY,CAAA+6C,CAAK59C,CAAL49C,CACZ,CANF,CAF8B,CAjG1B,CA6GNua,QAASA,QAAQ,CAAC70D,CAAD,CAAUT,CAAV,CAAgB,CAC/B,GAAIS,CAAAtE,SAAJ,GAAyBC,EAAzB,CAA4C,CAC1C,IAAIyE,EAAQJ,CAAAyY,WACZ3c,EAAA,CAAQ,IAAIgO,CAAJ,CAAWvK,CAAX,CAAR,CAA0B,QAAQ,CAAC+6C,CAAD,CAAQ,CACxCt6C,CAAA20D,aAAA,CAAqBra,CAArB,CAA4Bl6C,CAA5B,CADwC,CAA1C,CAF0C,CADb,CA7G3B,CAsHN8X,KAAMA,QAAQ,CAAClY,CAAD,CAAU80D,CAAV,CAAoB,CAChCA,CAAA,CAAW5wD,CAAA,CAAO4wD,CAAP,CAAApa,GAAA,CAAoB,CAApB,CAAAv2C,MAAA,EAAA,CAA+B,CAA/B,CACX,KAAI/F,EAAS4B,CAAAyb,WACTrd,EAAJ,EACEA,CAAA45B,aAAA,CAAoB88B,CAApB,CAA8B90D,CAA9B,CAEF80D,EAAAh9C,YAAA,CAAqB9X,CAArB,CANgC,CAtH5B,CA+HNkoB,OAAQpM,EA/HF,CAiINi5C,OAAQA,QAAQ,CAAC/0D,CAAD,CAAU,CACxB8b,EAAA,CAAa9b,CAAb,CAAsB,CAAA,CAAtB,CADwB,CAjIpB,CAqINg1D,MAAOA,QAAQ,CAACh1D,CAAD,CAAUi1D,CAAV,CAAsB,CAAA,IAC/B70D,EAAQJ,CADuB,CACd5B,EAAS4B,CAAAyb,WAC9Bw5C,EAAA,CAAa,IAAInrD,CAAJ,CAAWmrD,CAAX,CAEb,KAJmC,IAI1Bv4D,EAAI,CAJsB,CAInBa,EAAK03D,CAAAz5D,OAArB,CAAwCkB,CAAxC,CAA4Ca,CAA5C,CAAgDb,CAAA,EAAhD,CAAqD,CACnD,IAAI6C,EAAO01D,CAAA,CAAWv4D,CAAX,CACX0B,EAAAu2D,aAAA,CAAoBp1D,CAApB,CAA0Ba,CAAA0K,YAA1B,CACA1K,EAAA,CAAQb,CAH2C,CAJlB,CArI/B,CAgJNue,SAAU7C,EAhJJ,CAiJN8C,YAAalD,EAjJP,CAmJNq6C,YAAaA,QAAQ,CAACl1D,CAAD;AAAU4a,CAAV,CAAoBu6C,CAApB,CAA+B,CAC9Cv6C,CAAJ,EACE9e,CAAA,CAAQ8e,CAAA9a,MAAA,CAAe,GAAf,CAAR,CAA6B,QAAQ,CAACorB,CAAD,CAAY,CAC/C,IAAIkqC,EAAiBD,CACjBx2D,EAAA,CAAYy2D,CAAZ,CAAJ,GACEA,CADF,CACmB,CAACz6C,EAAA,CAAe3a,CAAf,CAAwBkrB,CAAxB,CADpB,CAGA,EAACkqC,CAAA,CAAiBn6C,EAAjB,CAAkCJ,EAAnC,EAAsD7a,CAAtD,CAA+DkrB,CAA/D,CAL+C,CAAjD,CAFgD,CAnJ9C,CA+JN9sB,OAAQA,QAAQ,CAAC4B,CAAD,CAAU,CAExB,MAAO,CADH5B,CACG,CADM4B,CAAAyb,WACN,GA5hDuBC,EA4hDvB,GAAUtd,CAAA1C,SAAV,CAA4D0C,CAA5D,CAAqE,IAFpD,CA/JpB,CAoKN2+C,KAAMA,QAAQ,CAAC/8C,CAAD,CAAU,CACtB,MAAOA,EAAAq1D,mBADe,CApKlB,CAwKN11D,KAAMA,QAAQ,CAACK,CAAD,CAAU4a,CAAV,CAAoB,CAChC,MAAI5a,EAAAs1D,qBAAJ,CACSt1D,CAAAs1D,qBAAA,CAA6B16C,CAA7B,CADT,CAGS,EAJuB,CAxK5B,CAgLNzW,MAAO+U,EAhLD,CAkLNrP,eAAgBA,QAAQ,CAAC7J,CAAD,CAAU6c,CAAV,CAAiB04C,CAAjB,CAAkC,CAAA,IAEpDC,CAFoD,CAE1BC,CAF0B,CAGpDxY,EAAYpgC,CAAAlD,KAAZsjC,EAA0BpgC,CAH0B,CAIpDhD,EAAeC,EAAA,CAAmB9Z,CAAnB,CAInB,IAFIid,CAEJ,EAHIzT,CAGJ,CAHaqQ,CAGb,EAH6BA,CAAArQ,OAG7B,GAFyBA,CAAA,CAAOyzC,CAAP,CAEzB,CAEEuY,CAmBA,CAnBa,CACXnoB,eAAgBA,QAAQ,EAAG,CAAE,IAAArwB,iBAAA,CAAwB,CAAA,CAA1B,CADhB,CAEXF,mBAAoBA,QAAQ,EAAG,CAAE,MAAiC,CAAA,CAAjC,GAAO,IAAAE,iBAAT,CAFpB,CAGXK,yBAA0BA,QAAQ,EAAG,CAAE,IAAAF,4BAAA;AAAmC,CAAA,CAArC,CAH1B,CAIXK,8BAA+BA,QAAQ,EAAG,CAAE,MAA4C,CAAA,CAA5C,GAAO,IAAAL,4BAAT,CAJ/B,CAKXI,gBAAiBhf,CALN,CAMXob,KAAMsjC,CANK,CAOX9P,OAAQntC,CAPG,CAmBb,CARI6c,CAAAlD,KAQJ,GAPE67C,CAOF,CAPe53D,CAAA,CAAO43D,CAAP,CAAmB34C,CAAnB,CAOf,EAHA64C,CAGA,CAHeh0D,EAAA,CAAYub,CAAZ,CAGf,CAFAw4C,CAEA,CAFcF,CAAA,CAAkB,CAACC,CAAD,CAAArzD,OAAA,CAAoBozD,CAApB,CAAlB,CAAyD,CAACC,CAAD,CAEvE,CAAA15D,CAAA,CAAQ45D,CAAR,CAAsB,QAAQ,CAAClzD,CAAD,CAAK,CAC5BgzD,CAAAh4C,8BAAA,EAAL,EACEhb,CAAAG,MAAA,CAAS3C,CAAT,CAAkBy1D,CAAlB,CAF+B,CAAnC,CA7BsD,CAlLpD,CAAR,CAsNG,QAAQ,CAACjzD,CAAD,CAAK0D,CAAL,CAAW,CAIpB4D,CAAA+W,UAAA,CAAiB3a,CAAjB,CAAA,CAAyB,QAAQ,CAACwoC,CAAD,CAAOC,CAAP,CAAagnB,CAAb,CAAmB,CAGlD,IAFA,IAAI94D,CAAJ,CAESH,EAAI,CAFb,CAEgBa,EAAK,IAAA/B,OAArB,CAAkCkB,CAAlC,CAAsCa,CAAtC,CAA0Cb,CAAA,EAA1C,CACMiC,CAAA,CAAY9B,CAAZ,CAAJ,EACEA,CACA,CADQ2F,CAAA,CAAG,IAAA,CAAK9F,CAAL,CAAH,CAAYgyC,CAAZ,CAAkBC,CAAlB,CAAwBgnB,CAAxB,CACR,CAAI/2D,CAAA,CAAU/B,CAAV,CAAJ,GAEEA,CAFF,CAEUqH,CAAA,CAAOrH,CAAP,CAFV,CAFF,EAOEoc,EAAA,CAAepc,CAAf,CAAsB2F,CAAA,CAAG,IAAA,CAAK9F,CAAL,CAAH,CAAYgyC,CAAZ,CAAkBC,CAAlB,CAAwBgnB,CAAxB,CAAtB,CAGJ,OAAO/2D,EAAA,CAAU/B,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,IAdgB,CAkBpDiN,EAAA+W,UAAAve,KAAA,CAAwBwH,CAAA+W,UAAA7X,GACxBc,EAAA+W,UAAA+0C,OAAA,CAA0B9rD,CAAA+W,UAAAsF,IAvBN,CAtNtB,CAiTAhI,GAAA0C,UAAA,CAAoB,CAMlBvC,IAAKA,QAAQ,CAACriB,CAAD;AAAMY,CAAN,CAAa,CACxB,IAAA,CAAKmhB,EAAA,CAAQ/hB,CAAR,CAAa,IAAAa,QAAb,CAAL,CAAA,CAAmCD,CADX,CANR,CAclBsL,IAAKA,QAAQ,CAAClM,CAAD,CAAM,CACjB,MAAO,KAAA,CAAK+hB,EAAA,CAAQ/hB,CAAR,CAAa,IAAAa,QAAb,CAAL,CADU,CAdD,CAsBlBorB,OAAQA,QAAQ,CAACjsB,CAAD,CAAM,CACpB,IAAIY,EAAQ,IAAA,CAAKZ,CAAL,CAAW+hB,EAAA,CAAQ/hB,CAAR,CAAa,IAAAa,QAAb,CAAX,CACZ,QAAO,IAAA,CAAKb,CAAL,CACP,OAAOY,EAHa,CAtBJ,CA6BpB,KAAIia,GAAoB,CAAC,QAAQ,EAAG,CAClC,IAAA4G,KAAA,CAAY,CAAC,QAAQ,EAAG,CACtB,MAAOS,GADe,CAAZ,CADsB,CAAZ,CAAxB,CAoEIQ,GAAU,oCApEd,CAqEIk3C,GAAe,GArEnB,CAsEIC,GAAS,sBAtEb,CAuEIp3C,GAAiB,kCAvErB,CAwEIxT,GAAkB9P,CAAA,CAAO,WAAP,CA8wBtB4L,GAAA0Z,WAAA,CAjwBAK,QAAiB,CAACve,CAAD,CAAK8D,CAAL,CAAeJ,CAAf,CAAqB,CAAA,IAChCua,CAKJ,IAAkB,UAAlB,GAAI,MAAOje,EAAX,CACE,IAAM,EAAAie,CAAA,CAAUje,CAAAie,QAAV,CAAN,CAA6B,CAC3BA,CAAA,CAAU,EACV,IAAIje,CAAAhH,OAAJ,CAAe,CACb,GAAI8K,CAAJ,CAIE,KAHK1K,EAAA,CAASsK,CAAT,CAGC,EAHkBA,CAGlB,GAFJA,CAEI,CAFG1D,CAAA0D,KAEH,EAFcqY,EAAA,CAAO/b,CAAP,CAEd,EAAA0I,EAAA,CAAgB,UAAhB,CACyEhF,CADzE,CAAN,CAGFuY,CAAA,CAASjc,CAAAxD,SAAA,EAAA0F,QAAA,CAAsBga,EAAtB;AAAsC,EAAtC,CACTq3C,EAAA,CAAUt3C,CAAAld,MAAA,CAAaod,EAAb,CACV7iB,EAAA,CAAQi6D,CAAA,CAAQ,CAAR,CAAAj2D,MAAA,CAAiB+1D,EAAjB,CAAR,CAAwC,QAAQ,CAAC7rD,CAAD,CAAM,CACpDA,CAAAtF,QAAA,CAAYoxD,EAAZ,CAAoB,QAAQ,CAAC7e,CAAD,CAAM+e,CAAN,CAAkB9vD,CAAlB,CAAwB,CAClDua,CAAA1f,KAAA,CAAamF,CAAb,CADkD,CAApD,CADoD,CAAtD,CAVa,CAgBf1D,CAAAie,QAAA,CAAaA,CAlBc,CAA7B,CADF,IAqBW5kB,EAAA,CAAQ2G,CAAR,CAAJ,EACLi4C,CAEA,CAFOj4C,CAAAhH,OAEP,CAFmB,CAEnB,CADA0O,EAAA,CAAY1H,CAAA,CAAGi4C,CAAH,CAAZ,CAAsB,IAAtB,CACA,CAAAh6B,CAAA,CAAUje,CAAA3E,MAAA,CAAS,CAAT,CAAY48C,CAAZ,CAHL,EAKLvwC,EAAA,CAAY1H,CAAZ,CAAgB,IAAhB,CAAsB,CAAA,CAAtB,CAEF,OAAOie,EAlC6B,CAkhCtC,KAAIw1C,GAAiB76D,CAAA,CAAO,UAAP,CAArB,CAqDI8X,GAA8BA,QAAQ,EAAG,CAC3C,IAAAwK,KAAA,CAAY,CAAC,IAAD,CAAO,OAAP,CAAgB,QAAQ,CAACvI,CAAD,CAAKoB,CAAL,CAAY,CAC9C2/C,QAASA,EAAa,EAAG,EACzBA,CAAAjf,IAAA,CAAoB14C,CACpB23D,EAAAz2B,MAAA,CAAsBlhC,CACtB23D,EAAAr1C,UAAA,CAA0B,CACxBs1C,IAAK53D,CADmB,CAExBooB,OAAQpoB,CAFgB,CAGxB63D,OAAQ73D,CAHgB,CAIxB83D,MAAO93D,CAJiB,CAKxB+3D,SAAU/3D,CALc,CAMxB+2B,KAAMA,QAAQ,CAACihC,CAAD,CAAOC,CAAP,CAAa,CACzB,MAAOrhD,EAAA,CAAG,QAAQ,CAAC+rB,CAAD,CAAU,CAC1B3qB,CAAA,CAAM,QAAQ,EAAG,CACf2qB,CAAA,EADe,CAAjB,CAD0B,CAArB,CAAA5L,KAAA,CAICihC,CAJD,CAIOC,CAJP,CADkB,CANH,CAc1B,OAAON,EAlBuC,CAApC,CAD+B,CArD7C,CA8EIljD,GAA6BA,QAAQ,EAAG,CAC1C,IAAIgqC,EAAkB,IAAI7+B,EAA1B,CACIs4C,EAAqB,EAEzB,KAAA/4C,KAAA,CAAY,CAAC,iBAAD,CAAoB,YAApB;AACP,QAAQ,CAACzK,CAAD,CAAoBgC,CAApB,CAAgC,CAsB3CyhD,QAASA,EAA0B,CAAC12D,CAAD,CAAU22D,CAAV,CAAezuC,CAAf,CAAuB,CACxD,IAAI5gB,EAAO01C,CAAA70C,IAAA,CAAoBnI,CAApB,CAGNsH,EAAL,GACE01C,CAAA1+B,IAAA,CAAoBte,CAApB,CAA6BsH,CAA7B,CAAoC,EAApC,CACA,CAAAmvD,CAAA11D,KAAA,CAAwBf,CAAxB,CAFF,CAKI22D,EAAJ,EACE76D,CAAA,CAAQ66D,CAAA72D,MAAA,CAAU,GAAV,CAAR,CAAwB,QAAQ,CAACorB,CAAD,CAAY,CACtCA,CAAJ,GACE5jB,CAAA,CAAK4jB,CAAL,CADF,CACoB,CAAA,CADpB,CAD0C,CAA5C,CAOEhD,EAAJ,EACEpsB,CAAA,CAAQosB,CAAApoB,MAAA,CAAa,GAAb,CAAR,CAA2B,QAAQ,CAACorB,CAAD,CAAY,CACzCA,CAAJ,GACE5jB,CAAA,CAAK4jB,CAAL,CADF,CACoB,CAAA,CADpB,CAD6C,CAA/C,CAO8B,EAAhC,CAAIurC,CAAAj7D,OAAJ,EAEAyZ,CAAA4+B,aAAA,CAAwB,QAAQ,EAAG,CACjC/3C,CAAA,CAAQ26D,CAAR,CAA4B,QAAQ,CAACz2D,CAAD,CAAU,CAC5C,IAAIsH,EAAO01C,CAAA70C,IAAA,CAAoBnI,CAApB,CACX,IAAIsH,CAAJ,CAAU,CACR,IAAIsvD,EAAWvzC,EAAA,CAAarjB,CAAAN,KAAA,CAAa,OAAb,CAAb,CAAf,CACI+5B,EAAQ,EADZ,CAEIE,EAAW,EACf79B,EAAA,CAAQwL,CAAR,CAAc,QAAQ,CAACo2B,CAAD,CAASxS,CAAT,CAAoB,CAEpCwS,CAAJ,GADe9f,CAAE,CAAAg5C,CAAA,CAAS1rC,CAAT,CACjB,GACMwS,CAAJ,CACEjE,CADF,GACYA,CAAAj+B,OAAA,CAAe,GAAf,CAAqB,EADjC,EACuC0vB,CADvC,CAGEyO,CAHF,GAGeA,CAAAn+B,OAAA,CAAkB,GAAlB,CAAwB,EAHvC,EAG6C0vB,CAJ/C,CAFwC,CAA1C,CAWApvB,EAAA,CAAQkE,CAAR,CAAiB,QAAQ,CAAC4iB,CAAD,CAAM,CAC7B6W,CAAA,EAAYxe,EAAA,CAAe2H,CAAf,CAAoB6W,CAApB,CACZE,EAAA,EAAY9e,EAAA,CAAkB+H,CAAlB,CAAuB+W,CAAvB,CAFiB,CAA/B,CAIAqjB,EAAA90B,OAAA,CAAuBloB,CAAvB,CAnBQ,CAFkC,CAA9C,CAyBAy2D,EAAAj7D,OAAA,CAA4B,CA1BK,CAAnC,CA3BwD,CArB1D,MAAO,CACLuvB,QAASxsB,CADJ,CAELyK,GAAIzK,CAFC,CAGL4nB,IAAK5nB,CAHA,CAILs4D,IAAKt4D,CAJA,CAMLwC,KAAMA,QAAQ,CAACf,CAAD,CAAU6c,CAAV,CAAiB2G,CAAjB,CAA0BszC,CAA1B,CAAwC,CACpDA,CAAA,EAAuBA,CAAA,EAEvBtzC,EAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAAuzC,KAAA;AAAuB/2D,CAAAwzD,IAAA,CAAYhwC,CAAAuzC,KAAZ,CACvBvzC,EAAAwzC,GAAA,EAAuBh3D,CAAAwzD,IAAA,CAAYhwC,CAAAwzC,GAAZ,CAEvB,EAAIxzC,CAAA1F,SAAJ,EAAwB0F,CAAAzF,YAAxB,GACE24C,CAAA,CAA2B12D,CAA3B,CAAoCwjB,CAAA1F,SAApC,CAAsD0F,CAAAzF,YAAtD,CAGF,OAAO,KAAI9K,CAXyC,CANjD,CADoC,CADjC,CAJ8B,CA9E5C,CAgLIH,GAAmB,CAAC,UAAD,CAAa,QAAQ,CAACjM,CAAD,CAAW,CACrD,IAAI0E,EAAW,IAEf,KAAA0rD,uBAAA,CAA8Bx7D,MAAA6C,OAAA,CAAc,IAAd,CAyC9B,KAAAg9B,SAAA,CAAgBC,QAAQ,CAACr1B,CAAD,CAAO+E,CAAP,CAAgB,CACtC,GAAI/E,CAAJ,EAA+B,GAA/B,GAAYA,CAAAvE,OAAA,CAAY,CAAZ,CAAZ,CACE,KAAMs0D,GAAA,CAAe,SAAf,CAAmF/vD,CAAnF,CAAN,CAGF,IAAIjK,EAAMiK,CAANjK,CAAa,YACjBsP,EAAA0rD,uBAAA,CAAgC/wD,CAAA0f,OAAA,CAAY,CAAZ,CAAhC,CAAA,CAAkD3pB,CAClD4K,EAAAoE,QAAA,CAAiBhP,CAAjB,CAAsBgP,CAAtB,CAPsC,CAwBxC,KAAAisD,gBAAA,CAAuBC,QAAQ,CAACx7B,CAAD,CAAa,CAC1C,GAAyB,CAAzB,GAAI79B,SAAAtC,OAAJ,GACE,IAAA47D,kBADF,CAC4Bz7B,CAAD,WAAuBr6B,OAAvB,CAAiCq6B,CAAjC,CAA8C,IADzE,GAGwB07B,4BAChBn2D,KAAA,CAAmB,IAAAk2D,kBAAAp4D,SAAA,EAAnB,CAJR,CAKM,KAAMi3D,GAAA,CAAe,SAAf;AAxPWqB,YAwPX,CAAN,CAKN,MAAO,KAAAF,kBAXmC,CAc5C,KAAA15C,KAAA,CAAY,CAAC,gBAAD,CAAmB,QAAQ,CAAC3K,CAAD,CAAiB,CACtDwkD,QAASA,EAAS,CAACv3D,CAAD,CAAUw3D,CAAV,CAAyBC,CAAzB,CAAuC,CAIvD,GAAIA,CAAJ,CAAkB,CAChB,IAAIC,CA3PyB,EAAA,CAAA,CACnC,IAASh7D,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CA0PyC+6D,CA1PrBj8D,OAApB,CAAoCkB,CAAA,EAApC,CAAyC,CACvC,IAAIkmB,EAyPmC60C,CAzP7B,CAAQ/6D,CAAR,CACV,IAfei7D,CAef,GAAI/0C,CAAAlnB,SAAJ,CAAmC,CACjC,CAAA,CAAOknB,CAAP,OAAA,CADiC,CAFI,CADN,CAAA,CAAA,IAAA,EAAA,CA4PzB80C,CAAAA,CAAJ,EAAkBA,CAAAj8C,WAAlB,EAA2Ci8C,CAAAE,uBAA3C,GACEH,CADF,CACiB,IADjB,CAFgB,CAMlBA,CAAA,CAAeA,CAAAzC,MAAA,CAAmBh1D,CAAnB,CAAf,CAA6Cw3D,CAAA3C,QAAA,CAAsB70D,CAAtB,CAVU,CAgCzD,MAAO,CA8BLgJ,GAAI+J,CAAA/J,GA9BC,CAwDLmd,IAAKpT,CAAAoT,IAxDA,CA0EL0wC,IAAK9jD,CAAA8jD,IA1EA,CAyGL9rC,QAAShY,CAAAgY,QAzGJ,CAmHLpE,OAAQA,QAAQ,CAACkxC,CAAD,CAAS,CACvBA,CAAA1B,IAAA,EAAc0B,CAAA1B,IAAA,EADS,CAnHpB,CAyIL2B,MAAOA,QAAQ,CAAC93D,CAAD,CAAU5B,CAAV,CAAkB42D,CAAlB,CAAyBxxC,CAAzB,CAAkC,CAC/CplB,CAAA,CAASA,CAAT,EAAmB8F,CAAA,CAAO9F,CAAP,CACnB42D,EAAA,CAAQA,CAAR,EAAiB9wD,CAAA,CAAO8wD,CAAP,CACjB52D,EAAA,CAASA,CAAT,EAAmB42D,CAAA52D,OAAA,EACnBm5D,EAAA,CAAUv3D,CAAV,CAAmB5B,CAAnB,CAA2B42D,CAA3B,CACA,OAAOjiD,EAAAhS,KAAA,CAAoBf,CAApB,CAA6B,OAA7B,CAAsCujB,EAAA,CAAsBC,CAAtB,CAAtC,CALwC,CAzI5C,CAmKLu0C,KAAMA,QAAQ,CAAC/3D,CAAD,CAAU5B,CAAV,CAAkB42D,CAAlB,CAAyBxxC,CAAzB,CAAkC,CAC9CplB,CAAA,CAASA,CAAT,EAAmB8F,CAAA,CAAO9F,CAAP,CACnB42D,EAAA,CAAQA,CAAR,EAAiB9wD,CAAA,CAAO8wD,CAAP,CACjB52D;CAAA,CAASA,CAAT,EAAmB42D,CAAA52D,OAAA,EACnBm5D,EAAA,CAAUv3D,CAAV,CAAmB5B,CAAnB,CAA2B42D,CAA3B,CACA,OAAOjiD,EAAAhS,KAAA,CAAoBf,CAApB,CAA6B,MAA7B,CAAqCujB,EAAA,CAAsBC,CAAtB,CAArC,CALuC,CAnK3C,CAwLLw0C,MAAOA,QAAQ,CAACh4D,CAAD,CAAUwjB,CAAV,CAAmB,CAChC,MAAOzQ,EAAAhS,KAAA,CAAoBf,CAApB,CAA6B,OAA7B,CAAsCujB,EAAA,CAAsBC,CAAtB,CAAtC,CAAsE,QAAQ,EAAG,CACtFxjB,CAAAkoB,OAAA,EADsF,CAAjF,CADyB,CAxL7B,CAgNLpK,SAAUA,QAAQ,CAAC9d,CAAD,CAAUkrB,CAAV,CAAqB1H,CAArB,CAA8B,CAC9CA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAA1F,SAAA,CAAmBqF,EAAA,CAAaK,CAAAy0C,SAAb,CAA+B/sC,CAA/B,CACnB,OAAOnY,EAAAhS,KAAA,CAAoBf,CAApB,CAA6B,UAA7B,CAAyCwjB,CAAzC,CAHuC,CAhN3C,CAwOLzF,YAAaA,QAAQ,CAAC/d,CAAD,CAAUkrB,CAAV,CAAqB1H,CAArB,CAA8B,CACjDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAAzF,YAAA,CAAsBoF,EAAA,CAAaK,CAAAzF,YAAb,CAAkCmN,CAAlC,CACtB,OAAOnY,EAAAhS,KAAA,CAAoBf,CAApB,CAA6B,aAA7B,CAA4CwjB,CAA5C,CAH0C,CAxO9C,CAiQL8oC,SAAUA,QAAQ,CAACtsD,CAAD,CAAU22D,CAAV,CAAezuC,CAAf,CAAuB1E,CAAvB,CAAgC,CAChDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAA1F,SAAA,CAAmBqF,EAAA,CAAaK,CAAA1F,SAAb,CAA+B64C,CAA/B,CACnBnzC,EAAAzF,YAAA,CAAsBoF,EAAA,CAAaK,CAAAzF,YAAb,CAAkCmK,CAAlC,CACtB,OAAOnV,EAAAhS,KAAA,CAAoBf,CAApB,CAA6B,UAA7B,CAAyCwjB,CAAzC,CAJyC,CAjQ7C,CA6RL00C,QAASA,QAAQ,CAACl4D,CAAD,CAAU+2D,CAAV,CAAgBC,CAAhB,CAAoB9rC,CAApB,CAA+B1H,CAA/B,CAAwC,CACvDA,CAAA,CAAUD,EAAA,CAAsBC,CAAtB,CACVA,EAAAuzC,KAAA,CAAevzC,CAAAuzC,KAAA;AAAen5D,CAAA,CAAO4lB,CAAAuzC,KAAP,CAAqBA,CAArB,CAAf,CAA4CA,CAC3DvzC,EAAAwzC,GAAA,CAAexzC,CAAAwzC,GAAA,CAAep5D,CAAA,CAAO4lB,CAAAwzC,GAAP,CAAmBA,CAAnB,CAAf,CAA4CA,CAG3DxzC,EAAA20C,YAAA,CAAsBh1C,EAAA,CAAaK,CAAA20C,YAAb,CADVjtC,CACU,EADG,mBACH,CACtB,OAAOnY,EAAAhS,KAAA,CAAoBf,CAApB,CAA6B,SAA7B,CAAwCwjB,CAAxC,CAPgD,CA7RpD,CAjC+C,CAA5C,CAlFyC,CAAhC,CAhLvB,CAghEIwF,GAAiB5tB,CAAA,CAAO,UAAP,CAQrBgS,GAAAqT,QAAA,CAA2B,CAAC,UAAD,CAAa,uBAAb,CAw3D3B,KAAI2O,GAAgB,uBAApB,CAsGI0M,GAAoB1gC,CAAA,CAAO,aAAP,CAtGxB,CAyGIkvB,GAAY,yBAzGhB,CAgWI8tC,GAAmB,kBAhWvB,CAiWIn6B,GAAgC,CAAC,eAAgBm6B,EAAhB,CAAmC,gBAApC,CAjWpC,CAkWIn7B,GAAa,eAlWjB,CAmWIC,GAAY,CACd,IAAK,IADS,CAEd,IAAK,IAFS,CAnWhB,CAuWIJ,GAAyB,cAvW7B,CAyuDI0H,GAAqB/8B,EAAA+8B,mBAArBA,CAAkDppC,CAAA,CAAO,cAAP,CACtDopC,GAAAS,cAAA,CAAmCozB,QAAQ,CAACniC,CAAD,CAAO,CAChD,KAAMsO,GAAA,CAAmB,UAAnB,CAGsDtO,CAHtD,CAAN,CADgD,CAOlDsO,GAAAC,OAAA,CAA4B6zB,QAAQ,CAACpiC,CAAD;AAAO5V,CAAP,CAAY,CAC9C,MAAOkkB,GAAA,CAAmB,QAAnB,CAA4DtO,CAA5D,CAAkE5V,CAAAthB,SAAA,EAAlE,CADuC,CA/uUT,KAm1VnCu5D,GAAa,iCAn1VsB,CAo1VnCrvB,GAAgB,CAAC,KAAQ,EAAT,CAAa,MAAS,GAAtB,CAA2B,IAAO,EAAlC,CAp1VmB,CAq1VnCuB,GAAkBrvC,CAAA,CAAO,WAAP,CAr1ViB,CA+oWnCo9D,GAAoB,CAMtBpuB,QAAS,CAAA,CANa,CAYtBwD,UAAW,CAAA,CAZW,CAiCtBlB,OAAQf,EAAA,CAAe,UAAf,CAjCc,CAwDtBnnB,IAAKA,QAAQ,CAACA,CAAD,CAAM,CACjB,GAAI7lB,CAAA,CAAY6lB,CAAZ,CAAJ,CACE,MAAO,KAAAomB,MAGT,KAAIrpC,EAAQg3D,EAAAtgD,KAAA,CAAgBuM,CAAhB,CACZ,EAAIjjB,CAAA,CAAM,CAAN,CAAJ,EAAwB,EAAxB,GAAgBijB,CAAhB,GAA4B,IAAAla,KAAA,CAAU1F,kBAAA,CAAmBrD,CAAA,CAAM,CAAN,CAAnB,CAAV,CAC5B,EAAIA,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,EAAoC,EAApC,GAA4BijB,CAA5B,GAAwC,IAAAilB,OAAA,CAAYloC,CAAA,CAAM,CAAN,CAAZ,EAAwB,EAAxB,CACxC,KAAAohB,KAAA,CAAUphB,CAAA,CAAM,CAAN,CAAV,EAAsB,EAAtB,CAEA,OAAO,KAVU,CAxDG,CAuFtBiiC,SAAUmI,EAAA,CAAe,YAAf,CAvFY,CAmHtBhwB,KAAMgwB,EAAA,CAAe,QAAf,CAnHgB,CAuItB1C,KAAM0C,EAAA,CAAe,QAAf,CAvIgB,CAiKtBrhC,KAAMuhC,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAACvhC,CAAD,CAAO,CAClDA,CAAA,CAAgB,IAAT,GAAAA,CAAA,CAAgBA,CAAAtL,SAAA,EAAhB,CAAkC,EACzC,OAAyB,GAAlB,EAAAsL,CAAA3I,OAAA,CAAY,CAAZ,CAAA;AAAwB2I,CAAxB,CAA+B,GAA/B,CAAqCA,CAFM,CAA9C,CAjKgB,CAmNtBm/B,OAAQA,QAAQ,CAACA,CAAD,CAASgvB,CAAT,CAAqB,CACnC,OAAQ36D,SAAAtC,OAAR,EACE,KAAK,CAAL,CACE,MAAO,KAAAguC,SACT,MAAK,CAAL,CACE,GAAI5tC,CAAA,CAAS6tC,CAAT,CAAJ,EAAwB3qC,CAAA,CAAS2qC,CAAT,CAAxB,CACEA,CACA,CADSA,CAAAzqC,SAAA,EACT,CAAA,IAAAwqC,SAAA,CAAgB3kC,EAAA,CAAc4kC,CAAd,CAFlB,KAGO,IAAIjsC,CAAA,CAASisC,CAAT,CAAJ,CACLA,CAMA,CANSlpC,EAAA,CAAKkpC,CAAL,CAAa,EAAb,CAMT,CAJA3tC,CAAA,CAAQ2tC,CAAR,CAAgB,QAAQ,CAAC5sC,CAAD,CAAQZ,CAAR,CAAa,CACtB,IAAb,EAAIY,CAAJ,EAAmB,OAAO4sC,CAAA,CAAOxtC,CAAP,CADS,CAArC,CAIA,CAAA,IAAAutC,SAAA,CAAgBC,CAPX,KASL,MAAMgB,GAAA,CAAgB,UAAhB,CAAN,CAGF,KACF,SACM9rC,CAAA,CAAY85D,CAAZ,CAAJ,EAA8C,IAA9C,GAA+BA,CAA/B,CACE,OAAO,IAAAjvB,SAAA,CAAcC,CAAd,CADT,CAGE,IAAAD,SAAA,CAAcC,CAAd,CAHF,CAG0BgvB,CAxB9B,CA4BA,IAAA/tB,UAAA,EACA,OAAO,KA9B4B,CAnNf,CAyQtB/nB,KAAMkpB,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAAClpB,CAAD,CAAO,CAClD,MAAgB,KAAT,GAAAA,CAAA,CAAgBA,CAAA3jB,SAAA,EAAhB,CAAkC,EADS,CAA9C,CAzQgB,CAqRtB0F,QAASA,QAAQ,EAAG,CAClB,IAAAkpC,UAAA,CAAiB,CAAA,CACjB,OAAO,KAFW,CArRE,CA2RxB9xC,EAAA,CAAQ,CAAC4vC,EAAD,CAA6BN,EAA7B,CAAkDnB,EAAlD,CAAR,CAA6E,QAAQ,CAACyuB,CAAD,CAAW,CAC9FA,CAAA73C,UAAA,CAAqBplB,MAAA6C,OAAA,CAAck6D,EAAd,CAqBrBE;CAAA73C,UAAAuD,MAAA,CAA2Bu0C,QAAQ,CAACv0C,CAAD,CAAQ,CACzC,GAAK5oB,CAAAsC,SAAAtC,OAAL,CACE,MAAO,KAAA+wC,QAGT,IAAImsB,CAAJ,GAAiBzuB,EAAjB,EAAsCG,CAAA,IAAAA,QAAtC,CACE,KAAMK,GAAA,CAAgB,SAAhB,CAAN,CAMF,IAAA8B,QAAA,CAAe5tC,CAAA,CAAYylB,CAAZ,CAAA,CAAqB,IAArB,CAA4BA,CAE3C,OAAO,KAdkC,CAtBmD,CAAhG,CAqiBA,KAAI2qB,GAAe3zC,CAAA,CAAO,QAAP,CAAnB,CAgEI+zC,GAAO4iB,QAAAlxC,UAAAzkB,KAhEX,CAiEIgzC,GAAQ2iB,QAAAlxC,UAAAle,MAjEZ,CAkEI0sC,GAAO0iB,QAAAlxC,UAAAve,KAlEX,CAkFIs2D,GAAY12D,EAAA,EAChBpG,EAAA,CAAQ,+CAAA,MAAA,CAAA,GAAA,CAAR,CAAoE,QAAQ,CAAC61C,CAAD,CAAW,CAAEinB,EAAA,CAAUjnB,CAAV,CAAA,CAAsB,CAAA,CAAxB,CAAvF,CACA,KAAIknB,GAAS,CAAC,EAAI,IAAL,CAAW,EAAI,IAAf,CAAqB,EAAI,IAAzB,CAA+B,EAAI,IAAnC,CAAyC,EAAI,IAA7C,CAAmD,IAAI,GAAvD,CAA4D,IAAI,GAAhE,CAAb,CASI7jB,GAAQA,QAAQ,CAACxxB,CAAD,CAAU,CAC5B,IAAAA,QAAA,CAAeA,CADa,CAI9BwxB,GAAAn0B,UAAA,CAAkB,CAChB1f,YAAa6zC,EADG,CAGhB8jB,IAAKA,QAAQ,CAAC5iC,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAA91B,MAAA;AAAa,CAGb,KAFA,IAAA24D,OAEA,CAFc,EAEd,CAAO,IAAA34D,MAAP,CAAoB,IAAA81B,KAAA16B,OAApB,CAAA,CAEE,GADIwoC,CACA,CADK,IAAA9N,KAAAv0B,OAAA,CAAiB,IAAAvB,MAAjB,CACL,CAAO,GAAP,GAAA4jC,CAAA,EAAqB,GAArB,GAAcA,CAAlB,CACE,IAAAg1B,WAAA,CAAgBh1B,CAAhB,CADF,KAEO,IAAI,IAAAllC,SAAA,CAAcklC,CAAd,CAAJ,EAAgC,GAAhC,GAAyBA,CAAzB,EAAuC,IAAAllC,SAAA,CAAc,IAAAm6D,KAAA,EAAd,CAAvC,CACL,IAAAC,WAAA,EADK,KAEA,IAAI,IAAAC,QAAA,CAAan1B,CAAb,CAAJ,CACL,IAAAo1B,UAAA,EADK,KAEA,IAAI,IAAAC,GAAA,CAAQr1B,CAAR,CAAY,aAAZ,CAAJ,CACL,IAAA+0B,OAAAh4D,KAAA,CAAiB,CAACX,MAAO,IAAAA,MAAR,CAAoB81B,KAAM8N,CAA1B,CAAjB,CACA,CAAA,IAAA5jC,MAAA,EAFK,KAGA,IAAI,IAAAk5D,aAAA,CAAkBt1B,CAAlB,CAAJ,CACL,IAAA5jC,MAAA,EADK,KAEA,CACL,IAAIm5D,EAAMv1B,CAANu1B,CAAW,IAAAN,KAAA,EAAf,CACIO,EAAMD,CAANC,CAAY,IAAAP,KAAA,CAAU,CAAV,CADhB,CAGIQ,EAAMb,EAAA,CAAUW,CAAV,CAHV,CAIIG,EAAMd,EAAA,CAAUY,CAAV,CAFAZ,GAAAe,CAAU31B,CAAV21B,CAGV,EAAWF,CAAX,EAAkBC,CAAlB,EACMv+B,CAEJ,CAFYu+B,CAAA,CAAMF,CAAN,CAAaC,CAAA,CAAMF,CAAN,CAAYv1B,CAErC,CADA,IAAA+0B,OAAAh4D,KAAA,CAAiB,CAACX,MAAO,IAAAA,MAAR,CAAoB81B,KAAMiF,CAA1B,CAAiCwW,SAAU,CAAA,CAA3C,CAAjB,CACA;AAAA,IAAAvxC,MAAA,EAAc+6B,CAAA3/B,OAHhB,EAKE,IAAAo+D,WAAA,CAAgB,4BAAhB,CAA8C,IAAAx5D,MAA9C,CAA0D,IAAAA,MAA1D,CAAuE,CAAvE,CAXG,CAeT,MAAO,KAAA24D,OAjCW,CAHJ,CAuChBM,GAAIA,QAAQ,CAACr1B,CAAD,CAAK61B,CAAL,CAAY,CACtB,MAA8B,EAA9B,GAAOA,CAAAx5D,QAAA,CAAc2jC,CAAd,CADe,CAvCR,CA2ChBi1B,KAAMA,QAAQ,CAACv8D,CAAD,CAAI,CACZ4rC,CAAAA,CAAM5rC,CAAN4rC,EAAW,CACf,OAAQ,KAAAloC,MAAD,CAAckoC,CAAd,CAAoB,IAAApS,KAAA16B,OAApB,CAAwC,IAAA06B,KAAAv0B,OAAA,CAAiB,IAAAvB,MAAjB,CAA8BkoC,CAA9B,CAAxC,CAA6E,CAAA,CAFpE,CA3CF,CAgDhBxpC,SAAUA,QAAQ,CAACklC,CAAD,CAAK,CACrB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EAAiD,QAAjD,GAAmC,MAAOA,EADrB,CAhDP,CAoDhBs1B,aAAcA,QAAQ,CAACt1B,CAAD,CAAK,CAEzB,MAAe,GAAf,GAAQA,CAAR,EAA6B,IAA7B,GAAsBA,CAAtB,EAA4C,IAA5C,GAAqCA,CAArC,EACe,IADf,GACQA,CADR,EAC8B,IAD9B,GACuBA,CADvB,EAC6C,QAD7C,GACsCA,CAHb,CApDX,CA0DhBm1B,QAASA,QAAQ,CAACn1B,CAAD,CAAK,CACpB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EACQ,GADR,EACeA,CADf,EAC2B,GAD3B,EACqBA,CADrB,EAEQ,GAFR,GAEgBA,CAFhB,EAE6B,GAF7B,GAEsBA,CAHF,CA1DN,CAgEhB81B,cAAeA,QAAQ,CAAC91B,CAAD,CAAK,CAC1B,MAAe,GAAf;AAAQA,CAAR,EAA6B,GAA7B,GAAsBA,CAAtB,EAAoC,IAAAllC,SAAA,CAAcklC,CAAd,CADV,CAhEZ,CAoEhB41B,WAAYA,QAAQ,CAAC71C,CAAD,CAAQg2C,CAAR,CAAe5D,CAAf,CAAoB,CACtCA,CAAA,CAAMA,CAAN,EAAa,IAAA/1D,MACT45D,EAAAA,CAAUp7D,CAAA,CAAUm7D,CAAV,CAAA,CACJ,IADI,CACGA,CADH,CACY,GADZ,CACkB,IAAA35D,MADlB,CAC+B,IAD/B,CACsC,IAAA81B,KAAAjF,UAAA,CAAoB8oC,CAApB,CAA2B5D,CAA3B,CADtC,CACwE,GADxE,CAEJ,GAFI,CAEEA,CAChB,MAAMpnB,GAAA,CAAa,QAAb,CACFhrB,CADE,CACKi2C,CADL,CACa,IAAA9jC,KADb,CAAN,CALsC,CApExB,CA6EhBgjC,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAItT,EAAS,EAAb,CACImU,EAAQ,IAAA35D,MACZ,CAAO,IAAAA,MAAP,CAAoB,IAAA81B,KAAA16B,OAApB,CAAA,CAAsC,CACpC,IAAIwoC,EAAK/jC,CAAA,CAAU,IAAAi2B,KAAAv0B,OAAA,CAAiB,IAAAvB,MAAjB,CAAV,CACT,IAAU,GAAV,EAAI4jC,CAAJ,EAAiB,IAAAllC,SAAA,CAAcklC,CAAd,CAAjB,CACE4hB,CAAA,EAAU5hB,CADZ,KAEO,CACL,IAAIi2B,EAAS,IAAAhB,KAAA,EACb,IAAU,GAAV,EAAIj1B,CAAJ,EAAiB,IAAA81B,cAAA,CAAmBG,CAAnB,CAAjB,CACErU,CAAA,EAAU5hB,CADZ,KAEO,IAAI,IAAA81B,cAAA,CAAmB91B,CAAnB,CAAJ,EACHi2B,CADG,EACO,IAAAn7D,SAAA,CAAcm7D,CAAd,CADP,EAEiC,GAFjC,EAEHrU,CAAAjkD,OAAA,CAAcikD,CAAApqD,OAAd,CAA8B,CAA9B,CAFG,CAGLoqD,CAAA,EAAU5hB,CAHL,KAIA,IAAI,CAAA,IAAA81B,cAAA,CAAmB91B,CAAnB,CAAJ;AACDi2B,CADC,EACU,IAAAn7D,SAAA,CAAcm7D,CAAd,CADV,EAEiC,GAFjC,EAEHrU,CAAAjkD,OAAA,CAAcikD,CAAApqD,OAAd,CAA8B,CAA9B,CAFG,CAKL,KALK,KAGL,KAAAo+D,WAAA,CAAgB,kBAAhB,CAXG,CAgBP,IAAAx5D,MAAA,EApBoC,CAsBtC,IAAA24D,OAAAh4D,KAAA,CAAiB,CACfX,MAAO25D,CADQ,CAEf7jC,KAAM0vB,CAFS,CAGfz5C,SAAU,CAAA,CAHK,CAIftP,MAAOirB,MAAA,CAAO89B,CAAP,CAJQ,CAAjB,CAzBqB,CA7EP,CA8GhBwT,UAAWA,QAAQ,EAAG,CAEpB,IADA,IAAIW,EAAQ,IAAA35D,MACZ,CAAO,IAAAA,MAAP,CAAoB,IAAA81B,KAAA16B,OAApB,CAAA,CAAsC,CACpC,IAAIwoC,EAAK,IAAA9N,KAAAv0B,OAAA,CAAiB,IAAAvB,MAAjB,CACT,IAAM,CAAA,IAAA+4D,QAAA,CAAan1B,CAAb,CAAN,EAA0B,CAAA,IAAAllC,SAAA,CAAcklC,CAAd,CAA1B,CACE,KAEF,KAAA5jC,MAAA,EALoC,CAOtC,IAAA24D,OAAAh4D,KAAA,CAAiB,CACfX,MAAO25D,CADQ,CAEf7jC,KAAM,IAAAA,KAAAr4B,MAAA,CAAgBk8D,CAAhB,CAAuB,IAAA35D,MAAvB,CAFS,CAGfmyB,WAAY,CAAA,CAHG,CAAjB,CAToB,CA9GN,CA8HhBymC,WAAYA,QAAQ,CAACkB,CAAD,CAAQ,CAC1B,IAAIH,EAAQ,IAAA35D,MACZ,KAAAA,MAAA,EAIA,KAHA,IAAI6nD,EAAS,EAAb,CACIkS,EAAYD,CADhB,CAEIn2B,EAAS,CAAA,CACb,CAAO,IAAA3jC,MAAP,CAAoB,IAAA81B,KAAA16B,OAApB,CAAA,CAAsC,CACpC,IAAIwoC;AAAK,IAAA9N,KAAAv0B,OAAA,CAAiB,IAAAvB,MAAjB,CAAT,CACA+5D,EAAAA,CAAAA,CAAan2B,CACb,IAAID,CAAJ,CACa,GAAX,GAAIC,CAAJ,EACMo2B,CAKJ,CALU,IAAAlkC,KAAAjF,UAAA,CAAoB,IAAA7wB,MAApB,CAAiC,CAAjC,CAAoC,IAAAA,MAApC,CAAiD,CAAjD,CAKV,CAJKg6D,CAAA74D,MAAA,CAAU,aAAV,CAIL,EAHE,IAAAq4D,WAAA,CAAgB,6BAAhB,CAAgDQ,CAAhD,CAAsD,GAAtD,CAGF,CADA,IAAAh6D,MACA,EADc,CACd,CAAA6nD,CAAA,EAAUoS,MAAAC,aAAA,CAAoBp8D,QAAA,CAASk8D,CAAT,CAAc,EAAd,CAApB,CANZ,EASEnS,CATF,EAQY4Q,EAAA0B,CAAOv2B,CAAPu2B,CARZ,EAS4Bv2B,CAE5B,CAAAD,CAAA,CAAS,CAAA,CAZX,KAaO,IAAW,IAAX,GAAIC,CAAJ,CACLD,CAAA,CAAS,CAAA,CADJ,KAEA,CAAA,GAAIC,CAAJ,GAAWk2B,CAAX,CAAkB,CACvB,IAAA95D,MAAA,EACA,KAAA24D,OAAAh4D,KAAA,CAAiB,CACfX,MAAO25D,CADQ,CAEf7jC,KAAMikC,CAFS,CAGfhuD,SAAU,CAAA,CAHK,CAIftP,MAAOorD,CAJQ,CAAjB,CAMA,OARuB,CAUvBA,CAAA,EAAUjkB,CAVL,CAYP,IAAA5jC,MAAA,EA9BoC,CAgCtC,IAAAw5D,WAAA,CAAgB,oBAAhB,CAAsCG,CAAtC,CAtC0B,CA9HZ,CAwKlB,KAAIlqB,EAAMA,QAAQ,CAACkF,CAAD,CAAQvxB,CAAR,CAAiB,CACjC,IAAAuxB,MAAA,CAAaA,CACb,KAAAvxB,QAAA,CAAeA,CAFkB,CAKnCqsB,EAAAC,QAAA,CAAc,SACdD,EAAA2qB,oBAAA;AAA0B,qBAC1B3qB,EAAAoB,qBAAA,CAA2B,sBAC3BpB,EAAAW,sBAAA,CAA4B,uBAC5BX,EAAAU,kBAAA,CAAwB,mBACxBV,EAAAO,iBAAA,CAAuB,kBACvBP,EAAAK,gBAAA,CAAsB,iBACtBL,EAAAkB,eAAA,CAAqB,gBACrBlB,EAAAe,iBAAA,CAAuB,kBACvBf,EAAAc,WAAA,CAAiB,YACjBd,EAAAG,QAAA,CAAc,SACdH,EAAAqB,gBAAA,CAAsB,iBACtBrB,EAAA4qB,SAAA,CAAe,UACf5qB,EAAAsB,iBAAA,CAAuB,kBACvBtB,EAAAwB,eAAA,CAAqB,gBAGrBxB,EAAA6B,iBAAA,CAAuB,kBAEvB7B;CAAAhvB,UAAA,CAAgB,CACd6uB,IAAKA,QAAQ,CAACxZ,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAA6iC,OAAA,CAAc,IAAAhkB,MAAA+jB,IAAA,CAAe5iC,CAAf,CAEVr5B,EAAAA,CAAQ,IAAA69D,QAAA,EAEe,EAA3B,GAAI,IAAA3B,OAAAv9D,OAAJ,EACE,IAAAo+D,WAAA,CAAgB,wBAAhB,CAA0C,IAAAb,OAAA,CAAY,CAAZ,CAA1C,CAGF,OAAOl8D,EAVW,CADN,CAcd69D,QAASA,QAAQ,EAAG,CAElB,IADA,IAAIh4B,EAAO,EACX,CAAA,CAAA,CAGE,GAFyB,CAEpB,CAFD,IAAAq2B,OAAAv9D,OAEC,EAF0B,CAAA,IAAAy9D,KAAA,CAAU,GAAV,CAAe,GAAf,CAAoB,GAApB,CAAyB,GAAzB,CAE1B,EADHv2B,CAAA3hC,KAAA,CAAU,IAAA45D,oBAAA,EAAV,CACG,CAAA,CAAA,IAAAC,OAAA,CAAY,GAAZ,CAAL,CACE,MAAO,CAAEjhD,KAAMk2B,CAAAC,QAAR,CAAqBpN,KAAMA,CAA3B,CANO,CAdN,CAyBdi4B,oBAAqBA,QAAQ,EAAG,CAC9B,MAAO,CAAEhhD,KAAMk2B,CAAA2qB,oBAAR,CAAiC7+B,WAAY,IAAAk/B,YAAA,EAA7C,CADuB,CAzBlB,CA6BdA,YAAaA,QAAQ,EAAG,CAGtB,IAFA,IAAIxqB,EAAO,IAAA1U,WAAA,EAEX,CAAgB,IAAAi/B,OAAA,CAAY,GAAZ,CAAhB,CAAA,CACEvqB,CAAA;AAAO,IAAA/jC,OAAA,CAAY+jC,CAAZ,CAET,OAAOA,EANe,CA7BV,CAsCd1U,WAAYA,QAAQ,EAAG,CACrB,MAAO,KAAAm/B,WAAA,EADc,CAtCT,CA0CdA,WAAYA,QAAQ,EAAG,CACrB,IAAIh6D,EAAS,IAAAi6D,QAAA,EACT,KAAAH,OAAA,CAAY,GAAZ,CAAJ,GACE95D,CADF,CACW,CAAE6Y,KAAMk2B,CAAAoB,qBAAR,CAAkCZ,KAAMvvC,CAAxC,CAAgDwvC,MAAO,IAAAwqB,WAAA,EAAvD,CAA0EnpB,SAAU,GAApF,CADX,CAGA,OAAO7wC,EALc,CA1CT,CAkDdi6D,QAASA,QAAQ,EAAG,CAClB,IAAI75D,EAAO,IAAA85D,UAAA,EAAX,CACIvqB,CADJ,CAEIC,CACJ,OAAI,KAAAkqB,OAAA,CAAY,GAAZ,CAAJ,GACEnqB,CACI,CADQ,IAAA9U,WAAA,EACR,CAAA,IAAAs/B,QAAA,CAAa,GAAb,CAFN,GAGIvqB,CACO,CADM,IAAA/U,WAAA,EACN,CAAA,CAAEhiB,KAAMk2B,CAAAW,sBAAR,CAAmCtvC,KAAMA,CAAzC,CAA+CuvC,UAAWA,CAA1D,CAAqEC,WAAYA,CAAjF,CAJX,EAOOxvC,CAXW,CAlDN,CAgEd85D,UAAWA,QAAQ,EAAG,CAEpB,IADA,IAAI3qB,EAAO,IAAA6qB,WAAA,EACX,CAAO,IAAAN,OAAA,CAAY,IAAZ,CAAP,CAAA,CACEvqB,CAAA,CAAO,CAAE12B,KAAMk2B,CAAAU,kBAAR;AAA+BoB,SAAU,IAAzC,CAA+CtB,KAAMA,CAArD,CAA2DC,MAAO,IAAA4qB,WAAA,EAAlE,CAET,OAAO7qB,EALa,CAhER,CAwEd6qB,WAAYA,QAAQ,EAAG,CAErB,IADA,IAAI7qB,EAAO,IAAA8qB,SAAA,EACX,CAAO,IAAAP,OAAA,CAAY,IAAZ,CAAP,CAAA,CACEvqB,CAAA,CAAO,CAAE12B,KAAMk2B,CAAAU,kBAAR,CAA+BoB,SAAU,IAAzC,CAA+CtB,KAAMA,CAArD,CAA2DC,MAAO,IAAA6qB,SAAA,EAAlE,CAET,OAAO9qB,EALc,CAxET,CAgFd8qB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAI9qB,EAAO,IAAA+qB,WAAA,EAAX,CACIjgC,CACJ,CAAQA,CAAR,CAAgB,IAAAy/B,OAAA,CAAY,IAAZ,CAAiB,IAAjB,CAAsB,KAAtB,CAA4B,KAA5B,CAAhB,CAAA,CACEvqB,CAAA,CAAO,CAAE12B,KAAMk2B,CAAAO,iBAAR,CAA8BuB,SAAUxW,CAAAjF,KAAxC,CAAoDma,KAAMA,CAA1D,CAAgEC,MAAO,IAAA8qB,WAAA,EAAvE,CAET,OAAO/qB,EANY,CAhFP,CAyFd+qB,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAI/qB,EAAO,IAAAgrB,SAAA,EAAX,CACIlgC,CACJ,CAAQA,CAAR,CAAgB,IAAAy/B,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,IAAtB,CAA4B,IAA5B,CAAhB,CAAA,CACEvqB,CAAA,CAAO,CAAE12B,KAAMk2B,CAAAO,iBAAR,CAA8BuB,SAAUxW,CAAAjF,KAAxC;AAAoDma,KAAMA,CAA1D,CAAgEC,MAAO,IAAA+qB,SAAA,EAAvE,CAET,OAAOhrB,EANc,CAzFT,CAkGdgrB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAIhrB,EAAO,IAAAirB,eAAA,EAAX,CACIngC,CACJ,CAAQA,CAAR,CAAgB,IAAAy/B,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAhB,CAAA,CACEvqB,CAAA,CAAO,CAAE12B,KAAMk2B,CAAAO,iBAAR,CAA8BuB,SAAUxW,CAAAjF,KAAxC,CAAoDma,KAAMA,CAA1D,CAAgEC,MAAO,IAAAgrB,eAAA,EAAvE,CAET,OAAOjrB,EANY,CAlGP,CA2GdirB,eAAgBA,QAAQ,EAAG,CAGzB,IAFA,IAAIjrB,EAAO,IAAAkrB,MAAA,EAAX,CACIpgC,CACJ,CAAQA,CAAR,CAAgB,IAAAy/B,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAoB,GAApB,CAAhB,CAAA,CACEvqB,CAAA,CAAO,CAAE12B,KAAMk2B,CAAAO,iBAAR,CAA8BuB,SAAUxW,CAAAjF,KAAxC,CAAoDma,KAAMA,CAA1D,CAAgEC,MAAO,IAAAirB,MAAA,EAAvE,CAET,OAAOlrB,EANkB,CA3Gb,CAoHdkrB,MAAOA,QAAQ,EAAG,CAChB,IAAIpgC,CACJ,OAAA,CAAKA,CAAL,CAAa,IAAAy/B,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAb,EACS,CAAEjhD,KAAMk2B,CAAAK,gBAAR,CAA6ByB,SAAUxW,CAAAjF,KAAvC,CAAmDjwB,OAAQ,CAAA,CAA3D,CAAiEkqC,SAAU,IAAAorB,MAAA,EAA3E,CADT,CAGS,IAAAC,QAAA,EALO,CApHJ;AA6HdA,QAASA,QAAQ,EAAG,CAClB,IAAIA,CACA,KAAAZ,OAAA,CAAY,GAAZ,CAAJ,EACEY,CACA,CADU,IAAAX,YAAA,EACV,CAAA,IAAAI,QAAA,CAAa,GAAb,CAFF,EAGW,IAAAL,OAAA,CAAY,GAAZ,CAAJ,CACLY,CADK,CACK,IAAAC,iBAAA,EADL,CAEI,IAAAb,OAAA,CAAY,GAAZ,CAAJ,CACLY,CADK,CACK,IAAA3qB,OAAA,EADL,CAEI,IAAA6qB,UAAAv/D,eAAA,CAA8B,IAAA88D,KAAA,EAAA/iC,KAA9B,CAAJ,CACLslC,CADK,CACKj7D,EAAA,CAAK,IAAAm7D,UAAA,CAAe,IAAAT,QAAA,EAAA/kC,KAAf,CAAL,CADL,CAEI,IAAA+iC,KAAA,EAAA1mC,WAAJ,CACLipC,CADK,CACK,IAAAjpC,WAAA,EADL,CAEI,IAAA0mC,KAAA,EAAA9sD,SAAJ,CACLqvD,CADK,CACK,IAAArvD,SAAA,EADL,CAGL,IAAAytD,WAAA,CAAgB,0BAAhB,CAA4C,IAAAX,KAAA,EAA5C,CAIF,KADA,IAAIlc,CACJ,CAAQA,CAAR,CAAe,IAAA6d,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAf,CAAA,CACoB,GAAlB,GAAI7d,CAAA7mB,KAAJ,EACEslC,CACA,CADU,CAAC7hD,KAAMk2B,CAAAkB,eAAP,CAA2BC,OAAQwqB,CAAnC,CAA4C19D,UAAW,IAAA69D,eAAA,EAAvD,CACV;AAAA,IAAAV,QAAA,CAAa,GAAb,CAFF,EAGyB,GAAlB,GAAIle,CAAA7mB,KAAJ,EACLslC,CACA,CADU,CAAE7hD,KAAMk2B,CAAAe,iBAAR,CAA8BC,OAAQ2qB,CAAtC,CAA+C5vB,SAAU,IAAAjQ,WAAA,EAAzD,CAA4EmV,SAAU,CAAA,CAAtF,CACV,CAAA,IAAAmqB,QAAA,CAAa,GAAb,CAFK,EAGkB,GAAlB,GAAIle,CAAA7mB,KAAJ,CACLslC,CADK,CACK,CAAE7hD,KAAMk2B,CAAAe,iBAAR,CAA8BC,OAAQ2qB,CAAtC,CAA+C5vB,SAAU,IAAArZ,WAAA,EAAzD,CAA4Eue,SAAU,CAAA,CAAtF,CADL,CAGL,IAAA8oB,WAAA,CAAgB,YAAhB,CAGJ,OAAO4B,EAjCW,CA7HN,CAiKdlvD,OAAQA,QAAQ,CAACsvD,CAAD,CAAiB,CAC3Bp9C,CAAAA,CAAO,CAACo9C,CAAD,CAGX,KAFA,IAAI96D,EAAS,CAAC6Y,KAAMk2B,CAAAkB,eAAP,CAA2BC,OAAQ,IAAAze,WAAA,EAAnC,CAAsDz0B,UAAW0gB,CAAjE,CAAuElS,OAAQ,CAAA,CAA/E,CAEb,CAAO,IAAAsuD,OAAA,CAAY,GAAZ,CAAP,CAAA,CACEp8C,CAAAzd,KAAA,CAAU,IAAA46B,WAAA,EAAV,CAGF,OAAO76B,EARwB,CAjKnB,CA4Kd66D,eAAgBA,QAAQ,EAAG,CACzB,IAAIn9C,EAAO,EACX,IAA8B,GAA9B,GAAI,IAAAq9C,UAAA,EAAA3lC,KAAJ,EACE,EACE1X,EAAAzd,KAAA,CAAU,IAAA46B,WAAA,EAAV,CADF;MAES,IAAAi/B,OAAA,CAAY,GAAZ,CAFT,CADF,CAKA,MAAOp8C,EAPkB,CA5Kb,CAsLd+T,WAAYA,QAAQ,EAAG,CACrB,IAAI4I,EAAQ,IAAA8/B,QAAA,EACP9/B,EAAA5I,WAAL,EACE,IAAAqnC,WAAA,CAAgB,2BAAhB,CAA6Cz+B,CAA7C,CAEF,OAAO,CAAExhB,KAAMk2B,CAAAc,WAAR,CAAwBzqC,KAAMi1B,CAAAjF,KAA9B,CALc,CAtLT,CA8Ld/pB,SAAUA,QAAQ,EAAG,CAEnB,MAAO,CAAEwN,KAAMk2B,CAAAG,QAAR,CAAqBnzC,MAAO,IAAAo+D,QAAA,EAAAp+D,MAA5B,CAFY,CA9LP,CAmMd4+D,iBAAkBA,QAAQ,EAAG,CAC3B,IAAIrgD,EAAW,EACf,IAA8B,GAA9B,GAAI,IAAAygD,UAAA,EAAA3lC,KAAJ,EACE,EAAG,CACD,GAAI,IAAA+iC,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEF79C,EAAAra,KAAA,CAAc,IAAA46B,WAAA,EAAd,CALC,CAAH,MAMS,IAAAi/B,OAAA,CAAY,GAAZ,CANT,CADF,CASA,IAAAK,QAAA,CAAa,GAAb,CAEA,OAAO,CAAEthD,KAAMk2B,CAAAqB,gBAAR,CAA6B91B,SAAUA,CAAvC,CAboB,CAnMf,CAmNdy1B,OAAQA,QAAQ,EAAG,CAAA,IACbO,EAAa,EADA,CACIxF,CACrB,IAA8B,GAA9B,GAAI,IAAAiwB,UAAA,EAAA3lC,KAAJ,EACE,EAAG,CACD,GAAI,IAAA+iC,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEFrtB;CAAA,CAAW,CAACjyB,KAAMk2B,CAAA4qB,SAAP,CAAqBqB,KAAM,MAA3B,CACP,KAAA7C,KAAA,EAAA9sD,SAAJ,CACEy/B,CAAA3vC,IADF,CACiB,IAAAkQ,SAAA,EADjB,CAEW,IAAA8sD,KAAA,EAAA1mC,WAAJ,CACLqZ,CAAA3vC,IADK,CACU,IAAAs2B,WAAA,EADV,CAGL,IAAAqnC,WAAA,CAAgB,aAAhB,CAA+B,IAAAX,KAAA,EAA/B,CAEF,KAAAgC,QAAA,CAAa,GAAb,CACArvB,EAAA/uC,MAAA,CAAiB,IAAA8+B,WAAA,EACjByV,EAAArwC,KAAA,CAAgB6qC,CAAhB,CAfC,CAAH,MAgBS,IAAAgvB,OAAA,CAAY,GAAZ,CAhBT,CADF,CAmBA,IAAAK,QAAA,CAAa,GAAb,CAEA,OAAO,CAACthD,KAAMk2B,CAAAsB,iBAAP,CAA6BC,WAAYA,CAAzC,CAvBU,CAnNL,CA6OdwoB,WAAYA,QAAQ,CAAC9c,CAAD,CAAM3hB,CAAN,CAAa,CAC/B,KAAM4T,GAAA,CAAa,QAAb,CAEA5T,CAAAjF,KAFA,CAEY4mB,CAFZ,CAEkB3hB,CAAA/6B,MAFlB,CAEgC,CAFhC,CAEoC,IAAA81B,KAFpC,CAE+C,IAAAA,KAAAjF,UAAA,CAAoBkK,CAAA/6B,MAApB,CAF/C,CAAN,CAD+B,CA7OnB,CAmPd66D,QAASA,QAAQ,CAACc,CAAD,CAAK,CACpB,GAA2B,CAA3B,GAAI,IAAAhD,OAAAv9D,OAAJ,CACE,KAAMuzC,GAAA,CAAa,MAAb,CAA0D,IAAA7Y,KAA1D,CAAN,CAGF,IAAIiF,EAAQ,IAAAy/B,OAAA,CAAYmB,CAAZ,CACP5gC;CAAL,EACE,IAAAy+B,WAAA,CAAgB,4BAAhB,CAA+CmC,CAA/C,CAAoD,GAApD,CAAyD,IAAA9C,KAAA,EAAzD,CAEF,OAAO99B,EATa,CAnPR,CA+Pd0gC,UAAWA,QAAQ,EAAG,CACpB,GAA2B,CAA3B,GAAI,IAAA9C,OAAAv9D,OAAJ,CACE,KAAMuzC,GAAA,CAAa,MAAb,CAA0D,IAAA7Y,KAA1D,CAAN,CAEF,MAAO,KAAA6iC,OAAA,CAAY,CAAZ,CAJa,CA/PR,CAsQdE,KAAMA,QAAQ,CAAC8C,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAC7B,MAAO,KAAAC,UAAA,CAAe,CAAf,CAAkBJ,CAAlB,CAAsBC,CAAtB,CAA0BC,CAA1B,CAA8BC,CAA9B,CADsB,CAtQjB,CA0QdC,UAAWA,QAAQ,CAACz/D,CAAD,CAAIq/D,CAAJ,CAAQC,CAAR,CAAYC,CAAZ,CAAgBC,CAAhB,CAAoB,CACrC,GAAI,IAAAnD,OAAAv9D,OAAJ,CAAyBkB,CAAzB,CAA4B,CACtBy+B,CAAAA,CAAQ,IAAA49B,OAAA,CAAYr8D,CAAZ,CACZ,KAAI0/D,EAAIjhC,CAAAjF,KACR,IAAIkmC,CAAJ,GAAUL,CAAV,EAAgBK,CAAhB,GAAsBJ,CAAtB,EAA4BI,CAA5B,GAAkCH,CAAlC,EAAwCG,CAAxC,GAA8CF,CAA9C,EACK,EAACH,CAAD,EAAQC,CAAR,EAAeC,CAAf,EAAsBC,CAAtB,CADL,CAEE,MAAO/gC,EALiB,CAQ5B,MAAO,CAAA,CAT8B,CA1QzB,CAsRdy/B,OAAQA,QAAQ,CAACmB,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAE/B,MAAA,CADI/gC,CACJ,CADY,IAAA89B,KAAA,CAAU8C,CAAV,CAAcC,CAAd,CAAkBC,CAAlB,CAAsBC,CAAtB,CACZ,GACE,IAAAnD,OAAAx4C,MAAA,EACO4a,CAAAA,CAFT,EAIO,CAAA,CANwB,CAtRnB,CAmSdugC,UAAW,CACT,OAAQ,CAAE/hD,KAAMk2B,CAAAG,QAAR,CAAqBnzC,MAAO,CAAA,CAA5B,CADC;AAET,QAAS,CAAE8c,KAAMk2B,CAAAG,QAAR,CAAqBnzC,MAAO,CAAA,CAA5B,CAFA,CAGT,OAAQ,CAAE8c,KAAMk2B,CAAAG,QAAR,CAAqBnzC,MAAO,IAA5B,CAHC,CAIT,UAAa,CAAC8c,KAAMk2B,CAAAG,QAAP,CAAoBnzC,MAAO1B,CAA3B,CAJJ,CAKT,OAAQ,CAACwe,KAAMk2B,CAAAwB,eAAP,CALC,CAnSG,CAschBQ,GAAAhxB,UAAA,CAAwB,CACtBzZ,QAASA,QAAQ,CAACu0B,CAAD,CAAa+Y,CAAb,CAA8B,CAC7C,IAAInyC,EAAO,IAAX,CACImtC,EAAM,IAAAoC,WAAApC,IAAA,CAAoB/T,CAApB,CACV,KAAAvX,MAAA,CAAa,CACXi4C,OAAQ,CADG,CAEX3Y,QAAS,EAFE,CAGXhP,gBAAiBA,CAHN,CAIXlyC,GAAI,CAAC85D,KAAM,EAAP,CAAW55B,KAAM,EAAjB,CAAqB65B,IAAK,EAA1B,CAJO,CAKX1jC,OAAQ,CAACyjC,KAAM,EAAP,CAAW55B,KAAM,EAAjB,CAAqB65B,IAAK,EAA1B,CALG,CAMXvpB,OAAQ,EANG,CAQbvD,EAAA,CAAgCC,CAAhC,CAAqCntC,CAAAsR,QAArC,CACA,KAAIxV,EAAQ,EAAZ,CACIm+D,CACJ,KAAAC,MAAA,CAAa,QACb,IAAKD,CAAL,CAAkB/qB,EAAA,CAAc/B,CAAd,CAAlB,CACE,IAAAtrB,MAAAs4C,UAGA,CAHuB,QAGvB,CAFI57D,CAEJ,CAFa,IAAAu7D,OAAA,EAEb,CADA,IAAAM,QAAA,CAAaH,CAAb,CAAyB17D,CAAzB,CACA,CAAAzC,CAAA,CAAQ,YAAR,CAAuB,IAAAu+D,iBAAA,CAAsB,QAAtB,CAAgC,OAAhC,CAErB3sB;CAAAA,CAAUqB,EAAA,CAAU5B,CAAAhN,KAAV,CACdngC,EAAAk6D,MAAA,CAAa,QACb3gE,EAAA,CAAQm0C,CAAR,CAAiB,QAAQ,CAACoM,CAAD,CAAQpgD,CAAR,CAAa,CACpC,IAAI4gE,EAAQ,IAARA,CAAe5gE,CACnBsG,EAAA6hB,MAAA,CAAWy4C,CAAX,CAAA,CAAoB,CAACP,KAAM,EAAP,CAAW55B,KAAM,EAAjB,CAAqB65B,IAAK,EAA1B,CACpBh6D,EAAA6hB,MAAAs4C,UAAA,CAAuBG,CACvB,KAAIC,EAASv6D,CAAA85D,OAAA,EACb95D,EAAAo6D,QAAA,CAAatgB,CAAb,CAAoBygB,CAApB,CACAv6D,EAAAw6D,QAAA,CAAaD,CAAb,CACAv6D,EAAA6hB,MAAA4uB,OAAAjyC,KAAA,CAAuB87D,CAAvB,CACAxgB,EAAA2gB,QAAA,CAAgB/gE,CARoB,CAAtC,CAUA,KAAAmoB,MAAAs4C,UAAA,CAAuB,IACvB,KAAAD,MAAA,CAAa,MACb,KAAAE,QAAA,CAAajtB,CAAb,CACIutB,EAAAA,CAGF,GAHEA,CAGI,IAAAC,IAHJD,CAGe,GAHfA,CAGqB,IAAAE,OAHrBF,CAGmC,MAHnCA,CAIF,IAAAG,aAAA,EAJEH,CAKF,SALEA,CAKU,IAAAL,iBAAA,CAAsB,IAAtB,CAA4B,SAA5B,CALVK,CAMF5+D,CANE4+D,CAOF,IAAAI,SAAA,EAPEJ,CAQF,YAGEz6D,EAAAA,CAAK,CAAC,IAAIuvD,QAAJ,CAAa,SAAb,CACN,sBADM,CAEN,kBAFM,CAGN,oBAHM,CAIN,WAJM,CAKN,MALM;AAMN,MANM,CAONkL,CAPM,CAAD,EAQH,IAAAppD,QARG,CASHg7B,EATG,CAUHG,EAVG,CAWHE,EAXG,CAYHI,EAZG,CAaHC,EAbG,CAcH5T,CAdG,CAgBT,KAAAvX,MAAA,CAAa,IAAAq4C,MAAb,CAA0BthE,CAC1BqH,EAAAo2B,QAAA,CAAagZ,EAAA,CAAUlC,CAAV,CACbltC,EAAA2J,SAAA,CAAyBujC,CA1EpBvjC,SA2EL,OAAO3J,EAlEsC,CADzB,CAsEtB06D,IAAK,KAtEiB,CAwEtBC,OAAQ,QAxEc,CA0EtBE,SAAUA,QAAQ,EAAG,CACnB,IAAIv8D,EAAS,EAAb,CACI68B,EAAM,IAAAvZ,MAAA4uB,OADV,CAEIzwC,EAAO,IACXzG,EAAA,CAAQ6hC,CAAR,CAAa,QAAQ,CAACz3B,CAAD,CAAO,CAC1BpF,CAAAC,KAAA,CAAY,MAAZ,CAAqBmF,CAArB,CAA4B,GAA5B,CAAkC3D,CAAAq6D,iBAAA,CAAsB12D,CAAtB,CAA4B,GAA5B,CAAlC,CAD0B,CAA5B,CAGIy3B,EAAAniC,OAAJ,EACEsF,CAAAC,KAAA,CAAY,aAAZ,CAA4B48B,CAAAv4B,KAAA,CAAS,GAAT,CAA5B,CAA4C,IAA5C,CAEF,OAAOtE,EAAAsE,KAAA,CAAY,EAAZ,CAVY,CA1EC,CAuFtBw3D,iBAAkBA,QAAQ,CAAC12D,CAAD,CAAOo2B,CAAP,CAAe,CACvC,MAAO,WAAP,CAAqBA,CAArB,CAA8B,IAA9B,CACI,IAAAghC,WAAA,CAAgBp3D,CAAhB,CADJ,CAEI,IAAAw8B,KAAA,CAAUx8B,CAAV,CAFJ,CAGI,IAJmC,CAvFnB,CA8FtBk3D,aAAcA,QAAQ,EAAG,CACvB,IAAIn4D,EAAQ,EAAZ,CACI1C,EAAO,IACXzG,EAAA,CAAQ,IAAAsoB,MAAAs/B,QAAR,CAA4B,QAAQ,CAAC97B,CAAD,CAAKtb,CAAL,CAAa,CAC/CrH,CAAAlE,KAAA,CAAW6mB,CAAX;AAAgB,WAAhB,CAA8BrlB,CAAAwhC,OAAA,CAAYz3B,CAAZ,CAA9B,CAAoD,GAApD,CAD+C,CAAjD,CAGA,OAAIrH,EAAAzJ,OAAJ,CAAyB,MAAzB,CAAkCyJ,CAAAG,KAAA,CAAW,GAAX,CAAlC,CAAoD,GAApD,CACO,EAPgB,CA9FH,CAwGtBk4D,WAAYA,QAAQ,CAACC,CAAD,CAAU,CAC5B,MAAO,KAAAn5C,MAAA,CAAWm5C,CAAX,CAAAjB,KAAA9gE,OAAA,CAAkC,MAAlC,CAA2C,IAAA4oB,MAAA,CAAWm5C,CAAX,CAAAjB,KAAAl3D,KAAA,CAA8B,GAA9B,CAA3C,CAAgF,GAAhF,CAAsF,EADjE,CAxGR,CA4GtBs9B,KAAMA,QAAQ,CAAC66B,CAAD,CAAU,CACtB,MAAO,KAAAn5C,MAAA,CAAWm5C,CAAX,CAAA76B,KAAAt9B,KAAA,CAA8B,EAA9B,CADe,CA5GF,CAgHtBu3D,QAASA,QAAQ,CAACjtB,CAAD,CAAMotB,CAAN,CAAcU,CAAd,CAAsBC,CAAtB,CAAmCn/D,CAAnC,CAA2Co/D,CAA3C,CAA6D,CAAA,IACxErtB,CADwE,CAClEC,CADkE,CAC3D/tC,EAAO,IADoD,CAC9Cic,CAD8C,CACxCmd,CACpC8hC,EAAA,CAAcA,CAAd,EAA6Bl/D,CAC7B,IAAKm/D,CAAAA,CAAL,EAAyB9+D,CAAA,CAAU8wC,CAAAstB,QAAV,CAAzB,CACEF,CACA,CADSA,CACT,EADmB,IAAAT,OAAA,EACnB,CAAA,IAAAsB,IAAA,CAAS,GAAT,CACE,IAAAC,WAAA,CAAgBd,CAAhB,CAAwB,IAAAe,eAAA,CAAoB,GAApB,CAAyBnuB,CAAAstB,QAAzB,CAAxB,CADF,CAEE,IAAAc,YAAA,CAAiBpuB,CAAjB,CAAsBotB,CAAtB,CAA8BU,CAA9B,CAAsCC,CAAtC,CAAmDn/D,CAAnD,CAA2D,CAAA,CAA3D,CAFF,CAFF,KAQA,QAAQoxC,CAAA/1B,KAAR,EACA,KAAKk2B,CAAAC,QAAL,CACEh0C,CAAA,CAAQ4zC,CAAAhN,KAAR,CAAkB,QAAQ,CAAC/G,CAAD,CAAanzB,CAAb,CAAkB,CAC1CjG,CAAAo6D,QAAA,CAAahhC,CAAAA,WAAb;AAAoCxgC,CAApC,CAA+CA,CAA/C,CAA0D,QAAQ,CAAC40C,CAAD,CAAO,CAAEO,CAAA,CAAQP,CAAV,CAAzE,CACIvnC,EAAJ,GAAYknC,CAAAhN,KAAAlnC,OAAZ,CAA8B,CAA9B,CACE+G,CAAAw3C,QAAA,EAAArX,KAAA3hC,KAAA,CAAyBuvC,CAAzB,CAAgC,GAAhC,CADF,CAGE/tC,CAAAw6D,QAAA,CAAazsB,CAAb,CALwC,CAA5C,CAQA,MACF,MAAKT,CAAAG,QAAL,CACErU,CAAA,CAAa,IAAAoI,OAAA,CAAY2L,CAAA7yC,MAAZ,CACb,KAAAg8B,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA8hC,EAAA,CAAY9hC,CAAZ,CACA,MACF,MAAKkU,CAAAK,gBAAL,CACE,IAAAysB,QAAA,CAAajtB,CAAAS,SAAb,CAA2Bh1C,CAA3B,CAAsCA,CAAtC,CAAiD,QAAQ,CAAC40C,CAAD,CAAO,CAAEO,CAAA,CAAQP,CAAV,CAAhE,CACApU,EAAA,CAAa+T,CAAAiC,SAAb,CAA4B,GAA5B,CAAkC,IAAArC,UAAA,CAAegB,CAAf,CAAsB,CAAtB,CAAlC,CAA6D,GAC7D,KAAAzX,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA8hC,EAAA,CAAY9hC,CAAZ,CACA,MACF,MAAKkU,CAAAO,iBAAL,CACE,IAAAusB,QAAA,CAAajtB,CAAAW,KAAb,CAAuBl1C,CAAvB,CAAkCA,CAAlC,CAA6C,QAAQ,CAAC40C,CAAD,CAAO,CAAEM,CAAA,CAAON,CAAT,CAA5D,CACA,KAAA4sB,QAAA,CAAajtB,CAAAY,MAAb,CAAwBn1C,CAAxB,CAAmCA,CAAnC,CAA8C,QAAQ,CAAC40C,CAAD,CAAO,CAAEO,CAAA,CAAQP,CAAV,CAA7D,CAEEpU,EAAA,CADmB,GAArB,GAAI+T,CAAAiC,SAAJ,CACe,IAAAosB,KAAA,CAAU1tB,CAAV,CAAgBC,CAAhB,CADf,CAE4B,GAArB,GAAIZ,CAAAiC,SAAJ,CACQ,IAAArC,UAAA,CAAee,CAAf,CAAqB,CAArB,CADR,CACkCX,CAAAiC,SADlC,CACiD,IAAArC,UAAA,CAAegB,CAAf;AAAsB,CAAtB,CADjD,CAGQ,GAHR,CAGcD,CAHd,CAGqB,GAHrB,CAG2BX,CAAAiC,SAH3B,CAG0C,GAH1C,CAGgDrB,CAHhD,CAGwD,GAE/D,KAAAzX,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA8hC,EAAA,CAAY9hC,CAAZ,CACA,MACF,MAAKkU,CAAAU,kBAAL,CACEusB,CAAA,CAASA,CAAT,EAAmB,IAAAT,OAAA,EACnB95D,EAAAo6D,QAAA,CAAajtB,CAAAW,KAAb,CAAuBysB,CAAvB,CACAv6D,EAAAo7D,IAAA,CAA0B,IAAjB,GAAAjuB,CAAAiC,SAAA,CAAwBmrB,CAAxB,CAAiCv6D,CAAAy7D,IAAA,CAASlB,CAAT,CAA1C,CAA4Dv6D,CAAAu7D,YAAA,CAAiBpuB,CAAAY,MAAjB,CAA4BwsB,CAA5B,CAA5D,CACAW,EAAA,CAAYX,CAAZ,CACA,MACF,MAAKjtB,CAAAW,sBAAL,CACEssB,CAAA,CAASA,CAAT,EAAmB,IAAAT,OAAA,EACnB95D,EAAAo6D,QAAA,CAAajtB,CAAAxuC,KAAb,CAAuB47D,CAAvB,CACAv6D,EAAAo7D,IAAA,CAASb,CAAT,CAAiBv6D,CAAAu7D,YAAA,CAAiBpuB,CAAAe,UAAjB,CAAgCqsB,CAAhC,CAAjB,CAA0Dv6D,CAAAu7D,YAAA,CAAiBpuB,CAAAgB,WAAjB,CAAiCosB,CAAjC,CAA1D,CACAW,EAAA,CAAYX,CAAZ,CACA,MACF,MAAKjtB,CAAAc,WAAL,CACEmsB,CAAA,CAASA,CAAT,EAAmB,IAAAT,OAAA,EACfmB,EAAJ,GACEA,CAAAxhE,QAEA,CAFgC,QAAf,GAAAuG,CAAAk6D,MAAA,CAA0B,GAA1B,CAAgC,IAAA5jC,OAAA,CAAY,IAAAwjC,OAAA,EAAZ,CAA2B,IAAA4B,kBAAA,CAAuB,GAAvB,CAA4BvuB,CAAAxpC,KAA5B,CAA3B,CAAmE,MAAnE,CAEjD,CADAs3D,CAAA1sB,SACA,CADkB,CAAA,CAClB;AAAA0sB,CAAAt3D,KAAA,CAAcwpC,CAAAxpC,KAHhB,CAKA2oC,GAAA,CAAqBa,CAAAxpC,KAArB,CACA3D,EAAAo7D,IAAA,CAAwB,QAAxB,GAASp7D,CAAAk6D,MAAT,EAAoCl6D,CAAAy7D,IAAA,CAASz7D,CAAA07D,kBAAA,CAAuB,GAAvB,CAA4BvuB,CAAAxpC,KAA5B,CAAT,CAApC,CACE,QAAQ,EAAG,CACT3D,CAAAo7D,IAAA,CAAwB,QAAxB,GAASp7D,CAAAk6D,MAAT,EAAoC,GAApC,CAAyC,QAAQ,EAAG,CAC9Cn+D,CAAJ,EAAyB,CAAzB,GAAcA,CAAd,EACEiE,CAAAo7D,IAAA,CACEp7D,CAAAy7D,IAAA,CAASz7D,CAAA27D,kBAAA,CAAuB,GAAvB,CAA4BxuB,CAAAxpC,KAA5B,CAAT,CADF,CAEE3D,CAAAq7D,WAAA,CAAgBr7D,CAAA27D,kBAAA,CAAuB,GAAvB,CAA4BxuB,CAAAxpC,KAA5B,CAAhB,CAAuD,IAAvD,CAFF,CAIF3D,EAAAs2B,OAAA,CAAYikC,CAAZ,CAAoBv6D,CAAA27D,kBAAA,CAAuB,GAAvB,CAA4BxuB,CAAAxpC,KAA5B,CAApB,CANkD,CAApD,CADS,CADb,CAUK42D,CAVL,EAUev6D,CAAAq7D,WAAA,CAAgBd,CAAhB,CAAwBv6D,CAAA27D,kBAAA,CAAuB,GAAvB,CAA4BxuB,CAAAxpC,KAA5B,CAAxB,CAVf,CAYA,EAAI3D,CAAA6hB,MAAAswB,gBAAJ,EAAkCtC,EAAA,CAA8B1C,CAAAxpC,KAA9B,CAAlC,GACE3D,CAAA47D,oBAAA,CAAyBrB,CAAzB,CAEFW,EAAA,CAAYX,CAAZ,CACA,MACF,MAAKjtB,CAAAe,iBAAL,CACEP,CAAA,CAAOmtB,CAAP,GAAkBA,CAAAxhE,QAAlB,CAAmC,IAAAqgE,OAAA,EAAnC,GAAqD,IAAAA,OAAA,EACrDS,EAAA,CAASA,CAAT,EAAmB,IAAAT,OAAA,EACnB95D;CAAAo6D,QAAA,CAAajtB,CAAAmB,OAAb,CAAyBR,CAAzB,CAA+Bl1C,CAA/B,CAA0C,QAAQ,EAAG,CACnDoH,CAAAo7D,IAAA,CAASp7D,CAAA67D,QAAA,CAAa/tB,CAAb,CAAT,CAA6B,QAAQ,EAAG,CACtC,GAAIX,CAAAoB,SAAJ,CACER,CAQA,CARQ/tC,CAAA85D,OAAA,EAQR,CAPA95D,CAAAo6D,QAAA,CAAajtB,CAAA9D,SAAb,CAA2B0E,CAA3B,CAOA,CANA/tC,CAAA87D,wBAAA,CAA6B/tB,CAA7B,CAMA,CALIhyC,CAKJ,EALyB,CAKzB,GALcA,CAKd,EAJEiE,CAAAo7D,IAAA,CAASp7D,CAAAy7D,IAAA,CAASz7D,CAAAs7D,eAAA,CAAoBxtB,CAApB,CAA0BC,CAA1B,CAAT,CAAT,CAAqD/tC,CAAAq7D,WAAA,CAAgBr7D,CAAAs7D,eAAA,CAAoBxtB,CAApB,CAA0BC,CAA1B,CAAhB,CAAkD,IAAlD,CAArD,CAIF,CAFA3U,CAEA,CAFap5B,CAAAysC,iBAAA,CAAsBzsC,CAAAs7D,eAAA,CAAoBxtB,CAApB,CAA0BC,CAA1B,CAAtB,CAEb,CADA/tC,CAAAs2B,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA,CAAI6hC,CAAJ,GACEA,CAAA1sB,SACA,CADkB,CAAA,CAClB,CAAA0sB,CAAAt3D,KAAA,CAAcoqC,CAFhB,CATF,KAaO,CACLzB,EAAA,CAAqBa,CAAA9D,SAAA1lC,KAArB,CACI5H,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,EACEiE,CAAAo7D,IAAA,CAASp7D,CAAAy7D,IAAA,CAASz7D,CAAA27D,kBAAA,CAAuB7tB,CAAvB,CAA6BX,CAAA9D,SAAA1lC,KAA7B,CAAT,CAAT,CAAoE3D,CAAAq7D,WAAA,CAAgBr7D,CAAA27D,kBAAA,CAAuB7tB,CAAvB,CAA6BX,CAAA9D,SAAA1lC,KAA7B,CAAhB,CAAiE,IAAjE,CAApE,CAEFy1B,EAAA,CAAap5B,CAAA27D,kBAAA,CAAuB7tB,CAAvB,CAA6BX,CAAA9D,SAAA1lC,KAA7B,CACb;GAAI3D,CAAA6hB,MAAAswB,gBAAJ,EAAkCtC,EAAA,CAA8B1C,CAAA9D,SAAA1lC,KAA9B,CAAlC,CACEy1B,CAAA,CAAap5B,CAAAysC,iBAAA,CAAsBrT,CAAtB,CAEfp5B,EAAAs2B,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACI6hC,EAAJ,GACEA,CAAA1sB,SACA,CADkB,CAAA,CAClB,CAAA0sB,CAAAt3D,KAAA,CAAcwpC,CAAA9D,SAAA1lC,KAFhB,CAVK,CAePu3D,CAAA,CAAYX,CAAZ,CA7BsC,CAAxC,CADmD,CAArD,CAgCG,CAAEx+D,CAAAA,CAhCL,CAiCA,MACF,MAAKuxC,CAAAkB,eAAL,CACE+rB,CAAA,CAASA,CAAT,EAAmB,IAAAT,OAAA,EACf3sB,EAAApjC,OAAJ,EACEgkC,CASA,CATQ/tC,CAAA+J,OAAA,CAAYojC,CAAAsB,OAAA9qC,KAAZ,CASR,CARAsY,CAQA,CARO,EAQP,CAPA1iB,CAAA,CAAQ4zC,CAAA5xC,UAAR,CAAuB,QAAQ,CAACiyC,CAAD,CAAO,CACpC,IAAII,EAAW5tC,CAAA85D,OAAA,EACf95D,EAAAo6D,QAAA,CAAa5sB,CAAb,CAAmBI,CAAnB,CACA3xB,EAAAzd,KAAA,CAAUovC,CAAV,CAHoC,CAAtC,CAOA,CAFAxU,CAEA,CAFa2U,CAEb,CAFqB,GAErB,CAF2B9xB,CAAApZ,KAAA,CAAU,GAAV,CAE3B,CAF4C,GAE5C,CADA7C,CAAAs2B,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA,CAAA8hC,CAAA,CAAYX,CAAZ,CAVF,GAYExsB,CAGA,CAHQ/tC,CAAA85D,OAAA,EAGR,CAFAhsB,CAEA,CAFO,EAEP,CADA7xB,CACA,CADO,EACP,CAAAjc,CAAAo6D,QAAA,CAAajtB,CAAAsB,OAAb,CAAyBV,CAAzB,CAAgCD,CAAhC,CAAsC,QAAQ,EAAG,CAC/C9tC,CAAAo7D,IAAA,CAASp7D,CAAA67D,QAAA,CAAa9tB,CAAb,CAAT,CAA8B,QAAQ,EAAG,CACvC/tC,CAAA+7D,sBAAA,CAA2BhuB,CAA3B,CACAx0C,EAAA,CAAQ4zC,CAAA5xC,UAAR,CAAuB,QAAQ,CAACiyC,CAAD,CAAO,CACpCxtC,CAAAo6D,QAAA,CAAa5sB,CAAb,CAAmBxtC,CAAA85D,OAAA,EAAnB;AAAkClhE,CAAlC,CAA6C,QAAQ,CAACg1C,CAAD,CAAW,CAC9D3xB,CAAAzd,KAAA,CAAUwB,CAAAysC,iBAAA,CAAsBmB,CAAtB,CAAV,CAD8D,CAAhE,CADoC,CAAtC,CAKIE,EAAAnqC,KAAJ,EACO3D,CAAA6hB,MAAAswB,gBAGL,EAFEnyC,CAAA47D,oBAAA,CAAyB9tB,CAAAr0C,QAAzB,CAEF,CAAA2/B,CAAA,CAAap5B,CAAAg8D,OAAA,CAAYluB,CAAAr0C,QAAZ,CAA0Bq0C,CAAAnqC,KAA1B,CAAqCmqC,CAAAS,SAArC,CAAb,CAAmE,GAAnE,CAAyEtyB,CAAApZ,KAAA,CAAU,GAAV,CAAzE,CAA0F,GAJ5F,EAMEu2B,CANF,CAMe2U,CANf,CAMuB,GANvB,CAM6B9xB,CAAApZ,KAAA,CAAU,GAAV,CAN7B,CAM8C,GAE9Cu2B,EAAA,CAAap5B,CAAAysC,iBAAA,CAAsBrT,CAAtB,CACbp5B,EAAAs2B,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA8hC,EAAA,CAAYX,CAAZ,CAjBuC,CAAzC,CAD+C,CAAjD,CAfF,CAqCA,MACF,MAAKjtB,CAAAoB,qBAAL,CACEX,CAAA,CAAQ,IAAA+rB,OAAA,EACRhsB,EAAA,CAAO,EACP,IAAK,CAAAmB,EAAA,CAAa9B,CAAAW,KAAb,CAAL,CACE,KAAMtB,GAAA,CAAa,MAAb,CAAN,CAEF,IAAA4tB,QAAA,CAAajtB,CAAAW,KAAb,CAAuBl1C,CAAvB,CAAkCk1C,CAAlC,CAAwC,QAAQ,EAAG,CACjD9tC,CAAAo7D,IAAA,CAASp7D,CAAA67D,QAAA,CAAa/tB,CAAAr0C,QAAb,CAAT,CAAqC,QAAQ,EAAG,CAC9CuG,CAAAo6D,QAAA,CAAajtB,CAAAY,MAAb,CAAwBA,CAAxB,CACA/tC,EAAA47D,oBAAA,CAAyB57D,CAAAg8D,OAAA,CAAYluB,CAAAr0C,QAAZ,CAA0Bq0C,CAAAnqC,KAA1B,CAAqCmqC,CAAAS,SAArC,CAAzB,CACAnV,EAAA,CAAap5B,CAAAg8D,OAAA,CAAYluB,CAAAr0C,QAAZ;AAA0Bq0C,CAAAnqC,KAA1B,CAAqCmqC,CAAAS,SAArC,CAAb,CAAmEpB,CAAAiC,SAAnE,CAAkFrB,CAClF/tC,EAAAs2B,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA8hC,EAAA,CAAYX,CAAZ,EAAsBnhC,CAAtB,CAL8C,CAAhD,CADiD,CAAnD,CAQG,CARH,CASA,MACF,MAAKkU,CAAAqB,gBAAL,CACE1yB,CAAA,CAAO,EACP1iB,EAAA,CAAQ4zC,CAAAt0B,SAAR,CAAsB,QAAQ,CAAC20B,CAAD,CAAO,CACnCxtC,CAAAo6D,QAAA,CAAa5sB,CAAb,CAAmBxtC,CAAA85D,OAAA,EAAnB,CAAkClhE,CAAlC,CAA6C,QAAQ,CAACg1C,CAAD,CAAW,CAC9D3xB,CAAAzd,KAAA,CAAUovC,CAAV,CAD8D,CAAhE,CADmC,CAArC,CAKAxU,EAAA,CAAa,GAAb,CAAmBnd,CAAApZ,KAAA,CAAU,GAAV,CAAnB,CAAoC,GACpC,KAAAyzB,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA8hC,EAAA,CAAY9hC,CAAZ,CACA,MACF,MAAKkU,CAAAsB,iBAAL,CACE3yB,CAAA,CAAO,EACP1iB,EAAA,CAAQ4zC,CAAA0B,WAAR,CAAwB,QAAQ,CAACxF,CAAD,CAAW,CACzCrpC,CAAAo6D,QAAA,CAAa/wB,CAAA/uC,MAAb,CAA6B0F,CAAA85D,OAAA,EAA7B,CAA4ClhE,CAA5C,CAAuD,QAAQ,CAAC40C,CAAD,CAAO,CACpEvxB,CAAAzd,KAAA,CAAUwB,CAAAwhC,OAAA,CACN6H,CAAA3vC,IAAA0d,KAAA,GAAsBk2B,CAAAc,WAAtB,CAAuC/E,CAAA3vC,IAAAiK,KAAvC,CACG,EADH,CACQ0lC,CAAA3vC,IAAAY,MAFF,CAAV,CAGI,GAHJ,CAGUkzC,CAHV,CADoE,CAAtE,CADyC,CAA3C,CAQApU,EAAA,CAAa,GAAb,CAAmBnd,CAAApZ,KAAA,CAAU,GAAV,CAAnB,CAAoC,GACpC,KAAAyzB,OAAA,CAAYikC,CAAZ,CAAoBnhC,CAApB,CACA8hC,EAAA,CAAY9hC,CAAZ,CACA,MACF,MAAKkU,CAAAwB,eAAL,CACE,IAAAxY,OAAA,CAAYikC,CAAZ,CAAoB,GAApB,CACAW,EAAA,CAAY,GAAZ,CACA,MACF;KAAK5tB,CAAA6B,iBAAL,CACE,IAAA7Y,OAAA,CAAYikC,CAAZ,CAAoB,GAApB,CACA,CAAAW,CAAA,CAAY,GAAZ,CApMF,CAX4E,CAhHxD,CAoUtBQ,kBAAmBA,QAAQ,CAACj+D,CAAD,CAAU4rC,CAAV,CAAoB,CAC7C,IAAI3vC,EAAM+D,CAAN/D,CAAgB,GAAhBA,CAAsB2vC,CAA1B,CACI2wB,EAAM,IAAAxiB,QAAA,EAAAwiB,IACLA,EAAApgE,eAAA,CAAmBF,CAAnB,CAAL,GACEsgE,CAAA,CAAItgE,CAAJ,CADF,CACa,IAAAogE,OAAA,CAAY,CAAA,CAAZ,CAAmBr8D,CAAnB,CAA6B,KAA7B,CAAqC,IAAA+jC,OAAA,CAAY6H,CAAZ,CAArC,CAA6D,MAA7D,CAAsE5rC,CAAtE,CAAgF,GAAhF,CADb,CAGA,OAAOu8D,EAAA,CAAItgE,CAAJ,CANsC,CApUzB,CA6UtB48B,OAAQA,QAAQ,CAACjR,CAAD,CAAK/qB,CAAL,CAAY,CAC1B,GAAK+qB,CAAL,CAEA,MADA,KAAAmyB,QAAA,EAAArX,KAAA3hC,KAAA,CAAyB6mB,CAAzB,CAA6B,GAA7B,CAAkC/qB,CAAlC,CAAyC,GAAzC,CACO+qB,CAAAA,CAHmB,CA7UN,CAmVtBtb,OAAQA,QAAQ,CAACkyD,CAAD,CAAa,CACtB,IAAAp6C,MAAAs/B,QAAAvnD,eAAA,CAAkCqiE,CAAlC,CAAL,GACE,IAAAp6C,MAAAs/B,QAAA,CAAmB8a,CAAnB,CADF,CACmC,IAAAnC,OAAA,CAAY,CAAA,CAAZ,CADnC,CAGA,OAAO,KAAAj4C,MAAAs/B,QAAA,CAAmB8a,CAAnB,CAJoB,CAnVP,CA0VtBlvB,UAAWA,QAAQ,CAAC1nB,CAAD,CAAK62C,CAAL,CAAmB,CACpC,MAAO,YAAP,CAAsB72C,CAAtB,CAA2B,GAA3B,CAAiC,IAAAmc,OAAA,CAAY06B,CAAZ,CAAjC,CAA6D,GADzB,CA1VhB,CA8VtBV,KAAMA,QAAQ,CAAC1tB,CAAD,CAAOC,CAAP,CAAc,CAC1B,MAAO,OAAP;AAAiBD,CAAjB,CAAwB,GAAxB,CAA8BC,CAA9B,CAAsC,GADZ,CA9VN,CAkWtBysB,QAASA,QAAQ,CAACn1C,CAAD,CAAK,CACpB,IAAAmyB,QAAA,EAAArX,KAAA3hC,KAAA,CAAyB,SAAzB,CAAoC6mB,CAApC,CAAwC,GAAxC,CADoB,CAlWA,CAsWtB+1C,IAAKA,QAAQ,CAACz8D,CAAD,CAAOuvC,CAAP,CAAkBC,CAAlB,CAA8B,CACzC,GAAa,CAAA,CAAb,GAAIxvC,CAAJ,CACEuvC,CAAA,EADF,KAEO,CACL,IAAI/N,EAAO,IAAAqX,QAAA,EAAArX,KACXA,EAAA3hC,KAAA,CAAU,KAAV,CAAiBG,CAAjB,CAAuB,IAAvB,CACAuvC,EAAA,EACA/N,EAAA3hC,KAAA,CAAU,GAAV,CACI2vC,EAAJ,GACEhO,CAAA3hC,KAAA,CAAU,OAAV,CAEA,CADA2vC,CAAA,EACA,CAAAhO,CAAA3hC,KAAA,CAAU,GAAV,CAHF,CALK,CAHkC,CAtWrB,CAsXtBi9D,IAAKA,QAAQ,CAACriC,CAAD,CAAa,CACxB,MAAO,IAAP,CAAcA,CAAd,CAA2B,GADH,CAtXJ,CA0XtByiC,QAASA,QAAQ,CAACziC,CAAD,CAAa,CAC5B,MAAOA,EAAP,CAAoB,QADQ,CA1XR,CA8XtBuiC,kBAAmBA,QAAQ,CAAC7tB,CAAD,CAAOC,CAAP,CAAc,CACvC,MAAOD,EAAP,CAAc,GAAd,CAAoBC,CADmB,CA9XnB,CAkYtButB,eAAgBA,QAAQ,CAACxtB,CAAD,CAAOC,CAAP,CAAc,CACpC,MAAOD,EAAP,CAAc,GAAd,CAAoBC,CAApB,CAA4B,GADQ,CAlYhB,CAsYtBiuB,OAAQA,QAAQ,CAACluB,CAAD,CAAOC,CAAP,CAAcQ,CAAd,CAAwB,CACtC,MAAIA,EAAJ,CAAqB,IAAA+sB,eAAA,CAAoBxtB,CAApB,CAA0BC,CAA1B,CAArB,CACO,IAAA4tB,kBAAA,CAAuB7tB,CAAvB,CAA6BC,CAA7B,CAF+B,CAtYlB,CA2YtB6tB,oBAAqBA,QAAQ,CAACrZ,CAAD,CAAO,CAClC,IAAA/K,QAAA,EAAArX,KAAA3hC,KAAA,CAAyB,IAAAiuC,iBAAA,CAAsB8V,CAAtB,CAAzB;AAAsD,GAAtD,CADkC,CA3Yd,CA+YtBuZ,wBAAyBA,QAAQ,CAACvZ,CAAD,CAAO,CACtC,IAAA/K,QAAA,EAAArX,KAAA3hC,KAAA,CAAyB,IAAA8tC,qBAAA,CAA0BiW,CAA1B,CAAzB,CAA0D,GAA1D,CADsC,CA/YlB,CAmZtBwZ,sBAAuBA,QAAQ,CAACxZ,CAAD,CAAO,CACpC,IAAA/K,QAAA,EAAArX,KAAA3hC,KAAA,CAAyB,IAAAmuC,mBAAA,CAAwB4V,CAAxB,CAAzB,CAAwD,GAAxD,CADoC,CAnZhB,CAuZtB9V,iBAAkBA,QAAQ,CAAC8V,CAAD,CAAO,CAC/B,MAAO,mBAAP,CAA6BA,CAA7B,CAAoC,QADL,CAvZX,CA2ZtBjW,qBAAsBA,QAAQ,CAACiW,CAAD,CAAO,CACnC,MAAO,uBAAP,CAAiCA,CAAjC,CAAwC,QADL,CA3Zf,CA+ZtB5V,mBAAoBA,QAAQ,CAAC4V,CAAD,CAAO,CACjC,MAAO,qBAAP,CAA+BA,CAA/B,CAAsC,QADL,CA/Zb,CAmatBgZ,YAAaA,QAAQ,CAACpuB,CAAD,CAAMotB,CAAN,CAAcU,CAAd,CAAsBC,CAAtB,CAAmCn/D,CAAnC,CAA2Co/D,CAA3C,CAA6D,CAChF,IAAIn7D,EAAO,IACX,OAAO,SAAQ,EAAG,CAChBA,CAAAo6D,QAAA,CAAajtB,CAAb,CAAkBotB,CAAlB,CAA0BU,CAA1B,CAAkCC,CAAlC,CAA+Cn/D,CAA/C,CAAuDo/D,CAAvD,CADgB,CAF8D,CAna5D,CA0atBE,WAAYA,QAAQ,CAACh2C,CAAD;AAAK/qB,CAAL,CAAY,CAC9B,IAAI0F,EAAO,IACX,OAAO,SAAQ,EAAG,CAChBA,CAAAs2B,OAAA,CAAYjR,CAAZ,CAAgB/qB,CAAhB,CADgB,CAFY,CA1aV,CAibtB6hE,kBAAmB,gBAjbG,CAmbtBC,eAAgBA,QAAQ,CAACC,CAAD,CAAI,CAC1B,MAAO,KAAP,CAAe/gE,CAAC,MAADA,CAAU+gE,CAAAC,WAAA,CAAa,CAAb,CAAA7/D,SAAA,CAAyB,EAAzB,CAAVnB,OAAA,CAA+C,EAA/C,CADW,CAnbN,CAubtBkmC,OAAQA,QAAQ,CAAClnC,CAAD,CAAQ,CACtB,GAAIjB,CAAA,CAASiB,CAAT,CAAJ,CAAqB,MAAO,GAAP,CAAaA,CAAA6H,QAAA,CAAc,IAAAg6D,kBAAd,CAAsC,IAAAC,eAAtC,CAAb,CAA0E,GAC/F,IAAI7/D,CAAA,CAASjC,CAAT,CAAJ,CAAqB,MAAOA,EAAAmC,SAAA,EAC5B,IAAc,CAAA,CAAd,GAAInC,CAAJ,CAAoB,MAAO,MAC3B,IAAc,CAAA,CAAd,GAAIA,CAAJ,CAAqB,MAAO,OAC5B,IAAc,IAAd,GAAIA,CAAJ,CAAoB,MAAO,MAC3B,IAAqB,WAArB,GAAI,MAAOA,EAAX,CAAkC,MAAO,WAEzC,MAAMkyC,GAAA,CAAa,KAAb,CAAN,CARsB,CAvbF,CAkctBstB,OAAQA,QAAQ,CAACyC,CAAD,CAAOC,CAAP,CAAa,CAC3B,IAAIn3C,EAAK,GAALA,CAAY,IAAAxD,MAAAi4C,OAAA,EACXyC,EAAL,EACE,IAAA/kB,QAAA,EAAAuiB,KAAAv7D,KAAA,CAAyB6mB,CAAzB;CAA+Bm3C,CAAA,CAAO,GAAP,CAAaA,CAAb,CAAoB,EAAnD,EAEF,OAAOn3C,EALoB,CAlcP,CA0ctBmyB,QAASA,QAAQ,EAAG,CAClB,MAAO,KAAA31B,MAAA,CAAW,IAAAA,MAAAs4C,UAAX,CADW,CA1cE,CAqdxB3qB,GAAAlxB,UAAA,CAA2B,CACzBzZ,QAASA,QAAQ,CAACu0B,CAAD,CAAa+Y,CAAb,CAA8B,CAC7C,IAAInyC,EAAO,IAAX,CACImtC,EAAM,IAAAoC,WAAApC,IAAA,CAAoB/T,CAApB,CACV,KAAAA,WAAA,CAAkBA,CAClB,KAAA+Y,gBAAA,CAAuBA,CACvBjF,EAAA,CAAgCC,CAAhC,CAAqCntC,CAAAsR,QAArC,CACA,KAAI2oD,CAAJ,CACI3jC,CACJ,IAAK2jC,CAAL,CAAkB/qB,EAAA,CAAc/B,CAAd,CAAlB,CACE7W,CAAA,CAAS,IAAA8jC,QAAA,CAAaH,CAAb,CAEPvsB,EAAAA,CAAUqB,EAAA,CAAU5B,CAAAhN,KAAV,CACd,KAAIsQ,CACA/C,EAAJ,GACE+C,CACA,CADS,EACT,CAAAl3C,CAAA,CAAQm0C,CAAR,CAAiB,QAAQ,CAACoM,CAAD,CAAQpgD,CAAR,CAAa,CACpC,IAAIsR,EAAQhL,CAAAo6D,QAAA,CAAatgB,CAAb,CACZA,EAAA9uC,MAAA,CAAcA,CACdylC,EAAAjyC,KAAA,CAAYwM,CAAZ,CACA8uC,EAAA2gB,QAAA,CAAgB/gE,CAJoB,CAAtC,CAFF,CASA,KAAI06B,EAAc,EAClB76B,EAAA,CAAQ4zC,CAAAhN,KAAR,CAAkB,QAAQ,CAAC/G,CAAD,CAAa,CACrChF,CAAA51B,KAAA,CAAiBwB,CAAAo6D,QAAA,CAAahhC,CAAAA,WAAb,CAAjB,CADqC,CAAvC,CAGIn5B,EAAAA,CAAyB,CAApB,GAAAktC,CAAAhN,KAAAlnC,OAAA,CAAwB,QAAQ,EAAG,EAAnC,CACoB,CAApB,GAAAk0C,CAAAhN,KAAAlnC,OAAA,CAAwBm7B,CAAA,CAAY,CAAZ,CAAxB,CACA,QAAQ,CAACxvB,CAAD,CAAQqZ,CAAR,CAAgB,CACtB,IAAI+X,CACJz8B,EAAA,CAAQ66B,CAAR,CAAqB,QAAQ,CAACoO,CAAD,CAAM,CACjCxM,CAAA;AAAYwM,CAAA,CAAI59B,CAAJ,CAAWqZ,CAAX,CADqB,CAAnC,CAGA,OAAO+X,EALe,CAO7BM,EAAJ,GACEr2B,CAAAq2B,OADF,CACcmmC,QAAQ,CAAC73D,CAAD,CAAQtK,CAAR,CAAe2jB,CAAf,CAAuB,CACzC,MAAOqY,EAAA,CAAO1xB,CAAP,CAAcqZ,CAAd,CAAsB3jB,CAAtB,CADkC,CAD7C,CAKIm2C,EAAJ,GACExwC,CAAAwwC,OADF,CACcA,CADd,CAGAxwC,EAAAo2B,QAAA,CAAagZ,EAAA,CAAUlC,CAAV,CACbltC,EAAA2J,SAAA,CAAyBujC,CA1gBpBvjC,SA2gBL,OAAO3J,EA7CsC,CADtB,CAiDzBm6D,QAASA,QAAQ,CAACjtB,CAAD,CAAM1zC,CAAN,CAAesC,CAAf,CAAuB,CAAA,IAClC+xC,CADkC,CAC5BC,CAD4B,CACrB/tC,EAAO,IADc,CACRic,CAC9B,IAAIkxB,CAAAniC,MAAJ,CACE,MAAO,KAAAylC,OAAA,CAAYtD,CAAAniC,MAAZ,CAAuBmiC,CAAAstB,QAAvB,CAET,QAAQttB,CAAA/1B,KAAR,EACA,KAAKk2B,CAAAG,QAAL,CACE,MAAO,KAAAnzC,MAAA,CAAW6yC,CAAA7yC,MAAX,CAAsBb,CAAtB,CACT,MAAK6zC,CAAAK,gBAAL,CAEE,MADAI,EACO,CADC,IAAAqsB,QAAA,CAAajtB,CAAAS,SAAb,CACD,CAAA,IAAA,CAAK,OAAL,CAAeT,CAAAiC,SAAf,CAAA,CAA6BrB,CAA7B,CAAoCt0C,CAApC,CACT,MAAK6zC,CAAAO,iBAAL,CAGE,MAFAC,EAEO,CAFA,IAAAssB,QAAA,CAAajtB,CAAAW,KAAb,CAEA,CADPC,CACO,CADC,IAAAqsB,QAAA,CAAajtB,CAAAY,MAAb,CACD,CAAA,IAAA,CAAK,QAAL,CAAgBZ,CAAAiC,SAAhB,CAAA,CAA8BtB,CAA9B,CAAoCC,CAApC,CAA2Ct0C,CAA3C,CACT,MAAK6zC,CAAAU,kBAAL,CAGE,MAFAF,EAEO;AAFA,IAAAssB,QAAA,CAAajtB,CAAAW,KAAb,CAEA,CADPC,CACO,CADC,IAAAqsB,QAAA,CAAajtB,CAAAY,MAAb,CACD,CAAA,IAAA,CAAK,QAAL,CAAgBZ,CAAAiC,SAAhB,CAAA,CAA8BtB,CAA9B,CAAoCC,CAApC,CAA2Ct0C,CAA3C,CACT,MAAK6zC,CAAAW,sBAAL,CACE,MAAO,KAAA,CAAK,WAAL,CAAA,CACL,IAAAmsB,QAAA,CAAajtB,CAAAxuC,KAAb,CADK,CAEL,IAAAy7D,QAAA,CAAajtB,CAAAe,UAAb,CAFK,CAGL,IAAAksB,QAAA,CAAajtB,CAAAgB,WAAb,CAHK,CAIL10C,CAJK,CAMT,MAAK6zC,CAAAc,WAAL,CAEE,MADA9B,GAAA,CAAqBa,CAAAxpC,KAArB,CAA+B3D,CAAAo5B,WAA/B,CACO,CAAAp5B,CAAAgwB,WAAA,CAAgBmd,CAAAxpC,KAAhB,CACgB3D,CAAAmyC,gBADhB,EACwCtC,EAAA,CAA8B1C,CAAAxpC,KAA9B,CADxC,CAEgBlK,CAFhB,CAEyBsC,CAFzB,CAEiCiE,CAAAo5B,WAFjC,CAGT,MAAKkU,CAAAe,iBAAL,CAOE,MANAP,EAMO,CANA,IAAAssB,QAAA,CAAajtB,CAAAmB,OAAb,CAAyB,CAAA,CAAzB,CAAgC,CAAEvyC,CAAAA,CAAlC,CAMA,CALFoxC,CAAAoB,SAKE,GAJLjC,EAAA,CAAqBa,CAAA9D,SAAA1lC,KAArB,CAAwC3D,CAAAo5B,WAAxC,CACA,CAAA2U,CAAA,CAAQZ,CAAA9D,SAAA1lC,KAGH,EADHwpC,CAAAoB,SACG,GADWR,CACX,CADmB,IAAAqsB,QAAA,CAAajtB,CAAA9D,SAAb,CACnB,EAAA8D,CAAAoB,SAAA;AACL,IAAA+sB,eAAA,CAAoBxtB,CAApB,CAA0BC,CAA1B,CAAiCt0C,CAAjC,CAA0CsC,CAA1C,CAAkDiE,CAAAo5B,WAAlD,CADK,CAEL,IAAAuiC,kBAAA,CAAuB7tB,CAAvB,CAA6BC,CAA7B,CAAoC/tC,CAAAmyC,gBAApC,CAA0D14C,CAA1D,CAAmEsC,CAAnE,CAA2EiE,CAAAo5B,WAA3E,CACJ,MAAKkU,CAAAkB,eAAL,CAOE,MANAvyB,EAMO,CANA,EAMA,CALP1iB,CAAA,CAAQ4zC,CAAA5xC,UAAR,CAAuB,QAAQ,CAACiyC,CAAD,CAAO,CACpCvxB,CAAAzd,KAAA,CAAUwB,CAAAo6D,QAAA,CAAa5sB,CAAb,CAAV,CADoC,CAAtC,CAKO,CAFHL,CAAApjC,OAEG,GAFSgkC,CAET,CAFiB,IAAAz8B,QAAA,CAAa67B,CAAAsB,OAAA9qC,KAAb,CAEjB,EADFwpC,CAAApjC,OACE,GADUgkC,CACV,CADkB,IAAAqsB,QAAA,CAAajtB,CAAAsB,OAAb,CAAyB,CAAA,CAAzB,CAClB,EAAAtB,CAAApjC,OAAA,CACL,QAAQ,CAACnF,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAEtC,IADA,IAAIhY,EAAS,EAAb,CACSt+B,EAAI,CAAb,CAAgBA,CAAhB,CAAoB8hB,CAAAhjB,OAApB,CAAiC,EAAEkB,CAAnC,CACEs+B,CAAAj6B,KAAA,CAAYyd,CAAA,CAAK9hB,CAAL,CAAA,CAAQyK,CAAR,CAAeqZ,CAAf,CAAuBqY,CAAvB,CAA+Bma,CAA/B,CAAZ,CAEEn2C,EAAAA,CAAQyzC,CAAA3tC,MAAA,CAAYxH,CAAZ,CAAuB6/B,CAAvB,CAA+BgY,CAA/B,CACZ,OAAOh3C,EAAA,CAAU,CAACA,QAASb,CAAV,CAAqB+K,KAAM/K,CAA3B,CAAsC0B,MAAOA,CAA7C,CAAV,CAAgEA,CANjC,CADnC,CASL,QAAQ,CAACsK,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACtC,IAAIisB,EAAM3uB,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAAV,CACIn2C,CACJ,IAAiB,IAAjB,EAAIoiE,CAAApiE,MAAJ,CAAuB,CACrBmyC,EAAA,CAAiBiwB,CAAAjjE,QAAjB,CAA8BuG,CAAAo5B,WAA9B,CACAuT,GAAA,CAAmB+vB,CAAApiE,MAAnB,CAA8B0F,CAAAo5B,WAA9B,CACIX;CAAAA,CAAS,EACb,KAAS,IAAAt+B,EAAI,CAAb,CAAgBA,CAAhB,CAAoB8hB,CAAAhjB,OAApB,CAAiC,EAAEkB,CAAnC,CACEs+B,CAAAj6B,KAAA,CAAYiuC,EAAA,CAAiBxwB,CAAA,CAAK9hB,CAAL,CAAA,CAAQyK,CAAR,CAAeqZ,CAAf,CAAuBqY,CAAvB,CAA+Bma,CAA/B,CAAjB,CAAyDzwC,CAAAo5B,WAAzD,CAAZ,CAEF9+B,EAAA,CAAQmyC,EAAA,CAAiBiwB,CAAApiE,MAAA8F,MAAA,CAAgBs8D,CAAAjjE,QAAhB,CAA6Bg/B,CAA7B,CAAjB,CAAuDz4B,CAAAo5B,WAAvD,CAPa,CASvB,MAAO3/B,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CAZI,CAc5C,MAAKgzC,CAAAoB,qBAAL,CAGE,MAFAZ,EAEO,CAFA,IAAAssB,QAAA,CAAajtB,CAAAW,KAAb,CAAuB,CAAA,CAAvB,CAA6B,CAA7B,CAEA,CADPC,CACO,CADC,IAAAqsB,QAAA,CAAajtB,CAAAY,MAAb,CACD,CAAA,QAAQ,CAACnpC,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAC7C,IAAIksB,EAAM7uB,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CACNisB,EAAAA,CAAM3uB,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACVhE,GAAA,CAAiBkwB,CAAAriE,MAAjB,CAA4B0F,CAAAo5B,WAA5B,CACAujC,EAAAljE,QAAA,CAAYkjE,CAAAh5D,KAAZ,CAAA,CAAwB+4D,CACxB,OAAOjjE,EAAA,CAAU,CAACa,MAAOoiE,CAAR,CAAV,CAAyBA,CALa,CAOjD,MAAKpvB,CAAAqB,gBAAL,CAKE,MAJA1yB,EAIO,CAJA,EAIA,CAHP1iB,CAAA,CAAQ4zC,CAAAt0B,SAAR,CAAsB,QAAQ,CAAC20B,CAAD,CAAO,CACnCvxB,CAAAzd,KAAA,CAAUwB,CAAAo6D,QAAA,CAAa5sB,CAAb,CAAV,CADmC,CAArC,CAGO,CAAA,QAAQ,CAAC5oC,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAE7C,IADA,IAAIn2C,EAAQ,EAAZ,CACSH,EAAI,CAAb,CAAgBA,CAAhB,CAAoB8hB,CAAAhjB,OAApB,CAAiC,EAAEkB,CAAnC,CACEG,CAAAkE,KAAA,CAAWyd,CAAA,CAAK9hB,CAAL,CAAA,CAAQyK,CAAR,CAAeqZ,CAAf,CAAuBqY,CAAvB,CAA+Bma,CAA/B,CAAX,CAEF,OAAOh3C,EAAA;AAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CALW,CAOjD,MAAKgzC,CAAAsB,iBAAL,CASE,MARA3yB,EAQO,CARA,EAQA,CAPP1iB,CAAA,CAAQ4zC,CAAA0B,WAAR,CAAwB,QAAQ,CAACxF,CAAD,CAAW,CACzCptB,CAAAzd,KAAA,CAAU,CAAC9E,IAAK2vC,CAAA3vC,IAAA0d,KAAA,GAAsBk2B,CAAAc,WAAtB,CACA/E,CAAA3vC,IAAAiK,KADA,CAEC,EAFD,CAEM0lC,CAAA3vC,IAAAY,MAFZ,CAGCA,MAAO0F,CAAAo6D,QAAA,CAAa/wB,CAAA/uC,MAAb,CAHR,CAAV,CADyC,CAA3C,CAOO,CAAA,QAAQ,CAACsK,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAE7C,IADA,IAAIn2C,EAAQ,EAAZ,CACSH,EAAI,CAAb,CAAgBA,CAAhB,CAAoB8hB,CAAAhjB,OAApB,CAAiC,EAAEkB,CAAnC,CACEG,CAAA,CAAM2hB,CAAA,CAAK9hB,CAAL,CAAAT,IAAN,CAAA,CAAqBuiB,CAAA,CAAK9hB,CAAL,CAAAG,MAAA,CAAcsK,CAAd,CAAqBqZ,CAArB,CAA6BqY,CAA7B,CAAqCma,CAArC,CAEvB,OAAOh3C,EAAA,CAAU,CAACa,MAAOA,CAAR,CAAV,CAA2BA,CALW,CAOjD,MAAKgzC,CAAAwB,eAAL,CACE,MAAO,SAAQ,CAAClqC,CAAD,CAAQ,CACrB,MAAOnL,EAAA,CAAU,CAACa,MAAOsK,CAAR,CAAV,CAA2BA,CADb,CAGzB,MAAK0oC,CAAA6B,iBAAL,CACE,MAAO,SAAQ,CAACvqC,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAC7C,MAAOh3C,EAAA,CAAU,CAACa,MAAOg8B,CAAR,CAAV,CAA4BA,CADU,CA7GjD,CALsC,CAjDf,CAyKzB,SAAUsmC,QAAQ,CAAChvB,CAAD,CAAWn0C,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMmmC,CAAA,CAAShpC,CAAT,CAAgBqZ,CAAhB,CAAwBqY,CAAxB,CAAgCma,CAAhC,CAERhpC,EAAA,CADEpL,CAAA,CAAUoL,CAAV,CAAJ,CACQ,CAACA,CADT,CAGQ,CAER,OAAOhO,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV;AAAyBA,CAPa,CADX,CAzKb,CAoLzB,SAAUo1D,QAAQ,CAACjvB,CAAD,CAAWn0C,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMmmC,CAAA,CAAShpC,CAAT,CAAgBqZ,CAAhB,CAAwBqY,CAAxB,CAAgCma,CAAhC,CAERhpC,EAAA,CADEpL,CAAA,CAAUoL,CAAV,CAAJ,CACQ,CAACA,CADT,CAGQ,CAER,OAAOhO,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAPa,CADX,CApLb,CA+LzB,SAAUq1D,QAAQ,CAAClvB,CAAD,CAAWn0C,CAAX,CAAoB,CACpC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAM,CAACmmC,CAAA,CAAShpC,CAAT,CAAgBqZ,CAAhB,CAAwBqY,CAAxB,CAAgCma,CAAhC,CACX,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADX,CA/Lb,CAqMzB,UAAWs1D,QAAQ,CAACjvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAC7C,IAAIksB,EAAM7uB,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CACNisB,EAAAA,CAAM3uB,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACNhpC,EAAAA,CAAMulC,EAAA,CAAO2vB,CAAP,CAAYD,CAAZ,CACV,OAAOjjE,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAJa,CADP,CArMjB,CA6MzB,UAAWu1D,QAAQ,CAAClvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAC7C,IAAIksB,EAAM7uB,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CACNisB,EAAAA,CAAM3uB,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACNhpC,EAAAA,EAAOpL,CAAA,CAAUsgE,CAAV,CAAA,CAAiBA,CAAjB,CAAuB,CAA9Bl1D,GAAoCpL,CAAA,CAAUqgE,CAAV,CAAA,CAAiBA,CAAjB,CAAuB,CAA3Dj1D,CACJ,OAAOhO,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAJa,CADP,CA7MjB,CAqNzB,UAAWw1D,QAAQ,CAACnvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,CAA4CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAChD;MAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADP,CArNjB,CA2NzB,UAAWy1D,QAAQ,CAACpvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,CAA4CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAChD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADP,CA3NjB,CAiOzB,UAAW01D,QAAQ,CAACrvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,CAA4CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAChD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADP,CAjOjB,CAuOzB,YAAa21D,QAAQ,CAACtvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CAC1C,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,GAA8CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAClD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADL,CAvOnB,CA6OzB,YAAa41D,QAAQ,CAACvvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CAC1C,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,GAA8CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAClD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADL,CA7OnB,CAmPzB,WAAY61D,QAAQ,CAACxvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,EAA6CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACjD,OAAOh3C,EAAA;AAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADN,CAnPlB,CAyPzB,WAAY81D,QAAQ,CAACzvB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,EAA6CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACjD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADN,CAzPlB,CA+PzB,UAAW+1D,QAAQ,CAAC1vB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,CAA4CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAChD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADP,CA/PjB,CAqQzB,UAAWg2D,QAAQ,CAAC3vB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACxC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,CAA4CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAChD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADP,CArQjB,CA2QzB,WAAYi2D,QAAQ,CAAC5vB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,EAA6CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACjD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADN,CA3QlB,CAiRzB,WAAYk2D,QAAQ,CAAC7vB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,EAA6CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACjD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV;AAAyBA,CAFa,CADN,CAjRlB,CAuRzB,WAAYm2D,QAAQ,CAAC9vB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,EAA6CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACjD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADN,CAvRlB,CA6RzB,WAAYo2D,QAAQ,CAAC/vB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuB,CACzC,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAMqmC,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAANhpC,EAA6CsmC,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CACjD,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADN,CA7RlB,CAmSzB,YAAaq2D,QAAQ,CAACn/D,CAAD,CAAOuvC,CAAP,CAAkBC,CAAlB,CAA8B10C,CAA9B,CAAuC,CAC1D,MAAO,SAAQ,CAACmL,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzChpC,CAAAA,CAAM9I,CAAA,CAAKiG,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAAA,CAAsCvC,CAAA,CAAUtpC,CAAV,CAAiBqZ,CAAjB,CAAyBqY,CAAzB,CAAiCma,CAAjC,CAAtC,CAAiFtC,CAAA,CAAWvpC,CAAX,CAAkBqZ,CAAlB,CAA0BqY,CAA1B,CAAkCma,CAAlC,CAC3F,OAAOh3C,EAAA,CAAU,CAACa,MAAOmN,CAAR,CAAV,CAAyBA,CAFa,CADW,CAnSnC,CAySzBnN,MAAOA,QAAQ,CAACA,CAAD,CAAQb,CAAR,CAAiB,CAC9B,MAAO,SAAQ,EAAG,CAAE,MAAOA,EAAA,CAAU,CAACA,QAASb,CAAV,CAAqB+K,KAAM/K,CAA3B,CAAsC0B,MAAOA,CAA7C,CAAV,CAAgEA,CAAzE,CADY,CAzSP,CA4SzB01B,WAAYA,QAAQ,CAACrsB,CAAD,CAAOwuC,CAAP,CAAwB14C,CAAxB,CAAiCsC,CAAjC,CAAyCq9B,CAAzC,CAAqD,CACvE,MAAO,SAAQ,CAACx0B,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzCstB,CAAAA,CAAO9/C,CAAA,EAAWta,CAAX,GAAmBsa,EAAnB,CAA6BA,CAA7B,CAAsCrZ,CAC7C7I,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,EAA8BgiE,CAA9B,EAAwC,CAAAA,CAAA,CAAKp6D,CAAL,CAAxC,GACEo6D,CAAA,CAAKp6D,CAAL,CADF,CACe,EADf,CAGIrJ,EAAAA,CAAQyjE,CAAA;AAAOA,CAAA,CAAKp6D,CAAL,CAAP,CAAoB/K,CAC5Bu5C,EAAJ,EACE1F,EAAA,CAAiBnyC,CAAjB,CAAwB8+B,CAAxB,CAEF,OAAI3/B,EAAJ,CACS,CAACA,QAASskE,CAAV,CAAgBp6D,KAAMA,CAAtB,CAA4BrJ,MAAOA,CAAnC,CADT,CAGSA,CAZoC,CADwB,CA5ShD,CA6TzBghE,eAAgBA,QAAQ,CAACxtB,CAAD,CAAOC,CAAP,CAAct0C,CAAd,CAAuBsC,CAAvB,CAA+Bq9B,CAA/B,CAA2C,CACjE,MAAO,SAAQ,CAACx0B,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CAC7C,IAAIksB,EAAM7uB,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CAAV,CACIisB,CADJ,CAEIpiE,CACO,KAAX,EAAIqiE,CAAJ,GACED,CAMA,CANM3uB,CAAA,CAAMnpC,CAAN,CAAaqZ,CAAb,CAAqBqY,CAArB,CAA6Bma,CAA7B,CAMN,CALAnE,EAAA,CAAqBowB,CAArB,CAA0BtjC,CAA1B,CAKA,CAJIr9B,CAIJ,EAJyB,CAIzB,GAJcA,CAId,EAJ8B4gE,CAI9B,EAJuC,CAAAA,CAAA,CAAID,CAAJ,CAIvC,GAHEC,CAAA,CAAID,CAAJ,CAGF,CAHa,EAGb,EADApiE,CACA,CADQqiE,CAAA,CAAID,CAAJ,CACR,CAAAjwB,EAAA,CAAiBnyC,CAAjB,CAAwB8+B,CAAxB,CAPF,CASA,OAAI3/B,EAAJ,CACS,CAACA,QAASkjE,CAAV,CAAeh5D,KAAM+4D,CAArB,CAA0BpiE,MAAOA,CAAjC,CADT,CAGSA,CAhBoC,CADkB,CA7T1C,CAkVzBqhE,kBAAmBA,QAAQ,CAAC7tB,CAAD,CAAOC,CAAP,CAAcoE,CAAd,CAA+B14C,CAA/B,CAAwCsC,CAAxC,CAAgDq9B,CAAhD,CAA4D,CACrF,MAAO,SAAQ,CAACx0B,CAAD,CAAQqZ,CAAR,CAAgBqY,CAAhB,CAAwBma,CAAxB,CAAgC,CACzCksB,CAAAA,CAAM7uB,CAAA,CAAKlpC,CAAL,CAAYqZ,CAAZ,CAAoBqY,CAApB,CAA4Bma,CAA5B,CACN10C,EAAJ,EAAyB,CAAzB,GAAcA,CAAd,EAA8B4gE,CAA9B,EAAuC,CAAAA,CAAA,CAAI5uB,CAAJ,CAAvC,GACE4uB,CAAA,CAAI5uB,CAAJ,CADF,CACe,EADf,CAGIzzC,EAAAA,CAAe,IAAP,EAAAqiE,CAAA,CAAcA,CAAA,CAAI5uB,CAAJ,CAAd,CAA2Bn1C,CACvC,EAAIu5C,CAAJ,EAAuBtC,EAAA,CAA8B9B,CAA9B,CAAvB,GACEtB,EAAA,CAAiBnyC,CAAjB,CAAwB8+B,CAAxB,CAEF,OAAI3/B,EAAJ,CACS,CAACA,QAASkjE,CAAV,CAAeh5D,KAAMoqC,CAArB,CAA4BzzC,MAAOA,CAAnC,CADT,CAGSA,CAZoC,CADsC,CAlV9D,CAmWzBm2C,OAAQA,QAAQ,CAACzlC,CAAD,CAAQyvD,CAAR,CAAiB,CAC/B,MAAO,SAAQ,CAAC71D,CAAD,CAAQtK,CAAR,CAAe2jB,CAAf,CAAuBwyB,CAAvB,CAA+B,CAC5C,MAAIA,EAAJ,CAAmBA,CAAA,CAAOgqB,CAAP,CAAnB;AACOzvD,CAAA,CAAMpG,CAAN,CAAatK,CAAb,CAAoB2jB,CAApB,CAFqC,CADf,CAnWR,CA8W3B,KAAI00B,GAASA,QAAQ,CAACH,CAAD,CAAQlhC,CAAR,CAAiB2P,CAAjB,CAA0B,CAC7C,IAAAuxB,MAAA,CAAaA,CACb,KAAAlhC,QAAA,CAAeA,CACf,KAAA2P,QAAA,CAAeA,CACf,KAAAksB,IAAA,CAAW,IAAIG,CAAJ,CAAQ,IAAAkF,MAAR,CACX,KAAAwrB,YAAA,CAAmB/8C,CAAA1W,IAAA,CAAc,IAAIilC,EAAJ,CAAmB,IAAArC,IAAnB,CAA6B77B,CAA7B,CAAd,CACc,IAAIg+B,EAAJ,CAAgB,IAAAnC,IAAhB,CAA0B77B,CAA1B,CANY,CAS/CqhC,GAAAr0B,UAAA,CAAmB,CACjB1f,YAAa+zC,EADI,CAGjB/xC,MAAOA,QAAQ,CAAC+yB,CAAD,CAAO,CACpB,MAAO,KAAAqqC,YAAAn5D,QAAA,CAAyB8uB,CAAzB,CAA+B,IAAA1S,QAAAkxB,gBAA/B,CADa,CAHL,CA+BQxyC,GAAA,EACEA,GAAA,EAM7B,KAAIowC,GAAgB72C,MAAAolB,UAAA0jB,QAApB,CAiyEI4Z,GAAa/iD,CAAA,CAAO,MAAP,CAjyEjB,CAmyEIojD,GAAe,CACjBxnB,KAAM,MADW,CAEjByoB,IAAK,KAFY,CAGjBC,IAAK,KAHY,CAMjBzoB,aAAc,aANG,CAOjB0oB,GAAI,IAPa,CAnyEnB,CAg5GI32B,GAAiB5tB,CAAA,CAAO,UAAP,CAh5GrB,CAwqHI4nD,EAAiB9nD,CAAA6c,cAAA,CAAuB,GAAvB,CAxqHrB,CAyqHImrC,GAAY3f,EAAA,CAAWtoC,CAAA8M,SAAAsd,KAAX,CA6LhB89B,GAAA1iC,QAAA,CAAyB,CAAC,WAAD,CAyGzB3M,GAAA2M,QAAA;AAA0B,CAAC,UAAD,CAoX1BmjC,GAAAnjC,QAAA,CAAyB,CAAC,SAAD,CAyEzByjC,GAAAzjC,QAAA,CAAuB,CAAC,SAAD,CAavB,KAAIgmB,GAAc,GAAlB,CA4KIyiB,GAAe,CACjB6E,KAAM7G,CAAA,CAAW,UAAX,CAAuB,CAAvB,CADW,CAEfsZ,GAAItZ,CAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAFW,CAGduZ,EAAGvZ,CAAA,CAAW,UAAX,CAAuB,CAAvB,CAHW,CAIjBwZ,KAAMvZ,EAAA,CAAc,OAAd,CAJW,CAKhBwZ,IAAKxZ,EAAA,CAAc,OAAd,CAAuB,CAAA,CAAvB,CALW,CAMf6G,GAAI9G,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CANW,CAOd0Z,EAAG1Z,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CAPW,CAQf+G,GAAI/G,CAAA,CAAW,MAAX,CAAmB,CAAnB,CARW,CASdnpB,EAAGmpB,CAAA,CAAW,MAAX,CAAmB,CAAnB,CATW,CAUfgH,GAAIhH,CAAA,CAAW,OAAX,CAAoB,CAApB,CAVW,CAWd2Z,EAAG3Z,CAAA,CAAW,OAAX,CAAoB,CAApB,CAXW,CAYf4Z,GAAI5Z,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAZW,CAadjqD,EAAGiqD,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAbW,CAcfkH,GAAIlH,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAdW,CAedyB,EAAGzB,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAfW,CAgBfmH,GAAInH,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAhBW,CAiBd0B,EAAG1B,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAjBW,CAoBhBqH,IAAKrH,CAAA,CAAW,cAAX,CAA2B,CAA3B,CApBW,CAqBjB6Z,KAAM5Z,EAAA,CAAc,KAAd,CArBW,CAsBhB6Z,IAAK7Z,EAAA,CAAc,KAAd,CAAqB,CAAA,CAArB,CAtBW,CAuBd95C,EAnCL4zD,QAAmB,CAACv9D,CAAD,CAAO6hD,CAAP,CAAgB,CACjC,MAAyB,GAAlB,CAAA7hD,CAAAyqD,SAAA,EAAA,CAAuB5I,CAAA5d,MAAA,CAAc,CAAd,CAAvB,CAA0C4d,CAAA5d,MAAA,CAAc,CAAd,CADhB,CAYhB,CAwBdu5B,EAxELC,QAAuB,CAACz9D,CAAD;AAAO6hD,CAAP,CAAgBnuC,CAAhB,CAAwB,CACzCgqD,CAAAA,CAAQ,EAARA,CAAYhqD,CAMhB,OAHAiqD,EAGA,EAL0B,CAATA,EAACD,CAADC,CAAc,GAAdA,CAAoB,EAKrC,GAHcta,EAAA,CAAU1yB,IAAA,CAAY,CAAP,CAAA+sC,CAAA,CAAW,OAAX,CAAqB,MAA1B,CAAA,CAAkCA,CAAlC,CAAyC,EAAzC,CAAV,CAAwD,CAAxD,CAGd,CAFcra,EAAA,CAAU1yB,IAAA2xB,IAAA,CAASob,CAAT,CAAgB,EAAhB,CAAV,CAA+B,CAA/B,CAEd,CAP6C,CAgD5B,CAyBfE,GAAI7Z,EAAA,CAAW,CAAX,CAzBW,CA0Bd8Z,EAAG9Z,EAAA,CAAW,CAAX,CA1BW,CA2Bd+Z,EAAGzZ,EA3BW,CA4Bd0Z,GAAI1Z,EA5BU,CA6Bd2Z,IAAK3Z,EA7BS,CA8Bd4Z,KAlCLC,QAAsB,CAACl+D,CAAD,CAAO6hD,CAAP,CAAgB,CACpC,MAA6B,EAAtB,EAAA7hD,CAAAikD,YAAA,EAAA,CAA0BpC,CAAApd,SAAA,CAAiB,CAAjB,CAA1B,CAAgDod,CAAApd,SAAA,CAAiB,CAAjB,CADnB,CAInB,CA5KnB,CA6MI6gB,GAAqB,sFA7MzB,CA8MID,GAAgB,UA+FpBlF,GAAApjC,QAAA,CAAqB,CAAC,SAAD,CA8HrB,KAAIwjC,GAAkBvlD,EAAA,CAAQuB,CAAR,CAAtB,CAWImkD,GAAkB1lD,EAAA,CAAQkO,EAAR,CAuRtBu3C,GAAA1jC,QAAA,CAAwB,CAAC,QAAD,CAgHxB,KAAInT,GAAsB5O,EAAA,CAAQ,CAChCyrB,SAAU,GADsB,CAEhC/iB,QAASA,QAAQ,CAACpH,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAK2lB,CAAA3lB,CAAA2lB,KAAL,EAAmBw8C,CAAAniE,CAAAmiE,UAAnB,CACE,MAAO,SAAQ,CAAC16D,CAAD,CAAQnH,CAAR,CAAiB,CAE9B,GAA0C,GAA1C,GAAIA,CAAA,CAAQ,CAAR,CAAAR,SAAAiJ,YAAA,EAAJ,CAAA,CAGA,IAAI4c;AAA+C,4BAAxC,GAAArmB,EAAA5C,KAAA,CAAc4D,CAAAP,KAAA,CAAa,MAAb,CAAd,CAAA,CACA,YADA,CACe,MAC1BO,EAAAgJ,GAAA,CAAW,OAAX,CAAoB,QAAQ,CAAC6T,CAAD,CAAQ,CAE7B7c,CAAAN,KAAA,CAAa2lB,CAAb,CAAL,EACExI,CAAAwwB,eAAA,EAHgC,CAApC,CALA,CAF8B,CAFH,CAFD,CAAR,CAA1B,CA6WI56B,GAA6B,EAGjC3W,EAAA,CAAQygB,EAAR,CAAsB,QAAQ,CAACulD,CAAD,CAAW14C,CAAX,CAAqB,CAIjD24C,QAASA,EAAa,CAAC56D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAC3CyH,CAAA/H,OAAA,CAAaM,CAAA,CAAKsiE,CAAL,CAAb,CAA+BC,QAAiC,CAACplE,CAAD,CAAQ,CACtE6C,CAAAm1B,KAAA,CAAUzL,CAAV,CAAoB,CAAEvsB,CAAAA,CAAtB,CADsE,CAAxE,CAD2C,CAF7C,GAAgB,UAAhB,EAAIilE,CAAJ,CAAA,CAQA,IAAIE,EAAapzC,EAAA,CAAmB,KAAnB,CAA2BxF,CAA3B,CAAjB,CACI8G,EAAS6xC,CAEI,UAAjB,GAAID,CAAJ,GACE5xC,CADF,CACWA,QAAQ,CAAC/oB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAElCA,CAAAwR,QAAJ,GAAqBxR,CAAA,CAAKsiE,CAAL,CAArB,EACED,CAAA,CAAc56D,CAAd,CAAqBnH,CAArB,CAA8BN,CAA9B,CAHoC,CAD1C,CASA+S,GAAA,CAA2BuvD,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACL73C,SAAU,GADL,CAELF,SAAU,GAFL,CAGL5C,KAAM6I,CAHD,CAD2C,CApBpD,CAFiD,CAAnD,CAgCAp0B,EAAA,CAAQ4gB,EAAR,CAAsB,QAAQ,CAACwlD,CAAD,CAAWz8D,CAAX,CAAmB,CAC/CgN,EAAA,CAA2BhN,CAA3B,CAAA,CAAqC,QAAQ,EAAG,CAC9C,MAAO,CACLwkB,SAAU,GADL,CAEL5C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAGnC,GAAe,WAAf,GAAI+F,CAAJ,EAA0D,GAA1D,EAA8B/F,CAAAgS,UAAA/P,OAAA,CAAsB,CAAtB,CAA9B;CACMJ,CADN,CACc7B,CAAAgS,UAAAnQ,MAAA,CAAqBowD,EAArB,CADd,EAEa,CACTjyD,CAAAm1B,KAAA,CAAU,WAAV,CAAuB,IAAIvzB,MAAJ,CAAWC,CAAA,CAAM,CAAN,CAAX,CAAqBA,CAAA,CAAM,CAAN,CAArB,CAAvB,CACA,OAFS,CAMb4F,CAAA/H,OAAA,CAAaM,CAAA,CAAK+F,CAAL,CAAb,CAA2B08D,QAA+B,CAACtlE,CAAD,CAAQ,CAChE6C,CAAAm1B,KAAA,CAAUpvB,CAAV,CAAkB5I,CAAlB,CADgE,CAAlE,CAXmC,CAFhC,CADuC,CADD,CAAjD,CAwBAf,EAAA,CAAQ,CAAC,KAAD,CAAQ,QAAR,CAAkB,MAAlB,CAAR,CAAmC,QAAQ,CAACstB,CAAD,CAAW,CACpD,IAAI44C,EAAapzC,EAAA,CAAmB,KAAnB,CAA2BxF,CAA3B,CACjB3W,GAAA,CAA2BuvD,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACL/3C,SAAU,EADL,CAEL5C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAC/BoiE,EAAW14C,CADoB,CAE/BljB,EAAOkjB,CAEM,OAAjB,GAAIA,CAAJ,EAC4C,4BAD5C,GACIpqB,EAAA5C,KAAA,CAAc4D,CAAAP,KAAA,CAAa,MAAb,CAAd,CADJ,GAEEyG,CAEA,CAFO,WAEP,CADAxG,CAAAgvB,MAAA,CAAWxoB,CAAX,CACA,CADmB,YACnB,CAAA47D,CAAA,CAAW,IAJb,CAOApiE,EAAAi5B,SAAA,CAAcqpC,CAAd,CAA0B,QAAQ,CAACnlE,CAAD,CAAQ,CACnCA,CAAL,EAOA6C,CAAAm1B,KAAA,CAAU3uB,CAAV,CAAgBrJ,CAAhB,CAMA,CAAIojD,EAAJ,EAAY6hB,CAAZ,EAAsB9hE,CAAAP,KAAA,CAAaqiE,CAAb,CAAuBpiE,CAAA,CAAKwG,CAAL,CAAvB,CAbtB,EACmB,MADnB,GACMkjB,CADN,EAEI1pB,CAAAm1B,KAAA,CAAU3uB,CAAV,CAAgB,IAAhB,CAHoC,CAA1C,CAXmC,CAFhC,CAD2C,CAFA,CAAtD,CAtqmBuC,KA6smBnCkkD,GAAe,CACjBU,YAAavsD,CADI,CAEjB8sD,gBASF+W,QAA8B,CAACnX,CAAD;AAAU/kD,CAAV,CAAgB,CAC5C+kD,CAAAT,MAAA,CAAgBtkD,CAD4B,CAX3B,CAGjBulD,eAAgBltD,CAHC,CAIjBotD,aAAcptD,CAJG,CAKjBytD,UAAWztD,CALM,CAMjB6tD,aAAc7tD,CANG,CAOjBmuD,cAAenuD,CAPE,CAyDnByrD,GAAAvpC,QAAA,CAAyB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,UAAjC,CAA6C,cAA7C,CAqYzB,KAAI4hD,GAAuBA,QAAQ,CAACC,CAAD,CAAW,CAC5C,MAAO,CAAC,UAAD,CAAa,QAAQ,CAACnsD,CAAD,CAAW,CAgErC,MA/DoBxI,CAClBzH,KAAM,MADYyH,CAElBwc,SAAUm4C,CAAA,CAAW,KAAX,CAAmB,GAFX30D,CAGlBxE,WAAY6gD,EAHMr8C,CAIlBvG,QAASm7D,QAAsB,CAACC,CAAD,CAAc9iE,CAAd,CAAoB,CAEjD8iE,CAAA1kD,SAAA,CAAqBouC,EAArB,CAAApuC,SAAA,CAA8CuzC,EAA9C,CAEA,KAAIoR,EAAW/iE,CAAAwG,KAAA,CAAY,MAAZ,CAAsBo8D,CAAA,EAAY5iE,CAAA0P,OAAZ,CAA0B,QAA1B,CAAqC,CAAA,CAE1E,OAAO,CACLshB,IAAKgyC,QAAsB,CAACv7D,CAAD,CAAQq7D,CAAR,CAAqB9iE,CAArB,CAA2ByJ,CAA3B,CAAuC,CAEhE,GAAM,EAAA,QAAA,EAAYzJ,EAAZ,CAAN,CAAyB,CAOvB,IAAIijE,EAAuBA,QAAQ,CAAC9lD,CAAD,CAAQ,CACzC1V,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB8B,CAAA+hD,iBAAA,EACA/hD,EAAAujD,cAAA,EAFsB,CAAxB,CAKA7vC,EAAAwwB,eAAA,EANyC,CASxBm1B;CAAAxiE,CAAY,CAAZA,CAzoiB3B4iC,iBAAA,CAyoiB2CjpB,QAzoiB3C,CAyoiBqDgpD,CAzoiBrD,CAAmC,CAAA,CAAnC,CA6oiBQH,EAAAx5D,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpCmN,CAAA,CAAS,QAAQ,EAAG,CACIqsD,CAAAxiE,CAAY,CAAZA,CA5oiBlCia,oBAAA,CA4oiBkDN,QA5oiBlD,CA4oiB4DgpD,CA5oiB5D,CAAsC,CAAA,CAAtC,CA2oiB8B,CAApB,CAEG,CAFH,CAEM,CAAA,CAFN,CADoC,CAAtC,CApBuB,CA2BzB,IAAIC,EAAiBz5D,CAAAghD,aAEjBsY,EAAJ,GACEzwB,EAAA,CAAO7qC,CAAP,CAAcgC,CAAAqhD,MAAd,CAAgCrhD,CAAhC,CAA4CA,CAAAqhD,MAA5C,CACA,CAAA9qD,CAAAi5B,SAAA,CAAc8pC,CAAd,CAAwB,QAAQ,CAACnrC,CAAD,CAAW,CACrCnuB,CAAAqhD,MAAJ,GAAyBlzB,CAAzB,GACA0a,EAAA,CAAO7qC,CAAP,CAAcgC,CAAAqhD,MAAd,CAAgCrvD,CAAhC,CAA2CgO,CAAAqhD,MAA3C,CAEA,CADAoY,CAAAvX,gBAAA,CAA+BliD,CAA/B,CAA2CmuB,CAA3C,CACA,CAAA0a,EAAA,CAAO7qC,CAAP,CAAcgC,CAAAqhD,MAAd,CAAgCrhD,CAAhC,CAA4CA,CAAAqhD,MAA5C,CAHA,CADyC,CAA3C,CAFF,CASAgY,EAAAx5D,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpC45D,CAAAnX,eAAA,CAA8BtiD,CAA9B,CACIs5D,EAAJ,EACEzwB,EAAA,CAAO7qC,CAAP,CAAczH,CAAA,CAAK+iE,CAAL,CAAd,CAA8BtnE,CAA9B,CAAyCgO,CAAAqhD,MAAzC,CAEF5sD,EAAA,CAAOuL,CAAP,CAAmBihD,EAAnB,CALoC,CAAtC,CAxCgE,CAD7D,CAN0C,CAJjCz8C,CADiB,CAAhC,CADqC,CAA9C,CAqEIA,GAAgB00D,EAAA,EArEpB,CAsEIhzD,GAAkBgzD,EAAA,CAAqB,CAAA,CAArB,CAtEtB,CAkFIvU,GAAkB,0EAlFtB,CAmFI+U,GAAa,qFAnFjB;AAoFIC,GAAe,mGApFnB,CAqFIC,GAAgB,oCArFpB,CAsFIC,GAAc,2BAtFlB,CAuFIC,GAAuB,+DAvF3B,CAwFIC,GAAc,mBAxFlB,CAyFIC,GAAe,kBAzFnB,CA0FIC,GAAc,yCA1FlB,CA4FIC,GAAY,CAgGd,KAg5BFC,QAAsB,CAACn8D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bl2C,CAA7B,CAAuCxC,CAAvC,CAAiD,CACrE45C,EAAA,CAAc5lD,CAAd,CAAqBnH,CAArB,CAA8BN,CAA9B,CAAoCmsD,CAApC,CAA0Cl2C,CAA1C,CAAoDxC,CAApD,CACAy5C,GAAA,CAAqBf,CAArB,CAFqE,CAh/BvD,CA+Ld,KAAQ8C,EAAA,CAAoB,MAApB,CAA4BqU,EAA5B,CACDrV,EAAA,CAAiBqV,EAAjB,CAA8B,CAAC,MAAD,CAAS,IAAT,CAAe,IAAf,CAA9B,CADC,CAED,YAFC,CA/LM,CA8Rd,iBAAkBrU,EAAA,CAAoB,eAApB,CAAqCsU,EAArC,CACdtV,EAAA,CAAiBsV,EAAjB,CAAuC,yBAAA,MAAA,CAAA,GAAA,CAAvC,CADc;AAEd,yBAFc,CA9RJ,CA8Xd,KAAQtU,EAAA,CAAoB,MAApB,CAA4ByU,EAA5B,CACJzV,EAAA,CAAiByV,EAAjB,CAA8B,CAAC,IAAD,CAAO,IAAP,CAAa,IAAb,CAAmB,KAAnB,CAA9B,CADI,CAEL,cAFK,CA9XM,CA+dd,KAAQzU,EAAA,CAAoB,MAApB,CAA4BuU,EAA5B,CA4mBVK,QAAmB,CAACC,CAAD,CAAUC,CAAV,CAAwB,CACzC,GAAI1kE,EAAA,CAAOykE,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAI5nE,CAAA,CAAS4nE,CAAT,CAAJ,CAAuB,CACrBN,EAAA1hE,UAAA,CAAwB,CACxB,KAAIyD,EAAQi+D,EAAAjrD,KAAA,CAAiBurD,CAAjB,CACZ,IAAIv+D,CAAJ,CAAW,CAAA,IACLqiD,EAAO,CAACriD,CAAA,CAAM,CAAN,CADH,CAELy+D,EAAO,CAACz+D,CAAA,CAAM,CAAN,CAFH,CAILjB,EADA2/D,CACA3/D,CADQ,CAHH,CAKL4/D,EAAU,CALL,CAMLC,EAAe,CANV,CAOLnc,EAAaL,EAAA,CAAuBC,CAAvB,CAPR,CAQLwc,EAAuB,CAAvBA,EAAWJ,CAAXI,CAAkB,CAAlBA,CAEAL,EAAJ,GACEE,CAGA,CAHQF,CAAAtV,SAAA,EAGR,CAFAnqD,CAEA,CAFUy/D,CAAA1/D,WAAA,EAEV,CADA6/D,CACA,CADUH,CAAAnV,WAAA,EACV,CAAAuV,CAAA,CAAeJ,CAAAjV,gBAAA,EAJjB,CAOA,OAAO,KAAIptD,IAAJ,CAASkmD,CAAT,CAAe,CAAf,CAAkBI,CAAAI,QAAA,EAAlB,CAAyCgc,CAAzC,CAAkDH,CAAlD,CAAyD3/D,CAAzD,CAAkE4/D,CAAlE,CAA2EC,CAA3E,CAjBE,CAHU,CAwBvB,MAAOnV,IA7BkC,CA5mBjC,CAAqD,UAArD,CA/dM,CA8jBd,MAASC,EAAA,CAAoB,OAApB,CAA6BwU,EAA7B,CACNxV,EAAA,CAAiBwV,EAAjB,CAA+B,CAAC,MAAD,CAAS,IAAT,CAA/B,CADM,CAEN,SAFM,CA9jBK,CAmqBd,OAilBFY,QAAwB,CAAC58D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bl2C,CAA7B,CAAuCxC,CAAvC,CAAiD,CACvE67C,EAAA,CAAgB7nD,CAAhB,CAAuBnH,CAAvB,CAAgCN,CAAhC,CAAsCmsD,CAAtC,CACAkB,GAAA,CAAc5lD,CAAd,CAAqBnH,CAArB,CAA8BN,CAA9B,CAAoCmsD,CAApC,CAA0Cl2C,CAA1C,CAAoDxC,CAApD,CAEA04C,EAAAsD,aAAA;AAAoB,QACpBtD,EAAAuD,SAAAruD,KAAA,CAAmB,QAAQ,CAAClE,CAAD,CAAQ,CACjC,MAAIgvD,EAAAiB,SAAA,CAAcjwD,CAAd,CAAJ,CAAsC,IAAtC,CACIkmE,EAAA7hE,KAAA,CAAmBrE,CAAnB,CAAJ,CAAsC2pD,UAAA,CAAW3pD,CAAX,CAAtC,CACO1B,CAH0B,CAAnC,CAMA0wD,EAAAgB,YAAA9rD,KAAA,CAAsB,QAAQ,CAAClE,CAAD,CAAQ,CACpC,GAAK,CAAAgvD,CAAAiB,SAAA,CAAcjwD,CAAd,CAAL,CAA2B,CACzB,GAAK,CAAAiC,CAAA,CAASjC,CAAT,CAAL,CACE,KAAMyyD,GAAA,CAAe,QAAf,CAA0DzyD,CAA1D,CAAN,CAEFA,CAAA,CAAQA,CAAAmC,SAAA,EAJiB,CAM3B,MAAOnC,EAP6B,CAAtC,CAUA,IAAI+B,CAAA,CAAUc,CAAAgnD,IAAV,CAAJ,EAA2BhnD,CAAA6vD,MAA3B,CAAuC,CACrC,IAAIC,CACJ3D,EAAA4D,YAAA/I,IAAA,CAAuBgJ,QAAQ,CAAC7yD,CAAD,CAAQ,CACrC,MAAOgvD,EAAAiB,SAAA,CAAcjwD,CAAd,CAAP,EAA+B8B,CAAA,CAAY6wD,CAAZ,CAA/B,EAAsD3yD,CAAtD,EAA+D2yD,CAD1B,CAIvC9vD,EAAAi5B,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC93B,CAAD,CAAM,CAC7BjC,CAAA,CAAUiC,CAAV,CAAJ,EAAuB,CAAA/B,CAAA,CAAS+B,CAAT,CAAvB,GACEA,CADF,CACQ2lD,UAAA,CAAW3lD,CAAX,CAAgB,EAAhB,CADR,CAGA2uD,EAAA,CAAS1wD,CAAA,CAAS+B,CAAT,CAAA,EAAkB,CAAA2C,KAAA,CAAM3C,CAAN,CAAlB,CAA+BA,CAA/B,CAAqC1F,CAE9C0wD,EAAA8D,UAAA,EANiC,CAAnC,CANqC,CAgBvC,GAAI/wD,CAAA,CAAUc,CAAA40B,IAAV,CAAJ,EAA2B50B,CAAAkwD,MAA3B,CAAuC,CACrC,IAAIC,CACJhE,EAAA4D,YAAAn7B,IAAA,CAAuBw7B,QAAQ,CAACjzD,CAAD,CAAQ,CACrC,MAAOgvD,EAAAiB,SAAA,CAAcjwD,CAAd,CAAP,EAA+B8B,CAAA,CAAYkxD,CAAZ,CAA/B,EAAsDhzD,CAAtD,EAA+DgzD,CAD1B,CAIvCnwD,EAAAi5B,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC93B,CAAD,CAAM,CAC7BjC,CAAA,CAAUiC,CAAV,CAAJ;AAAuB,CAAA/B,CAAA,CAAS+B,CAAT,CAAvB,GACEA,CADF,CACQ2lD,UAAA,CAAW3lD,CAAX,CAAgB,EAAhB,CADR,CAGAgvD,EAAA,CAAS/wD,CAAA,CAAS+B,CAAT,CAAA,EAAkB,CAAA2C,KAAA,CAAM3C,CAAN,CAAlB,CAA+BA,CAA/B,CAAqC1F,CAE9C0wD,EAAA8D,UAAA,EANiC,CAAnC,CANqC,CArCgC,CApvCzD,CAswBd,IAoiBFqU,QAAqB,CAAC78D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bl2C,CAA7B,CAAuCxC,CAAvC,CAAiD,CAGpE45C,EAAA,CAAc5lD,CAAd,CAAqBnH,CAArB,CAA8BN,CAA9B,CAAoCmsD,CAApC,CAA0Cl2C,CAA1C,CAAoDxC,CAApD,CACAy5C,GAAA,CAAqBf,CAArB,CAEAA,EAAAsD,aAAA,CAAoB,KACpBtD,EAAA4D,YAAAjrC,IAAA,CAAuBy/C,QAAQ,CAACC,CAAD,CAAaC,CAAb,CAAwB,CACrD,IAAItnE,EAAQqnE,CAARrnE,EAAsBsnE,CAC1B,OAAOtY,EAAAiB,SAAA,CAAcjwD,CAAd,CAAP,EAA+BgmE,EAAA3hE,KAAA,CAAgBrE,CAAhB,CAFsB,CAPa,CA1yCtD,CAw2Bd,MA+cFunE,QAAuB,CAACj9D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bl2C,CAA7B,CAAuCxC,CAAvC,CAAiD,CAGtE45C,EAAA,CAAc5lD,CAAd,CAAqBnH,CAArB,CAA8BN,CAA9B,CAAoCmsD,CAApC,CAA0Cl2C,CAA1C,CAAoDxC,CAApD,CACAy5C,GAAA,CAAqBf,CAArB,CAEAA,EAAAsD,aAAA,CAAoB,OACpBtD,EAAA4D,YAAA4U,MAAA,CAAyBC,QAAQ,CAACJ,CAAD,CAAaC,CAAb,CAAwB,CACvD,IAAItnE,EAAQqnE,CAARrnE,EAAsBsnE,CAC1B,OAAOtY,EAAAiB,SAAA,CAAcjwD,CAAd,CAAP,EAA+BimE,EAAA5hE,KAAA,CAAkBrE,CAAlB,CAFwB,CAPa,CAvzCxD,CAu6Bd,MA6ZF0nE,QAAuB,CAACp9D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6B,CAE9CltD,CAAA,CAAYe,CAAAwG,KAAZ,CAAJ,EACElG,CAAAN,KAAA,CAAa,MAAb,CA1qpBK,EAAE3C,EA0qpBP,CASFiD,EAAAgJ,GAAA,CAAW,OAAX,CANe2b,QAAQ,CAACsoC,CAAD,CAAK,CACtBjtD,CAAA,CAAQ,CAAR,CAAAwkE,QAAJ,EACE3Y,CAAAwB,cAAA,CAAmB3tD,CAAA7C,MAAnB,CAA+BowD,CAA/B,EAAqCA,CAAAtzC,KAArC,CAFwB,CAM5B,CAEAkyC,EAAA4B,QAAA;AAAeC,QAAQ,EAAG,CAExB1tD,CAAA,CAAQ,CAAR,CAAAwkE,QAAA,CADY9kE,CAAA7C,MACZ,EAA+BgvD,CAAAsB,WAFP,CAK1BztD,EAAAi5B,SAAA,CAAc,OAAd,CAAuBkzB,CAAA4B,QAAvB,CAnBkD,CAp0CpC,CAi+Bd,SAsYFgX,QAA0B,CAACt9D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bl2C,CAA7B,CAAuCxC,CAAvC,CAAiDU,CAAjD,CAA0DkB,CAA1D,CAAkE,CAC1F,IAAI2vD,EAAYvU,EAAA,CAAkBp7C,CAAlB,CAA0B5N,CAA1B,CAAiC,aAAjC,CAAgDzH,CAAAilE,YAAhD,CAAkE,CAAA,CAAlE,CAAhB,CACIC,EAAazU,EAAA,CAAkBp7C,CAAlB,CAA0B5N,CAA1B,CAAiC,cAAjC,CAAiDzH,CAAAmlE,aAAjD,CAAoE,CAAA,CAApE,CAMjB7kE,EAAAgJ,GAAA,CAAW,OAAX,CAJe2b,QAAQ,CAACsoC,CAAD,CAAK,CAC1BpB,CAAAwB,cAAA,CAAmBrtD,CAAA,CAAQ,CAAR,CAAAwkE,QAAnB,CAAuCvX,CAAvC,EAA6CA,CAAAtzC,KAA7C,CAD0B,CAI5B,CAEAkyC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxB1tD,CAAA,CAAQ,CAAR,CAAAwkE,QAAA,CAAqB3Y,CAAAsB,WADG,CAO1BtB,EAAAiB,SAAA,CAAgBgY,QAAQ,CAACjoE,CAAD,CAAQ,CAC9B,MAAiB,CAAA,CAAjB,GAAOA,CADuB,CAIhCgvD,EAAAgB,YAAA9rD,KAAA,CAAsB,QAAQ,CAAClE,CAAD,CAAQ,CACpC,MAAO+E,GAAA,CAAO/E,CAAP,CAAc6nE,CAAd,CAD6B,CAAtC,CAIA7Y,EAAAuD,SAAAruD,KAAA,CAAmB,QAAQ,CAAClE,CAAD,CAAQ,CACjC,MAAOA,EAAA,CAAQ6nE,CAAR,CAAoBE,CADM,CAAnC,CAzB0F,CAv2C5E,CAm+Bd,OAAUrmE,CAn+BI,CAo+Bd,OAAUA,CAp+BI,CAq+Bd,OAAUA,CAr+BI,CAs+Bd,MAASA,CAt+BK,CAu+Bd,KAAQA,CAv+BM,CA5FhB,CA+oDIiP,GAAiB,CAAC,UAAD;AAAa,UAAb,CAAyB,SAAzB,CAAoC,QAApC,CACjB,QAAQ,CAAC2F,CAAD,CAAWwC,CAAX,CAAqB9B,CAArB,CAA8BkB,CAA9B,CAAsC,CAChD,MAAO,CACLoV,SAAU,GADL,CAELD,QAAS,CAAC,UAAD,CAFJ,CAGL7C,KAAM,CACJqJ,IAAKA,QAAQ,CAACvpB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBqlE,CAAvB,CAA8B,CACrCA,CAAA,CAAM,CAAN,CAAJ,EACE,CAAC1B,EAAA,CAAUpjE,CAAA,CAAUP,CAAAia,KAAV,CAAV,CAAD,EAAoC0pD,EAAAntC,KAApC,EAAoD/uB,CAApD,CAA2DnH,CAA3D,CAAoEN,CAApE,CAA0EqlE,CAAA,CAAM,CAAN,CAA1E,CAAoFpvD,CAApF,CACoDxC,CADpD,CAC8DU,CAD9D,CACuEkB,CADvE,CAFuC,CADvC,CAHD,CADyC,CAD7B,CA/oDrB,CAiqDIiwD,GAAwB,oBAjqD5B,CA2tDI3yD,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACL8X,SAAU,GADL,CAELF,SAAU,GAFL,CAGL7iB,QAASA,QAAQ,CAACs6C,CAAD,CAAMujB,CAAN,CAAe,CAC9B,MAAID,GAAA9jE,KAAA,CAA2B+jE,CAAA7yD,QAA3B,CAAJ,CACS8yD,QAA4B,CAAC/9D,CAAD,CAAQyb,CAAR,CAAaljB,CAAb,CAAmB,CACpDA,CAAAm1B,KAAA,CAAU,OAAV,CAAmB1tB,CAAA01C,MAAA,CAAYn9C,CAAA0S,QAAZ,CAAnB,CADoD,CADxD,CAKS+yD,QAAoB,CAACh+D,CAAD,CAAQyb,CAAR,CAAaljB,CAAb,CAAmB,CAC5CyH,CAAA/H,OAAA,CAAaM,CAAA0S,QAAb,CAA2BgzD,QAAyB,CAACvoE,CAAD,CAAQ,CAC1D6C,CAAAm1B,KAAA,CAAU,OAAV,CAAmBh4B,CAAnB,CAD0D,CAA5D,CAD4C,CANlB,CAH3B,CADyB,CA3tDlC,CAkyDIwR,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACg3D,CAAD,CAAW,CACpD,MAAO,CACLl7C,SAAU,IADL,CAEL/iB,QAASk+D,QAAsB,CAACC,CAAD,CAAkB,CAC/CF,CAAA7uC,kBAAA,CAA2B+uC,CAA3B,CACA;MAAOC,SAAmB,CAACr+D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAC/C2lE,CAAA3uC,iBAAA,CAA0B12B,CAA1B,CAAmCN,CAAA0O,OAAnC,CACApO,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVmH,EAAA/H,OAAA,CAAaM,CAAA0O,OAAb,CAA0Bq3D,QAA0B,CAAC5oE,CAAD,CAAQ,CAC1DmD,CAAA0Y,YAAA,CAAsB7b,CAAA,GAAU1B,CAAV,CAAsB,EAAtB,CAA2B0B,CADS,CAA5D,CAH+C,CAFF,CAF5C,CAD6C,CAAhC,CAlyDtB,CAs2DI4R,GAA0B,CAAC,cAAD,CAAiB,UAAjB,CAA6B,QAAQ,CAACsF,CAAD,CAAesxD,CAAf,CAAyB,CAC1F,MAAO,CACLj+D,QAASs+D,QAA8B,CAACH,CAAD,CAAkB,CACvDF,CAAA7uC,kBAAA,CAA2B+uC,CAA3B,CACA,OAAOI,SAA2B,CAACx+D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CACnDy2B,CAAAA,CAAgBpiB,CAAA,CAAa/T,CAAAN,KAAA,CAAaA,CAAAgvB,MAAAlgB,eAAb,CAAb,CACpB62D,EAAA3uC,iBAAA,CAA0B12B,CAA1B,CAAmCm2B,CAAAQ,YAAnC,CACA32B,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVN,EAAAi5B,SAAA,CAAc,gBAAd,CAAgC,QAAQ,CAAC97B,CAAD,CAAQ,CAC9CmD,CAAA0Y,YAAA,CAAsB7b,CAAA,GAAU1B,CAAV,CAAsB,EAAtB,CAA2B0B,CADH,CAAhD,CAJuD,CAFF,CADpD,CADmF,CAA9D,CAt2D9B,CAs6DI0R,GAAsB,CAAC,MAAD,CAAS,QAAT,CAAmB,UAAnB,CAA+B,QAAQ,CAACgH,CAAD,CAAOR,CAAP,CAAeswD,CAAf,CAAyB,CACxF,MAAO,CACLl7C,SAAU,GADL,CAEL/iB,QAASw+D,QAA0B,CAACC,CAAD,CAAW/wC,CAAX,CAAmB,CACpD,IAAIgxC,EAAmB/wD,CAAA,CAAO+f,CAAAxmB,WAAP,CAAvB;AACIy3D,EAAkBhxD,CAAA,CAAO+f,CAAAxmB,WAAP,CAA0B03D,QAAuB,CAACnpE,CAAD,CAAQ,CAC7E,MAAOmC,CAACnC,CAADmC,EAAU,EAAVA,UAAA,EADsE,CAAzD,CAGtBqmE,EAAA7uC,kBAAA,CAA2BqvC,CAA3B,CAEA,OAAOI,SAAuB,CAAC9+D,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CACnD2lE,CAAA3uC,iBAAA,CAA0B12B,CAA1B,CAAmCN,CAAA4O,WAAnC,CAEAnH,EAAA/H,OAAA,CAAa2mE,CAAb,CAA8BG,QAA8B,EAAG,CAG7DlmE,CAAAwE,KAAA,CAAa+Q,CAAA4wD,eAAA,CAAoBL,CAAA,CAAiB3+D,CAAjB,CAApB,CAAb,EAA6D,EAA7D,CAH6D,CAA/D,CAHmD,CAPD,CAFjD,CADiF,CAAhE,CAt6D1B,CAggEIoK,GAAoB7S,EAAA,CAAQ,CAC9ByrB,SAAU,GADoB,CAE9BD,QAAS,SAFqB,CAG9B7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6B,CACzCA,CAAAua,qBAAArlE,KAAA,CAA+B,QAAQ,EAAG,CACxCoG,CAAA01C,MAAA,CAAYn9C,CAAA4R,SAAZ,CADwC,CAA1C,CADyC,CAHb,CAAR,CAhgExB,CA+yEI3C,GAAmB0hD,EAAA,CAAe,EAAf,CAAmB,CAAA,CAAnB,CA/yEvB,CA+1EIthD,GAAsBshD,EAAA,CAAe,KAAf,CAAsB,CAAtB,CA/1E1B,CA+4EIxhD,GAAuBwhD,EAAA,CAAe,MAAf,CAAuB,CAAvB,CA/4E3B,CAq8EIphD,GAAmB86C,EAAA,CAAY,CACjC3iD,QAASA,QAAQ,CAACpH,CAAD,CAAUN,CAAV,CAAgB,CAC/BA,CAAAm1B,KAAA,CAAU,SAAV,CAAqB15B,CAArB,CACA6E,EAAA+d,YAAA,CAAoB,UAApB,CAF+B,CADA,CAAZ,CAr8EvB,CA8qFI5O,GAAwB,CAAC,QAAQ,EAAG,CACtC,MAAO,CACLgb,SAAU,GADL,CAELhjB,MAAO,CAAA,CAFF,CAGLgC,WAAY,GAHP;AAIL8gB,SAAU,GAJL,CAD+B,CAAZ,CA9qF5B,CAw4FIvX,GAAoB,EAx4FxB,CA64FI2zD,GAAmB,CACrB,KAAQ,CAAA,CADa,CAErB,MAAS,CAAA,CAFY,CAIvBvqE,EAAA,CACE,6IAAA,MAAA,CAAA,GAAA,CADF,CAEE,QAAQ,CAACmhD,CAAD,CAAY,CAClB,IAAIv0B,EAAgBkG,EAAA,CAAmB,KAAnB,CAA2BquB,CAA3B,CACpBvqC,GAAA,CAAkBgW,CAAlB,CAAA,CAAmC,CAAC,QAAD,CAAW,YAAX,CAAyB,QAAQ,CAAC3T,CAAD,CAASE,CAAT,CAAqB,CACvF,MAAO,CACLkV,SAAU,GADL,CAEL/iB,QAASA,QAAQ,CAAC6jB,CAAD,CAAWvrB,CAAX,CAAiB,CAKhC,IAAI8C,EAAKuS,CAAA,CAAOrV,CAAA,CAAKgpB,CAAL,CAAP,CAAgD,IAAhD,CAA4E,CAAA,CAA5E,CACT,OAAO49C,SAAuB,CAACn/D,CAAD,CAAQnH,CAAR,CAAiB,CAC7CA,CAAAgJ,GAAA,CAAWi0C,CAAX,CAAsB,QAAQ,CAACpgC,CAAD,CAAQ,CACpC,IAAIuI,EAAWA,QAAQ,EAAG,CACxB5iB,CAAA,CAAG2E,CAAH,CAAU,CAACmyC,OAAOz8B,CAAR,CAAV,CADwB,CAGtBwpD,GAAA,CAAiBppB,CAAjB,CAAJ,EAAmChoC,CAAA+rB,QAAnC,CACE75B,CAAAhI,WAAA,CAAiBimB,CAAjB,CADF,CAGEje,CAAAE,OAAA,CAAa+d,CAAb,CAPkC,CAAtC,CAD6C,CANf,CAF7B,CADgF,CAAtD,CAFjB,CAFtB,CAmgBA,KAAI3V,GAAgB,CAAC,UAAD,CAAa,QAAQ,CAACoD,CAAD,CAAW,CAClD,MAAO,CACL6hB,aAAc,CAAA,CADT;AAELnH,WAAY,SAFP,CAGLtD,SAAU,GAHL,CAIL+D,SAAU,CAAA,CAJL,CAKL7D,SAAU,GALL,CAMLoJ,MAAO,CAAA,CANF,CAOLlM,KAAMA,QAAQ,CAACkK,CAAD,CAAStG,CAAT,CAAmByD,CAAnB,CAA0Bm9B,CAA1B,CAAgCp6B,CAAhC,CAA6C,CAAA,IACnDhlB,CADmD,CAC5CigB,CAD4C,CAChC65C,CACvBh1C,EAAAnyB,OAAA,CAAcsvB,CAAAlf,KAAd,CAA0Bg3D,QAAwB,CAAC3pE,CAAD,CAAQ,CAEpDA,CAAJ,CACO6vB,CADP,EAEI+E,CAAA,CAAY,QAAQ,CAACttB,CAAD,CAAQk0B,CAAR,CAAkB,CACpC3L,CAAA,CAAa2L,CACbl0B,EAAA,CAAMA,CAAA3I,OAAA,EAAN,CAAA,CAAwBN,CAAAs4B,cAAA,CAAuB,aAAvB,CAAuC9E,CAAAlf,KAAvC,CAAoD,GAApD,CAIxB/C,EAAA,CAAQ,CACNtI,MAAOA,CADD,CAGR0O,EAAAilD,MAAA,CAAe3zD,CAAf,CAAsB8mB,CAAA7sB,OAAA,EAAtB,CAAyC6sB,CAAzC,CAToC,CAAtC,CAFJ,EAeMs7C,CAQJ,GAPEA,CAAAr+C,OAAA,EACA,CAAAq+C,CAAA,CAAmB,IAMrB,EAJI75C,CAIJ,GAHEA,CAAA9iB,SAAA,EACA,CAAA8iB,CAAA,CAAa,IAEf,EAAIjgB,CAAJ,GACE85D,CAIA,CAJmB77D,EAAA,CAAc+B,CAAAtI,MAAd,CAInB,CAHA0O,CAAAmlD,MAAA,CAAeuO,CAAf,CAAAjxC,KAAA,CAAsC,QAAQ,EAAG,CAC/CixC,CAAA,CAAmB,IAD4B,CAAjD,CAGA,CAAA95D,CAAA,CAAQ,IALV,CAvBF,CAFwD,CAA1D,CAFuD,CAPtD,CAD2C,CAAhC,CAApB,CAkOIkD,GAAqB,CAAC,kBAAD,CAAqB,eAArB,CAAsC,UAAtC,CAAkD,MAAlD,CACP,QAAQ,CAACoG,CAAD,CAAqBpD,CAArB,CAAsCE,CAAtC,CAAkD0C,CAAlD,CAAwD,CAChF,MAAO,CACL4U,SAAU,KADL,CAELF,SAAU,GAFL,CAGL+D,SAAU,CAAA,CAHL,CAILT,WAAY,SAJP;AAKLpkB,WAAY1B,EAAAlJ,KALP,CAML6I,QAASA,QAAQ,CAACpH,CAAD,CAAUN,CAAV,CAAgB,CAAA,IAC3B+mE,EAAS/mE,CAAAgQ,UAAT+2D,EAA2B/mE,CAAA/B,IADA,CAE3B+oE,EAAYhnE,CAAA0jC,OAAZsjC,EAA2B,EAFA,CAG3BC,EAAgBjnE,CAAAknE,WAEpB,OAAO,SAAQ,CAACz/D,CAAD,CAAQ8jB,CAAR,CAAkByD,CAAlB,CAAyBm9B,CAAzB,CAA+Bp6B,CAA/B,CAA4C,CAAA,IACrDo1C,EAAgB,CADqC,CAErDttB,CAFqD,CAGrDutB,CAHqD,CAIrDC,CAJqD,CAMrDC,EAA4BA,QAAQ,EAAG,CACrCF,CAAJ,GACEA,CAAA5+C,OAAA,EACA,CAAA4+C,CAAA,CAAkB,IAFpB,CAIIvtB,EAAJ,GACEA,CAAA3vC,SAAA,EACA,CAAA2vC,CAAA,CAAe,IAFjB,CAIIwtB,EAAJ,GACEl0D,CAAAmlD,MAAA,CAAe+O,CAAf,CAAAzxC,KAAA,CAAoC,QAAQ,EAAG,CAC7CwxC,CAAA,CAAkB,IAD2B,CAA/C,CAIA,CADAA,CACA,CADkBC,CAClB,CAAAA,CAAA,CAAiB,IALnB,CATyC,CAkB3C5/D,EAAA/H,OAAA,CAAamW,CAAA0xD,mBAAA,CAAwBR,CAAxB,CAAb,CAA8CS,QAA6B,CAACvpE,CAAD,CAAM,CAC/E,IAAIwpE,EAAiBA,QAAQ,EAAG,CAC1B,CAAAvoE,CAAA,CAAU+nE,CAAV,CAAJ,EAAkCA,CAAlC,EAAmD,CAAAx/D,CAAA01C,MAAA,CAAY8pB,CAAZ,CAAnD,EACEh0D,CAAA,EAF4B,CAAhC,CAKIy0D,EAAe,EAAEP,CAEjBlpE,EAAJ,EAGEoY,CAAA,CAAiBpY,CAAjB,CAAsB,CAAA,CAAtB,CAAA23B,KAAA,CAAiC,QAAQ,CAACqJ,CAAD,CAAW,CAClD,GAAIyoC,CAAJ,GAAqBP,CAArB,CAAA,CACA,IAAIxuC,EAAWlxB,CAAA+lB,KAAA,EACf2+B,EAAAn5B,SAAA,CAAgBiM,CAQZx6B,EAAAA,CAAQstB,CAAA,CAAY4G,CAAZ,CAAsB,QAAQ,CAACl0B,CAAD,CAAQ,CAChD6iE,CAAA,EACAn0D,EAAAilD,MAAA,CAAe3zD,CAAf,CAAsB,IAAtB,CAA4B8mB,CAA5B,CAAAqK,KAAA,CAA2C6xC,CAA3C,CAFgD,CAAtC,CAKZ5tB,EAAA,CAAelhB,CACf0uC,EAAA,CAAiB5iE,CAEjBo1C,EAAA+D,MAAA,CAAmB,uBAAnB;AAA4C3/C,CAA5C,CACAwJ,EAAA01C,MAAA,CAAY6pB,CAAZ,CAnBA,CADkD,CAApD,CAqBG,QAAQ,EAAG,CACRU,CAAJ,GAAqBP,CAArB,GACEG,CAAA,EACA,CAAA7/D,CAAAm2C,MAAA,CAAY,sBAAZ,CAAoC3/C,CAApC,CAFF,CADY,CArBd,CA2BA,CAAAwJ,CAAAm2C,MAAA,CAAY,0BAAZ,CAAwC3/C,CAAxC,CA9BF,GAgCEqpE,CAAA,EACA,CAAAnb,CAAAn5B,SAAA,CAAgB,IAjClB,CAR+E,CAAjF,CAxByD,CAL5B,CAN5B,CADyE,CADzD,CAlOzB,CA6TIlgB,GAAgC,CAAC,UAAD,CAClC,QAAQ,CAAC6yD,CAAD,CAAW,CACjB,MAAO,CACLl7C,SAAU,KADL,CAELF,SAAW,IAFN,CAGLC,QAAS,WAHJ,CAIL7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQ8jB,CAAR,CAAkByD,CAAlB,CAAyBm9B,CAAzB,CAA+B,CACvC,KAAA3qD,KAAA,CAAW+pB,CAAA,CAAS,CAAT,CAAAjsB,SAAA,EAAX,CAAJ,EAIEisB,CAAA7mB,MAAA,EACA,CAAAihE,CAAA,CAAS5tD,EAAA,CAAoBo0C,CAAAn5B,SAApB,CAAmCx3B,CAAnC,CAAAsd,WAAT,CAAA,CAAkErR,CAAlE,CACIkgE,QAA8B,CAACljE,CAAD,CAAQ,CACxC8mB,CAAA1mB,OAAA,CAAgBJ,CAAhB,CADwC,CAD1C,CAGG,CAAC8nB,oBAAqBhB,CAAtB,CAHH,CALF,GAYAA,CAAAzmB,KAAA,CAAcqnD,CAAAn5B,SAAd,CACA,CAAA2yC,CAAA,CAASp6C,CAAA0I,SAAA,EAAT,CAAA,CAA8BxsB,CAA9B,CAbA,CAD2C,CAJxC,CADU,CADe,CA7TpC,CA8YI0I,GAAkBk6C,EAAA,CAAY,CAChC9/B,SAAU,GADsB,CAEhC7iB,QAASA,QAAQ,EAAG,CAClB,MAAO,CACLspB,IAAKA,QAAQ,CAACvpB,CAAD,CAAQnH,CAAR,CAAiB0tB,CAAjB,CAAwB,CACnCvmB,CAAA01C,MAAA,CAAYnvB,CAAA9d,OAAZ,CADmC,CADhC,CADW,CAFY,CAAZ,CA9YtB;AA6eIyB,GAAkBA,QAAQ,EAAG,CAC/B,MAAO,CACL8Y,SAAU,GADL,CAELF,SAAU,GAFL,CAGLC,QAAS,SAHJ,CAIL7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6B,CAGzC,IAAIz6C,EAASpR,CAAAN,KAAA,CAAaA,CAAAgvB,MAAAtd,OAAb,CAATA,EAA4C,IAAhD,CACIk2D,EAA6B,OAA7BA,GAAa5nE,CAAAwtD,OADjB,CAEI7kD,EAAYi/D,CAAA,CAAazuD,CAAA,CAAKzH,CAAL,CAAb,CAA4BA,CAiB5Cy6C,EAAAuD,SAAAruD,KAAA,CAfYoC,QAAQ,CAACghE,CAAD,CAAY,CAE9B,GAAI,CAAAxlE,CAAA,CAAYwlE,CAAZ,CAAJ,CAAA,CAEA,IAAItiD,EAAO,EAEPsiD,EAAJ,EACEroE,CAAA,CAAQqoE,CAAArkE,MAAA,CAAgBuI,CAAhB,CAAR,CAAoC,QAAQ,CAACxL,CAAD,CAAQ,CAC9CA,CAAJ,EAAWglB,CAAA9gB,KAAA,CAAUumE,CAAA,CAAazuD,CAAA,CAAKhc,CAAL,CAAb,CAA2BA,CAArC,CADuC,CAApD,CAKF,OAAOglB,EAVP,CAF8B,CAehC,CACAgqC,EAAAgB,YAAA9rD,KAAA,CAAsB,QAAQ,CAAClE,CAAD,CAAQ,CACpC,MAAIhB,EAAA,CAAQgB,CAAR,CAAJ,CACSA,CAAAuI,KAAA,CAAWgM,CAAX,CADT,CAIOjW,CAL6B,CAAtC,CASA0wD,EAAAiB,SAAA,CAAgBgY,QAAQ,CAACjoE,CAAD,CAAQ,CAC9B,MAAO,CAACA,CAAR,EAAiB,CAACA,CAAArB,OADY,CAhCS,CAJtC,CADwB,CA7ejC,CAiiBI61D,GAAc,UAjiBlB,CAkiBIC,GAAgB,YAliBpB,CAmiBIpF,GAAiB,aAniBrB,CAoiBIC,GAAc,UApiBlB,CAuiBIsF,GAAgB,YAviBpB,CA0iBInC,GAAiB,IAAIl0D,CAAJ,CAAW,SAAX,CA1iBrB,CAkvBImsE,GAAoB,CAAC,QAAD,CAAW,mBAAX,CAAgC,QAAhC;AAA0C,UAA1C,CAAsD,QAAtD,CAAgE,UAAhE,CAA4E,UAA5E,CAAwF,YAAxF,CAAsG,IAAtG,CAA4G,cAA5G,CACpB,QAAQ,CAACh2C,CAAD,CAAS5d,CAAT,CAA4B+a,CAA5B,CAAmCzD,CAAnC,CAA6ClW,CAA7C,CAAqDlC,CAArD,CAA+DsD,CAA/D,CAAyElB,CAAzE,CAAqFE,CAArF,CAAyFpB,CAAzF,CAAuG,CAEjH,IAAAyzD,YAAA,CADA,IAAAra,WACA,CADkBrlC,MAAA4mC,IAElB,KAAA+Y,gBAAA,CAAuBtsE,CACvB,KAAAs0D,YAAA,CAAmB,EACnB,KAAAiY,iBAAA,CAAwB,EACxB,KAAAtY,SAAA,CAAgB,EAChB,KAAAvC,YAAA,CAAmB,EACnB,KAAAuZ,qBAAA,CAA4B,EAC5B,KAAAuB,WAAA,CAAkB,CAAA,CAClB,KAAAC,SAAA,CAAgB,CAAA,CAChB,KAAAld,UAAA,CAAiB,CAAA,CACjB,KAAAD,OAAA,CAAc,CAAA,CACd,KAAAE,OAAA,CAAc,CAAA,CACd,KAAAC,SAAA,CAAgB,CAAA,CAChB,KAAAP,OAAA,CAAc,EACd,KAAAC,UAAA,CAAiB,EACjB,KAAAC,SAAA,CAAgBpvD,CAChB,KAAAqvD,MAAA,CAAaz2C,CAAA,CAAa2a,CAAAxoB,KAAb,EAA2B,EAA3B,CAA+B,CAAA,CAA/B,CAAA,CAAsCqrB,CAAtC,CAlBoG,KAqB7Gs2C,EAAgB9yD,CAAA,CAAO2Z,CAAAxd,QAAP,CArB6F,CAsB7G42D,EAAsBD,CAAAhvC,OAtBuF,CAuB7GkvC,EAAaF,CAvBgG,CAwB7GG,EAAaF,CAxBgG;AAyB7GG,EAAkB,IAzB2F,CA0B7GC,CA1B6G,CA2B7Grc,EAAO,IAEX,KAAAsc,aAAA,CAAoBC,QAAQ,CAAC5kD,CAAD,CAAU,CAEpC,IADAqoC,CAAAoD,SACA,CADgBzrC,CAChB,GAAeA,CAAA6kD,aAAf,CAAqC,CAAA,IAC/BC,EAAoBvzD,CAAA,CAAO2Z,CAAAxd,QAAP,CAAuB,IAAvB,CADW,CAE/Bq3D,EAAoBxzD,CAAA,CAAO2Z,CAAAxd,QAAP,CAAuB,QAAvB,CAExB62D,EAAA,CAAaA,QAAQ,CAACx2C,CAAD,CAAS,CAC5B,IAAI2yC,EAAa2D,CAAA,CAAct2C,CAAd,CACbr1B,EAAA,CAAWgoE,CAAX,CAAJ,GACEA,CADF,CACeoE,CAAA,CAAkB/2C,CAAlB,CADf,CAGA,OAAO2yC,EALqB,CAO9B8D,EAAA,CAAaA,QAAQ,CAACz2C,CAAD,CAAS+F,CAAT,CAAmB,CAClCp7B,CAAA,CAAW2rE,CAAA,CAAct2C,CAAd,CAAX,CAAJ,CACEg3C,CAAA,CAAkBh3C,CAAlB,CAA0B,CAACi3C,KAAM3c,CAAA2b,YAAP,CAA1B,CADF,CAGEM,CAAA,CAAoBv2C,CAApB,CAA4Bs6B,CAAA2b,YAA5B,CAJoC,CAXL,CAArC,IAkBO,IAAK3uC,CAAAgvC,CAAAhvC,OAAL,CACL,KAAMy2B,GAAA,CAAe,WAAf,CACF5gC,CAAAxd,QADE,CACajN,EAAA,CAAYgnB,CAAZ,CADb,CAAN,CArBkC,CA8CtC,KAAAwiC,QAAA,CAAelvD,CAoBf,KAAAuuD,SAAA,CAAgB2b,QAAQ,CAAC5rE,CAAD,CAAQ,CAC9B,MAAO8B,EAAA,CAAY9B,CAAZ,CAAP,EAAuC,EAAvC,GAA6BA,CAA7B,EAAuD,IAAvD,GAA6CA,CAA7C,EAA+DA,CAA/D,GAAyEA,CAD3C,CA/FiF,KAmG7GqtD,EAAaj/B,CAAA7hB,cAAA,CAAuB,iBAAvB,CAAb8gD,EAA0DE,EAnGmD,CAoG7Gse,EAAyB,CAwB7B9c,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnB5gC,SAAUA,CAFS,CAGnB6gC,IAAKA,QAAQ,CAACjb,CAAD,CAASjF,CAAT,CAAmB,CAC9BiF,CAAA,CAAOjF,CAAP,CAAA,CAAmB,CAAA,CADW,CAHb,CAMnBmgB,MAAOA,QAAQ,CAAClb,CAAD;AAASjF,CAAT,CAAmB,CAChC,OAAOiF,CAAA,CAAOjF,CAAP,CADyB,CANf,CASnBse,WAAYA,CATO,CAUnBr3C,SAAUA,CAVS,CAArB,CAwBA,KAAAu5C,aAAA,CAAoBuc,QAAQ,EAAG,CAC7B9c,CAAApB,OAAA,CAAc,CAAA,CACdoB,EAAAnB,UAAA,CAAiB,CAAA,CACjB73C,EAAAkL,YAAA,CAAqBkN,CAArB,CAA+BkhC,EAA/B,CACAt5C,EAAAiL,SAAA,CAAkBmN,CAAlB,CAA4BihC,EAA5B,CAJ6B,CAkB/B,KAAAF,UAAA,CAAiB4c,QAAQ,EAAG,CAC1B/c,CAAApB,OAAA,CAAc,CAAA,CACdoB,EAAAnB,UAAA,CAAiB,CAAA,CACjB73C,EAAAkL,YAAA,CAAqBkN,CAArB,CAA+BihC,EAA/B,CACAr5C,EAAAiL,SAAA,CAAkBmN,CAAlB,CAA4BkhC,EAA5B,CACAjC,EAAA8B,UAAA,EAL0B,CAoB5B,KAAAQ,cAAA,CAAqBqc,QAAQ,EAAG,CAC9Bhd,CAAA+b,SAAA,CAAgB,CAAA,CAChB/b,EAAA8b,WAAA,CAAkB,CAAA,CAClB90D,EAAAy5C,SAAA,CAAkBrhC,CAAlB,CA3YkB69C,cA2YlB,CA1YgBC,YA0YhB,CAH8B,CAiBhC,KAAAC,YAAA,CAAmBC,QAAQ,EAAG,CAC5Bpd,CAAA+b,SAAA,CAAgB,CAAA,CAChB/b,EAAA8b,WAAA,CAAkB,CAAA,CAClB90D,EAAAy5C,SAAA,CAAkBrhC,CAAlB,CA3ZgB89C,YA2ZhB,CA5ZkBD,cA4ZlB,CAH4B,CAmE9B,KAAA/d,mBAAA,CAA0Bme,QAAQ,EAAG,CACnC/yD,CAAAwQ,OAAA,CAAgBshD,CAAhB,CACApc,EAAAsB,WAAA;AAAkBtB,CAAAsd,yBAClBtd,EAAA4B,QAAA,EAHmC,CAkBrC,KAAAkC,UAAA,CAAiByZ,QAAQ,EAAG,CAE1B,GAAI,CAAAtqE,CAAA,CAAS+sD,CAAA2b,YAAT,CAAJ,EAAkC,CAAAhkE,KAAA,CAAMqoD,CAAA2b,YAAN,CAAlC,CAAA,CASA,IAAItD,EAAarY,CAAA4b,gBAAjB,CAEI4B,EAAYxd,CAAAlB,OAFhB,CAGI2e,EAAiBzd,CAAA2b,YAHrB,CAKI+B,EAAe1d,CAAAoD,SAAfsa,EAAgC1d,CAAAoD,SAAAsa,aAEpC1d,EAAA2d,gBAAA,CAAqBtF,CAArB,CAZgBrY,CAAAsd,yBAYhB,CAA4C,QAAQ,CAACM,CAAD,CAAW,CAGxDF,CAAL,EAAqBF,CAArB,GAAmCI,CAAnC,GAKE5d,CAAA2b,YAEA,CAFmBiC,CAAA,CAAWvF,CAAX,CAAwB/oE,CAE3C,CAAI0wD,CAAA2b,YAAJ,GAAyB8B,CAAzB,EACEzd,CAAA6d,oBAAA,EARJ,CAH6D,CAA/D,CAhBA,CAF0B,CAoC5B,KAAAF,gBAAA,CAAuBG,QAAQ,CAACzF,CAAD,CAAaC,CAAb,CAAwByF,CAAxB,CAAsC,CAmCnEC,QAASA,EAAqB,EAAG,CAC/B,IAAIC,EAAsB,CAAA,CAC1BhuE,EAAA,CAAQ+vD,CAAA4D,YAAR,CAA0B,QAAQ,CAACsa,CAAD,CAAY7jE,CAAZ,CAAkB,CAClD,IAAIpF,EAASipE,CAAA,CAAU7F,CAAV,CAAsBC,CAAtB,CACb2F,EAAA,CAAsBA,CAAtB,EAA6ChpE,CAC7CywD,EAAA,CAAYrrD,CAAZ,CAAkBpF,CAAlB,CAHkD,CAApD,CAKA,OAAKgpE,EAAL,CAMO,CAAA,CANP,EACEhuE,CAAA,CAAQ+vD,CAAA6b,iBAAR,CAA+B,QAAQ,CAACvrC,CAAD;AAAIj2B,CAAJ,CAAU,CAC/CqrD,CAAA,CAAYrrD,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAGO,CAAA,CAAA,CAJT,CAP+B,CAgBjC8jE,QAASA,EAAsB,EAAG,CAChC,IAAIC,EAAoB,EAAxB,CACIR,EAAW,CAAA,CACf3tE,EAAA,CAAQ+vD,CAAA6b,iBAAR,CAA+B,QAAQ,CAACqC,CAAD,CAAY7jE,CAAZ,CAAkB,CACvD,IAAI45B,EAAUiqC,CAAA,CAAU7F,CAAV,CAAsBC,CAAtB,CACd,IAAmBrkC,CAAAA,CAAnB,EA77uBQ,CAAA5jC,CAAA,CA67uBW4jC,CA77uBAxK,KAAX,CA67uBR,CACE,KAAMg6B,GAAA,CAAe,kBAAf,CAC0ExvB,CAD1E,CAAN,CAGFyxB,CAAA,CAAYrrD,CAAZ,CAAkB/K,CAAlB,CACA8uE,EAAAlpE,KAAA,CAAuB++B,CAAAxK,KAAA,CAAa,QAAQ,EAAG,CAC7Ci8B,CAAA,CAAYrrD,CAAZ,CAAkB,CAAA,CAAlB,CAD6C,CAAxB,CAEpB,QAAQ,CAAC6d,CAAD,CAAQ,CACjB0lD,CAAA,CAAW,CAAA,CACXlY,EAAA,CAAYrrD,CAAZ,CAAkB,CAAA,CAAlB,CAFiB,CAFI,CAAvB,CAPuD,CAAzD,CAcK+jE,EAAAzuE,OAAL,CAGE2Z,CAAA8hC,IAAA,CAAOgzB,CAAP,CAAA30C,KAAA,CAA+B,QAAQ,EAAG,CACxC40C,CAAA,CAAeT,CAAf,CADwC,CAA1C,CAEGlrE,CAFH,CAHF,CACE2rE,CAAA,CAAe,CAAA,CAAf,CAlB8B,CA0BlC3Y,QAASA,EAAW,CAACrrD,CAAD,CAAOkrD,CAAP,CAAgB,CAC9B+Y,CAAJ,GAA6BzB,CAA7B,EACE7c,CAAAF,aAAA,CAAkBzlD,CAAlB,CAAwBkrD,CAAxB,CAFgC,CAMpC8Y,QAASA,EAAc,CAACT,CAAD,CAAW,CAC5BU,CAAJ,GAA6BzB,CAA7B,EAEEkB,CAAA,CAAaH,CAAb,CAH8B,CAlFlCf,CAAA,EACA,KAAIyB,EAAuBzB,CAa3B0B,UAA2B,EAAG,CAC5B,IAAIC,EAAWxe,CAAAsD,aAAXkb,EAAgC,OACpC,IAAInC,CAAJ,GAAoB/sE,CAApB,CACEo2D,CAAA,CAAY8Y,CAAZ,CAAsB,IAAtB,CADF,KAaE,OAVKnC,EAUEA,GATLpsE,CAAA,CAAQ+vD,CAAA4D,YAAR,CAA0B,QAAQ,CAACtzB,CAAD,CAAIj2B,CAAJ,CAAU,CAC1CqrD,CAAA,CAAYrrD,CAAZ,CAAkB,IAAlB,CAD0C,CAA5C,CAGA,CAAApK,CAAA,CAAQ+vD,CAAA6b,iBAAR,CAA+B,QAAQ,CAACvrC,CAAD,CAAIj2B,CAAJ,CAAU,CAC/CqrD,CAAA,CAAYrrD,CAAZ;AAAkB,IAAlB,CAD+C,CAAjD,CAMKgiE,EADP3W,CAAA,CAAY8Y,CAAZ,CAAsBnC,CAAtB,CACOA,CAAAA,CAET,OAAO,CAAA,CAjBqB,CAA9BkC,CAVK,EAAL,CAIKP,CAAA,EAAL,CAIAG,CAAA,EAJA,CACEE,CAAA,CAAe,CAAA,CAAf,CALF,CACEA,CAAA,CAAe,CAAA,CAAf,CANiE,CAsGrE,KAAAhf,iBAAA,CAAwBof,QAAQ,EAAG,CACjC,IAAInG,EAAYtY,CAAAsB,WAEhBh3C,EAAAwQ,OAAA,CAAgBshD,CAAhB,CAKA,IAAIpc,CAAAsd,yBAAJ,GAAsChF,CAAtC,EAAkE,EAAlE,GAAoDA,CAApD,EAAyEtY,CAAAuB,sBAAzE,CAGAvB,CAAAsd,yBAMA,CANgChF,CAMhC,CAHItY,CAAAnB,UAGJ,EAFE,IAAAsB,UAAA,EAEF,CAAA,IAAAue,mBAAA,EAjBiC,CAoBnC,KAAAA,mBAAA,CAA0BC,QAAQ,EAAG,CAEnC,IAAItG,EADYrY,CAAAsd,yBAIhB,IAFAjB,CAEA,CAFcvpE,CAAA,CAAYulE,CAAZ,CAAA,CAA0B/oE,CAA1B,CAAsC,CAAA,CAEpD,CACE,IAAS,IAAAuB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBmvD,CAAAuD,SAAA5zD,OAApB,CAA0CkB,CAAA,EAA1C,CAEE,GADAwnE,CACI,CADSrY,CAAAuD,SAAA,CAAc1yD,CAAd,CAAA,CAAiBwnE,CAAjB,CACT,CAAAvlE,CAAA,CAAYulE,CAAZ,CAAJ,CAA6B,CAC3BgE,CAAA,CAAc,CAAA,CACd,MAF2B,CAM7BppE,CAAA,CAAS+sD,CAAA2b,YAAT,CAAJ,EAAkChkE,KAAA,CAAMqoD,CAAA2b,YAAN,CAAlC,GAEE3b,CAAA2b,YAFF,CAEqBO,CAAA,CAAWx2C,CAAX,CAFrB,CAIA,KAAI+3C,EAAiBzd,CAAA2b,YAArB;AACI+B,EAAe1d,CAAAoD,SAAfsa,EAAgC1d,CAAAoD,SAAAsa,aACpC1d,EAAA4b,gBAAA,CAAuBvD,CAEnBqF,EAAJ,GACE1d,CAAA2b,YAkBA,CAlBmBtD,CAkBnB,CAAIrY,CAAA2b,YAAJ,GAAyB8B,CAAzB,EACEzd,CAAA6d,oBAAA,EApBJ,CAOA7d,EAAA2d,gBAAA,CAAqBtF,CAArB,CAAiCrY,CAAAsd,yBAAjC,CAAgE,QAAQ,CAACM,CAAD,CAAW,CAC5EF,CAAL,GAKE1d,CAAA2b,YAMF,CANqBiC,CAAA,CAAWvF,CAAX,CAAwB/oE,CAM7C,CAAI0wD,CAAA2b,YAAJ,GAAyB8B,CAAzB,EACEzd,CAAA6d,oBAAA,EAZF,CADiF,CAAnF,CA7BmC,CA+CrC,KAAAA,oBAAA,CAA2Be,QAAQ,EAAG,CACpCzC,CAAA,CAAWz2C,CAAX,CAAmBs6B,CAAA2b,YAAnB,CACA1rE,EAAA,CAAQ+vD,CAAAua,qBAAR,CAAmC,QAAQ,CAACzhD,CAAD,CAAW,CACpD,GAAI,CACFA,CAAA,EADE,CAEF,MAAOtgB,CAAP,CAAU,CACVsP,CAAA,CAAkBtP,CAAlB,CADU,CAHwC,CAAtD,CAFoC,CAmDtC,KAAAgpD,cAAA,CAAqBqd,QAAQ,CAAC7tE,CAAD,CAAQu2D,CAAR,CAAiB,CAC5CvH,CAAAsB,WAAA,CAAkBtwD,CACbgvD,EAAAoD,SAAL,EAAsB0b,CAAA9e,CAAAoD,SAAA0b,gBAAtB,EACE9e,CAAA+e,0BAAA,CAA+BxX,CAA/B,CAH0C,CAO9C,KAAAwX,0BAAA;AAAiCC,QAAQ,CAACzX,CAAD,CAAU,CAAA,IAC7C0X,EAAgB,CAD6B,CAE7CtnD,EAAUqoC,CAAAoD,SAGVzrC,EAAJ,EAAe5kB,CAAA,CAAU4kB,CAAAunD,SAAV,CAAf,GACEA,CACA,CADWvnD,CAAAunD,SACX,CAAIjsE,CAAA,CAASisE,CAAT,CAAJ,CACED,CADF,CACkBC,CADlB,CAEWjsE,CAAA,CAASisE,CAAA,CAAS3X,CAAT,CAAT,CAAJ,CACL0X,CADK,CACWC,CAAA,CAAS3X,CAAT,CADX,CAEIt0D,CAAA,CAASisE,CAAA,CAAS,SAAT,CAAT,CAFJ,GAGLD,CAHK,CAGWC,CAAA,CAAS,SAAT,CAHX,CAJT,CAWA50D,EAAAwQ,OAAA,CAAgBshD,CAAhB,CACI6C,EAAJ,CACE7C,CADF,CACoB9xD,CAAA,CAAS,QAAQ,EAAG,CACpC01C,CAAAX,iBAAA,EADoC,CAApB,CAEf4f,CAFe,CADpB,CAIW71D,CAAA+rB,QAAJ,CACL6qB,CAAAX,iBAAA,EADK,CAGL35B,CAAAlqB,OAAA,CAAc,QAAQ,EAAG,CACvBwkD,CAAAX,iBAAA,EADuB,CAAzB,CAxB+C,CAsCnD35B,EAAAnyB,OAAA,CAAc4rE,QAAqB,EAAG,CACpC,IAAI9G,EAAa6D,CAAA,CAAWx2C,CAAX,CAIjB,IAAI2yC,CAAJ,GAAmBrY,CAAA2b,YAAnB,GAEI3b,CAAA2b,YAFJ,GAEyB3b,CAAA2b,YAFzB,EAE6CtD,CAF7C,GAE4DA,CAF5D,EAGE,CACArY,CAAA2b,YAAA,CAAmB3b,CAAA4b,gBAAnB,CAA0CvD,CAC1CgE,EAAA,CAAc/sE,CAMd,KARA,IAII8vE,EAAapf,CAAAgB,YAJjB,CAKI9/B,EAAMk+C,CAAAzvE,OALV,CAOI2oE,EAAYD,CAChB,CAAOn3C,CAAA,EAAP,CAAA,CACEo3C,CAAA,CAAY8G,CAAA,CAAWl+C,CAAX,CAAA,CAAgBo3C,CAAhB,CAEVtY,EAAAsB,WAAJ,GAAwBgX,CAAxB,GACEtY,CAAAsB,WAGA,CAHkBtB,CAAAsd,yBAGlB,CAHkDhF,CAGlD,CAFAtY,CAAA4B,QAAA,EAEA;AAAA5B,CAAA2d,gBAAA,CAAqBtF,CAArB,CAAiCC,CAAjC,CAA4C5lE,CAA5C,CAJF,CAXA,CAmBF,MAAO2lE,EA3B6B,CAAtC,CA7kBiH,CAD3F,CAlvBxB,CAwgDI/yD,GAAmB,CAAC,YAAD,CAAe,QAAQ,CAAC8D,CAAD,CAAa,CACzD,MAAO,CACLkV,SAAU,GADL,CAELD,QAAS,CAAC,SAAD,CAAY,QAAZ,CAAsB,kBAAtB,CAFJ,CAGL/gB,WAAYo+D,EAHP,CAOLt9C,SAAU,CAPL,CAQL7iB,QAAS8jE,QAAuB,CAAClrE,CAAD,CAAU,CAExCA,CAAA8d,SAAA,CAAiBouC,EAAjB,CAAApuC,SAAA,CA9+BgBgrD,cA8+BhB,CAAAhrD,SAAA,CAAoEuzC,EAApE,CAEA,OAAO,CACL3gC,IAAKy6C,QAAuB,CAAChkE,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBqlE,CAAvB,CAA8B,CAAA,IACpDqG,EAAYrG,CAAA,CAAM,CAAN,CADwC,CAEpDsG,EAAWtG,CAAA,CAAM,CAAN,CAAXsG,EAAuBjhB,EAE3BghB,EAAAjD,aAAA,CAAuBpD,CAAA,CAAM,CAAN,CAAvB,EAAmCA,CAAA,CAAM,CAAN,CAAA9V,SAAnC,CAGAoc,EAAAvgB,YAAA,CAAqBsgB,CAArB,CAEA1rE,EAAAi5B,SAAA,CAAc,MAAd,CAAsB,QAAQ,CAACrB,CAAD,CAAW,CACnC8zC,CAAA5gB,MAAJ,GAAwBlzB,CAAxB,EACE+zC,CAAAhgB,gBAAA,CAAyB+f,CAAzB,CAAoC9zC,CAApC,CAFqC,CAAzC,CAMAnwB,EAAAimB,IAAA,CAAU,UAAV,CAAsB,QAAQ,EAAG,CAC/Bi+C,CAAA5f,eAAA,CAAwB2f,CAAxB,CAD+B,CAAjC,CAfwD,CADrD,CAoBLz6C,KAAM26C,QAAwB,CAACnkE,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBqlE,CAAvB,CAA8B,CAC1D,IAAIqG,EAAYrG,CAAA,CAAM,CAAN,CAChB,IAAIqG,CAAAnc,SAAJ;AAA0Bmc,CAAAnc,SAAAsc,SAA1B,CACEvrE,CAAAgJ,GAAA,CAAWoiE,CAAAnc,SAAAsc,SAAX,CAAwC,QAAQ,CAACte,CAAD,CAAK,CACnDme,CAAAR,0BAAA,CAAoC3d,CAApC,EAA0CA,CAAAtzC,KAA1C,CADmD,CAArD,CAKF3Z,EAAAgJ,GAAA,CAAW,MAAX,CAAmB,QAAQ,CAACikD,CAAD,CAAK,CAC1Bme,CAAAxD,SAAJ,GAEI3yD,CAAA+rB,QAAJ,CACE75B,CAAAhI,WAAA,CAAiBisE,CAAApC,YAAjB,CADF,CAGE7hE,CAAAE,OAAA,CAAa+jE,CAAApC,YAAb,CALF,CAD8B,CAAhC,CAR0D,CApBvD,CAJiC,CARrC,CADkD,CAApC,CAxgDvB,CAgkDIwC,GAAiB,uBAhkDrB,CAkuDIj5D,GAA0BA,QAAQ,EAAG,CACvC,MAAO,CACL4X,SAAU,GADL,CAELhhB,WAAY,CAAC,QAAD,CAAW,QAAX,CAAqB,QAAQ,CAACooB,CAAD,CAASC,CAAT,CAAiB,CACxD,IAAIi6C,EAAO,IACX,KAAAxc,SAAA,CAAgB1uD,EAAA,CAAKgxB,CAAAsrB,MAAA,CAAarrB,CAAAlf,eAAb,CAAL,CAEZ,KAAA28C,SAAAsc,SAAJ,GAA+BpwE,CAA/B,EACE,IAAA8zD,SAAA0b,gBAEA,CAFgC,CAAA,CAEhC,CAAA,IAAA1b,SAAAsc,SAAA,CAAyB1yD,CAAA,CAAK,IAAAo2C,SAAAsc,SAAA7mE,QAAA,CAA+B8mE,EAA/B,CAA+C,QAAQ,EAAG,CACtFC,CAAAxc,SAAA0b,gBAAA;AAAgC,CAAA,CAChC,OAAO,GAF+E,CAA1D,CAAL,CAH3B,EAQE,IAAA1b,SAAA0b,gBARF,CAQkC,CAAA,CAZsB,CAA9C,CAFP,CADgC,CAluDzC,CAk4DI56D,GAAyBg6C,EAAA,CAAY,CAAE/7B,SAAU,CAAA,CAAZ,CAAkB/D,SAAU,GAA5B,CAAZ,CAl4D7B,CAs4DIyhD,GAAkBtwE,CAAA,CAAO,WAAP,CAt4DtB,CA2lEIuwE,GAAoB,2OA3lExB,CAwmEI56D,GAAqB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAQ,CAACs0D,CAAD,CAAWtwD,CAAX,CAAmB,CAEzE62D,QAASA,EAAsB,CAACC,CAAD,CAAaC,CAAb,CAA4B3kE,CAA5B,CAAmC,CAsDhE4kE,QAASA,EAAM,CAACC,CAAD,CAAc7H,CAAd,CAAyB8H,CAAzB,CAAgCnlB,CAAhC,CAAuColB,CAAvC,CAAiD,CAC9D,IAAAF,YAAA,CAAmBA,CACnB,KAAA7H,UAAA,CAAiBA,CACjB,KAAA8H,MAAA,CAAaA,CACb,KAAAnlB,MAAA,CAAaA,CACb,KAAAolB,SAAA,CAAgBA,CAL8C,CAtDA;AAEhE,IAAI3qE,EAAQsqE,CAAAtqE,MAAA,CAAiBoqE,EAAjB,CACZ,IAAMpqE,CAAAA,CAAN,CACE,KAAMmqE,GAAA,CAAgB,MAAhB,CAIJG,CAJI,CAIQ5nE,EAAA,CAAY6nE,CAAZ,CAJR,CAAN,CAUF,IAAIK,EAAY5qE,CAAA,CAAM,CAAN,CAAZ4qE,EAAwB5qE,CAAA,CAAM,CAAN,CAA5B,CAEI6qE,EAAU7qE,CAAA,CAAM,CAAN,CAGV8qE,EAAAA,CAAW,MAAAnrE,KAAA,CAAYK,CAAA,CAAM,CAAN,CAAZ,CAAX8qE,EAAoC9qE,CAAA,CAAM,CAAN,CAExC,KAAI+qE,EAAU/qE,CAAA,CAAM,CAAN,CAEV7C,EAAAA,CAAUqW,CAAA,CAAOxT,CAAA,CAAM,CAAN,CAAA,CAAWA,CAAA,CAAM,CAAN,CAAX,CAAsB4qE,CAA7B,CAEd,KAAII,EADaF,CACbE,EADyBx3D,CAAA,CAAOs3D,CAAP,CACzBE,EAA4B7tE,CAAhC,CACI8tE,EAAYF,CAAZE,EAAuBz3D,CAAA,CAAOu3D,CAAP,CAD3B,CAMIG,EAAoBH,CAAA,CACE,QAAQ,CAACzvE,CAAD,CAAQ2jB,CAAR,CAAgB,CAAE,MAAOgsD,EAAA,CAAUrlE,CAAV,CAAiBqZ,CAAjB,CAAT,CAD1B,CAEEksD,QAAuB,CAAC7vE,CAAD,CAAQ,CAAE,MAAOmhB,GAAA,CAAQnhB,CAAR,CAAT,CARzD,CASI8vE,EAAkBA,QAAQ,CAAC9vE,CAAD,CAAQZ,CAAR,CAAa,CACzC,MAAOwwE,EAAA,CAAkB5vE,CAAlB,CAAyB+vE,CAAA,CAAU/vE,CAAV,CAAiBZ,CAAjB,CAAzB,CADkC,CAT3C,CAaI4wE,EAAY93D,CAAA,CAAOxT,CAAA,CAAM,CAAN,CAAP,EAAmBA,CAAA,CAAM,CAAN,CAAnB,CAbhB,CAcIurE,EAAY/3D,CAAA,CAAOxT,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAdhB,CAeIwrE,EAAgBh4D,CAAA,CAAOxT,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAfpB,CAgBIyrE,EAAWj4D,CAAA,CAAOxT,CAAA,CAAM,CAAN,CAAP,CAhBf,CAkBIif,EAAS,EAlBb,CAmBIosD,EAAYR,CAAA,CAAU,QAAQ,CAACvvE,CAAD,CAAQZ,CAAR,CAAa,CAC7CukB,CAAA,CAAO4rD,CAAP,CAAA,CAAkBnwE,CAClBukB,EAAA,CAAO2rD,CAAP,CAAA,CAAoBtvE,CACpB,OAAO2jB,EAHsC,CAA/B,CAIZ,QAAQ,CAAC3jB,CAAD,CAAQ,CAClB2jB,CAAA,CAAO2rD,CAAP,CAAA,CAAoBtvE,CACpB,OAAO2jB,EAFW,CAcpB,OAAO,CACL8rD,QAASA,CADJ,CAELK,gBAAiBA,CAFZ,CAGLM,cAAel4D,CAAA,CAAOi4D,CAAP,CAAiB,QAAQ,CAAChyC,CAAD,CAAS,CAI/C,IAAIkyC,EAAe,EACnBlyC,EAAA,CAASA,CAAT,EAAmB,EAEnBv/B,OAAAe,KAAA,CAAYw+B,CAAZ,CAAAl/B,QAAA,CAA4BqxE,QAAqB,CAAClxE,CAAD,CAAM,CACrD,IAAIukB;AAASosD,CAAA,CAAU5xC,CAAA,CAAO/+B,CAAP,CAAV,CAAuBA,CAAvB,CACT+vE,EAAAA,CAAcS,CAAA,CAAkBzxC,CAAA,CAAO/+B,CAAP,CAAlB,CAA+BukB,CAA/B,CAClB0sD,EAAAnsE,KAAA,CAAkBirE,CAAlB,CAGA,IAAIzqE,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,CACM0qE,CACJ,CADYY,CAAA,CAAU1lE,CAAV,CAAiBqZ,CAAjB,CACZ,CAAA0sD,CAAAnsE,KAAA,CAAkBkrE,CAAlB,CAIE1qE,EAAA,CAAM,CAAN,CAAJ,GACM6rE,CACJ,CADkBL,CAAA,CAAc5lE,CAAd,CAAqBqZ,CAArB,CAClB,CAAA0sD,CAAAnsE,KAAA,CAAkBqsE,CAAlB,CAFF,CAZqD,CAAvD,CAiBA,OAAOF,EAxBwC,CAAlC,CAHV,CA8BLG,WAAYA,QAAQ,EAAG,CAErB,IAAIC,EAAc,EAAlB,CACIC,EAAiB,EADrB,CAKIC,EAAeR,CAAA,CAAS7lE,CAAT,CAAfqmE,EAAkC,EALtC,CAMIC,CAGJ,IAAKrB,CAAAA,CAAL,EAAgB/wE,EAAA,CAAYmyE,CAAZ,CAAhB,CACEC,CAAA,CAAmBD,CADrB,KAEO,CAELC,CAAA,CAAmB,EACnB,KAASC,IAAAA,CAAT,GAAoBF,EAApB,CACMA,CAAArxE,eAAA,CAA4BuxE,CAA5B,CAAJ,EAAkE,GAAlE,GAA4CA,CAAA/rE,OAAA,CAAe,CAAf,CAA5C,EACE8rE,CAAA1sE,KAAA,CAAsB2sE,CAAtB,CALC,CAUHC,CAAAA,CAAqBF,CAAAjyE,OAEzB,KAAS,IAAA4E,EAAQ,CAAjB,CAAoBA,CAApB,CAA4ButE,CAA5B,CAAgDvtE,CAAA,EAAhD,CAAyD,CACvD,IAAInE,EAAOuxE,CAAD,GAAkBC,CAAlB,CAAsCrtE,CAAtC,CAA8CqtE,CAAA,CAAiBrtE,CAAjB,CAAxD,CAEIogB,EAASosD,CAAA,CADDY,CAAA3wE,CAAaZ,CAAbY,CACC,CAAiBZ,CAAjB,CAFb,CAGIkoE,EAAYoI,CAAA,CAAYplE,CAAZ,CAAmBqZ,CAAnB,CAHhB,CAIIwrD,EAAcS,CAAA,CAAkBtI,CAAlB,CAA6B3jD,CAA7B,CAJlB,CAKIyrD,EAAQY,CAAA,CAAU1lE,CAAV,CAAiBqZ,CAAjB,CALZ,CAMIsmC,EAAQgmB,CAAA,CAAU3lE,CAAV,CAAiBqZ,CAAjB,CANZ,CAOI0rD,EAAWa,CAAA,CAAc5lE,CAAd,CAAqBqZ,CAArB,CAPf,CAQIotD,EAAa,IAAI7B,CAAJ,CAAWC,CAAX,CAAwB7H,CAAxB,CAAmC8H,CAAnC,CAA0CnlB,CAA1C,CAAiDolB,CAAjD,CAEjBoB,EAAAvsE,KAAA,CAAiB6sE,CAAjB,CACAL,EAAA,CAAevB,CAAf,CAAA,CAA8B4B,CAZyB,CAezD,MAAO,CACL/tE,MAAOytE,CADF,CAELC,eAAgBA,CAFX,CAGLM,uBAAwBA,QAAQ,CAAChxE,CAAD,CAAQ,CACtC,MAAO0wE,EAAA,CAAeZ,CAAA,CAAgB9vE,CAAhB,CAAf,CAD+B,CAHnC,CAMLixE,uBAAwBA,QAAQ,CAAC5/D,CAAD,CAAS,CAGvC,MAAOo+D,EAAA;AAAU7kE,EAAAlH,KAAA,CAAa2N,CAAAi2D,UAAb,CAAV,CAA2Cj2D,CAAAi2D,UAHX,CANpC,CAxCc,CA9BlB,CA9DyD,CAFO,IAyJrE4J,EAAiB7yE,CAAA6c,cAAA,CAAuB,QAAvB,CAzJoD,CA0JrEi2D,EAAmB9yE,CAAA6c,cAAA,CAAuB,UAAvB,CAEvB,OAAO,CACLoS,SAAU,GADL,CAEL6D,SAAU,CAAA,CAFL,CAGL9D,QAAS,CAAC,QAAD,CAAW,UAAX,CAHJ,CAIL7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQ2kE,CAAR,CAAuBpsE,CAAvB,CAA6BqlE,CAA7B,CAAoC,CAoLhDkJ,QAASA,EAAmB,CAAC//D,CAAD,CAASlO,CAAT,CAAkB,CAC5CkO,CAAAlO,QAAA,CAAiBA,CACjBA,EAAAksE,SAAA,CAAmBh+D,CAAAg+D,SACfh+D,EAAArR,MAAJ,GAAqBmD,CAAAnD,MAArB,GAAoCmD,CAAAnD,MAApC,CAAoDqR,CAAA89D,YAApD,CACI99D,EAAA+9D,MAAJ,GAAqBjsE,CAAAisE,MAArB,GACEjsE,CAAAisE,MACA,CADgB/9D,CAAA+9D,MAChB,CAAAjsE,CAAA0Y,YAAA,CAAsBxK,CAAA+9D,MAFxB,CAJ4C,CAU9CiC,QAASA,EAAiB,CAAC9vE,CAAD,CAAS27C,CAAT,CAAkBpgC,CAAlB,CAAwB4rD,CAAxB,CAAyC,CAG7DxrB,CAAJ,EAAe95C,CAAA,CAAU85C,CAAAv6C,SAAV,CAAf,GAA+Cma,CAA/C,CAEE3Z,CAFF,CAEY+5C,CAFZ,EAKE/5C,CACA,CADUulE,CAAApsD,UAAA,CAA0B,CAAA,CAA1B,CACV,CAAK4gC,CAAL,CAKE37C,CAAAu2D,aAAA,CAAoB30D,CAApB,CAA6B+5C,CAA7B,CALF,CAEE37C,CAAA0Z,YAAA,CAAmB9X,CAAnB,CARJ,CAcA,OAAOA,EAjB0D,CAqBnEmuE,QAASA,EAAoB,CAACp0B,CAAD,CAAU,CAErC,IADA,IAAIgD,CACJ,CAAOhD,CAAP,CAAA,CACEgD,CAEA,CAFOhD,CAAAjvC,YAEP,CADAgR,EAAA,CAAai+B,CAAb,CACA,CAAAA,CAAA,CAAUgD,CALyB,CAnNS;AA6NhDqxB,QAASA,EAA0B,CAACr0B,CAAD,CAAU,CAC3C,IAAIs0B,EAAeC,CAAfD,EAA8BC,CAAA,CAAY,CAAZ,CAAlC,CACIC,EAAiBC,CAAjBD,EAAkCC,CAAA,CAAc,CAAd,CAEtC,IAAIH,CAAJ,EAAoBE,CAApB,CACE,IAAA,CAAOx0B,CAAP,GACOA,CADP,GACmBs0B,CADnB,EAEMt0B,CAFN,GAEkBw0B,CAFlB,EAAA,CAGEx0B,CAAA,CAAUA,CAAAjvC,YAGd,OAAOivC,EAXoC,CAe7C00B,QAASA,EAAa,EAAG,CAEvB,IAAIC,EAAgBlrD,CAAhBkrD,EAA2BC,CAAAC,UAAA,EAE/BprD,EAAA,CAAU1S,CAAAu8D,WAAA,EAEV,KAAIwB,EAAW,EAAf,CACI9H,EAAiB+E,CAAA,CAAc,CAAd,CAAArzD,WAGjBq2D,EAAJ,EACEhD,CAAAjX,QAAA,CAAsByZ,CAAtB,CAGFvH,EAAA,CAAiBqH,CAAA,CAA2BrH,CAA3B,CAEjBvjD,EAAA3jB,MAAA/D,QAAA,CAAsBizE,QAAqB,CAAC7gE,CAAD,CAAS,CAClD,IAAI44C,CAAJ,CAEIkoB,CAEA9gE,EAAA44C,MAAJ,EAIEA,CA8BA,CA9BQ+nB,CAAA,CAAS3gE,CAAA44C,MAAT,CA8BR,CA5BKA,CA4BL,GAzBEmoB,CAWA,CAXef,CAAA,CAAkBpC,CAAA,CAAc,CAAd,CAAlB,CACkB/E,CADlB,CAEkB,UAFlB,CAGkBiH,CAHlB,CAWf,CANAjH,CAMA,CANiBkI,CAAAnkE,YAMjB,CAHAmkE,CAAAhD,MAGA,CAHqB/9D,CAAA44C,MAGrB,CAAAA,CAAA,CAAQ+nB,CAAA,CAAS3gE,CAAA44C,MAAT,CAAR,CAAiC,CAC/BmoB,aAAcA,CADiB,CAE/BC,qBAAsBD,CAAAx2D,WAFS,CAcnC,EANAu2D,CAMA,CANgBd,CAAA,CAAkBpnB,CAAAmoB,aAAlB,CACkBnoB,CAAAooB,qBADlB,CAEkB,QAFlB,CAGkBnB,CAHlB,CAMhB,CAFAE,CAAA,CAAoB//D,CAApB,CAA4B8gE,CAA5B,CAEA,CAAAloB,CAAAooB,qBAAA,CAA6BF,CAAAlkE,YAlC/B,GAuCEkkE,CAMA,CANgBd,CAAA,CAAkBpC,CAAA,CAAc,CAAd,CAAlB,CACkB/E,CADlB,CAEkB,QAFlB;AAGkBgH,CAHlB,CAMhB,CAFAE,CAAA,CAAoB//D,CAApB,CAA4B8gE,CAA5B,CAEA,CAAAjI,CAAA,CAAiBiI,CAAAlkE,YA7CnB,CALkD,CAApD,CAwDArP,OAAAe,KAAA,CAAYqyE,CAAZ,CAAA/yE,QAAA,CAA8B,QAAQ,CAACG,CAAD,CAAM,CAC1CkyE,CAAA,CAAqBU,CAAA,CAAS5yE,CAAT,CAAAizE,qBAArB,CAD0C,CAA5C,CAGAf,EAAA,CAAqBpH,CAArB,CAEAoI,EAAA1hB,QAAA,EAGA,IAAK,CAAA0hB,CAAAriB,SAAA,CAAqB4hB,CAArB,CAAL,CAA0C,CACxC,IAAIU,EAAYT,CAAAC,UAAA,EAChB,IAAI99D,CAAAw7D,QAAJ,EAA0B,CAAA1qE,EAAA,CAAO8sE,CAAP,CAAsBU,CAAtB,CAA1B,EACMV,CADN,GACwBU,CADxB,CAEED,CAAA9hB,cAAA,CAA0B+hB,CAA1B,CACA,CAAAD,CAAA1hB,QAAA,EALsC,CAhFnB,CAzOzB,IAAI0hB,EAAcpK,CAAA,CAAM,CAAN,CAClB,IAAKoK,CAAL,CAAA,CAEA,IAAIR,EAAa5J,CAAA,CAAM,CAAN,CACb/Q,EAAAA,CAAWt0D,CAAAs0D,SAKf,KADA,IAAIsa,CAAJ,CACS5xE,EAAI,CADb,CACgBuyC,EAAW68B,CAAA78B,SAAA,EAD3B,CACqD1xC,EAAK0xC,CAAAzzC,OAA1D,CAA2EkB,CAA3E,CAA+Ea,CAA/E,CAAmFb,CAAA,EAAnF,CACE,GAA0B,EAA1B,GAAIuyC,CAAA,CAASvyC,CAAT,CAAAG,MAAJ,CAA8B,CAC5ByxE,CAAA,CAAcr/B,CAAAyL,GAAA,CAAYh+C,CAAZ,CACd,MAF4B,CAMhC,IAAIoyE,EAAsB,CAAER,CAAAA,CAA5B,CAEIE,EAAgBtqE,CAAA,CAAO6pE,CAAA50D,UAAA,CAAyB,CAAA,CAAzB,CAAP,CACpBq1D,EAAA3tE,IAAA,CAAkB,GAAlB,CAEA,KAAI2iB,CAAJ,CACI1S,EAAY86D,CAAA,CAAuBlsE,CAAAoR,UAAvB,CAAuCg7D,CAAvC,CAAsD3kE,CAAtD,CAgCX6sD,EAAL,EAgDEmb,CAAAriB,SAiCA,CAjCuBuiB,QAAQ,CAACxyE,CAAD,CAAQ,CACrC,MAAO,CAACA,CAAR,EAAkC,CAAlC,GAAiBA,CAAArB,OADoB,CAiCvC,CA5BAmzE,CAAAW,WA4BA,CA5BwBC,QAA+B,CAAC1yE,CAAD,CAAQ,CAC7D2mB,CAAA3jB,MAAA/D,QAAA,CAAsB,QAAQ,CAACoS,CAAD,CAAS,CACrCA,CAAAlO,QAAAi0D,SAAA;AAA0B,CAAA,CADW,CAAvC,CAIIp3D,EAAJ,EACEA,CAAAf,QAAA,CAAc,QAAQ,CAACgpD,CAAD,CAAO,CAE3B,CADI52C,CACJ,CADasV,CAAAqqD,uBAAA,CAA+B/oB,CAA/B,CACb,GAAeonB,CAAAh+D,CAAAg+D,SAAf,GAAgCh+D,CAAAlO,QAAAi0D,SAAhC,CAA0D,CAAA,CAA1D,CAF2B,CAA7B,CAN2D,CA4B/D,CAdA0a,CAAAC,UAcA,CAduBY,QAA8B,EAAG,CAAA,IAClDC,EAAiB3D,CAAAjrE,IAAA,EAAjB4uE,EAAwC,EADU,CAElDC,EAAa,EAEjB5zE,EAAA,CAAQ2zE,CAAR,CAAwB,QAAQ,CAAC5yE,CAAD,CAAQ,CAClCqR,CAAAA,CAASsV,CAAA+pD,eAAA,CAAuB1wE,CAAvB,CACRqR,EAAAg+D,SAAL,EAAsBwD,CAAA3uE,KAAA,CAAgByiB,CAAAsqD,uBAAA,CAA+B5/D,CAA/B,CAAhB,CAFgB,CAAxC,CAKA,OAAOwhE,EAT+C,CAcxD,CAAI5+D,CAAAw7D,QAAJ,EAEEnlE,CAAA+xB,iBAAA,CAAuB,QAAQ,EAAG,CAChC,GAAIr9B,CAAA,CAAQszE,CAAAhiB,WAAR,CAAJ,CACE,MAAOgiB,EAAAhiB,WAAAtD,IAAA,CAA2B,QAAQ,CAAChtD,CAAD,CAAQ,CAChD,MAAOiU,EAAA67D,gBAAA,CAA0B9vE,CAA1B,CADyC,CAA3C,CAFuB,CAAlC,CAMG,QAAQ,EAAG,CACZsyE,CAAA1hB,QAAA,EADY,CANd,CAnFJ,GAEEkhB,CAAAW,WAqCA,CArCwBC,QAA4B,CAAC1yE,CAAD,CAAQ,CAC1D,IAAIqR,EAASsV,CAAAqqD,uBAAA,CAA+BhxE,CAA/B,CAETqR,EAAJ,EAAeg+D,CAAAh+D,CAAAg+D,SAAf,CACMJ,CAAA,CAAc,CAAd,CAAAjvE,MADN,GACiCqR,CAAA89D,YADjC;CAVFwC,CAAAtmD,OAAA,EAiBM,CA/BD4mD,CA+BC,EA9BJR,CAAApmD,OAAA,EA8BI,CAFA4jD,CAAA,CAAc,CAAd,CAAAjvE,MAEA,CAFyBqR,CAAA89D,YAEzB,CADA99D,CAAAlO,QAAAi0D,SACA,CAD0B,CAAA,CAC1B,CAAA/lD,CAAAlO,QAAA+a,aAAA,CAA4B,UAA5B,CAAwC,UAAxC,CAPJ,EAUgB,IAAd,GAAIle,CAAJ,EAAsBiyE,CAAtB,EApBJN,CAAAtmD,OAAA,EAlBA,CALK4mD,CAKL,EAJEhD,CAAAjX,QAAA,CAAsByZ,CAAtB,CAIF,CAFAxC,CAAAjrE,IAAA,CAAkB,EAAlB,CAEA,CADAytE,CAAA7uE,KAAA,CAAiB,UAAjB,CAA6B,CAAA,CAA7B,CACA,CAAA6uE,CAAA5uE,KAAA,CAAiB,UAAjB,CAA6B,CAAA,CAA7B,CAsCI,GAlCCovE,CAUL,EATER,CAAApmD,OAAA,EASF,CAHA4jD,CAAAjX,QAAA,CAAsB2Z,CAAtB,CAGA,CAFA1C,CAAAjrE,IAAA,CAAkB,GAAlB,CAEA,CADA2tE,CAAA/uE,KAAA,CAAmB,UAAnB,CAA+B,CAAA,CAA/B,CACA,CAAA+uE,CAAA9uE,KAAA,CAAmB,UAAnB,CAA+B,CAAA,CAA/B,CAwBI,CAbwD,CAqC5D,CAdAivE,CAAAC,UAcA,CAduBY,QAA2B,EAAG,CAEnD,IAAIG,EAAiBnsD,CAAA+pD,eAAA,CAAuBzB,CAAAjrE,IAAA,EAAvB,CAErB,OAAI8uE,EAAJ,EAAuBzD,CAAAyD,CAAAzD,SAAvB,EAhDG4C,CAmDM,EAlDTR,CAAApmD,OAAA,EAkDS,CArCXsmD,CAAAtmD,OAAA,EAqCW,CAAA1E,CAAAsqD,uBAAA,CAA+B6B,CAA/B,CAHT,EAKO,IAT4C,CAcrD,CAAI7+D,CAAAw7D,QAAJ,EACEnlE,CAAA/H,OAAA,CACE,QAAQ,EAAG,CAAE,MAAO0R,EAAA67D,gBAAA,CAA0BwC,CAAAhiB,WAA1B,CAAT,CADb;AAEE,QAAQ,EAAG,CAAEgiB,CAAA1hB,QAAA,EAAF,CAFb,CAxCJ,CAiGIqhB,EAAJ,EAIER,CAAApmD,OAAA,EAOA,CAJAm9C,CAAA,CAASiJ,CAAT,CAAA,CAAsBnnE,CAAtB,CAIA,CAAAmnE,CAAAvwD,YAAA,CAAwB,UAAxB,CAXF,EAaEuwD,CAbF,CAagBpqE,CAAA,CAAO6pE,CAAA50D,UAAA,CAAyB,CAAA,CAAzB,CAAP,CAKhBs1D,EAAA,EAGAtnE,EAAA+xB,iBAAA,CAAuBpoB,CAAAm8D,cAAvB,CAAgDwB,CAAhD,CA3KA,CAJgD,CAJ7C,CA5JkE,CAAlD,CAxmEzB,CAkwFIx+D,GAAuB,CAAC,SAAD,CAAY,cAAZ,CAA4B,MAA5B,CAAoC,QAAQ,CAACq1C,CAAD,CAAUvxC,CAAV,CAAwBc,CAAxB,CAA8B,CAAA,IAC/F+6D,EAAQ,KADuF,CAE/FC,EAAU,oBAEd,OAAO,CACLxoD,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAoDnCowE,QAASA,EAAiB,CAACC,CAAD,CAAU,CAClC/vE,CAAAk2B,KAAA,CAAa65C,CAAb,EAAwB,EAAxB,CADkC,CApDD,IAC/BC,EAAYtwE,CAAAkmC,MADmB,CAE/BqqC,EAAUvwE,CAAAgvB,MAAAqR,KAAVkwC,EAA6BjwE,CAAAN,KAAA,CAAaA,CAAAgvB,MAAAqR,KAAb,CAFE,CAG/B3oB,EAAS1X,CAAA0X,OAATA,EAAwB,CAHO,CAI/B84D,EAAQ/oE,CAAA01C,MAAA,CAAYozB,CAAZ,CAARC,EAAgC,EAJD,CAK/BC,EAAc,EALiB,CAM/B11C,EAAc1mB,CAAA0mB,YAAA,EANiB,CAO/BC,EAAY3mB,CAAA2mB,UAAA,EAPmB,CAQ/B01C,EAAmB31C,CAAnB21C,CAAiCJ,CAAjCI,CAA6C,GAA7CA,CAAmDh5D,CAAnDg5D,CAA4D11C,CAR7B,CAS/B21C,EAAe5oE,EAAAlJ,KATgB,CAU/B+xE,CAEJx0E,EAAA,CAAQ4D,CAAR,CAAc,QAAQ,CAACi8B,CAAD,CAAa40C,CAAb,CAA4B,CAChD,IAAIC,EAAWX,CAAA53D,KAAA,CAAas4D,CAAb,CACXC,EAAJ,GACMC,CACJ,EADeD,CAAA,CAAS,CAAT,CAAA,CAAc,GAAd,CAAoB,EACnC,EADyCvwE,CAAA,CAAUuwE,CAAA,CAAS,CAAT,CAAV,CACzC,CAAAN,CAAA,CAAMO,CAAN,CAAA,CAAiBzwE,CAAAN,KAAA,CAAaA,CAAAgvB,MAAA,CAAW6hD,CAAX,CAAb,CAFnB,CAFgD,CAAlD,CAOAz0E;CAAA,CAAQo0E,CAAR,CAAe,QAAQ,CAACv0C,CAAD,CAAa1/B,CAAb,CAAkB,CACvCk0E,CAAA,CAAYl0E,CAAZ,CAAA,CAAmB8X,CAAA,CAAa4nB,CAAAj3B,QAAA,CAAmBkrE,CAAnB,CAA0BQ,CAA1B,CAAb,CADoB,CAAzC,CAKAjpE,EAAA/H,OAAA,CAAa4wE,CAAb,CAAwBU,QAA+B,CAACztD,CAAD,CAAS,CAC9D,IAAI2iB,EAAQ4gB,UAAA,CAAWvjC,CAAX,CAAZ,CACI0tD,EAAantE,KAAA,CAAMoiC,CAAN,CAEZ+qC,EAAL,EAAqB/qC,CAArB,GAA8BsqC,EAA9B,GAGEtqC,CAHF,CAGU0f,CAAAjd,UAAA,CAAkBzC,CAAlB,CAA0BxuB,CAA1B,CAHV,CAQKwuB,EAAL,GAAe0qC,CAAf,EAA+BK,CAA/B,EAA6C7xE,CAAA,CAASwxE,CAAT,CAA7C,EAAoE9sE,KAAA,CAAM8sE,CAAN,CAApE,GACED,CAAA,EAWA,CAVIO,CAUJ,CAVgBT,CAAA,CAAYvqC,CAAZ,CAUhB,CATIjnC,CAAA,CAAYiyE,CAAZ,CAAJ,EACgB,IAId,EAJI3tD,CAIJ,EAHEpO,CAAAi5B,MAAA,CAAW,oCAAX,CAAkDlI,CAAlD,CAA0D,OAA1D,CAAoEqqC,CAApE,CAGF,CADAI,CACA,CADe9xE,CACf,CAAAuxE,CAAA,EALF,EAOEO,CAPF,CAOiBlpE,CAAA/H,OAAA,CAAawxE,CAAb,CAAwBd,CAAxB,CAEjB,CAAAQ,CAAA,CAAY1qC,CAZd,CAZ8D,CAAhE,CAxBmC,CADhC,CAJ4F,CAA1E,CAlwF3B,CAimGIz1B,GAAoB,CAAC,QAAD,CAAW,UAAX,CAAuB,QAAQ,CAAC4E,CAAD,CAASlC,CAAT,CAAmB,CAExE,IAAIg+D,EAAiBz1E,CAAA,CAAO,UAAP,CAArB,CAEI01E,EAAcA,QAAQ,CAAC3pE,CAAD,CAAQ/G,CAAR,CAAe2wE,CAAf,CAAgCl0E,CAAhC,CAAuCm0E,CAAvC,CAAsD/0E,CAAtD,CAA2Dg1E,CAA3D,CAAwE,CAEhG9pE,CAAA,CAAM4pE,CAAN,CAAA,CAAyBl0E,CACrBm0E,EAAJ,GAAmB7pE,CAAA,CAAM6pE,CAAN,CAAnB,CAA0C/0E,CAA1C,CACAkL,EAAAypD,OAAA,CAAexwD,CACf+G,EAAA+pE,OAAA,CAA0B,CAA1B,GAAgB9wE,CAChB+G,EAAAgqE,MAAA,CAAe/wE,CAAf,GAA0B6wE,CAA1B,CAAwC,CACxC9pE,EAAAiqE,QAAA,CAAgB,EAAEjqE,CAAA+pE,OAAF,EAAkB/pE,CAAAgqE,MAAlB,CAEhBhqE,EAAAkqE,KAAA,CAAa,EAAElqE,CAAAmqE,MAAF,CAA8B,CAA9B,IAAiBlxE,CAAjB,CAAuB,CAAvB,EATmF,CAsBlG,OAAO,CACL+pB,SAAU,GADL;AAELuK,aAAc,CAAA,CAFT,CAGLnH,WAAY,SAHP,CAILtD,SAAU,GAJL,CAKL+D,SAAU,CAAA,CALL,CAMLuF,MAAO,CAAA,CANF,CAOLnsB,QAASmqE,QAAwB,CAACtmD,CAAD,CAAWyD,CAAX,CAAkB,CACjD,IAAIiN,EAAajN,CAAAxe,SAAjB,CACIshE,EAAqBt2E,CAAAs4B,cAAA,CAAuB,iBAAvB,CAA2CmI,CAA3C,CAAwD,GAAxD,CADzB,CAGIp6B,EAAQo6B,CAAAp6B,MAAA,CAAiB,4FAAjB,CAEZ,IAAKA,CAAAA,CAAL,CACE,KAAMsvE,EAAA,CAAe,MAAf,CACFl1C,CADE,CAAN,CAIF,IAAIujC,EAAM39D,CAAA,CAAM,CAAN,CAAV,CACI09D,EAAM19D,CAAA,CAAM,CAAN,CADV,CAEIkwE,EAAUlwE,CAAA,CAAM,CAAN,CAFd,CAGImwE,EAAanwE,CAAA,CAAM,CAAN,CAHjB,CAKAA,EAAQ29D,CAAA39D,MAAA,CAAU,wDAAV,CAER,IAAKA,CAAAA,CAAL,CACE,KAAMsvE,EAAA,CAAe,QAAf,CACF3R,CADE,CAAN,CAGF,IAAI6R,EAAkBxvE,CAAA,CAAM,CAAN,CAAlBwvE,EAA8BxvE,CAAA,CAAM,CAAN,CAAlC,CACIyvE,EAAgBzvE,CAAA,CAAM,CAAN,CAEpB,IAAIkwE,CAAJ,GAAiB,CAAA,4BAAAvwE,KAAA,CAAkCuwE,CAAlC,CAAjB,EACI,2FAAAvwE,KAAA,CAAiGuwE,CAAjG,CADJ,EAEE,KAAMZ,EAAA,CAAe,UAAf;AACJY,CADI,CAAN,CA3B+C,IA+B7CE,CA/B6C,CA+B3BC,CA/B2B,CA+BXC,CA/BW,CA+BOC,CA/BP,CAgC7CC,EAAe,CAACl5B,IAAK76B,EAAN,CAEf0zD,EAAJ,CACEC,CADF,CACqB58D,CAAA,CAAO28D,CAAP,CADrB,EAGEG,CAGA,CAHmBA,QAAQ,CAAC51E,CAAD,CAAMY,CAAN,CAAa,CACtC,MAAOmhB,GAAA,CAAQnhB,CAAR,CAD+B,CAGxC,CAAAi1E,CAAA,CAAiBA,QAAQ,CAAC71E,CAAD,CAAM,CAC7B,MAAOA,EADsB,CANjC,CAWA,OAAO+1E,SAAqB,CAACzgD,CAAD,CAAStG,CAAT,CAAmByD,CAAnB,CAA0Bm9B,CAA1B,CAAgCp6B,CAAhC,CAA6C,CAEnEkgD,CAAJ,GACEC,CADF,CACmBA,QAAQ,CAAC31E,CAAD,CAAMY,CAAN,CAAauD,CAAb,CAAoB,CAEvC4wE,CAAJ,GAAmBe,CAAA,CAAaf,CAAb,CAAnB,CAAiD/0E,CAAjD,CACA81E,EAAA,CAAahB,CAAb,CAAA,CAAgCl0E,CAChCk1E,EAAAnhB,OAAA,CAAsBxwD,CACtB,OAAOuxE,EAAA,CAAiBpgD,CAAjB,CAAyBwgD,CAAzB,CALoC,CAD/C,CAkBA,KAAIE,EAAe/vE,EAAA,EAGnBqvB,EAAA2H,iBAAA,CAAwB+lC,CAAxB,CAA6BiT,QAAuB,CAAChpD,CAAD,CAAa,CAAA,IAC3D9oB,CAD2D,CACpD5E,CADoD,CAE3D22E,EAAelnD,CAAA,CAAS,CAAT,CAF4C,CAI3DmnD,CAJ2D,CAO3DC,EAAenwE,EAAA,EAP4C,CAQ3DowE,CAR2D,CAS3Dr2E,CAT2D,CAStDY,CATsD,CAU3D01E,CAV2D,CAY3DC,CAZ2D,CAa3D/lE,CAb2D,CAc3DgmE,CAGAhB,EAAJ,GACElgD,CAAA,CAAOkgD,CAAP,CADF,CACoBvoD,CADpB,CAIA,IAAI7tB,EAAA,CAAY6tB,CAAZ,CAAJ,CACEspD,CACA,CADiBtpD,CACjB,CAAAwpD,CAAA,CAAcd,CAAd,EAAgCC,CAFlC,KAOE,KAASnE,CAAT,GAHAgF,EAGoBxpD,CAHN0oD,CAGM1oD,EAHY4oD,CAGZ5oD,CADpBspD,CACoBtpD,CADH,EACGA,CAAAA,CAApB,CACMA,CAAA/sB,eAAA,CAA0BuxE,CAA1B,CAAJ,EAAgE,GAAhE,GAA0CA,CAAA/rE,OAAA,CAAe,CAAf,CAA1C,EACE6wE,CAAAzxE,KAAA,CAAoB2sE,CAApB,CAKN4E,EAAA,CAAmBE,CAAAh3E,OACnBi3E,EAAA,CAAqB3wD,KAAJ,CAAUwwD,CAAV,CAGjB,KAAKlyE,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBkyE,CAAxB,CAA0ClyE,CAAA,EAA1C,CAIE,GAHAnE,CAGI,CAHGitB,CAAD,GAAgBspD,CAAhB,CAAkCpyE,CAAlC,CAA0CoyE,CAAA,CAAepyE,CAAf,CAG5C,CAFJvD,CAEI,CAFIqsB,CAAA,CAAWjtB,CAAX,CAEJ,CADJs2E,CACI,CADQG,CAAA,CAAYz2E,CAAZ,CAAiBY,CAAjB,CAAwBuD,CAAxB,CACR,CAAA6xE,CAAA,CAAaM,CAAb,CAAJ,CAEE9lE,CAGA,CAHQwlE,CAAA,CAAaM,CAAb,CAGR,CAFA,OAAON,CAAA,CAAaM,CAAb,CAEP,CADAF,CAAA,CAAaE,CAAb,CACA,CAD0B9lE,CAC1B,CAAAgmE,CAAA,CAAeryE,CAAf,CAAA,CAAwBqM,CAL1B,KAMO,CAAA,GAAI4lE,CAAA,CAAaE,CAAb,CAAJ,CAKL,KAHAz2E,EAAA,CAAQ22E,CAAR;AAAwB,QAAQ,CAAChmE,CAAD,CAAQ,CAClCA,CAAJ,EAAaA,CAAAtF,MAAb,GAA0B8qE,CAAA,CAAaxlE,CAAAmb,GAAb,CAA1B,CAAmDnb,CAAnD,CADsC,CAAxC,CAGM,CAAAokE,CAAA,CAAe,OAAf,CAEFl1C,CAFE,CAEU42C,CAFV,CAEqB11E,CAFrB,CAAN,CAKA41E,CAAA,CAAeryE,CAAf,CAAA,CAAwB,CAACwnB,GAAI2qD,CAAL,CAAgBprE,MAAOhM,CAAvB,CAAkCgJ,MAAOhJ,CAAzC,CACxBk3E,EAAA,CAAaE,CAAb,CAAA,CAA0B,CAAA,CAXrB,CAgBT,IAASI,CAAT,GAAqBV,EAArB,CAAmC,CACjCxlE,CAAA,CAAQwlE,CAAA,CAAaU,CAAb,CACRh7C,EAAA,CAAmBjtB,EAAA,CAAc+B,CAAAtI,MAAd,CACnB0O,EAAAmlD,MAAA,CAAergC,CAAf,CACA,IAAIA,CAAA,CAAiB,CAAjB,CAAAlc,WAAJ,CAGE,IAAKrb,CAAW,CAAH,CAAG,CAAA5E,CAAA,CAASm8B,CAAAn8B,OAAzB,CAAkD4E,CAAlD,CAA0D5E,CAA1D,CAAkE4E,CAAA,EAAlE,CACEu3B,CAAA,CAAiBv3B,CAAjB,CAAA,aAAA,CAAsC,CAAA,CAG1CqM,EAAAtF,MAAAyC,SAAA,EAXiC,CAenC,IAAKxJ,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBkyE,CAAxB,CAA0ClyE,CAAA,EAA1C,CAKE,GAJAnE,CAIIkL,CAJG+hB,CAAD,GAAgBspD,CAAhB,CAAkCpyE,CAAlC,CAA0CoyE,CAAA,CAAepyE,CAAf,CAI5C+G,CAHJtK,CAGIsK,CAHI+hB,CAAA,CAAWjtB,CAAX,CAGJkL,CAFJsF,CAEItF,CAFIsrE,CAAA,CAAeryE,CAAf,CAEJ+G,CAAAsF,CAAAtF,MAAJ,CAAiB,CAIfirE,CAAA,CAAWD,CAGX,GACEC,EAAA,CAAWA,CAAAtnE,YADb,OAESsnE,CAFT,EAEqBA,CAAA,aAFrB,CAIkB3lE,EAnLrBtI,MAAA,CAAY,CAAZ,CAmLG,EAA4BiuE,CAA5B,EAEEv/D,CAAAklD,KAAA,CAAcrtD,EAAA,CAAc+B,CAAAtI,MAAd,CAAd,CAA0C,IAA1C,CAAgDD,CAAA,CAAOiuE,CAAP,CAAhD,CAEFA,EAAA,CAA2B1lE,CAnL9BtI,MAAA,CAmL8BsI,CAnLlBtI,MAAA3I,OAAZ,CAAiC,CAAjC,CAoLGs1E,EAAA,CAAYrkE,CAAAtF,MAAZ,CAAyB/G,CAAzB,CAAgC2wE,CAAhC,CAAiDl0E,CAAjD,CAAwDm0E,CAAxD,CAAuE/0E,CAAvE,CAA4Eq2E,CAA5E,CAhBe,CAAjB,IAmBE7gD,EAAA,CAAYmhD,QAA2B,CAACzuE,CAAD,CAAQgD,CAAR,CAAe,CACpDsF,CAAAtF,MAAA,CAAcA,CAEd,KAAIyD,EAAU4mE,CAAAr4D,UAAA,CAA6B,CAAA,CAA7B,CACdhV,EAAA,CAAMA,CAAA3I,OAAA,EAAN,CAAA,CAAwBoP,CAGxBiI,EAAAilD,MAAA,CAAe3zD,CAAf;AAAsB,IAAtB,CAA4BD,CAAA,CAAOiuE,CAAP,CAA5B,CACAA,EAAA,CAAevnE,CAIf6B,EAAAtI,MAAA,CAAcA,CACdkuE,EAAA,CAAa5lE,CAAAmb,GAAb,CAAA,CAAyBnb,CACzBqkE,EAAA,CAAYrkE,CAAAtF,MAAZ,CAAyB/G,CAAzB,CAAgC2wE,CAAhC,CAAiDl0E,CAAjD,CAAwDm0E,CAAxD,CAAuE/0E,CAAvE,CAA4Eq2E,CAA5E,CAdoD,CAAtD,CAkBJL,EAAA,CAAeI,CA1HgD,CAAjE,CAvBuE,CA7CxB,CAP9C,CA1BiE,CAAlD,CAjmGxB,CAq+GIhiE,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACwC,CAAD,CAAW,CACpD,MAAO,CACLsX,SAAU,GADL,CAELuK,aAAc,CAAA,CAFT,CAGLrN,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CACnCyH,CAAA/H,OAAA,CAAaM,CAAA0Q,OAAb,CAA0ByiE,QAA0B,CAACh2E,CAAD,CAAQ,CAK1DgW,CAAA,CAAShW,CAAA,CAAQ,aAAR,CAAwB,UAAjC,CAAA,CAA6CmD,CAA7C,CAxKY8yE,SAwKZ,CAAqE,CACnE3a,YAxKsB4a,iBAuK6C,CAArE,CAL0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAr+GtB,CAsoHIxjE,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACsD,CAAD,CAAW,CACpD,MAAO,CACLsX,SAAU,GADL,CAELuK,aAAc,CAAA,CAFT,CAGLrN,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CACnCyH,CAAA/H,OAAA,CAAaM,CAAA4P,OAAb,CAA0B0jE,QAA0B,CAACn2E,CAAD,CAAQ,CAG1DgW,CAAA,CAAShW,CAAA,CAAQ,UAAR,CAAqB,aAA9B,CAAA,CAA6CmD,CAA7C,CAvUY8yE,SAuUZ,CAAoE,CAClE3a,YAvUsB4a,iBAsU4C,CAApE,CAH0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CAtoHtB,CAosHIxiE,GAAmBw5C,EAAA,CAAY,QAAQ,CAAC5iD,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAChEyH,CAAA/H,OAAA,CAAaM,CAAA4Q,QAAb;AAA2B2iE,QAA2B,CAACC,CAAD,CAAYC,CAAZ,CAAuB,CACvEA,CAAJ,EAAkBD,CAAlB,GAAgCC,CAAhC,EACEr3E,CAAA,CAAQq3E,CAAR,CAAmB,QAAQ,CAACtyE,CAAD,CAAMmN,CAAN,CAAa,CAAEhO,CAAAwzD,IAAA,CAAYxlD,CAAZ,CAAmB,EAAnB,CAAF,CAAxC,CAEEklE,EAAJ,EAAelzE,CAAAwzD,IAAA,CAAY0f,CAAZ,CAJ4D,CAA7E,CAKG,CAAA,CALH,CADgE,CAA3C,CApsHvB,CA60HIziE,GAAoB,CAAC,UAAD,CAAa,QAAQ,CAACoC,CAAD,CAAW,CACtD,MAAO,CACLqX,QAAS,UADJ,CAIL/gB,WAAY,CAAC,QAAD,CAAWiqE,QAA2B,EAAG,CACpD,IAAAC,MAAA,CAAa,EADuC,CAAzC,CAJP,CAOLhsD,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB0zE,CAAvB,CAA2C,CAAA,IAEnDE,EAAsB,EAF6B,CAGnDC,EAAmB,EAHgC,CAInDC,EAA0B,EAJyB,CAKnDC,EAAiB,EALkC,CAOnDC,EAAgBA,QAAQ,CAACvzE,CAAD,CAAQC,CAAR,CAAe,CACvC,MAAO,SAAQ,EAAG,CAAED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CAAF,CADqB,CAI3C+G,EAAA/H,OAAA,CAVgBM,CAAA8Q,SAUhB,EAViC9Q,CAAAsJ,GAUjC,CAAwB2qE,QAA4B,CAAC92E,CAAD,CAAQ,CAAA,IACtDH,CADsD,CACnDa,CACFb,EAAA,CAAI,CAAT,KAAYa,CAAZ,CAAiBi2E,CAAAh4E,OAAjB,CAAiDkB,CAAjD,CAAqDa,CAArD,CAAyD,EAAEb,CAA3D,CACEmW,CAAA8T,OAAA,CAAgB6sD,CAAA,CAAwB92E,CAAxB,CAAhB,CAIGA,EAAA,CAFL82E,CAAAh4E,OAEK,CAF4B,CAEjC,KAAY+B,CAAZ,CAAiBk2E,CAAAj4E,OAAjB,CAAwCkB,CAAxC,CAA4Ca,CAA5C,CAAgD,EAAEb,CAAlD,CAAqD,CACnD,IAAIu3D,EAAWvpD,EAAA,CAAc6oE,CAAA,CAAiB72E,CAAjB,CAAAyH,MAAd,CACfsvE,EAAA,CAAe/2E,CAAf,CAAAkN,SAAA,EAEA0rB,EADck+C,CAAA,CAAwB92E,CAAxB,CACd44B,CAD2CziB,CAAAmlD,MAAA,CAAe/D,CAAf,CAC3C3+B,MAAA,CAAao+C,CAAA,CAAcF,CAAd,CAAuC92E,CAAvC,CAAb,CAJmD,CAOrD62E,CAAA/3E,OAAA,CAA0B,CAC1Bi4E,EAAAj4E,OAAA,CAAwB,CAExB,EAAK83E,CAAL,CAA2BF,CAAAC,MAAA,CAAyB,GAAzB;AAA+Bx2E,CAA/B,CAA3B,EAAoEu2E,CAAAC,MAAA,CAAyB,GAAzB,CAApE,GACEv3E,CAAA,CAAQw3E,CAAR,CAA6B,QAAQ,CAACM,CAAD,CAAqB,CACxDA,CAAArmD,WAAA,CAA8B,QAAQ,CAACsmD,CAAD,CAAcC,CAAd,CAA6B,CACjEL,CAAA1yE,KAAA,CAAoB+yE,CAApB,CACA,KAAIC,EAASH,CAAA5zE,QACb6zE,EAAA,CAAYA,CAAAr4E,OAAA,EAAZ,CAAA,CAAoCN,CAAAs4B,cAAA,CAAuB,qBAAvB,CAGpC+/C,EAAAxyE,KAAA,CAFY0L,CAAEtI,MAAO0vE,CAATpnE,CAEZ,CACAoG,EAAAilD,MAAA,CAAe+b,CAAf,CAA4BE,CAAA31E,OAAA,EAA5B,CAA6C21E,CAA7C,CAPiE,CAAnE,CADwD,CAA1D,CAlBwD,CAA5D,CAXuD,CAPpD,CAD+C,CAAhC,CA70HxB,CAm4HIpjE,GAAwBo5C,EAAA,CAAY,CACtCx8B,WAAY,SAD0B,CAEtCtD,SAAU,IAF4B,CAGtCC,QAAS,WAH6B,CAItCwK,aAAc,CAAA,CAJwB,CAKtCrN,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiB0tB,CAAjB,CAAwBm+B,CAAxB,CAA8Bp6B,CAA9B,CAA2C,CACvDo6B,CAAAwnB,MAAA,CAAW,GAAX,CAAiB3lD,CAAAhd,aAAjB,CAAA,CAAwCm7C,CAAAwnB,MAAA,CAAW,GAAX,CAAiB3lD,CAAAhd,aAAjB,CAAxC,EAAgF,EAChFm7C,EAAAwnB,MAAA,CAAW,GAAX,CAAiB3lD,CAAAhd,aAAjB,CAAA3P,KAAA,CAA0C,CAAEwsB,WAAYkE,CAAd,CAA2BzxB,QAASA,CAApC,CAA1C,CAFuD,CALnB,CAAZ,CAn4H5B,CA84HI6Q,GAA2Bk5C,EAAA,CAAY,CACzCx8B,WAAY,SAD6B,CAEzCtD,SAAU,IAF+B,CAGzCC,QAAS,WAHgC,CAIzCwK,aAAc,CAAA,CAJ2B,CAKzCrN,KAAMA,QAAQ,CAAClgB,CAAD;AAAQnH,CAAR,CAAiBN,CAAjB,CAAuBmsD,CAAvB,CAA6Bp6B,CAA7B,CAA0C,CACtDo6B,CAAAwnB,MAAA,CAAW,GAAX,CAAA,CAAmBxnB,CAAAwnB,MAAA,CAAW,GAAX,CAAnB,EAAsC,EACtCxnB,EAAAwnB,MAAA,CAAW,GAAX,CAAAtyE,KAAA,CAAqB,CAAEwsB,WAAYkE,CAAd,CAA2BzxB,QAASA,CAApC,CAArB,CAFsD,CALf,CAAZ,CA94H/B,CA+8HIiR,GAAwB84C,EAAA,CAAY,CACtC5/B,SAAU,KAD4B,CAEtC9C,KAAMA,QAAQ,CAACkK,CAAD,CAAStG,CAAT,CAAmBuG,CAAnB,CAA2BroB,CAA3B,CAAuCsoB,CAAvC,CAAoD,CAChE,GAAKA,CAAAA,CAAL,CACE,KAAMr2B,EAAA,CAAO,cAAP,CAAA,CAAuB,QAAvB,CAIL6I,EAAA,CAAYgnB,CAAZ,CAJK,CAAN,CAOFwG,CAAA,CAAY,QAAQ,CAACttB,CAAD,CAAQ,CAC1B8mB,CAAA7mB,MAAA,EACA6mB,EAAA1mB,OAAA,CAAgBJ,CAAhB,CAF0B,CAA5B,CATgE,CAF5B,CAAZ,CA/8H5B,CAkgII0J,GAAkB,CAAC,gBAAD,CAAmB,QAAQ,CAACgI,CAAD,CAAiB,CAChE,MAAO,CACLsU,SAAU,GADL,CAEL6D,SAAU,CAAA,CAFL,CAGL5mB,QAASA,QAAQ,CAACpH,CAAD,CAAUN,CAAV,CAAgB,CACd,kBAAjB,EAAIA,CAAAia,KAAJ,EAIE9D,CAAAyI,IAAA,CAHkB5e,CAAAkoB,GAGlB,CAFW5nB,CAAA,CAAQ,CAAR,CAAAk2B,KAEX,CAL6B,CAH5B,CADyD,CAA5C,CAlgItB,CAihII89C,GAAwB,CAAE3mB,cAAe9uD,CAAjB,CAAuBkvD,QAASlvD,CAAhC,CAjhI5B,CA2hII01E,GACI,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,QAAQ,CAAChpD,CAAD,CAAWsG,CAAX,CAAmBC,CAAnB,CAA2B,CAAA,IAEtEjvB,EAAO,IAF+D,CAGtE2xE,EAAa,IAAI/1D,EAGrB5b,EAAA4sE,YAAA,CAAmB6E,EAQnBzxE,EAAAisE,cAAA,CAAqBtqE,CAAA,CAAOhJ,CAAA6c,cAAA,CAAuB,QAAvB,CAAP,CACrBxV;CAAA4xE,oBAAA,CAA2BC,QAAQ,CAACvzE,CAAD,CAAM,CACnCwzE,CAAAA,CAAa,IAAbA,CAAoBr2D,EAAA,CAAQnd,CAAR,CAApBwzE,CAAmC,IACvC9xE,EAAAisE,cAAA3tE,IAAA,CAAuBwzE,CAAvB,CACAppD,EAAA4pC,QAAA,CAAiBtyD,CAAAisE,cAAjB,CACAvjD,EAAApqB,IAAA,CAAawzE,CAAb,CAJuC,CAOzC9iD,EAAAnE,IAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAEhC7qB,CAAA4xE,oBAAA,CAA2B51E,CAFK,CAAlC,CAKAgE,EAAA+xE,oBAAA,CAA2BC,QAAQ,EAAG,CAChChyE,CAAAisE,cAAApwE,OAAA,EAAJ,EAAiCmE,CAAAisE,cAAAtmD,OAAA,EADG,CAOtC3lB,EAAAqsE,UAAA,CAAiB4F,QAAwB,EAAG,CAC1CjyE,CAAA+xE,oBAAA,EACA,OAAOrpD,EAAApqB,IAAA,EAFmC,CAQ5C0B,EAAA+sE,WAAA,CAAkBmF,QAAyB,CAAC53E,CAAD,CAAQ,CAC7C0F,CAAAmyE,UAAA,CAAe73E,CAAf,CAAJ,EACE0F,CAAA+xE,oBAAA,EAEA,CADArpD,CAAApqB,IAAA,CAAahE,CAAb,CACA,CAAc,EAAd,GAAIA,CAAJ,EAAkB0F,CAAA+rE,YAAA7uE,KAAA,CAAsB,UAAtB,CAAkC,CAAA,CAAlC,CAHpB,EAKe,IAAb,EAAI5C,CAAJ,EAAqB0F,CAAA+rE,YAArB,EACE/rE,CAAA+xE,oBAAA,EACA,CAAArpD,CAAApqB,IAAA,CAAa,EAAb,CAFF,EAIE0B,CAAA4xE,oBAAA,CAAyBt3E,CAAzB,CAV6C,CAiBnD0F;CAAAoyE,UAAA,CAAiBC,QAAQ,CAAC/3E,CAAD,CAAQmD,CAAR,CAAiB,CACxCoK,EAAA,CAAwBvN,CAAxB,CAA+B,gBAA/B,CACc,GAAd,GAAIA,CAAJ,GACE0F,CAAA+rE,YADF,CACqBtuE,CADrB,CAGA,KAAI4lC,EAAQsuC,CAAA/rE,IAAA,CAAetL,CAAf,CAAR+oC,EAAiC,CACrCsuC,EAAA51D,IAAA,CAAezhB,CAAf,CAAsB+oC,CAAtB,CAA8B,CAA9B,CANwC,CAU1CrjC,EAAAsyE,aAAA,CAAoBC,QAAQ,CAACj4E,CAAD,CAAQ,CAClC,IAAI+oC,EAAQsuC,CAAA/rE,IAAA,CAAetL,CAAf,CACR+oC,EAAJ,GACgB,CAAd,GAAIA,CAAJ,EACEsuC,CAAAhsD,OAAA,CAAkBrrB,CAAlB,CACA,CAAc,EAAd,GAAIA,CAAJ,GACE0F,CAAA+rE,YADF,CACqBnzE,CADrB,CAFF,EAME+4E,CAAA51D,IAAA,CAAezhB,CAAf,CAAsB+oC,CAAtB,CAA8B,CAA9B,CAPJ,CAFkC,CAepCrjC,EAAAmyE,UAAA,CAAiBK,QAAQ,CAACl4E,CAAD,CAAQ,CAC/B,MAAO,CAAE,CAAAq3E,CAAA/rE,IAAA,CAAetL,CAAf,CADsB,CApFyC,CAApE,CA5hIR,CA4rIIkR,GAAkBA,QAAQ,EAAG,CAE/B,MAAO,CACLoc,SAAU,GADL,CAELD,QAAS,CAAC,QAAD,CAAW,UAAX,CAFJ,CAGL/gB,WAAY8qE,EAHP,CAIL5sD,KAAMA,QAAQ,CAAClgB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuBqlE,CAAvB,CAA8B,CAG1C,IAAIoK,EAAcpK,CAAA,CAAM,CAAN,CAClB,IAAKoK,CAAL,CAAA,CAEA,IAAIR,EAAa5J,CAAA,CAAM,CAAN,CAEjB4J,EAAAQ,YAAA,CAAyBA,CAKzBA,EAAA1hB,QAAA,CAAsBunB,QAAQ,EAAG,CAC/BrG,CAAAW,WAAA,CAAsBH,CAAAhiB,WAAtB,CAD+B,CAOjCntD,EAAAgJ,GAAA,CAAW,QAAX,CAAqB,QAAQ,EAAG,CAC9B7B,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB8nE,CAAA9hB,cAAA,CAA0BshB,CAAAC,UAAA,EAA1B,CADsB,CAAxB,CAD8B,CAAhC,CAUA;GAAIlvE,CAAAs0D,SAAJ,CAAmB,CAGjB2a,CAAAC,UAAA,CAAuBY,QAA0B,EAAG,CAClD,IAAIrvE,EAAQ,EACZrE,EAAA,CAAQkE,CAAAL,KAAA,CAAa,QAAb,CAAR,CAAgC,QAAQ,CAACuO,CAAD,CAAS,CAC3CA,CAAA+lD,SAAJ,EACE9zD,CAAAY,KAAA,CAAWmN,CAAArR,MAAX,CAF6C,CAAjD,CAKA,OAAOsD,EAP2C,CAWpDwuE,EAAAW,WAAA,CAAwBC,QAA2B,CAAC1yE,CAAD,CAAQ,CACzD,IAAIgD,EAAQ,IAAIse,EAAJ,CAAYthB,CAAZ,CACZf,EAAA,CAAQkE,CAAAL,KAAA,CAAa,QAAb,CAAR,CAAgC,QAAQ,CAACuO,CAAD,CAAS,CAC/CA,CAAA+lD,SAAA,CAAkBr1D,CAAA,CAAUiB,CAAAsI,IAAA,CAAU+F,CAAArR,MAAV,CAAV,CAD6B,CAAjD,CAFyD,CAd1C,KAuBbo4E,CAvBa,CAuBHC,EAAcxmB,GAC5BvnD,EAAA/H,OAAA,CAAa+1E,QAA4B,EAAG,CACtCD,CAAJ,GAAoB/F,CAAAhiB,WAApB,EAA+CvrD,EAAA,CAAOqzE,CAAP,CAAiB9F,CAAAhiB,WAAjB,CAA/C,GACE8nB,CACA,CADWvzE,EAAA,CAAYytE,CAAAhiB,WAAZ,CACX,CAAAgiB,CAAA1hB,QAAA,EAFF,CAIAynB,EAAA,CAAc/F,CAAAhiB,WAL4B,CAA5C,CAUAgiB,EAAAriB,SAAA,CAAuBuiB,QAAQ,CAACxyE,CAAD,CAAQ,CACrC,MAAO,CAACA,CAAR,EAAkC,CAAlC,GAAiBA,CAAArB,OADoB,CAlCtB,CA1BnB,CAJ0C,CAJvC,CAFwB,CA5rIjC,CA+wII2S,GAAkB,CAAC,cAAD,CAAiB,QAAQ,CAAC4F,CAAD,CAAe,CAE5DqhE,QAASA,EAAU,CAACpG,CAAD,CAAgB,CAI7BA,CAAA,CAAc,CAAd,CAAA7oE,aAAA,CAA8B,UAA9B,CAAJ,GACE6oE,CAAA,CAAc,CAAd,CAAA/a,SADF,CAC8B,CAAA,CAD9B,CAJiC,CASnC,MAAO,CACL9pC,SAAU,GADL;AAELF,SAAU,GAFL,CAGL7iB,QAASA,QAAQ,CAACpH,CAAD,CAAUN,CAAV,CAAgB,CAI/B,GAAIf,CAAA,CAAYe,CAAA7C,MAAZ,CAAJ,CAA6B,CAC3B,IAAIs5B,EAAgBpiB,CAAA,CAAa/T,CAAAk2B,KAAA,EAAb,CAA6B,CAAA,CAA7B,CACfC,EAAL,EACEz2B,CAAAm1B,KAAA,CAAU,OAAV,CAAmB70B,CAAAk2B,KAAA,EAAnB,CAHyB,CAO7B,MAAO,SAAQ,CAAC/uB,CAAD,CAAQnH,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAKhCtB,EAAS4B,CAAA5B,OAAA,EALuB,CAMhCuwE,EAAavwE,CAAAkJ,KAAA,CAFI+tE,mBAEJ,CAAb1G,EACEvwE,CAAAA,OAAA,EAAAkJ,KAAA,CAHe+tE,mBAGf,CAIF1G,EAAJ,EAAkBA,CAAAQ,YAAlB,GAEMh5C,CAAJ,CACEhvB,CAAA/H,OAAA,CAAa+2B,CAAb,CAA4Bm/C,QAA+B,CAACryD,CAAD,CAASC,CAAT,CAAiB,CAC1ExjB,CAAAm1B,KAAA,CAAU,OAAV,CAAmB5R,CAAnB,CACIC,EAAJ,GAAeD,CAAf,EACE0rD,CAAAkG,aAAA,CAAwB3xD,CAAxB,CAEFyrD,EAAAgG,UAAA,CAAqB1xD,CAArB,CAA6BjjB,CAA7B,CACA2uE,EAAAQ,YAAA1hB,QAAA,EACA2nB,EAAA,CAAWp1E,CAAX,CAP0E,CAA5E,CADF,EAWE2uE,CAAAgG,UAAA,CAAqBj1E,CAAA7C,MAArB,CAAiCmD,CAAjC,CAEA,CADA2uE,CAAAQ,YAAA1hB,QAAA,EACA,CAAA2nB,CAAA,CAAWp1E,CAAX,CAbF,CAgBA,CAAAA,CAAAgJ,GAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAChC2lE,CAAAkG,aAAA,CAAwBn1E,CAAA7C,MAAxB,CACA8xE,EAAAQ,YAAA1hB,QAAA,EAFgC,CAAlC,CAlBF,CAXoC,CAXP,CAH5B,CAXqD,CAAxC,CA/wItB,CA+0IIx/C,GAAiBvP,EAAA,CAAQ,CAC3ByrB,SAAU,GADiB;AAE3B6D,SAAU,CAAA,CAFiB,CAAR,CA/0IrB,CAo1IIpc,GAAoBA,QAAQ,EAAG,CACjC,MAAO,CACLuY,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQyb,CAAR,CAAaljB,CAAb,CAAmBmsD,CAAnB,CAAyB,CAChCA,CAAL,GACAnsD,CAAAiS,SAMA,CANgB,CAAA,CAMhB,CAJAk6C,CAAA4D,YAAA99C,SAIA,CAJ4B4jE,QAAQ,CAACrR,CAAD,CAAaC,CAAb,CAAwB,CAC1D,MAAO,CAACzkE,CAAAiS,SAAR,EAAyB,CAACk6C,CAAAiB,SAAA,CAAcqX,CAAd,CADgC,CAI5D,CAAAzkE,CAAAi5B,SAAA,CAAc,UAAd,CAA0B,QAAQ,EAAG,CACnCkzB,CAAA8D,UAAA,EADmC,CAArC,CAPA,CADqC,CAHlC,CAD0B,CAp1InC,CAw2IIl+C,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACL0Y,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQyb,CAAR,CAAaljB,CAAb,CAAmBmsD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CADqC,IAGjClhC,CAHiC,CAGzB6qD,EAAa91E,CAAAgS,UAAb8jE,EAA+B91E,CAAA8R,QAC3C9R,EAAAi5B,SAAA,CAAc,SAAd,CAAyB,QAAQ,CAAColB,CAAD,CAAQ,CACnCniD,CAAA,CAASmiD,CAAT,CAAJ,EAAsC,CAAtC,CAAuBA,CAAAviD,OAAvB,GACEuiD,CADF,CACU,IAAIz8C,MAAJ,CAAW,GAAX,CAAiBy8C,CAAjB,CAAyB,GAAzB,CADV,CAIA,IAAIA,CAAJ,EAAc78C,CAAA68C,CAAA78C,KAAd,CACE,KAAM9F,EAAA,CAAO,WAAP,CAAA,CAAoB,UAApB,CACqDo6E,CADrD,CAEJz3B,CAFI,CAEG95C,EAAA,CAAY2e,CAAZ,CAFH,CAAN,CAKF+H,CAAA,CAASozB,CAAT,EAAkB5iD,CAClB0wD,EAAA8D,UAAA,EAZuC,CAAzC,CAeA9D;CAAA4D,YAAAj+C,QAAA,CAA2BikE,QAAQ,CAAC54E,CAAD,CAAQ,CACzC,MAAOgvD,EAAAiB,SAAA,CAAcjwD,CAAd,CAAP,EAA+B8B,CAAA,CAAYgsB,CAAZ,CAA/B,EAAsDA,CAAAzpB,KAAA,CAAYrE,CAAZ,CADb,CAlB3C,CADqC,CAHlC,CADyB,CAx2IlC,CAu4IIqV,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACLiY,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQyb,CAAR,CAAaljB,CAAb,CAAmBmsD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAI55C,EAAa,EACjBvS,EAAAi5B,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAAC97B,CAAD,CAAQ,CACrC64E,CAAAA,CAAS13E,CAAA,CAAMnB,CAAN,CACboV,EAAA,CAAYzO,KAAA,CAAMkyE,CAAN,CAAA,CAAiB,EAAjB,CAAqBA,CACjC7pB,EAAA8D,UAAA,EAHyC,CAA3C,CAKA9D,EAAA4D,YAAAx9C,UAAA,CAA6B0jE,QAAQ,CAACzR,CAAD,CAAaC,CAAb,CAAwB,CAC3D,MAAoB,EAApB,CAAQlyD,CAAR,EAA0B45C,CAAAiB,SAAA,CAAcqX,CAAd,CAA1B,EAAuDA,CAAA3oE,OAAvD,EAA2EyW,CADhB,CAR7D,CADqC,CAHlC,CAD2B,CAv4IpC,CA25IIF,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACLoY,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL7C,KAAMA,QAAQ,CAAClgB,CAAD,CAAQyb,CAAR,CAAaljB,CAAb,CAAmBmsD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAI/5C,EAAY,CAChBpS,EAAAi5B,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAAC97B,CAAD,CAAQ,CACzCiV,CAAA,CAAY9T,CAAA,CAAMnB,CAAN,CAAZ,EAA4B,CAC5BgvD,EAAA8D,UAAA,EAFyC,CAA3C,CAIA9D,EAAA4D,YAAA39C,UAAA,CAA6B8jE,QAAQ,CAAC1R,CAAD;AAAaC,CAAb,CAAwB,CAC3D,MAAOtY,EAAAiB,SAAA,CAAcqX,CAAd,CAAP,EAAmCA,CAAA3oE,OAAnC,EAAuDsW,CADI,CAP7D,CADqC,CAHlC,CAD2B,CAmB9B7W,EAAAwM,QAAA5B,UAAJ,CAEEyoC,OAAAE,IAAA,CAAY,gDAAZ,CAFF,EAQA9lC,EAAA,EAIA,CAFAgE,EAAA,CAAmBjF,EAAnB,CAEA,CAAAvD,CAAA,CAAOhJ,CAAP,CAAAi4D,MAAA,CAAuB,QAAQ,EAAG,CAChCvtD,EAAA,CAAY1K,CAAZ,CAAsB2K,EAAtB,CADgC,CAAlC,CAZA,CA782BqC,CAAtC,CAAD,CA692BG5K,MA792BH,CA692BWC,QA792BX,CA+92BC,EAAAD,MAAAwM,QAAAouE,MAAA,EAAD,EAA2B56E,MAAAwM,QAAAzH,QAAA,CAAuB9E,QAAvB,CAAAyE,KAAA,CAAsC,MAAtC,CAAAk1D,QAAA,CAAsD,gRAAtD;", +"sources":["angular.js"], +"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","Object","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","baseExtend","dst","objs","deep","ii","isObject","j","jj","src","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","isUndefined","isDefined","getPrototypeOf","isNumber","isDate","toString","isRegExp","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","putValue","val","result","push","ngMinErr","TYPED_ARRAY_REGEXP","test","constructor","Date","getTime","RegExp","match","lastIndex","emptyObject","shallowCopy","charAt","equals","o1","o2","t1","t2","keySet","createMap","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","requestedTimezoneOffset","isNaN","convertTimezoneToLocal","date","reverse","timezoneOffset","getTimezoneOffset","setMinutes","getMinutes","minutes","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","$LocaleProvider","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$CoreAnimateRunnerProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$asyncCallback","$$AsyncCallbackProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","listenerFns","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","$inject","$$annotate","Type","instance","prototype","returnedValue","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","Array","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","supported","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","cacheStateAndFireUrlChange","cacheState","fireUrlChange","history","state","cachedState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","reloadLocation","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","bindToController","controllerAs","CNTRL_REG","$$bindings","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","destroyBindings","$new","$$destroyBindings","$on","transcludeOnThisElement","createBoundTranscludeFn","transclude","elementTranscludeOnThisElement","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","elementTransclusion","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","directiveNName","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","substring","inheritType","dataName","setupControllers","controllerDirectives","controllerKey","$scope","$attrs","$transclude","controllerInstance","hasElementTranscludeDirective","linkNode","thisLinkFn","controllersBoundTransclude","cloneAttachFn","scopeToChild","templateDirective","$$originalDirective","initializeDirectiveBindings","scopeDirective","newScopeDirective","controllerForBindings","identifier","controllerResult","invokeLinkFn","template","templateUrl","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","newScope","onNewScopeDestroyed","lastValue","parentGet","parentSet","compare","$observe","literal","assign","parentValueWatch","parentValue","$stateful","unwatch","$watchCollection","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","$controllerMinErr","controllerPrototype","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","rawDocument","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","mustHaveExpression","parseStringifyInterceptor","getTrusted","valueOf","$interpolateMinErr","interr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","throwNoconcat","compute","interpolationFn","$$watchDelegate","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","NUMBER_FORMATS","DECIMAL_SEP","GROUP_SEP","PATTERNS","minInt","minFrac","maxFrac","posPre","posSuf","negPre","negSuf","gSize","lgSize","CURRENCY_SYM","DATETIME_FORMATS","MONTH","SHORTMONTH","DAY","SHORTDAY","AMPMS","medium","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","ERANAMES","ERAS","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","stripFile","lastIndexOf","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","target","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","setter","setValue","fullExp","propertyObj","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","objectEquality","parsedExpression","prettyPrintExpression","inputExpressions","inputs","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","watchDelegate","regularInterceptedExpression","oneTimeInterceptedExpression","$parseOptions","expensiveChecks","$parseOptionsExpensive","oneTime","cacheKey","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","all","promises","results","flush","taskQueue","task","taskCount","queueFn","asyncFn","cancelLastRAF","rafFn","cancelQueueFn","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","timer","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","Scope","$parent","$$prevSibling","$root","beginPhase","phase","incrementWatchersCount","current","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","msie","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","item","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","amount","currencySymbol","fractionSize","formatNumber","number","groupSep","decimalSep","isNegative","abs","isInfinity","Infinity","isFinite","numStr","formatedText","hasExponent","toFixed","parseFloat","fractionLen","min","round","fraction","lgroup","group","padNumber","digits","neg","dateGetter","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","eraGetter","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","format","NUMBER_STRING","DATE_FORMATS_SPLIT","dateTimezoneOffset","DATE_FORMATS","spacing","limit","sortPredicate","reverseOrder","reverseComparator","comp","descending","objectToString","v1","v2","map","predicate","ngDirective","FormController","controls","parentForm","$$parentForm","nullFormCtrl","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$addControl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","$ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","validity","VALIDITY_STATE_PROPERTY","badInput","typeMismatch","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","isActive_","active","Function","name_","el","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","AnimateRunner","end","resume","pause","complete","pass","fail","postDigestElements","addRemoveClassesPostDigest","add","existing","pin","domOperation","from","to","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","runner","enter","move","leave","addclass","animate","tempClasses","APPLICATION_JSON","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","isExpOperator","start","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","constants","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","generateFunction","fnKey","intoId","return_","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeMemberName","addEnsureSafeFunction","member","filterName","defaultValue","stringEscapeRegex","stringEscapeFn","c","charCodeAt","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","base","astCompiler","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","ngFormCompile","formElement","nameAttr","ngFormPreLink","handleFormSubmission","parentFormCtrl","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","ctrls","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","getStringValue","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","disabled","valueName","keyName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","getWatchable","disableWhen","getOptions","optionItems","selectValueMap","optionValues","optionValuesKeys","itemKey","optionValuesLength","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","updateOptionElement","addOrReuseElement","removeExcessElements","skipEmptyAndUnknownOptions","emptyOption_","emptyOption","unknownOption_","unknownOption","updateOptions","previousValue","selectCtrl","readValue","groupMap","providedEmptyOption","updateOption","optionElement","groupElement","currentOptionElement","ngModelCtrl","nextValue","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","addOption","self.addOption","removeOption","self.removeOption","self.hasOption","ngModelCtrl.$render","lastView","lastViewRef","selectMultipleWatch","chromeHack","selectCtrlName","interpolateWatchAction","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","$$csp"] +} diff --git a/src/main/webapp/WEB-INF/views/src/js/components/angular/package.json b/src/main/webapp/WEB-INF/views/src/js/components/angular/package.json new file mode 100644 index 0000000..d1adede --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/angular/package.json @@ -0,0 +1,25 @@ +{ + "name": "angular", + "version": "1.4.0", + "description": "HTML enhanced for web apps", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/angular/angular.js.git" + }, + "keywords": [ + "angular", + "framework", + "browser", + "client-side" + ], + "author": "Angular Core Team ", + "license": "MIT", + "bugs": { + "url": "https://github.com/angular/angular.js/issues" + }, + "homepage": "http://angularjs.org" +} diff --git a/src/main/webapp/WEB-INF/views/src/js/components/require-css/.bower.json b/src/main/webapp/WEB-INF/views/src/js/components/require-css/.bower.json new file mode 100644 index 0000000..101f21b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/require-css/.bower.json @@ -0,0 +1,25 @@ +{ + "name": "require-css", + "version": "0.1.8", + "ignore": [ + "example", + "test", + ".gitignore" + ], + "main": [ + "css.js", + "css-builder.js", + "normalize.js" + ], + "homepage": "https://github.com/guybedford/require-css", + "_release": "0.1.8", + "_resolution": { + "type": "version", + "tag": "0.1.8", + "commit": "3b1d86858259762e5bb9db72c3df6ea808cd9d6d" + }, + "_source": "git://github.com/guybedford/require-css.git", + "_target": "~0.1.8", + "_originalSource": "require-css", + "_direct": true +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/components/require-css/LICENSE b/src/main/webapp/WEB-INF/views/src/js/components/require-css/LICENSE new file mode 100644 index 0000000..e39e77c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/require-css/LICENSE @@ -0,0 +1,10 @@ +MIT License +----------- + +Copyright (C) 2013 Guy Bedford + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/webapp/WEB-INF/views/src/js/components/require-css/README.md b/src/main/webapp/WEB-INF/views/src/js/components/require-css/README.md new file mode 100644 index 0000000..cbf8bcf --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/components/require-css/README.md @@ -0,0 +1,250 @@ +require-css +=========== + +RequireJS CSS requiring and optimization, with almond support. + +Useful for writing modular CSS dependencies alongside scripts. + +For LESS inclusion, use [require-less](https://github.com/guybedford/require-less), which behaves and builds the css exactly like this module apart from the preprocessing step. + + + +Overview +-------- + +Allows the construction of scripts that can require CSS, using the simple RequireJS syntax: + +```javascript +define(['css!styles/main'], function() { + //code that requires the stylesheet: styles/main.css +}); +``` + +Fully compatible in IE 6+, Chrome 3+, Firefox 3.5+, Opera 10+, iOS. + +* **CSS builds** When run as part of a build with the RequireJS optimizer, `css!` dependencies are automatically inlined into the built layer within the JavaScript, fully compatible with layering. CSS injection is performed as soon as the layer is loaded. +* **Option to build separate layer CSS files** A `separateCSS` build parameter allows for built layers to output their css files separately, instead of inline with the JavaScript, for manual inclusion. +* **CSS compression** CSS redundancy compression is supported through the external library, [csso](https://github.com/css/csso). + +Installation and Setup +---------------------- + +Download the require-css folder manually or use Bower: + +```bash +bower install require-css +``` + +To allow the direct `css!` usage, add the following [map configuration](http://requirejs.org/docs/api.html#config-map) in RequireJS: + +```javascript +map: { + '*': { + 'css': 'require-css/css' // or whatever the path to require-css is + } +} +``` + +Use Cases and Benefits +---------------------- + +### Motivation + +The use case for RequireCSS came out of a need to manage templates and their CSS together. +The idea being that a CSS require can be a dependency of the code that dynamically renders a template. +When writing a large dynamic application, with templates being rendered on the client-side, it can be beneficial to inject the CSS as templates are required instead +of dumping all the CSS together separately. The added benefit of this is then being able to build the CSS naturally with the RequireJS optimizer, +which also supports [separate build layers](http://requirejs.org/docs/1.0/docs/faq-optimization.html#priority) as needed. + +### Script-inlined CSS Benefits + +By default, during the build CSS is compressed and inlined as a string within the layer that injects the CSS when run. + +If the layer is included as a ` + + + +
+
+ + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/fface.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/fface.gif new file mode 100644 index 0000000..0d8a6af Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/fface.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/jxface2.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/jxface2.gif new file mode 100644 index 0000000..a959c90 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/jxface2.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/neweditor-tab-bg.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/neweditor-tab-bg.png new file mode 100644 index 0000000..8f398b0 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/neweditor-tab-bg.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/tface.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/tface.gif new file mode 100644 index 0000000..1354f54 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/tface.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/wface.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/wface.gif new file mode 100644 index 0000000..5667160 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/emotion/images/wface.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/help/help.css b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/help/help.css new file mode 100644 index 0000000..4478475 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/help/help.css @@ -0,0 +1,7 @@ +.wrapper{width: 370px;margin: 10px auto;zoom: 1;} +.tabbody{height: 360px;} +.tabbody .panel{width:100%;height: 360px;position: absolute;background: #fff;} +.tabbody .panel h1{font-size:26px;margin: 5px 0 0 5px;} +.tabbody .panel p{font-size:12px;margin: 5px 0 0 5px;} +.tabbody table{width:90%;line-height: 20px;margin: 5px 0 0 5px;;} +.tabbody table thead{font-weight: bold;line-height: 25px;} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/help/help.html b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/help/help.html new file mode 100644 index 0000000..9e50060 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/help/help.html @@ -0,0 +1,82 @@ + + + + 帮助 + + + + + +
+
+ + +
+
+
+

UEditor

+

+

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ctrl+b
ctrl+c
ctrl+x
ctrl+v
ctrl+y
ctrl+z
ctrl+i
ctrl+u
ctrl+a
shift+enter
alt+z
+
+
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/image.css b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/image.css new file mode 100644 index 0000000..bc3e1d7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/image.css @@ -0,0 +1,894 @@ +@charset "utf-8"; +/* dialog样式 */ +.wrapper { + zoom: 1; + width: 630px; + *width: 626px; + height: 380px; + margin: 0 auto; + padding: 10px; + position: relative; + font-family: sans-serif; +} + +/*tab样式框大小*/ +.tabhead { + float:left; +} +.tabbody { + width: 100%; + height: 346px; + position: relative; + clear: both; +} + +.tabbody .panel { + position: absolute; + width: 0; + height: 0; + background: #fff; + overflow: hidden; + display: none; +} + +.tabbody .panel.focus { + width: 100%; + height: 346px; + display: block; +} + +/* 图片对齐方式 */ +.alignBar{ + float:right; + margin-top: 5px; + position: relative; +} + +.alignBar .algnLabel{ + float:left; + height: 20px; + line-height: 20px; +} + +.alignBar #alignIcon{ + zoom:1; + _display: inline; + display: inline-block; + position: relative; +} +.alignBar #alignIcon span{ + float: left; + cursor: pointer; + display: block; + width: 19px; + height: 17px; + margin-right: 3px; + margin-left: 3px; + background-image: url(images/alignicon.jpg); +} +.alignBar #alignIcon .none-align{ + background-position: 0 -18px; +} +.alignBar #alignIcon .left-align{ + background-position: -20px -18px; +} +.alignBar #alignIcon .right-align{ + background-position: -40px -18px; +} +.alignBar #alignIcon .center-align{ + background-position: -60px -18px; +} +.alignBar #alignIcon .none-align.focus{ + background-position: 0 0; +} +.alignBar #alignIcon .left-align.focus{ + background-position: -20px 0; +} +.alignBar #alignIcon .right-align.focus{ + background-position: -40px 0; +} +.alignBar #alignIcon .center-align.focus{ + background-position: -60px 0; +} + + + + +/* 远程图片样式 */ +#remote { + z-index: 200; +} + +#remote .top{ + width: 100%; + margin-top: 25px; +} +#remote .left{ + display: block; + float: left; + width: 300px; + height:10px; +} +#remote .right{ + display: block; + float: right; + width: 300px; + height:10px; +} +#remote .row{ + margin-left: 20px; + clear: both; + height: 40px; +} + +#remote .row label{ + text-align: center; + width: 50px; + zoom:1; + _display: inline; + display:inline-block; + vertical-align: middle; +} +#remote .row label.algnLabel{ + float: left; + +} + +#remote input.text{ + width: 150px; + padding: 3px 6px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +#remote input.text:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); +} +#remote #url{ + width: 500px; + margin-bottom: 2px; +} +#remote #width, +#remote #height{ + width: 20px; + margin-left: 2px; + margin-right: 2px; +} +#remote #border, +#remote #vhSpace, +#remote #title{ + width: 180px; + margin-right: 5px; +} +#remote #lock{ +} +#remote #lockicon{ + zoom: 1; + _display:inline; + display: inline-block; + width: 20px; + height: 20px; + background: url("../../themes/default/images/lock.gif") -13px -13px no-repeat; + vertical-align: middle; +} +#remote #preview{ + clear: both; + width: 260px; + height: 240px; + z-index: 9999; + margin-top: 10px; + background-color: #eee; + overflow: hidden; +} + +/* 上传图片 */ +.tabbody #upload.panel { + width: 0; + height: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); + background: #fff; + display: block; +} + +.tabbody #upload.panel.focus { + width: 100%; + height: 346px; + display: block; + clip: auto; +} + +#upload .queueList { + margin: 0; + width: 100%; + height: 100%; + position: absolute; + overflow: hidden; +} + +#upload p { + margin: 0; +} + +.element-invisible { + width: 0 !important; + height: 0 !important; + border: 0; + padding: 0; + margin: 0; + overflow: hidden; + position: absolute !important; + clip: rect(1px, 1px, 1px, 1px); +} + +#upload .placeholder { + margin: 10px; + border: 2px dashed #e6e6e6; + *border: 0px dashed #e6e6e6; + height: 172px; + padding-top: 150px; + text-align: center; + background: url(images/image.png) center 70px no-repeat; + color: #cccccc; + font-size: 18px; + position: relative; + top:0; + *top: 10px; +} + +#upload .placeholder .webuploader-pick { + font-size: 18px; + background: #00b7ee; + border-radius: 3px; + line-height: 44px; + padding: 0 30px; + *width: 120px; + color: #fff; + display: inline-block; + margin: 0 auto 20px auto; + cursor: pointer; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); +} + +#upload .placeholder .webuploader-pick-hover { + background: #00a2d4; +} + + +#filePickerContainer { + text-align: center; +} + +#upload .placeholder .flashTip { + color: #666666; + font-size: 12px; + position: absolute; + width: 100%; + text-align: center; + bottom: 20px; +} + +#upload .placeholder .flashTip a { + color: #0785d1; + text-decoration: none; +} + +#upload .placeholder .flashTip a:hover { + text-decoration: underline; +} + +#upload .placeholder.webuploader-dnd-over { + border-color: #999999; +} + +#upload .filelist { + list-style: none; + margin: 0; + padding: 0; + overflow-x: hidden; + overflow-y: auto; + position: relative; + height: 300px; +} + +#upload .filelist:after { + content: ''; + display: block; + width: 0; + height: 0; + overflow: hidden; + clear: both; + position: relative; +} + +#upload .filelist li { + width: 113px; + height: 113px; + background: url(images/bg.png); + text-align: center; + margin: 9px 0 0 9px; + *margin: 6px 0 0 6px; + position: relative; + display: block; + float: left; + overflow: hidden; + font-size: 12px; +} + +#upload .filelist li p.log { + position: relative; + top: -45px; +} + +#upload .filelist li p.title { + position: absolute; + top: 0; + left: 0; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + top: 5px; + text-indent: 5px; + text-align: left; +} + +#upload .filelist li p.progress { + position: absolute; + width: 100%; + bottom: 0; + left: 0; + height: 8px; + overflow: hidden; + z-index: 50; + margin: 0; + border-radius: 0; + background: none; + -webkit-box-shadow: 0 0 0; +} + +#upload .filelist li p.progress span { + display: none; + overflow: hidden; + width: 0; + height: 100%; + background: #1483d8 url(images/progress.png) repeat-x; + + -webit-transition: width 200ms linear; + -moz-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; + transition: width 200ms linear; + + -webkit-animation: progressmove 2s linear infinite; + -moz-animation: progressmove 2s linear infinite; + -o-animation: progressmove 2s linear infinite; + -ms-animation: progressmove 2s linear infinite; + animation: progressmove 2s linear infinite; + + -webkit-transform: translateZ(0); +} + +@-webkit-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@-moz-keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +@keyframes progressmove { + 0% { + background-position: 0 0; + } + 100% { + background-position: 17px 0; + } +} + +#upload .filelist li p.imgWrap { + position: relative; + z-index: 2; + line-height: 113px; + vertical-align: middle; + overflow: hidden; + width: 113px; + height: 113px; + + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; + -o-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + + -webit-transition: 200ms ease-out; + -moz-transition: 200ms ease-out; + -o-transition: 200ms ease-out; + -ms-transition: 200ms ease-out; + transition: 200ms ease-out; +} + +#upload .filelist li img { + width: 100%; +} + +#upload .filelist li p.error { + background: #f43838; + color: #fff; + position: absolute; + bottom: 0; + left: 0; + height: 28px; + line-height: 28px; + width: 100%; + z-index: 100; + display:none; +} + +#upload .filelist li .success { + display: block; + position: absolute; + left: 0; + bottom: 0; + height: 40px; + width: 100%; + z-index: 200; + background: url(images/success.png) no-repeat right bottom; + background: url(images/success.gif) no-repeat right bottom \9; +} + +#upload .filelist li.filePickerBlock { + width: 113px; + height: 113px; + background: url(images/image.png) no-repeat center 12px; + border: 1px solid #eeeeee; + border-radius: 0; +} +#upload .filelist li.filePickerBlock div.webuploader-pick { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + opacity: 0; + background: none; + font-size: 0; +} + +#upload .filelist div.file-panel { + position: absolute; + height: 0; + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \0; + background: rgba(0, 0, 0, 0.5); + width: 100%; + top: 0; + left: 0; + overflow: hidden; + z-index: 300; +} + +#upload .filelist div.file-panel span { + width: 24px; + height: 24px; + display: inline; + float: right; + text-indent: -9999px; + overflow: hidden; + background: url(images/icons.png) no-repeat; + background: url(images/icons.gif) no-repeat \9; + margin: 5px 1px 1px; + cursor: pointer; + -webkit-tap-highlight-color: rgba(0,0,0,0); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#upload .filelist div.file-panel span.rotateLeft { + display:none; + background-position: 0 -24px; +} + +#upload .filelist div.file-panel span.rotateLeft:hover { + background-position: 0 0; +} + +#upload .filelist div.file-panel span.rotateRight { + display:none; + background-position: -24px -24px; +} + +#upload .filelist div.file-panel span.rotateRight:hover { + background-position: -24px 0; +} + +#upload .filelist div.file-panel span.cancel { + background-position: -48px -24px; +} + +#upload .filelist div.file-panel span.cancel:hover { + background-position: -48px 0; +} + +#upload .statusBar { + height: 45px; + border-bottom: 1px solid #dadada; + margin: 0 10px; + padding: 0; + line-height: 45px; + vertical-align: middle; + position: relative; +} + +#upload .statusBar .progress { + border: 1px solid #1483d8; + width: 198px; + background: #fff; + height: 18px; + position: absolute; + top: 12px; + display: none; + text-align: center; + line-height: 18px; + color: #6dbfff; + margin: 0 10px 0 0; +} +#upload .statusBar .progress span.percentage { + width: 0; + height: 100%; + left: 0; + top: 0; + background: #1483d8; + position: absolute; +} +#upload .statusBar .progress span.text { + position: relative; + z-index: 10; +} + +#upload .statusBar .info { + display: inline-block; + font-size: 14px; + color: #666666; +} + +#upload .statusBar .btns { + position: absolute; + top: 7px; + right: 0; + line-height: 30px; +} + +#filePickerBtn { + display: inline-block; + float: left; +} +#upload .statusBar .btns .webuploader-pick, +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-uploading, +#upload .statusBar .btns .uploadBtn.state-paused { + background: #ffffff; + border: 1px solid #cfcfcf; + color: #565656; + padding: 0 18px; + display: inline-block; + border-radius: 3px; + margin-left: 10px; + cursor: pointer; + font-size: 14px; + float: left; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +#upload .statusBar .btns .webuploader-pick-hover, +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-uploading:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover { + background: #f0f0f0; +} + +#upload .statusBar .btns .uploadBtn, +#upload .statusBar .btns .uploadBtn.state-paused{ + background: #00b7ee; + color: #fff; + border-color: transparent; +} +#upload .statusBar .btns .uploadBtn:hover, +#upload .statusBar .btns .uploadBtn.state-paused:hover{ + background: #00a2d4; +} + +#upload .statusBar .btns .uploadBtn.disabled { + pointer-events: none; + filter:alpha(opacity=60); + -moz-opacity:0.6; + -khtml-opacity: 0.6; + opacity: 0.6; +} + + + +/* 图片管理样式 */ +#online { + width: 100%; + height: 336px; + padding: 10px 0 0 0; +} +#online #imageList{ + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + position: relative; +} +#online ul { + display: block; + list-style: none; + margin: 0; + padding: 0; +} +#online li { + float: left; + display: block; + list-style: none; + padding: 0; + width: 113px; + height: 113px; + margin: 0 0 9px 9px; + *margin: 0 0 6px 6px; + background-color: #eee; + overflow: hidden; + cursor: pointer; + position: relative; +} +#online li.clearFloat { + float: none; + clear: both; + display: block; + width:0; + height:0; + margin: 0; + padding: 0; +} +#online li img { + cursor: pointer; +} +#online li .icon { + cursor: pointer; + width: 113px; + height: 113px; + position: absolute; + top: 0; + left: 0; + z-index: 2; + border: 0; + background-repeat: no-repeat; +} +#online li .icon:hover { + width: 107px; + height: 107px; + border: 3px solid #1094fa; +} +#online li.selected .icon { + background-image: url(images/success.png); + background-image: url(images/success.gif)\9; + background-position: 75px 75px; +} +#online li.selected .icon:hover { + width: 107px; + height: 107px; + border: 3px solid #1094fa; + background-position: 72px 72px; +} + + +/* 图片搜索样式 */ +#search .searchBar { + width: 100%; + height: 30px; + margin: 10px 0 5px 0; + padding: 0; +} + +#search input.text{ + width: 150px; + padding: 3px 6px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +#search input.text:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6); +} +#search input.searchTxt { + margin-left:5px; + padding-left: 5px; + background: #FFF; + width: 300px; + *width: 260px; + height: 21px; + line-height: 21px; + float: left; + dislay: block; +} + +#search .searchType { + width: 65px; + height: 28px; + padding:0; + line-height: 28px; + border: 1px solid #d7d7d7; + border-radius: 0; + vertical-align: top; + margin-left: 5px; + float: left; + dislay: block; +} + +#search #searchBtn, +#search #searchReset { + display: inline-block; + margin-bottom: 0; + margin-right: 5px; + padding: 4px 10px; + font-weight: 400; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + font-size: 14px; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + vertical-align: top; + float: right; +} + +#search #searchBtn { + color: white; + border-color: #285e8e; + background-color: #3b97d7; +} +#search #searchReset { + color: #333; + border-color: #ccc; + background-color: #fff; +} +#search #searchBtn:hover { + background-color: #3276b1; +} +#search #searchReset:hover { + background-color: #eee; +} + +#search .msg { + margin-left: 5px; +} + +#search .searchList{ + width: 100%; + height: 300px; + overflow: hidden; + clear: both; +} +#search .searchList ul{ + margin:0; + padding:0; + list-style:none; + clear: both; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + zoom: 1; + position: relative; +} + +#search .searchList li { + list-style:none; + float: left; + display: block; + width: 115px; + margin: 5px 10px 5px 20px; + *margin: 5px 10px 5px 15px; + padding:0; + font-size: 12px; + box-shadow: 0 1px 3px rgba(0, 0, 0, .3); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, .3); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, .3); + position: relative; + vertical-align: top; + text-align: center; + overflow: hidden; + cursor: pointer; + filter: alpha(Opacity=100); + -moz-opacity: 1; + opacity: 1; + border: 2px solid #eee; +} + +#search .searchList li.selected { + filter: alpha(Opacity=40); + -moz-opacity: 0.4; + opacity: 0.4; + border: 2px solid #00a0e9; +} + +#search .searchList li p { + background-color: #eee; + margin: 0; + padding: 0; + position: relative; + width:100%; + height:115px; + overflow: hidden; +} + +#search .searchList li p img { + cursor: pointer; + border: 0; +} + +#search .searchList li a { + color: #999; + border-top: 1px solid #F2F2F2; + background: #FAFAFA; + text-align: center; + display: block; + padding: 0 5px; + width: 105px; + height:32px; + line-height:32px; + white-space:nowrap; + text-overflow:ellipsis; + text-decoration: none; + overflow: hidden; + word-break: break-all; +} + +#search .searchList a:hover { + text-decoration: underline; + color: #333; +} +#search .searchList .clearFloat{ + clear: both; +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/images/icons.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/images/icons.gif new file mode 100644 index 0000000..78459de Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/images/icons.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/images/success.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/images/success.png new file mode 100644 index 0000000..94f968d Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/image/images/success.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/link/link.html b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/link/link.html new file mode 100644 index 0000000..55ab4d1 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/dialogs/link/link.html @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/index.html b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/index.html new file mode 100644 index 0000000..08e2c6d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/index.html @@ -0,0 +1,157 @@ + + + + 完整demo + + + + + + + +
+

完整demo

+ +
+
+
+ + + + + + + + + + + +
+
+ + + + + + +
+ +
+
+ + +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/images/music.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/images/music.png new file mode 100644 index 0000000..354edeb Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/images/music.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/images/upload.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/images/upload.png new file mode 100644 index 0000000..08d4d92 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/images/upload.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/zh-cn.js b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/zh-cn.js new file mode 100644 index 0000000..4d5178f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/lang/zh-cn/zh-cn.js @@ -0,0 +1,669 @@ +/** + * Created with JetBrains PhpStorm. + * User: taoqili + * Date: 12-6-12 + * Time: 下午5:02 + * To change this template use File | Settings | File Templates. + */ +UE.I18N['zh-cn'] = { + 'labelMap':{ + 'anchor':'锚点', 'undo':'撤销', 'redo':'重做', 'bold':'加粗', 'indent':'首行缩进', 'snapscreen':'截图', + 'italic':'斜体', 'underline':'下划线', 'strikethrough':'删除线', 'subscript':'下标','fontborder':'字符边框', + 'superscript':'上标', 'formatmatch':'格式刷', 'source':'源代码', 'blockquote':'引用', + 'pasteplain':'纯文本粘贴模式', 'selectall':'全选', 'print':'打印', 'preview':'预览', + 'horizontal':'分隔线', 'removeformat':'清除格式', 'time':'时间', 'date':'日期', + 'unlink':'取消链接', 'insertrow':'前插入行', 'insertcol':'前插入列', 'mergeright':'右合并单元格', 'mergedown':'下合并单元格', + 'deleterow':'删除行', 'deletecol':'删除列', 'splittorows':'拆分成行', + 'splittocols':'拆分成列', 'splittocells':'完全拆分单元格','deletecaption':'删除表格标题','inserttitle':'插入标题', + 'mergecells':'合并多个单元格', 'deletetable':'删除表格', 'cleardoc':'清空文档','insertparagraphbeforetable':"表格前插入行",'insertcode':'代码语言', + 'fontfamily':'字体', 'fontsize':'字号', 'paragraph':'段落格式', 'simpleupload':'单图上传', 'insertimage':'多图上传','edittable':'表格属性','edittd':'单元格属性', 'link':'超链接', + 'emotion':'表情', 'spechars':'特殊字符', 'searchreplace':'查询替换', 'map':'Baidu地图', 'gmap':'Google地图', + 'insertvideo':'视频', 'help':'帮助', 'justifyleft':'居左对齐', 'justifyright':'居右对齐', 'justifycenter':'居中对齐', + 'justifyjustify':'两端对齐', 'forecolor':'字体颜色', 'backcolor':'背景色', 'insertorderedlist':'有序列表', + 'insertunorderedlist':'无序列表', 'fullscreen':'全屏', 'directionalityltr':'从左向右输入', 'directionalityrtl':'从右向左输入', + 'rowspacingtop':'段前距', 'rowspacingbottom':'段后距', 'pagebreak':'分页', 'insertframe':'插入Iframe', 'imagenone':'默认', + 'imageleft':'左浮动', 'imageright':'右浮动', 'attachment':'附件', 'imagecenter':'居中', 'wordimage':'图片转存', + 'lineheight':'行间距','edittip' :'编辑提示','customstyle':'自定义标题', 'autotypeset':'自动排版', + 'webapp':'百度应用','touppercase':'字母大写', 'tolowercase':'字母小写','background':'背景','template':'模板','scrawl':'涂鸦', + 'music':'音乐','inserttable':'插入表格','drafts': '从草稿箱加载', 'charts': '图表' + }, + 'insertorderedlist':{ + 'num':'1,2,3...', + 'num1':'1),2),3)...', + 'num2':'(1),(2),(3)...', + 'cn':'一,二,三....', + 'cn1':'一),二),三)....', + 'cn2':'(一),(二),(三)....', + 'decimal':'1,2,3...', + 'lower-alpha':'a,b,c...', + 'lower-roman':'i,ii,iii...', + 'upper-alpha':'A,B,C...', + 'upper-roman':'I,II,III...' + }, + 'insertunorderedlist':{ + 'circle':'○ 大圆圈', + 'disc':'● 小黑点', + 'square':'■ 小方块 ', + 'dash' :'— 破折号', + 'dot':' 。 小圆圈' + }, + 'paragraph':{'p':'段落', 'h1':'标题 1', 'h2':'标题 2', 'h3':'标题 3', 'h4':'标题 4', 'h5':'标题 5', 'h6':'标题 6'}, + 'fontfamily':{ + 'songti':'宋体', + 'kaiti':'楷体', + 'heiti':'黑体', + 'lishu':'隶书', + 'yahei':'微软雅黑', + 'andaleMono':'andale mono', + 'arial': 'arial', + 'arialBlack':'arial black', + 'comicSansMs':'comic sans ms', + 'impact':'impact', + 'timesNewRoman':'times new roman' + }, + 'customstyle':{ + 'tc':'标题居中', + 'tl':'标题居左', + 'im':'强调', + 'hi':'明显强调' + }, + 'autoupload': { + 'exceedSizeError': '文件大小超出限制', + 'exceedTypeError': '文件格式不允许', + 'jsonEncodeError': '服务器返回格式错误', + 'loading':"正在上传...", + 'loadError':"上传错误", + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!' + }, + 'simpleupload':{ + 'exceedSizeError': '文件大小超出限制', + 'exceedTypeError': '文件格式不允许', + 'jsonEncodeError': '服务器返回格式错误', + 'loading':"正在上传...", + 'loadError':"上传错误", + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!' + }, + 'elementPathTip':"元素路径", + 'wordCountTip':"字数统计", + 'wordCountMsg':'当前已输入{#count}个字符, 您还可以输入{#leave}个字符。 ', + 'wordOverFlowMsg':'字数超出最大允许值,服务器可能拒绝保存!', + 'ok':"确认", + 'cancel':"取消", + 'closeDialog':"关闭对话框", + 'tableDrag':"表格拖动必须引入uiUtils.js文件!", + 'autofloatMsg':"工具栏浮动依赖编辑器UI,您首先需要引入UI文件!", + 'loadconfigError': '获取后台配置项请求出错,上传功能将不能正常使用!', + 'loadconfigFormatError': '后台配置项返回格式出错,上传功能将不能正常使用!', + 'loadconfigHttpError': '请求后台配置项http错误,上传功能将不能正常使用!', + 'snapScreen_plugin':{ + 'browserMsg':"仅支持IE浏览器!", + 'callBackErrorMsg':"服务器返回数据有误,请检查配置项之后重试。", + 'uploadErrorMsg':"截图上传失败,请检查服务器端环境! " + }, + 'insertcode':{ + 'as3':'ActionScript 3', + 'bash':'Bash/Shell', + 'cpp':'C/C++', + 'css':'CSS', + 'cf':'ColdFusion', + 'c#':'C#', + 'delphi':'Delphi', + 'diff':'Diff', + 'erlang':'Erlang', + 'groovy':'Groovy', + 'html':'HTML', + 'java':'Java', + 'jfx':'JavaFX', + 'js':'JavaScript', + 'pl':'Perl', + 'php':'PHP', + 'plain':'Plain Text', + 'ps':'PowerShell', + 'python':'Python', + 'ruby':'Ruby', + 'scala':'Scala', + 'sql':'SQL', + 'vb':'Visual Basic', + 'xml':'XML' + }, + 'confirmClear':"确定清空当前文档么?", + 'contextMenu':{ + 'delete':"删除", + 'selectall':"全选", + 'deletecode':"删除代码", + 'cleardoc':"清空文档", + 'confirmclear':"确定清空当前文档么?", + 'unlink':"删除超链接", + 'paragraph':"段落格式", + 'edittable':"表格属性", + 'aligntd':"单元格对齐方式", + 'aligntable':'表格对齐方式', + 'tableleft':'左浮动', + 'tablecenter':'居中显示', + 'tableright':'右浮动', + 'edittd':"单元格属性", + 'setbordervisible':'设置表格边线可见', + 'justifyleft':'左对齐', + 'justifyright':'右对齐', + 'justifycenter':'居中对齐', + 'justifyjustify':'两端对齐', + 'table':"表格", + 'inserttable':'插入表格', + 'deletetable':"删除表格", + 'insertparagraphbefore':"前插入段落", + 'insertparagraphafter':'后插入段落', + 'deleterow':"删除当前行", + 'deletecol':"删除当前列", + 'insertrow':"前插入行", + 'insertcol':"左插入列", + 'insertrownext':'后插入行', + 'insertcolnext':'右插入列', + 'insertcaption':'插入表格名称', + 'deletecaption':'删除表格名称', + 'inserttitle':'插入表格标题行', + 'deletetitle':'删除表格标题行', + 'inserttitlecol':'插入表格标题列', + 'deletetitlecol':'删除表格标题列', + 'averageDiseRow':'平均分布各行', + 'averageDisCol':'平均分布各列', + 'mergeright':"向右合并", + 'mergeleft':"向左合并", + 'mergedown':"向下合并", + 'mergecells':"合并单元格", + 'splittocells':"完全拆分单元格", + 'splittocols':"拆分成列", + 'splittorows':"拆分成行", + 'tablesort':'表格排序', + 'enablesort':'设置表格可排序', + 'disablesort':'取消表格可排序', + 'reversecurrent':'逆序当前', + 'orderbyasc':'按ASCII字符升序', + 'reversebyasc':'按ASCII字符降序', + 'orderbynum':'按数值大小升序', + 'reversebynum':'按数值大小降序', + 'borderbk':'边框底纹', + 'setcolor':'表格隔行变色', + 'unsetcolor':'取消表格隔行变色', + 'setbackground':'选区背景隔行', + 'unsetbackground':'取消选区背景', + 'redandblue':'红蓝相间', + 'threecolorgradient':'三色渐变', + 'copy':"复制(Ctrl + c)", + 'copymsg': "浏览器不支持,请使用 'Ctrl + c'", + 'paste':"粘贴(Ctrl + v)", + 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'" + }, + 'copymsg': "浏览器不支持,请使用 'Ctrl + c'", + 'pastemsg': "浏览器不支持,请使用 'Ctrl + v'", + 'anthorMsg':"链接", + 'clearColor':'清空颜色', + 'standardColor':'标准颜色', + 'themeColor':'主题颜色', + 'property':'属性', + 'default':'默认', + 'modify':'修改', + 'justifyleft':'左对齐', + 'justifyright':'右对齐', + 'justifycenter':'居中', + 'justify':'默认', + 'clear':'清除', + 'anchorMsg':'锚点', + 'delete':'删除', + 'clickToUpload':"点击上传", + 'unset':'尚未设置语言文件', + 't_row':'行', + 't_col':'列', + 'more':'更多', + 'pasteOpt':'粘贴选项', + 'pasteSourceFormat':"保留源格式", + 'tagFormat':'只保留标签', + 'pasteTextFormat':'只保留文本', + 'autoTypeSet':{ + 'mergeLine':"合并空行", + 'delLine':"清除空行", + 'removeFormat':"清除格式", + 'indent':"首行缩进", + 'alignment':"对齐方式", + 'imageFloat':"图片浮动", + 'removeFontsize':"清除字号", + 'removeFontFamily':"清除字体", + 'removeHtml':"清除冗余HTML代码", + 'pasteFilter':"粘贴过滤", + 'run':"执行", + 'symbol':'符号转换', + 'bdc2sb':'全角转半角', + 'tobdc':'半角转全角' + }, + + 'background':{ + 'static':{ + 'lang_background_normal':'背景设置', + 'lang_background_local':'在线图片', + 'lang_background_set':'选项', + 'lang_background_none':'无背景色', + 'lang_background_colored':'有背景色', + 'lang_background_color':'颜色设置', + 'lang_background_netimg':'网络图片', + 'lang_background_align':'对齐方式', + 'lang_background_position':'精确定位', + 'repeatType':{'options':["居中", "横向重复", "纵向重复", "平铺","自定义"]} + + }, + 'noUploadImage':"当前未上传过任何图片!", + 'toggleSelect':"单击可切换选中状态\n原图尺寸: " + }, + //===============dialog i18N======================= + 'insertimage':{ + 'static':{ + 'lang_tab_remote':"插入图片", //节点 + 'lang_tab_upload':"本地上传", + 'lang_tab_online':"在线管理", + 'lang_tab_search':"图片搜索", + 'lang_input_url':"地 址:", + 'lang_input_size':"大 小:", + 'lang_input_width':"宽度", + 'lang_input_height':"高度", + 'lang_input_border':"边 框:", + 'lang_input_vhspace':"边 距:", + 'lang_input_title':"描 述:", + 'lang_input_align':'图片浮动方式:', + 'lang_imgLoading':" 图片加载中……", + 'lang_start_upload':"开始上传", + 'lock':{'title':"锁定宽高比例"}, //属性 + 'searchType':{'title':"图片类型", 'options':["新闻", "壁纸", "表情", "头像"]}, //select的option + 'searchTxt':{'value':"请输入搜索关键词"}, + 'searchBtn':{'value':"百度一下"}, + 'searchReset':{'value':"清空搜索"}, + 'noneAlign':{'title':'无浮动'}, + 'leftAlign':{'title':'左浮动'}, + 'rightAlign':{'title':'右浮动'}, + 'centerAlign':{'title':'居中独占一行'} + }, + 'uploadSelectFile':'点击选择图片', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'uploadNoPreview':'不能预览', + 'updateStatusReady': '选中_张图片,共_KB。', + 'updateStatusConfirm': '已成功上传_张照片,_张照片上传失败', + 'updateStatusFinish': '共_张(_KB),_张上传成功', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错', + 'remoteLockError':"宽高不正确,不能所定比例", + 'numError':"请输入正确的长度或者宽度值!例如:123,400", + 'imageUrlError':"不允许的图片格式或者图片域!", + 'imageLoadError':"图片加载失败!请检查链接地址或网络状态!", + 'searchRemind':"请输入搜索关键词", + 'searchLoading':"图片加载中,请稍后……", + 'searchRetry':" :( ,抱歉,没有找到图片!请重试一次!" + }, + 'attachment':{ + 'static':{ + 'lang_tab_upload': '上传附件', + 'lang_tab_online': '在线附件', + 'lang_start_upload':"开始上传", + 'lang_drop_remind':"可以将文件拖到这里,单次最多可选100个文件" + }, + 'uploadSelectFile':'点击选择文件', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'updateStatusReady': '选中_个文件,共_KB。', + 'updateStatusConfirm': '已成功上传_个文件,_个文件上传失败', + 'updateStatusFinish': '共_个(_KB),_个上传成功', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错' + }, + 'insertvideo':{ + 'static':{ + 'lang_tab_insertV':"插入视频", + 'lang_tab_searchV':"搜索视频", + 'lang_tab_uploadV':"上传视频", + 'lang_video_url':"视频网址", + 'lang_video_size':"视频尺寸", + 'lang_videoW':"宽度", + 'lang_videoH':"高度", + 'lang_alignment':"对齐方式", + 'videoSearchTxt':{'value':"请输入搜索关键字!"}, + 'videoType':{'options':["全部", "热门", "娱乐", "搞笑", "体育", "科技", "综艺"]}, + 'videoSearchBtn':{'value':"百度一下"}, + 'videoSearchReset':{'value':"清空结果"}, + + 'lang_input_fileStatus':' 当前未上传文件', + 'startUpload':{'style':"background:url(upload.png) no-repeat;"}, + + 'lang_upload_size':"视频尺寸", + 'lang_upload_width':"宽度", + 'lang_upload_height':"高度", + 'lang_upload_alignment':"对齐方式", + 'lang_format_advice':"建议使用mp4格式." + + }, + 'numError':"请输入正确的数值,如123,400", + 'floatLeft':"左浮动", + 'floatRight':"右浮动", + '"default"':"默认", + 'block':"独占一行", + 'urlError':"输入的视频地址有误,请检查后再试!", + 'loading':"  视频加载中,请等待……", + 'clickToSelect':"点击选中", + 'goToSource':'访问源视频', + 'noVideo':"    抱歉,找不到对应的视频,请重试!", + + 'browseFiles':'浏览文件', + 'uploadSuccess':'上传成功!', + 'delSuccessFile':'从成功队列中移除', + 'delFailSaveFile':'移除保存失败文件', + 'statusPrompt':' 个文件已上传! ', + 'flashVersionError':'当前Flash版本过低,请更新FlashPlayer后重试!', + 'flashLoadingError':'Flash加载失败!请检查路径或网络状态', + 'fileUploadReady':'等待上传……', + 'delUploadQueue':'从上传队列中移除', + 'limitPrompt1':'单次不能选择超过', + 'limitPrompt2':'个文件!请重新选择!', + 'delFailFile':'移除失败文件', + 'fileSizeLimit':'文件大小超出限制!', + 'emptyFile':'空文件无法上传!', + 'fileTypeError':'文件类型不允许!', + 'unknownError':'未知错误!', + 'fileUploading':'上传中,请等待……', + 'cancelUpload':'取消上传', + 'netError':'网络错误', + 'failUpload':'上传失败!', + 'serverIOError':'服务器IO错误!', + 'noAuthority':'无权限!', + 'fileNumLimit':'上传个数限制', + 'failCheck':'验证失败,本次上传被跳过!', + 'fileCanceling':'取消中,请等待……', + 'stopUploading':'上传已停止……', + + 'uploadSelectFile':'点击选择文件', + 'uploadAddFile':'继续添加', + 'uploadStart':'开始上传', + 'uploadPause':'暂停上传', + 'uploadContinue':'继续上传', + 'uploadRetry':'重试上传', + 'uploadDelete':'删除', + 'uploadTurnLeft':'向左旋转', + 'uploadTurnRight':'向右旋转', + 'uploadPreview':'预览中', + 'updateStatusReady': '选中_个文件,共_KB。', + 'updateStatusConfirm': '成功上传_个,_个失败', + 'updateStatusFinish': '共_个(_KB),_个成功上传', + 'updateStatusError': ',_张上传失败。', + 'errorNotSupport': 'WebUploader 不支持您的浏览器!如果你使用的是IE浏览器,请尝试升级 flash 播放器。', + 'errorLoadConfig': '后端配置项没有正常加载,上传插件不能正常使用!', + 'errorExceedSize':'文件大小超出', + 'errorFileType':'文件格式不允许', + 'errorInterrupt':'文件传输中断', + 'errorUploadRetry':'上传失败,请重试', + 'errorHttp':'http请求错误', + 'errorServerUpload':'服务器返回出错' + }, + 'webapp':{ + 'tip1':"本功能由百度APP提供,如看到此页面,请各位站长首先申请百度APPKey!", + 'tip2':"申请完成之后请至ueditor.config.js中配置获得的appkey! ", + 'applyFor':"点此申请", + 'anthorApi':"百度API" + }, + 'template':{ + 'static':{ + 'lang_template_bkcolor':'背景颜色', + 'lang_template_clear' : '保留原有内容', + 'lang_template_select' : '选择模板' + }, + 'blank':"空白文档", + 'blog':"博客文章", + 'resume':"个人简历", + 'richText':"图文混排", + 'sciPapers':"科技论文" + + + }, + 'scrawl':{ + 'static':{ + 'lang_input_previousStep':"上一步", + 'lang_input_nextsStep':"下一步", + 'lang_input_clear':'清空', + 'lang_input_addPic':'添加背景', + 'lang_input_ScalePic':'缩放背景', + 'lang_input_removePic':'删除背景', + 'J_imgTxt':{title:'添加背景图片'} + }, + 'noScarwl':"尚未作画,白纸一张~", + 'scrawlUpLoading':"涂鸦上传中,别急哦~", + 'continueBtn':"继续", + 'imageError':"糟糕,图片读取失败了!", + 'backgroundUploading':'背景图片上传中,别急哦~' + }, + 'music':{ + 'static':{ + 'lang_input_tips':"输入歌手/歌曲/专辑,搜索您感兴趣的音乐!", + 'J_searchBtn':{value:'搜索歌曲'} + }, + 'emptyTxt':'未搜索到相关音乐结果,请换一个关键词试试。', + 'chapter':'歌曲', + 'singer':'歌手', + 'special':'专辑', + 'listenTest':'试听' + }, + 'anchor':{ + 'static':{ + 'lang_input_anchorName':'锚点名字:' + } + }, + 'charts':{ + 'static':{ + 'lang_data_source':'数据源:', + 'lang_chart_format': '图表格式:', + 'lang_data_align': '数据对齐方式', + 'lang_chart_align_same': '数据源与图表X轴Y轴一致', + 'lang_chart_align_reverse': '数据源与图表X轴Y轴相反', + 'lang_chart_title': '图表标题', + 'lang_chart_main_title': '主标题:', + 'lang_chart_sub_title': '子标题:', + 'lang_chart_x_title': 'X轴标题:', + 'lang_chart_y_title': 'Y轴标题:', + 'lang_chart_tip': '提示文字', + 'lang_cahrt_tip_prefix': '提示文字前缀:', + 'lang_cahrt_tip_description': '仅饼图有效, 当鼠标移动到饼图中相应的块上时,提示框内的文字的前缀', + 'lang_chart_data_unit': '数据单位', + 'lang_chart_data_unit_title': '单位:', + 'lang_chart_data_unit_description': '显示在每个数据点上的数据的单位, 比如: 温度的单位 ℃', + 'lang_chart_type': '图表类型:', + 'lang_prev_btn': '上一个', + 'lang_next_btn': '下一个' + } + }, + 'emotion':{ + 'static':{ + 'lang_input_choice':'精选', + 'lang_input_Tuzki':'兔斯基', + 'lang_input_BOBO':'BOBO', + 'lang_input_lvdouwa':'绿豆蛙', + 'lang_input_babyCat':'baby猫', + 'lang_input_bubble':'泡泡', + 'lang_input_youa':'有啊' + } + }, + 'gmap':{ + 'static':{ + 'lang_input_address':'地址', + 'lang_input_search':'搜索', + 'address':{value:"北京"} + }, + searchError:'无法定位到该地址!' + }, + 'help':{ + 'static':{ + 'lang_input_about':'关于UEditor', + 'lang_input_shortcuts':'快捷键', + 'lang_input_introduction':'UEditor是由百度web前端研发部开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点。开源基于BSD协议,允许自由使用和修改代码。', + 'lang_Txt_shortcuts':'快捷键', + 'lang_Txt_func':'功能', + 'lang_Txt_bold':'给选中字设置为加粗', + 'lang_Txt_copy':'复制选中内容', + 'lang_Txt_cut':'剪切选中内容', + 'lang_Txt_Paste':'粘贴', + 'lang_Txt_undo':'重新执行上次操作', + 'lang_Txt_redo':'撤销上一次操作', + 'lang_Txt_italic':'给选中字设置为斜体', + 'lang_Txt_underline':'给选中字加下划线', + 'lang_Txt_selectAll':'全部选中', + 'lang_Txt_visualEnter':'软回车', + 'lang_Txt_fullscreen':'全屏' + } + }, + 'insertframe':{ + 'static':{ + 'lang_input_address':'地址:', + 'lang_input_width':'宽度:', + 'lang_input_height':'高度:', + 'lang_input_isScroll':'允许滚动条:', + 'lang_input_frameborder':'显示框架边框:', + 'lang_input_alignMode':'对齐方式:', + 'align':{title:"对齐方式", options:["默认", "左对齐", "右对齐", "居中"]} + }, + 'enterAddress':'请输入地址!' + }, + 'link':{ + 'static':{ + 'lang_input_text':'文本内容:', + 'lang_input_url':'链接地址:', + 'lang_input_title':'标题:', + 'lang_input_target':'是否在新窗口打开:' + }, + 'validLink':'只支持选中一个链接时生效', + 'httpPrompt':'您输入的超链接中不包含http等协议名称,默认将为您添加http://前缀' + }, + 'map':{ + 'static':{ + lang_city:"城市", + lang_address:"地址", + city:{value:"北京"}, + lang_search:"搜索", + lang_dynamicmap:"插入动态地图" + }, + cityMsg:"请选择城市", + errorMsg:"抱歉,找不到该位置!" + }, + 'searchreplace':{ + 'static':{ + lang_tab_search:"查找", + lang_tab_replace:"替换", + lang_search1:"查找", + lang_search2:"查找", + lang_replace:"替换", + lang_searchReg:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”', + lang_searchReg1:'支持正则表达式,添加前后斜杠标示为正则表达式,例如“/表达式/”', + lang_case_sensitive1:"区分大小写", + lang_case_sensitive2:"区分大小写", + nextFindBtn:{value:"下一个"}, + preFindBtn:{value:"上一个"}, + nextReplaceBtn:{value:"下一个"}, + preReplaceBtn:{value:"上一个"}, + repalceBtn:{value:"替换"}, + repalceAllBtn:{value:"全部替换"} + }, + getEnd:"已经搜索到文章末尾!", + getStart:"已经搜索到文章头部", + countMsg:"总共替换了{#count}处!" + }, + 'snapscreen':{ + 'static':{ + lang_showMsg:"截图功能需要首先安装UEditor截图插件! ", + lang_download:"点此下载", + lang_step1:"第一步,下载UEditor截图插件并运行安装。", + lang_step2:"第二步,插件安装完成后即可使用,如不生效,请重启浏览器后再试!" + } + }, + 'spechars':{ + 'static':{}, + tsfh:"特殊字符", + lmsz:"罗马字符", + szfh:"数学字符", + rwfh:"日文字符", + xlzm:"希腊字母", + ewzm:"俄文字符", + pyzm:"拼音字母", + yyyb:"英语音标", + zyzf:"其他" + }, + 'edittable':{ + 'static':{ + 'lang_tableStyle':'表格样式', + 'lang_insertCaption':'添加表格名称行', + 'lang_insertTitle':'添加表格标题行', + 'lang_insertTitleCol':'添加表格标题列', + 'lang_orderbycontent':"使表格内容可排序", + 'lang_tableSize':'自动调整表格尺寸', + 'lang_autoSizeContent':'按表格文字自适应', + 'lang_autoSizePage':'按页面宽度自适应', + 'lang_example':'示例', + 'lang_borderStyle':'表格边框', + 'lang_color':'颜色:' + }, + captionName:'表格名称', + titleName:'标题', + cellsName:'内容', + errorMsg:'有合并单元格,不可排序' + }, + 'edittip':{ + 'static':{ + lang_delRow:'删除整行', + lang_delCol:'删除整列' + } + }, + 'edittd':{ + 'static':{ + lang_tdBkColor:'背景颜色:' + } + }, + 'formula':{ + 'static':{ + } + }, + 'wordimage':{ + 'static':{ + lang_resave:"转存步骤", + uploadBtn:{src:"upload.png",alt:"上传"}, + clipboard:{style:"background: url(copy.png) -153px -1px no-repeat;"}, + lang_step:"1、点击顶部复制按钮,将地址复制到剪贴板;2、点击添加照片按钮,在弹出的对话框中使用Ctrl+V粘贴地址;3、点击打开后选择图片上传流程。" + }, + 'fileType':"图片", + 'flashError':"FLASH初始化失败,请检查FLASH插件是否正确安装!", + 'netError':"网络连接错误,请重试!", + 'copySuccess':"图片地址已经复制!", + 'flashI18n':{} //留空默认中文 + }, + 'autosave': { + 'saving':'保存中...', + 'success':'本地保存成功' + } +}; diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/nodejs/config.json b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/nodejs/config.json new file mode 100644 index 0000000..dd5bc17 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/nodejs/config.json @@ -0,0 +1,94 @@ +/* 前后端通信相关的配置,注释只允许使用多行方式 */ +{ + /* 上传图片配置项 */ + "imageActionName": "uploadimage", /* 执行上传图片的action名称 */ + "imageFieldName": "upfile", /* 提交的图片表单名称 */ + "imageMaxSize": 2048000, /* 上传大小限制,单位B */ + "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */ + "imageCompressEnable": true, /* 是否压缩图片,默认是true */ + "imageCompressBorder": 1600, /* 图片压缩最长边限制 */ + "imageInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageUrlPrefix": "", /* 图片访问路径前缀 */ + "imagePathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ + /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ + /* {time} 会替换成时间戳 */ + /* {yyyy} 会替换成四位年份 */ + /* {yy} 会替换成两位年份 */ + /* {mm} 会替换成两位月份 */ + /* {dd} 会替换成两位日期 */ + /* {hh} 会替换成两位小时 */ + /* {ii} 会替换成两位分钟 */ + /* {ss} 会替换成两位秒 */ + /* 非法字符 \ : * ? " < > | */ + /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ + + /* 涂鸦图片上传配置项 */ + "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */ + "scrawlFieldName": "upfile", /* 提交的图片表单名称 */ + "scrawlPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */ + "scrawlUrlPrefix": "", /* 图片访问路径前缀 */ + "scrawlInsertAlign": "none", + + /* 截图工具上传 */ + "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */ + "snapscreenPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */ + "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */ + + /* 抓取远程图片配置 */ + "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], + "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */ + "catcherFieldName": "source", /* 提交的图片列表表单名称 */ + "catcherPathFormat": "/ueditor/php/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "catcherUrlPrefix": "", /* 图片访问路径前缀 */ + "catcherMaxSize": 2048000, /* 上传大小限制,单位B */ + "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */ + + /* 上传视频配置 */ + "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */ + "videoFieldName": "upfile", /* 提交的视频表单名称 */ + "videoPathFormat": "/ueditor/php/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "videoUrlPrefix": "", /* 视频访问路径前缀 */ + "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */ + "videoAllowFiles": [ + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */ + + /* 上传文件配置 */ + "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */ + "fileFieldName": "upfile", /* 提交的文件表单名称 */ + "filePathFormat": "/ueditor/php/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ + "fileUrlPrefix": "", /* 文件访问路径前缀 */ + "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */ + "fileAllowFiles": [ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", + ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", + ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" + ], /* 上传文件格式显示 */ + + /* 列出指定目录下的图片 */ + "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */ + "imageManagerListPath": "/ueditor/php/upload/image/", /* 指定要列出图片的目录 */ + "imageManagerListSize": 20, /* 每次列出文件数量 */ + "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */ + "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */ + "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */ + + /* 列出指定目录下的文件 */ + "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */ + "fileManagerListPath": "/ueditor/php/upload/file/", /* 指定要列出文件的目录 */ + "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */ + "fileManagerListSize": 20, /* 每次列出文件数量 */ + "fileManagerAllowFiles": [ + ".png", ".jpg", ".jpeg", ".gif", ".bmp", + ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", + ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid", + ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso", + ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml" + ] /* 列出的文件类型 */ + +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/css/ueditor.css b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/css/ueditor.css new file mode 100644 index 0000000..44ae805 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/css/ueditor.css @@ -0,0 +1,1903 @@ +/*基础UI构建 +*/ +/* common layer */ +.edui-default .edui-box { + border: none; + padding: 0; + margin: 0; + overflow: hidden; +} + +.edui-default a.edui-box { + display: block; + text-decoration: none; + color: black; +} + +.edui-default a.edui-box:hover { + text-decoration: none; +} + +.edui-default a.edui-box:active { + text-decoration: none; +} + +.edui-default table.edui-box { + border-collapse: collapse; +} + +.edui-default ul.edui-box { + list-style-type: none; +} + +div.edui-box { + position: relative; + display: -moz-inline-box !important; + display: inline-block !important; + vertical-align: top; +} + +.edui-default .edui-clearfix { + zoom: 1 +} + +.edui-default .edui-clearfix:after { + content: '\20'; + display: block; + clear: both; +} + + * html div.edui-box { + display: inline !important; +} + +*:first-child+html div.edui-box { + display: inline !important; +} + +/* control layout */ +.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body { + position: relative; +} + +.edui-default .edui-popup { + position: absolute; + -webkit-user-select: none; + -moz-user-select: none; +} + +.edui-default .edui-popup .edui-shadow { + position: absolute; + z-index: -1; +} + +.edui-default .edui-popup .edui-bordereraser { + position: absolute; + overflow: hidden; +} + +.edui-default .edui-tablepicker .edui-canvas { + position: relative; +} + +.edui-default .edui-tablepicker .edui-canvas .edui-overlay { + position: absolute; +} + +.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.edui-default .edui-toolbar { + position: relative; +} + +/* + * default theme + */ +.edui-default .edui-label { + cursor: default; +} + +.edui-default span.edui-clickable { + color: blue; + cursor: pointer; + text-decoration: underline; +} + +.edui-default span.edui-unclickable { + color: gray; + cursor: default; +} +/* 工具栏 */ +.edui-default .edui-toolbar { + cursor: default; + -webkit-user-select: none; + -moz-user-select: none; + padding: 1px; + overflow: hidden; /*全屏下单独一行不占位*/ + zoom: 1; + width:auto; + height:auto; +} + +.edui-default .edui-toolbar .edui-button, +.edui-default .edui-toolbar .edui-splitbutton, +.edui-default .edui-toolbar .edui-menubutton, +.edui-default .edui-toolbar .edui-combox { + margin: 1px; +} +/*UI工具栏、编辑区域、底部*/ +.edui-default .edui-editor { + border: 1px solid #d4d4d4; + background-color: white; + position: relative; + overflow: visible; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.edui-editor div{ + width:auto; + height:auto; +} +.edui-default .edui-editor-toolbarbox { + position: relative; + zoom: 1; + -webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + -moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + box-shadow:0 1px 4px rgba(204, 204, 204, 0.6); + border-top-left-radius:2px; + border-top-right-radius:2px; +} + +.edui-default .edui-editor-toolbarboxouter { + border-bottom: 1px solid #d4d4d4; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + /*border: 1px solid #d4d4d4;*/ + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.edui-default .edui-editor-toolbarboxinner { + padding: 2px; +} + +.edui-default .edui-editor-iframeholder { + position: relative; + /*for fix ie6 toolbarmsg under iframe bug. relative -> static */ + /*_position: static !important;* +} + +.edui-default .edui-editor-iframeholder textarea { + font-family: consolas, "Courier New", "lucida console", monospace; + font-size: 12px; + line-height: 18px; +} + +.edui-default .edui-editor-bottombar { + /*border-top: 1px solid #ccc;*/ + /*height: 20px;*/ + /*width: 40%;*/ + /*float: left;*/ + /*overflow: hidden;*/ +} + +.edui-default .edui-editor-bottomContainer { + overflow: hidden; +} + +.edui-default .edui-editor-bottomContainer table { + width: 100%; + height: 0; + overflow: hidden; + border-spacing: 0; +} + +.edui-default .edui-editor-bottomContainer td { + white-space: nowrap; + border-top: 1px solid #ccc; + line-height: 20px; + font-size: 12px; + font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif; +} + +.edui-default .edui-editor-wordcount { + text-align: right; + margin-right: 5px; + color: #aaa; +} +.edui-default .edui-editor-scale { + width: 12px; +} +.edui-default .edui-editor-scale .edui-editor-icon { + float: right; + width: 100%; + height: 12px; + margin-top: 10px; + background: url(../images/scale.png) no-repeat; + cursor: se-resize; +} +.edui-default .edui-editor-breadcrumb { + margin: 2px 0 0 3px; +} + +.edui-default .edui-editor-breadcrumb span { + cursor: pointer; + text-decoration: underline; + color: blue; +} + +.edui-default .edui-toolbar .edui-for-fullscreen { + float: right; +} + +.edui-default .edui-bubble .edui-popup-content { + border: 1px solid #DCAC6C; + background-color: #fff6d9; + padding: 5px; + font-size: 10pt; + font-family: "宋体"; +} + +.edui-default .edui-bubble .edui-shadow { + /*box-shadow: 1px 1px 3px #818181;*/ + /*-webkit-box-shadow: 2px 2px 3px #818181;*/ + /*-moz-box-shadow: 2px 2px 3px #818181;*/ + /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/ +} + +.edui-default .edui-editor-toolbarmsg { + background-color: #FFF6D9; + border-bottom: 1px solid #ccc; + position: absolute; + bottom: -25px; + left: 0; + z-index: 1009; + width: 99.9%; +} + +.edui-default .edui-editor-toolbarmsg-upload { + font-size: 14px; + color: blue; + width: 100px; + height: 16px; + line-height: 16px; + cursor: pointer; + position: absolute; + top: 5px; + left: 350px; +} + +.edui-default .edui-editor-toolbarmsg-label { + font-size: 12px; + line-height: 16px; + padding: 4px; +} + +.edui-default .edui-editor-toolbarmsg-close { + float: right; + width: 20px; + height: 16px; + line-height: 16px; + cursor: pointer; + color: red; +} +/*可选中菜单按钮*/ +.edui-default .edui-list .edui-bordereraser { + display: none; +} + +.edui-default .edui-listitem { + padding: 1px; + white-space: nowrap; +} + +.edui-default .edui-list .edui-state-hover { + position: relative; + background-color: #fff5d4; + border: 1px solid #dcac6c; + padding: 0; +} + +.edui-default .edui-for-fontfamily .edui-listitem-label { + min-width: 130px; + _width: 120px; + font-size: 12px; + height: 22px; + line-height: 22px; + padding-left: 5px; +} +.edui-default .edui-for-insertcode .edui-listitem-label { + min-width: 120px; + _width: 120px; + font-size: 12px; + height: 22px; + line-height: 22px; + padding-left: 5px; +} +.edui-default .edui-for-underline .edui-listitem-label { + min-width: 120px; + _width: 120px; + padding: 3px 5px; + font-size: 12px; +} + +.edui-default .edui-for-fontsize .edui-listitem-label { + min-width: 120px; + _width: 120px; + padding: 3px 5px; + +} + +.edui-default .edui-for-paragraph .edui-listitem-label { + min-width: 200px; + _width: 200px; + padding: 2px 5px; +} + +.edui-default .edui-for-rowspacingtop .edui-listitem-label, +.edui-default .edui-for-rowspacingbottom .edui-listitem-label { + min-width: 53px; + _width: 53px; + padding: 2px 5px; +} + +.edui-default .edui-for-lineheight .edui-listitem-label { + min-width: 53px; + _width: 53px; + padding: 2px 5px; +} + +.edui-default .edui-for-customstyle .edui-listitem-label { + min-width: 200px; + _width: 200px; + width: 200px !important; + padding: 2px 5px; +} +/* 可选中按钮弹出菜单*/ +.edui-default .edui-menu { + z-index: 3000; +} + +.edui-default .edui-menu .edui-popup-content { + padding: 3px; +} + +.edui-default .edui-menu-body { + _width: 150px; + min-width: 170px; + background: url("../images/sparator_v.png") repeat-y 25px; +} + +.edui-default .edui-menuitem-body { +} + +.edui-default .edui-menuitem { + height: 20px; + cursor: default; + vertical-align: top; +} + +.edui-default .edui-menuitem .edui-icon { + width: 20px !important; + height: 20px !important; + background: url(../images/icons.png) 0 -4000px; + background: url(../images/icons.gif) 0 -4000px\9; +} + +.edui-default .edui-menuitem .edui-label { + font-size: 12px; + line-height: 20px; + height: 20px; + padding-left: 10px; +} + +.edui-default .edui-state-checked .edui-menuitem-body { + background: url("../images/icons-all.gif") no-repeat 6px -205px; +} + +.edui-default .edui-state-disabled .edui-menuitem-label { + color: gray; +} + + +/*不可选中菜单按钮 */ +.edui-default .edui-toolbar .edui-combox-body .edui-button-body { + width: 60px; + font-size: 12px; + height: 20px; + line-height: 20px; + padding-left: 5px; + white-space: nowrap; + margin: 0 3px 0 0; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-arrow { + background: url(../images/icons.png) -741px 0; + _background: url(../images/icons.gif) -741px 0; + height: 20px; + width: 9px; +} + +.edui-default .edui-toolbar .edui-combox .edui-combox-body { + border: 1px solid #CCC; + background-color: white; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-splitborder { + display: none; +} + +.edui-default .edui-toolbar .edui-combox-body .edui-arrow { + border-left: 1px solid #CCC; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-combox-body { + background-color: #fff5d4; + border: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow { + border-left: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-checked .edui-combox-body { + background-color: #FFE69F; + border: 1px solid #DCAC6C; +} + +.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow { + border-left: 1px solid #DCAC6C; +} + +.edui-toolbar .edui-state-disabled .edui-combox-body { + background-color: #F0F0EE; + opacity: 0.3; + filter: alpha(opacity = 30); +} + +.edui-toolbar .edui-state-opened .edui-combox-body { + background-color: white; + border: 1px solid gray; +} +/*普通按钮样式及状态*/ +.edui-default .edui-toolbar .edui-button .edui-icon, +.edui-default .edui-toolbar .edui-menubutton .edui-icon, +.edui-default .edui-toolbar .edui-splitbutton .edui-icon { + height: 20px !important; + width: 20px !important; + background-image: url(../images/icons.png); + background-image: url(../images/icons.gif) \9; +} + +.edui-default .edui-toolbar .edui-button .edui-button-wrap { + padding: 1px; + position: relative; +} + +.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap { + background-color: #fff5d4; + padding: 0; + border: 1px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap { + background-color: #ffe69f; + padding: 0; + border: 1px solid #dcac6c; + border-radius: 2px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; +} + +.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap { + background-color: #ffffff; + padding: 0; + border: 1px solid gray; +} +.edui-default .edui-toolbar .edui-state-disabled .edui-label { + color: #ccc; +} +.edui-default .edui-toolbar .edui-state-disabled .edui-icon { + opacity: 0.3; + filter: alpha(opacity = 30); +} + +/* toolbar icons */ +.edui-default .edui-for-undo .edui-icon { + background-position: -160px 0; +} + +.edui-default .edui-for-redo .edui-icon { + background-position: -100px 0; +} + +.edui-default .edui-for-bold .edui-icon { + background-position: 0 0; +} + +.edui-default .edui-for-italic .edui-icon { + background-position: -60px 0; +} + +.edui-default .edui-for-fontborder .edui-icon { + background-position:-160px -40px; +} +.edui-default .edui-for-underline .edui-icon { + background-position: -140px 0; +} + +.edui-default .edui-for-strikethrough .edui-icon { + background-position: -120px 0; +} + +.edui-default .edui-for-subscript .edui-icon { + background-position: -600px 0; +} + +.edui-default .edui-for-superscript .edui-icon { + background-position: -620px 0; +} + +.edui-default .edui-for-blockquote .edui-icon { + background-position: -220px 0; +} + +.edui-default .edui-for-forecolor .edui-icon { + background-position: -720px 0; +} + +.edui-default .edui-for-backcolor .edui-icon { + background-position: -760px 0; +} + +.edui-default .edui-for-inserttable .edui-icon { + background-position: -580px -20px; +} + +.edui-default .edui-for-autotypeset .edui-icon { + background-position: -640px -40px; +} + +.edui-default .edui-for-justifyleft .edui-icon { + background-position: -460px 0; +} + +.edui-default .edui-for-justifycenter .edui-icon { + background-position: -420px 0; +} + +.edui-default .edui-for-justifyright .edui-icon { + background-position: -480px 0; +} + +.edui-default .edui-for-justifyjustify .edui-icon { + background-position: -440px 0; +} + +.edui-default .edui-for-insertorderedlist .edui-icon { + background-position: -80px 0; +} + +.edui-default .edui-for-insertunorderedlist .edui-icon { + background-position: -20px 0; +} + +.edui-default .edui-for-lineheight .edui-icon { + background-position: -725px -40px; +} + +.edui-default .edui-for-rowspacingbottom .edui-icon { + background-position: -745px -40px; +} + +.edui-default .edui-for-rowspacingtop .edui-icon { + background-position: -765px -40px; +} + +.edui-default .edui-for-horizontal .edui-icon { + background-position: -360px 0; +} + +.edui-default .edui-for-link .edui-icon { + background-position: -500px 0; +} + +.edui-default .edui-for-code .edui-icon { + background-position: -440px -40px; +} + +.edui-default .edui-for-insertimage .edui-icon { + background-position: -726px -77px; +} + +.edui-default .edui-for-insertframe .edui-icon { + background-position: -240px -40px; +} + +.edui-default .edui-for-emoticon .edui-icon { + background-position: -60px -20px; +} + +.edui-default .edui-for-spechars .edui-icon { + background-position: -240px 0; +} + +.edui-default .edui-for-help .edui-icon { + background-position: -340px 0; +} + +.edui-default .edui-for-print .edui-icon { + background-position: -440px -20px; +} + +.edui-default .edui-for-preview .edui-icon { + background-position: -420px -20px; +} + +.edui-default .edui-for-selectall .edui-icon { + background-position: -400px -20px; +} + +.edui-default .edui-for-searchreplace .edui-icon { + background-position: -520px -20px; +} + +.edui-default .edui-for-map .edui-icon { + background-position: -40px -40px; +} + +.edui-default .edui-for-gmap .edui-icon { + background-position: -260px -40px; +} + +.edui-default .edui-for-insertvideo .edui-icon { + background-position: -320px -20px; +} + +.edui-default .edui-for-time .edui-icon { + background-position: -160px -20px; +} + +.edui-default .edui-for-date .edui-icon { + background-position: -140px -20px; +} + +.edui-default .edui-for-cut .edui-icon { + background-position: -680px 0; +} + +.edui-default .edui-for-copy .edui-icon { + background-position: -700px 0; +} + +.edui-default .edui-for-paste .edui-icon { + background-position: -560px 0; +} + +.edui-default .edui-for-formatmatch .edui-icon { + background-position: -40px 0; +} + +.edui-default .edui-for-pasteplain .edui-icon { + background-position: -360px -20px; +} + +.edui-default .edui-for-directionalityltr .edui-icon { + background-position: -20px -20px; +} + +.edui-default .edui-for-directionalityrtl .edui-icon { + background-position: -40px -20px; +} + +.edui-default .edui-for-source .edui-icon { + background-position: -261px -0px; +} + +.edui-default .edui-for-removeformat .edui-icon { + background-position: -580px 0; +} + +.edui-default .edui-for-unlink .edui-icon { + background-position: -640px 0; +} + +.edui-default .edui-for-touppercase .edui-icon { + background-position: -786px 0; +} + +.edui-default .edui-for-tolowercase .edui-icon { + background-position: -806px 0; +} + +.edui-default .edui-for-insertrow .edui-icon { + background-position: -478px -76px; +} + +.edui-default .edui-for-insertrownext .edui-icon { + background-position: -498px -76px; +} + +.edui-default .edui-for-insertcol .edui-icon { + background-position: -455px -76px; +} + +.edui-default .edui-for-insertcolnext .edui-icon { + background-position: -429px -76px; +} + +.edui-default .edui-for-mergeright .edui-icon { + background-position: -60px -40px; +} + +.edui-default .edui-for-mergedown .edui-icon { + background-position: -80px -40px; +} + +.edui-default .edui-for-splittorows .edui-icon { + background-position: -100px -40px; +} + +.edui-default .edui-for-splittocols .edui-icon { + background-position: -120px -40px; +} + +.edui-default .edui-for-insertparagraphbeforetable .edui-icon { + background-position: -140px -40px; +} + +.edui-default .edui-for-deleterow .edui-icon { + background-position: -660px -20px; +} + +.edui-default .edui-for-deletecol .edui-icon { + background-position: -640px -20px; +} + +.edui-default .edui-for-splittocells .edui-icon { + background-position: -800px -20px; +} + +.edui-default .edui-for-mergecells .edui-icon { + background-position: -760px -20px; +} + +.edui-default .edui-for-deletetable .edui-icon { + background-position: -620px -20px; +} + +.edui-default .edui-for-cleardoc .edui-icon { + background-position: -520px 0; +} + +.edui-default .edui-for-fullscreen .edui-icon { + background-position: -100px -20px; +} + +.edui-default .edui-for-anchor .edui-icon { + background-position: -200px 0; +} + +.edui-default .edui-for-pagebreak .edui-icon { + background-position: -460px -40px; +} + +.edui-default .edui-for-imagenone .edui-icon { + background-position: -480px -40px; +} + +.edui-default .edui-for-imageleft .edui-icon { + background-position: -500px -40px; +} + +.edui-default .edui-for-wordimage .edui-icon { + background-position: -660px -40px; +} + +.edui-default .edui-for-imageright .edui-icon { + background-position: -520px -40px; +} + +.edui-default .edui-for-imagecenter .edui-icon { + background-position: -540px -40px; +} + +.edui-default .edui-for-indent .edui-icon { + background-position: -400px 0; +} + +.edui-default .edui-for-outdent .edui-icon { + background-position: -540px 0; +} + +.edui-default .edui-for-webapp .edui-icon { + background-position: -601px -40px +} + +.edui-default .edui-for-table .edui-icon { + background-position: -580px -20px; +} + +.edui-default .edui-for-edittable .edui-icon { + background-position: -420px -40px; +} + +.edui-default .edui-for-template .edui-icon { + background-position: -339px -40px; +} + +.edui-default .edui-for-delete .edui-icon { + background-position: -360px -40px; +} + +.edui-default .edui-for-attachment .edui-icon { + background-position: -620px -40px; +} + +.edui-default .edui-for-edittd .edui-icon { + background-position: -700px -40px; +} + +.edui-default .edui-for-snapscreen .edui-icon { + background-position: -581px -40px +} + +.edui-default .edui-for-scrawl .edui-icon { + background-position: -801px -41px +} + +.edui-default .edui-for-background .edui-icon { + background-position: -680px -40px; +} + +.edui-default .edui-for-music .edui-icon { + background-position: -18px -40px +} + +.edui-default .edui-for-formula .edui-icon { + background-position: -200px -40px +} + +.edui-default .edui-for-aligntd .edui-icon { + background-position: -236px -76px; +} + +.edui-default .edui-for-insertparagraphtrue .edui-icon { + background-position: -625px -76px; +} + +.edui-default .edui-for-insertparagraph .edui-icon { + background-position: -602px -76px; +} + +.edui-default .edui-for-insertcaption .edui-icon { + background-position: -336px -76px; +} + +.edui-default .edui-for-deletecaption .edui-icon { + background-position: -362px -76px; +} + +.edui-default .edui-for-inserttitle .edui-icon { + background-position: -286px -76px; +} + +.edui-default .edui-for-deletetitle .edui-icon { + background-position: -311px -76px; +} + +.edui-default .edui-for-aligntable .edui-icon { + background-position: -440px 0; +} + +.edui-default .edui-for-tablealignment-left .edui-icon { + background-position: -460px 0; +} + +.edui-default .edui-for-tablealignment-center .edui-icon { + background-position: -420px 0; +} + +.edui-default .edui-for-tablealignment-right .edui-icon { + background-position: -480px 0; +} + +.edui-default .edui-for-drafts .edui-icon { + background-position: -560px 0; +} + +.edui-default .edui-for-charts .edui-icon { + background: url( ../images/charts.png ) no-repeat 2px 3px!important; +} + +.edui-default .edui-for-inserttitlecol .edui-icon { + background-position: -673px -76px; +} + +.edui-default .edui-for-deletetitlecol .edui-icon { + background-position: -698px -76px; +} + +.edui-default .edui-for-simpleupload .edui-icon { + background-position: -380px 0px; +} +/*splitbutton*/ +.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow, +.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow { + background: url(../images/icons.png) -741px 0; + _background: url(../images/icons.gif) -741px 0; + height: 20px; + width: 9px; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body { + padding: 1px; +} + +.edui-default .edui-toolbar .edui-splitborder { + width: 1px; + height: 20px; +} + +.edui-default .edui-toolbar .edui-state-hover .edui-splitborder { + width: 1px; + border-left: 0px solid #dcac6c; +} + +.edui-default .edui-toolbar .edui-state-active .edui-splitborder { + width: 0; + border-left: 1px solid gray; +} + +.edui-default .edui-toolbar .edui-state-opened .edui-splitborder { + width: 1px; + border: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body { + background-color: #fff5d4; + border: 1px solid #dcac6c; + padding: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body { + background-color: #FFE69F; + border: 1px solid #DCAC6C; + padding: 0; +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body { + background-color: #ffffff; + border: 1px solid gray; + padding: 0; +} + +.edui-default .edui-state-disabled .edui-arrow { + opacity: 0.3; + _filter: alpha(opacity = 30); +} + +.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body, +.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body { + background-color: white; + border: 1px solid gray; + padding: 0; +} + +.edui-default .edui-for-insertorderedlist .edui-bordereraser, +.edui-default .edui-for-lineheight .edui-bordereraser, +.edui-default .edui-for-rowspacingtop .edui-bordereraser, +.edui-default .edui-for-rowspacingbottom .edui-bordereraser, +.edui-default .edui-for-insertunorderedlist .edui-bordereraser { + background-color: white; +} + +/* 解决嵌套导致的图标问题 */ +.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon, +.edui-default .edui-for-lineheight .edui-popup-body .edui-icon, +.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon, +.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon, +.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon { + /*background-position: 0 -40px;*/ + background-image: none ; +} + +/* 弹出菜单 */ +.edui-default .edui-popup { + z-index: 3000; + background-color: #ffffff; + width:auto; + height:auto; + +} + +.edui-default .edui-popup .edui-shadow { + left: 0; + top: 0; + width: 100%; + height: 100%; +} + +.edui-default .edui-popup-content { + border:1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 3px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + padding: 5px; + background:#ffffff; +} + +.edui-default .edui-popup .edui-bordereraser { + background-color: white; + height: 3px; +} + +.edui-default .edui-menu .edui-bordereraser { + height: 3px; +} + +.edui-default .edui-anchor-topleft .edui-bordereraser { + left: 1px; + top: -2px; +} + +.edui-default .edui-anchor-topright .edui-bordereraser { + right: 1px; + top: -2px; +} + +.edui-default .edui-anchor-bottomleft .edui-bordereraser { + left: 0; + bottom: -6px; + height: 7px; + border-left: 1px solid gray; + border-right: 1px solid gray; +} + +.edui-default .edui-anchor-bottomright .edui-bordereraser { + right: 0; + bottom: -6px; + height: 7px; + border-left: 1px solid gray; + border-right: 1px solid gray; +} + +.edui-popup div{ + width:auto; + height:auto; +} +.edui-default .edui-editor-messageholder { + display: block; + width: 150px; + height: auto; + border: 0; + margin: 0; + padding: 0; + position: absolute; + top: 28px; + right: 3px; +} + +.edui-default .edui-message{ + min-height: 10px; + text-shadow: 0 1px 0 rgba(255,255,255,0.5); + padding: 0; + margin-bottom: 3px; + position: relative; +} +.edui-default .edui-message-body{ + border-radius: 3px; + padding: 8px 15px 8px 8px; + color: #c09853; + background-color: #fcf8e3; + border: 1px solid #fbeed5; +} +.edui-default .edui-message-type-info{ + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1 +} +.edui-default .edui-message-type-success{ + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6 +} +.edui-default .edui-message-type-danger, +.edui-default .edui-message-type-error{ + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7 +} +.edui-default .edui-message .edui-message-closer { + display: block; + width: 16px; + height: 16px; + line-height: 16px; + position: absolute; + top: 0; + right: 0; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + float: right; + font-size: 20px; + font-weight: bold; + color: #999; + text-shadow: 0 1px 0 #fff; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.edui-default .edui-message .edui-message-content { + font-size: 10pt; + word-wrap: break-word; + word-break: normal; +} +/* 弹出对话框按钮和对话框大小 */ +.edui-default .edui-dialog { + z-index: 2000; + position: absolute; + +} + +.edui-dialog div{ + width:auto; +} + +.edui-default .edui-dialog-wrap { + margin-right: 6px; + margin-bottom: 6px; +} + +.edui-default .edui-dialog-fullscreen-flag { + margin-right: 0; + margin-bottom: 0; +} + +.edui-default .edui-dialog-body { + position: relative; + padding:2px 0 0 2px; + _zoom: 1; +} + +.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body { + padding: 0; +} + +.edui-default .edui-dialog-shadow { + position: absolute; + z-index: -1; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.edui-default .edui-dialog-foot { + background-color: white; +} + +.edui-default .edui-dialog-titlebar { + height: 26px; + border-bottom: 1px solid #c6c6c6; + background: url(../images/dialog-title-bg.png) repeat-x bottom; + position: relative; + cursor: move; +} +.edui-default .edui-dialog-caption { + font-weight: bold; + font-size: 12px; + line-height: 26px; + padding-left: 5px; +} + +.edui-default .edui-dialog-draghandle { + height: 26px; +} + +.edui-default .edui-dialog-closebutton { + position: absolute !important; + right: 5px; + top: 3px; +} + +.edui-default .edui-dialog-closebutton .edui-button-body { + height: 20px; + width: 20px; + cursor: pointer; + background: url("../images/icons-all.gif") no-repeat 0 -59px; +} + +.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body { + background: url("../images/icons-all.gif") no-repeat 0 -89px; +} + +.edui-default .edui-dialog-foot { + height: 40px; +} + +.edui-default .edui-dialog-buttons { + position: absolute; + right: 0; +} + +.edui-default .edui-dialog-buttons .edui-button { + margin-right: 10px; +} + +.edui-default .edui-dialog-buttons .edui-button .edui-button-body { + background: url("../images/icons-all.gif") no-repeat; + height: 24px; + width: 96px; + font-size: 12px; + line-height: 24px; + text-align: center; + cursor: default; +} + +.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body { + background: url("../images/icons-all.gif") no-repeat 0 -30px; +} + +.edui-default .edui-dialog iframe { + border: 0; + padding: 0; + margin: 0; + vertical-align: top; +} + +.edui-default .edui-dialog-modalmask { + opacity: 0.3; + filter: alpha(opacity = 30); + background-color: #ccc; + position: absolute; + /*z-index: 1999;*/ +} + +.edui-default .edui-dialog-dragmask { + position: absolute; + /*z-index: 2001;*/ + background-color: transparent; + cursor: move; +} + +.edui-default .edui-dialog-content { + position: relative; +} + +.edui-default .dialogcontmask { + cursor: move; + visibility: hidden; + display: block; + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + filter: alpha(opacity = 0); +} + +/*link-dialog*/ +.edui-default .edui-for-link .edui-dialog-content { + width: 420px; + height: 200px; + overflow: hidden; +} +/*background-dialog*/ +.edui-default .edui-for-background .edui-dialog-content { + width: 440px; + height: 280px; + overflow: hidden; +} + +/*template-dialog*/ +.edui-default .edui-for-template .edui-dialog-content { + width: 630px; + height: 390px; + overflow: hidden; +} + +/*scrawl-dialog*/ +.edui-default .edui-for-scrawl .edui-dialog-content { + width: 515px; + *width: 506px; + height: 360px; +} + +/*spechars-dialog*/ +.edui-default .edui-for-spechars .edui-dialog-content { + width: 620px; + height: 500px; + *width: 630px; + *height: 570px; +} + +/*image-dialog*/ +.edui-default .edui-for-insertimage .edui-dialog-content { + width: 650px; + height: 400px; + overflow: hidden; +} +/*webapp-dialog*/ +.edui-default .edui-for-webapp .edui-dialog-content { + width: 560px; + _width: 565px; + height: 450px; + overflow: hidden; +} + +/*image-insertframe*/ +.edui-default .edui-for-insertframe .edui-dialog-content { + width: 350px; + height: 200px; + overflow: hidden; +} + +/*wordImage-dialog*/ +.edui-default .edui-for-wordimage .edui-dialog-content { + width: 620px; + height: 380px; + overflow: hidden; +} + +/*attachment-dialog*/ +.edui-default .edui-for-attachment .edui-dialog-content { + width: 650px; + height: 400px; + overflow: hidden; +} + + +/*map-dialog*/ +.edui-default .edui-for-map .edui-dialog-content { + width: 550px; + height: 400px; +} + +/*gmap-dialog*/ +.edui-default .edui-for-gmap .edui-dialog-content { + width: 550px; + height: 400px; +} + +/*video-dialog*/ +.edui-default .edui-for-insertvideo .edui-dialog-content { + width: 590px; + height: 390px; +} + +/*anchor-dialog*/ +.edui-default .edui-for-anchor .edui-dialog-content { + width: 320px; + height: 60px; + overflow: hidden; +} + +/*searchreplace-dialog*/ +.edui-default .edui-for-searchreplace .edui-dialog-content { + width: 400px; + height: 220px; +} + +/*help-dialog*/ +.edui-default .edui-for-help .edui-dialog-content { + width: 400px; + height: 420px; +} + +/*edittable-dialog*/ +.edui-default .edui-for-edittable .edui-dialog-content { + width: 540px; + _width:590px; + height: 335px; +} + +/*edittip-dialog*/ +.edui-default .edui-for-edittip .edui-dialog-content { + width: 225px; + height: 60px; +} + +/*edittd-dialog*/ +.edui-default .edui-for-edittd .edui-dialog-content { + width: 240px; + height: 50px; +} +/*snapscreen-dialog*/ +.edui-default .edui-for-snapscreen .edui-dialog-content { + width: 400px; + height: 220px; +} + +/*music-dialog*/ +.edui-default .edui-for-music .edui-dialog-content { + width: 515px; + height: 360px; +} + +/*段落弹出菜单*/ +.edui-default .edui-for-paragraph .edui-listitem-label { + font-family: Tahoma, Verdana, Arial, Helvetica; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p { + font-size: 22px; + line-height: 27px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 { + font-weight: bolder; + font-size: 32px; + line-height: 36px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 { + font-weight: bolder; + font-size: 27px; + line-height: 29px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 { + font-weight: bolder; + font-size: 19px; + line-height: 23px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 { + font-weight: bolder; + font-size: 16px; + line-height: 19px +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 { + font-weight: bolder; + font-size: 13px; + line-height: 16px; +} + +.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 { + font-weight: bolder; + font-size: 12px; + line-height: 14px; +} +/* 表格弹出菜单 */ +.edui-default .edui-for-inserttable .edui-splitborder { + display: none +} +.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow { + width: 0 +} +.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{ + border-left: 1px solid transparent; +} +.edui-default .edui-tablepicker .edui-infoarea { + height: 14px; + line-height: 14px; + font-size: 12px; + width: 220px; + margin-bottom: 3px; + clear: both; +} + +.edui-default .edui-tablepicker .edui-infoarea .edui-label { + float: left; +} + +.edui-default .edui-dialog-buttons .edui-label { + line-height: 24px; +} + +.edui-default .edui-tablepicker .edui-infoarea .edui-clickable { + float: right; +} + +.edui-default .edui-tablepicker .edui-pickarea { + background: url("../images/unhighlighted.gif") repeat; + height: 220px; + width: 220px; +} + +.edui-default .edui-tablepicker .edui-pickarea .edui-overlay { + background: url("../images/highlighted.gif") repeat; +} + +/* 颜色弹出菜单 */ +.edui-default .edui-colorpicker-topbar { + height: 27px; + width: 200px; + /*border-bottom: 1px gray dashed;*/ +} + +.edui-default .edui-colorpicker-preview { + height: 20px; + border: 1px inset black; + margin-left: 1px; + width: 128px; + float: left; +} + +.edui-default .edui-colorpicker-nocolor { + float: right; + margin-right: 1px; + font-size: 12px; + line-height: 14px; + height: 14px; + border: 1px solid #333; + padding: 3px 5px; + cursor: pointer; +} + +.edui-default .edui-colorpicker-tablefirstrow { + height: 30px; +} + +.edui-default .edui-colorpicker-colorcell { + width: 14px; + height: 14px; + display: block; + margin: 0; + cursor: pointer; +} + +.edui-default .edui-colorpicker-colorcell:hover { + width: 14px; + height: 14px; + margin: 0; +} +.edui-default .edui-colorpicker-advbtn{ + display: block; + text-align: center; + cursor: pointer; + height:20px; +} +.arrow_down{ + background: white url('../images/arrow_down.png') no-repeat center; +} +.arrow_up{ + background: white url('../images/arrow_up.png') no-repeat center; +} +/*高级的样式*/ +.edui-colorpicker-adv{ + position: relative; + overflow: hidden; + height: 180px; + display: none; +} +.edui-colorpicker-plant, .edui-colorpicker-hue { + border: solid 1px #666; +} +.edui-colorpicker-pad { + width: 150px; + height: 150px; + left: 14px; + top: 13px; + position: absolute; + background: red; + overflow: hidden; + cursor: crosshair; +} +.edui-colorpicker-cover{ + position: absolute; + top: 0; + left: 0; + width: 150px; + height: 150px; + background: url("../images/tangram-colorpicker.png") -160px -200px; +} +.edui-colorpicker-padDot{ + position: absolute; + top: 0; + left: 0; + width: 11px; + height: 11px; + overflow: hidden; + background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x; + z-index: 1000; + +} +.edui-colorpicker-sliderMain { + position: absolute; + left: 171px; + top: 13px; + width: 19px; + height: 152px; + background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat; + +} +.edui-colorpicker-slider { + width: 100%; + height: 100%; + cursor: pointer; +} +.edui-colorpicker-thumb{ + position: absolute; + top: 0; + cursor: pointer; + height: 3px; + left: -1px; + right: -1px; + border: 1px solid black; + background: white; + opacity: .8; +} +/*自动排版弹出菜单*/ +.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body { + font-size: 12px; + margin-bottom: 3px; + clear: both; +} + +.edui-default .edui-autotypesetpicker-body table { + border-collapse: separate; + border-spacing: 2px; +} + +.edui-default .edui-autotypesetpicker-body td { + font-size: 12px; + word-wrap:break-word; +} + +.edui-default .edui-autotypesetpicker-body td input { + margin: 3px 3px 3px 4px; + *margin: 1px 0 0 0; +} +/*自动排版弹出菜单*/ +.edui-default .edui-cellalignpicker .edui-cellalignpicker-body { + width: 70px; + font-size: 12px; + cursor: default; +} + +.edui-default .edui-cellalignpicker-body table { + border-collapse: separate; + border-spacing: 0; +} +.edui-default .edui-cellalignpicker-body td{ + padding: 1px; +} +.edui-default .edui-cellalignpicker-body .edui-icon{ + height: 20px; + width: 20px; + padding: 1px; + background-image: url(../images/table-cell-align.png); +} + +.edui-default .edui-cellalignpicker-body .edui-left{ + background-position: 0 0; +} + +.edui-default .edui-cellalignpicker-body .edui-center{ + background-position: -25px 0; +} +.edui-default .edui-cellalignpicker-body .edui-right{ + background-position: -51px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{ + background-position: -73px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{ + background-position: -98px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{ + background-position: -124px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left { + background-position: -146px 0; + background-color: #f1f4f5; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center { + background-position: -245px 0; +} + +.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right { + background-position: -271px 0; +} +/*分隔线*/ +.edui-default .edui-toolbar .edui-separator { + width: 2px; + height: 20px; + margin: 2px 4px 2px 3px; + background: url(../images/icons.png) -181px 0; + background: url(../images/icons.gif) -181px 0 \9; +} + +/*颜色按钮 */ +.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump { + position: absolute; + overflow: hidden; + bottom: 1px; + left: 1px; + width: 18px; + height: 4px; +} +/*表情按钮及弹出菜单*/ +/*去除了表情的下拉箭头*/ +.edui-default .edui-for-emotion .edui-icon { + background-position: -60px -20px; +} +.edui-default .edui-for-emotion .edui-popup-content iframe +{ + width: 514px; + height: 380px; + overflow: hidden; +} +.edui-default .edui-for-emotion .edui-popup-content +{ + position: relative; + z-index: 555 +} + +.edui-default .edui-for-emotion .edui-splitborder { + display: none +} + +.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow +{ + width: 0 +} +.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder +{ + border-left: 1px solid transparent; +} +/*contextmenu*/ +.edui-default .edui-hassubmenu .edui-arrow { + height: 20px; + width: 20px; + float: right; + background: url("../images/icons-all.gif") no-repeat 10px -233px; +} + +.edui-default .edui-menu-body .edui-menuitem { + padding: 1px; +} + +.edui-default .edui-menuseparator { + margin: 2px 0; + height: 1px; + overflow: hidden; +} + +.edui-default .edui-menuseparator-inner { + border-bottom: 1px solid #e2e3e3; + margin-left: 29px; + margin-right: 1px; +} + +.edui-default .edui-menu-body .edui-state-hover { + padding: 0 !important; + background-color: #fff5d4; + border: 1px solid #dcac6c; +} +/*弹出菜单*/ +.edui-default .edui-shortcutmenu { + padding: 2px; + width: 190px; + height: 50px; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 5px; +} + +/*粘贴弹出菜单*/ +.edui-default .edui-wordpastepop .edui-popup-content{ + border: none; + padding: 0; + width: 54px; + height: 21px; +} +.edui-default .edui-pasteicon { + width: 100%; + height: 100%; + background-image: url('../images/wordpaste.png'); + background-position: 0 0; +} + +.edui-default .edui-pasteicon.edui-state-opened { + background-position: 0 -34px; +} + +.edui-default .edui-pastecontainer { + position: relative; + visibility: hidden; + width: 97px; + background: #fff; + border: 1px solid #ccc; +} + +.edui-default .edui-pastecontainer .edui-title { + font-weight: bold; + background: #F8F8FF; + height: 25px; + line-height: 25px; + font-size: 12px; + padding-left: 5px; +} + +.edui-default .edui-pastecontainer .edui-button { + overflow: hidden; + margin: 3px 0; +} + +.edui-default .edui-pastecontainer .edui-button .edui-richtxticon, +.edui-default .edui-pastecontainer .edui-button .edui-tagicon, +.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{ + float: left; + cursor: pointer; + width: 29px; + height: 29px; + margin-left: 5px; + background-image: url('../images/wordpaste.png'); + background-repeat: no-repeat; +} +.edui-default .edui-pastecontainer .edui-button .edui-richtxticon { + margin-left: 0; + background-position: -109px 0; +} +.edui-default .edui-pastecontainer .edui-button .edui-tagicon { + background-position: -148px 1px; +} + +.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon { + background-position: -72px 0; +} + +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon { + background-position: -109px -34px; +} +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{ + background-position: -148px -34px; +} +.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{ + background-position: -72px -34px; +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow.png new file mode 100644 index 0000000..d900886 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow_down.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow_down.png new file mode 100644 index 0000000..e9257e8 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow_down.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow_up.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow_up.png new file mode 100644 index 0000000..74277af Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/arrow_up.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/button-bg.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/button-bg.gif new file mode 100644 index 0000000..ec7fa2e Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/button-bg.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/charts.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/charts.png new file mode 100644 index 0000000..713965c Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/charts.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/cursor_h.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/cursor_h.gif new file mode 100644 index 0000000..d7c3e7e Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/cursor_h.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/cursor_h.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/cursor_h.png new file mode 100644 index 0000000..2088fc2 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/cursor_h.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/icons.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/icons.gif new file mode 100644 index 0000000..7abd30a Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/icons.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/loaderror.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/loaderror.png new file mode 100644 index 0000000..35ff333 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/loaderror.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/loading.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/loading.gif new file mode 100644 index 0000000..b713e27 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/loading.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/neweditor-tab-bg.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/neweditor-tab-bg.png new file mode 100644 index 0000000..8f398b0 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/neweditor-tab-bg.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/sortable.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/sortable.png new file mode 100644 index 0000000..1bca649 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/sortable.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/sparator_v.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/sparator_v.png new file mode 100644 index 0000000..8cf5662 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/sparator_v.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/table-cell-align.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/table-cell-align.png new file mode 100644 index 0000000..ddf4285 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/table-cell-align.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/upload.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/upload.png new file mode 100644 index 0000000..08d4d92 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/upload.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/word.gif b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/word.gif new file mode 100644 index 0000000..9ef5d09 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/word.gif differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/wordpaste.png b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/wordpaste.png new file mode 100644 index 0000000..9367758 Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/default/images/wordpaste.png differ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/iframe.css b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/iframe.css new file mode 100644 index 0000000..774013a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/themes/iframe.css @@ -0,0 +1 @@ +/*可以在这里添加你自己的css*/ diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/third-party/jquery-1.10.2.min.js b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/third-party/jquery-1.10.2.min.js new file mode 100644 index 0000000..da41706 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/third-party/jquery-1.10.2.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("';wrapper.className="edui-"+me.options.theme;wrapper.id=me.ui.id+"_iframeupload";btnIframeBody.style.cssText=btnStyle;btnIframeBody.style.width=w+"px";btnIframeBody.style.height=h+"px";btnIframeBody.appendChild(wrapper);if(btnIframeBody.parentNode){btnIframeBody.parentNode.style.width=w+"px";btnIframeBody.parentNode.style.height=w+"px"}var form=btnIframeDoc.getElementById("edui_form_"+timestrap);var input=btnIframeDoc.getElementById("edui_input_"+timestrap);var iframe=btnIframeDoc.getElementById("edui_iframe_"+timestrap);domUtils.on(input,"change",function(){if(!input.value)return;var loadingId="loading_"+(+new Date).toString(36);var params=utils.serializeParam(me.queryCommandValue("serverparam"))||"";var imageActionUrl=me.getActionUrl(me.getOpt("imageActionName"));var allowFiles=me.getOpt("imageAllowFiles");me.focus();me.execCommand("inserthtml",'');function callback(){try{var link,json,loader,body=(iframe.contentDocument||iframe.contentWindow.document).body,result=body.innerText||body.textContent||"";json=new Function("return "+result)();link=me.options.imageUrlPrefix+json.url;if(json.state=="SUCCESS"&&json.url){loader=me.document.getElementById(loadingId);loader.setAttribute("src",link);loader.setAttribute("_src",link);loader.setAttribute("title",json.title||"");loader.setAttribute("alt",json.original||"");loader.removeAttribute("id");domUtils.removeClasses(loader,"loadingclass")}else{showErrorLoader&&showErrorLoader(json.state)}}catch(er){showErrorLoader&&showErrorLoader(me.getLang("simpleupload.loadError"))}form.reset();domUtils.un(iframe,"load",callback)}function showErrorLoader(title){if(loadingId){var loader=me.document.getElementById(loadingId);loader&&domUtils.remove(loader);me.fireEvent("showmessage",{id:loadingId,content:title,type:"error",timeout:4e3})}}if(!me.getOpt("imageActionName")){errorHandler(me.getLang("autoupload.errorLoadConfig"));return}var filename=input.value,fileext=filename?filename.substr(filename.lastIndexOf(".")):"";if(!fileext||allowFiles&&(allowFiles.join("")+".").indexOf(fileext.toLowerCase()+".")==-1){showErrorLoader(me.getLang("simpleupload.exceedTypeError"));return}domUtils.on(iframe,"load",callback);form.action=utils.formatUrl(imageActionUrl+(imageActionUrl.indexOf("?")==-1?"?":"&")+params);form.submit()});var stateTimer;me.addListener("selectionchange",function(){clearTimeout(stateTimer);stateTimer=setTimeout(function(){var state=me.queryCommandState("simpleupload");if(state==-1){input.disabled="disabled"}else{input.disabled=false}},400)});isLoaded=true});btnIframe.style.cssText=btnStyle;containerBtn.appendChild(btnIframe)}return{bindEvents:{ready:function(){utils.cssRule("loading",".loadingclass{display:inline-block;cursor:default;background: url('"+this.options.themePath+this.options.theme+"/images/loading.gif') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;}\n"+".loaderrorclass{display:inline-block;cursor:default;background: url('"+this.options.themePath+this.options.theme+"/images/loaderror.png') no-repeat center center transparent;border:1px solid #cccccc;margin-right:1px;height: 22px;width: 22px;"+"}",this.document)},simpleuploadbtnready:function(type,container){containerBtn=container;me.afterConfigReady(initUploadBtn)}},outputRule:function(root){utils.each(root.getNodesByTagName("img"),function(n){if(/\b(loaderrorclass)|(bloaderrorclass)\b/.test(n.getAttr("class"))){n.parentNode.removeChild(n)}})},commands:{simpleupload:{queryCommandState:function(){return isLoaded?0:-1}}}}});UE.plugin.register("serverparam",function(){var me=this,serverParam={};return{commands:{serverparam:{execCommand:function(cmd,key,value){if(key===undefined||key===null){serverParam={}}else if(utils.isString(key)){if(value===undefined||value===null){delete serverParam[key]}else{serverParam[key]=value}}else if(utils.isObject(key)){utils.extend(serverParam,key,true)}else if(utils.isFunction(key)){utils.extend(serverParam,key(),true)}},queryCommandValue:function(){return serverParam||{}}}}}});var baidu=baidu||{};baidu.editor=baidu.editor||{};UE.ui=baidu.editor.ui={};!function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils;var magic="$EDITORUI";var root=window[magic]={};var uidMagic="ID"+magic;var uidCount=0;var uiUtils=baidu.editor.ui.uiUtils={uid:function(obj){return obj?obj[uidMagic]||(obj[uidMagic]=++uidCount):++uidCount},hook:function(fn,callback){var dg;if(fn&&fn._callbacks){dg=fn}else{dg=function(){var q;if(fn){q=fn.apply(this,arguments)}var callbacks=dg._callbacks;var k=callbacks.length;while(k--){var r=callbacks[k].apply(this,arguments);if(q===undefined){q=r}}return q};dg._callbacks=[]}dg._callbacks.push(callback);return dg},createElementByHtml:function(html){var el=document.createElement("div");el.innerHTML=html;el=el.firstChild;el.parentNode.removeChild(el);return el},getViewportElement:function(){return browser.ie&&browser.quirks?document.body:document.documentElement},getClientRect:function(element){var bcr;try{bcr=element.getBoundingClientRect()}catch(e){bcr={left:0,top:0,height:0,width:0}}var rect={left:Math.round(bcr.left),top:Math.round(bcr.top),height:Math.round(bcr.bottom-bcr.top),width:Math.round(bcr.right-bcr.left)};var doc;while((doc=element.ownerDocument)!==document&&(element=domUtils.getWindow(doc).frameElement)){bcr=element.getBoundingClientRect();rect.left+=bcr.left;rect.top+=bcr.top}rect.bottom=rect.top+rect.height;rect.right=rect.left+rect.width;return rect},getViewportRect:function(){var viewportEl=uiUtils.getViewportElement();var width=(window.innerWidth||viewportEl.clientWidth)|0;var height=(window.innerHeight||viewportEl.clientHeight)|0;return{left:0,top:0,height:height,width:width,bottom:height,right:width}},setViewportOffset:function(element,offset){var rect;var fixedLayer=uiUtils.getFixedLayer();if(element.parentNode===fixedLayer){element.style.left=offset.left+"px";element.style.top=offset.top+"px"}else{domUtils.setViewportOffset(element,offset)}},getEventOffset:function(evt){var el=evt.target||evt.srcElement;var rect=uiUtils.getClientRect(el);var offset=uiUtils.getViewportOffsetByEvent(evt);return{left:offset.left-rect.left,top:offset.top-rect.top}},getViewportOffsetByEvent:function(evt){var el=evt.target||evt.srcElement;var frameEl=domUtils.getWindow(el).frameElement;var offset={left:evt.clientX,top:evt.clientY};if(frameEl&&el.ownerDocument!==document){var rect=uiUtils.getClientRect(frameEl);offset.left+=rect.left;offset.top+=rect.top}return offset},setGlobal:function(id,obj){root[id]=obj;return magic+'["'+id+'"]'},unsetGlobal:function(id){delete root[id]},copyAttributes:function(tgt,src){var attributes=src.attributes;var k=attributes.length;while(k--){var attrNode=attributes[k];if(attrNode.nodeName!="style"&&attrNode.nodeName!="class"&&(!browser.ie||attrNode.specified)){tgt.setAttribute(attrNode.nodeName,attrNode.nodeValue)}}if(src.className){domUtils.addClass(tgt,src.className)}if(src.style.cssText){tgt.style.cssText+=";"+src.style.cssText}},removeStyle:function(el,styleName){if(el.style.removeProperty){el.style.removeProperty(styleName)}else if(el.style.removeAttribute){el.style.removeAttribute(styleName)}else throw""},contains:function(elA,elB){return elA&&elB&&(elA===elB?false:elA.contains?elA.contains(elB):elA.compareDocumentPosition(elB)&16)},startDrag:function(evt,callbacks,doc){var doc=doc||document;var startX=evt.clientX;var startY=evt.clientY;function handleMouseMove(evt){var x=evt.clientX-startX;var y=evt.clientY-startY;callbacks.ondragmove(x,y,evt);if(evt.stopPropagation){evt.stopPropagation()}else{evt.cancelBubble=true}}if(doc.addEventListener){function handleMouseUp(evt){doc.removeEventListener("mousemove",handleMouseMove,true);doc.removeEventListener("mouseup",handleMouseUp,true);window.removeEventListener("mouseup",handleMouseUp,true);callbacks.ondragstop()}doc.addEventListener("mousemove",handleMouseMove,true);doc.addEventListener("mouseup",handleMouseUp,true);window.addEventListener("mouseup",handleMouseUp,true);evt.preventDefault()}else{var elm=evt.srcElement;elm.setCapture();function releaseCaptrue(){elm.releaseCapture();elm.detachEvent("onmousemove",handleMouseMove);elm.detachEvent("onmouseup",releaseCaptrue);elm.detachEvent("onlosecaptrue",releaseCaptrue);callbacks.ondragstop()}elm.attachEvent("onmousemove",handleMouseMove);elm.attachEvent("onmouseup",releaseCaptrue);elm.attachEvent("onlosecaptrue",releaseCaptrue);evt.returnValue=false}callbacks.ondragstart()},getFixedLayer:function(){var layer=document.getElementById("edui_fixedlayer");if(layer==null){layer=document.createElement("div");layer.id="edui_fixedlayer";document.body.appendChild(layer);if(browser.ie&&browser.version<=8){layer.style.position="absolute";bindFixedLayer();setTimeout(updateFixedOffset)}else{layer.style.position="fixed"}layer.style.left="0";layer.style.top="0";layer.style.width="0";layer.style.height="0"}return layer},makeUnselectable:function(element){if(browser.opera||browser.ie&&browser.version<9){element.unselectable="on";if(element.hasChildNodes()){for(var i=0;i'}};utils.inherits(Separator,UIBase)}();!function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,uiUtils=baidu.editor.ui.uiUtils;var Mask=baidu.editor.ui.Mask=function(options){this.initOptions(options);this.initUIBase()};Mask.prototype={getHtmlTpl:function(){return'
'},postRender:function(){var me=this;domUtils.on(window,"resize",function(){setTimeout(function(){if(!me.isHidden()){me._fill()}})})},show:function(zIndex){this._fill();this.getDom().style.display="";this.getDom().style.zIndex=zIndex},hide:function(){this.getDom().style.display="none";this.getDom().style.zIndex=""},isHidden:function(){return this.getDom().style.display=="none"},_onMouseDown:function(){return false},_onClick:function(e,target){this.fireEvent("click",e,target)},_fill:function(){var el=this.getDom();var vpRect=uiUtils.getViewportRect();el.style.width=vpRect.width+"px";el.style.height=vpRect.height+"px"}};utils.inherits(Mask,UIBase)}();!function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup=function(options){this.initOptions(options);this.initPopup()};var allPopups=[];function closeAllPopup(evt,el){for(var i=0;i'+'
'+' '+'
'+'
'+this.getContentHtmlTpl()+"
"+"
"+""},getContentHtmlTpl:function(){if(this.content){if(typeof this.content=="string"){return this.content}return this.content.renderHtml()}else{return""}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){if(this.content instanceof UIBase){this.content.postRender()}if(this.captureWheel&&!this.captured){this.captured=true;var winHeight=(document.documentElement.clientHeight||document.body.clientHeight)-80,_height=this.getDom().offsetHeight,_top=uiUtils.getClientRect(this.combox.getDom()).top,content=this.getDom("content"),ifr=this.getDom("body").getElementsByTagName("iframe"),me=this;ifr.length&&(ifr=ifr[0]);while(_top+_height>winHeight){_height-=30}content.style.height=_height+"px";ifr&&(ifr.style.height=_height+"px");if(window.XMLHttpRequest){domUtils.on(content,"onmousewheel"in document.body?"mousewheel":"DOMMouseScroll",function(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}if(e.wheelDelta){content.scrollTop-=e.wheelDelta/120*60}else{content.scrollTop-=e.detail/-3*60}})}else{domUtils.on(this.getDom(),"mousewheel",function(e){e.returnValue=false;me.getDom("content").scrollTop-=e.wheelDelta/120*60})}}this.fireEvent("postRenderAfter");this.hide(true);this._UIBase_postRender()},_doAutoRender:function(){if(!this.getDom()&&this.autoRender){this.render()}},mesureSize:function(){var box=this.getDom("content");return uiUtils.getClientRect(box)},fitSize:function(){if(this.captureWheel&&this.sized){return this.__size}this.sized=true;var popBodyEl=this.getDom("body");popBodyEl.style.width="";popBodyEl.style.height="";var size=this.mesureSize();if(this.captureWheel){popBodyEl.style.width=-(-20-size.width)+"px";var height=parseInt(this.getDom("content").style.height,10);!window.isNaN(height)&&(size.height=height)}else{popBodyEl.style.width=size.width+"px"}popBodyEl.style.height=size.height+"px";this.__size=size;this.captureWheel&&(this.getDom("content").style.overflow="auto");return size},showAnchor:function(element,hoz){this.showAnchorRect(uiUtils.getClientRect(element),hoz)},showAnchorRect:function(rect,hoz,adj){this._doAutoRender();var vpRect=uiUtils.getViewportRect();this.getDom().style.visibility="hidden";this._show();var popSize=this.fitSize();var sideLeft,sideUp,left,top;if(hoz){sideLeft=this.canSideLeft&&rect.right+popSize.width>vpRect.right&&rect.left>popSize.width;sideUp=this.canSideUp&&rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height;left=sideLeft?rect.left-popSize.width:rect.right;top=sideUp?rect.bottom-popSize.height:rect.top}else{sideLeft=this.canSideLeft&&rect.right+popSize.width>vpRect.right&&rect.left>popSize.width;sideUp=this.canSideUp&&rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height;left=sideLeft?rect.right-popSize.width:rect.left;top=sideUp?rect.top-popSize.height:rect.bottom}var popEl=this.getDom();uiUtils.setViewportOffset(popEl,{left:left,top:top});domUtils.removeClasses(popEl,ANCHOR_CLASSES);popEl.className+=" "+ANCHOR_CLASSES[(sideUp?1:0)*2+(sideLeft?1:0)];if(this.editor){popEl.style.zIndex=this.editor.container.style.zIndex*1+10;baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=popEl.style.zIndex-1}this.getDom().style.visibility="visible"},showAt:function(offset){var left=offset.left;var top=offset.top;var rect={left:left,top:top,right:left,bottom:top,height:0,width:0};this.showAnchorRect(rect,false,true) +},_show:function(){if(this._hidden){var box=this.getDom();box.style.display="";this._hidden=false;this.fireEvent("show")}},isHidden:function(){return this._hidden},show:function(){this._doAutoRender();this._show()},hide:function(notNofity){if(!this._hidden&&this.getDom()){this.getDom().style.display="none";this._hidden=true;if(!notNofity){this.fireEvent("hide")}}},queryAutoHide:function(el){return!el||!uiUtils.contains(this.getDom(),el)}};utils.inherits(Popup,UIBase);domUtils.on(document,"mousedown",function(evt){var el=evt.target||evt.srcElement;closeAllPopup(evt,el)});domUtils.on(window,"scroll",function(evt,el){closeAllPopup(evt,el)})}();!function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,ColorPicker=baidu.editor.ui.ColorPicker=function(options){this.initOptions(options);this.noColorText=this.noColorText||this.editor.getLang("clearColor");this.initUIBase()};ColorPicker.prototype={getHtmlTpl:function(){return genColorPicker(this.noColorText,this.editor)},_onTableClick:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute("data-color");if(color){this.fireEvent("pickcolor",color)}},_onTableOver:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute("data-color");if(color){this.getDom("preview").style.backgroundColor=color}},_onTableOut:function(){this.getDom("preview").style.backgroundColor=""},_onPickNoColor:function(){this.fireEvent("picknocolor")}};utils.inherits(ColorPicker,UIBase);var COLORS=("ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,"+"f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,"+"d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,"+"bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,"+"a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,"+"7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,"+"c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,").split(",");function genColorPicker(noColorText,editor){var html='
'+'
'+'
'+'
'+noColorText+"
"+"
"+'
'+'"+'';for(var i=0;i"+(i==60?'":"")+""}html+=i<70?'":""}html+="
'+editor.getLang("themeColor")+"
'+editor.getLang("standardColor")+"
=60?"border-width:1px;":i>=10&&i<20?"border-width:1px 1px 0 1px;":"border-width:0 1px 0 1px;")+'"'+">
";return html}}();!function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var TablePicker=baidu.editor.ui.TablePicker=function(options){this.initOptions(options);this.initTablePicker()};TablePicker.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this;return'
'+'
'+'
'+''+"
"+'
"+'
'+"
"+"
"+"
"},_UIBase_render:UIBase.prototype.render,render:function(holder){this._UIBase_render(holder);this.getDom("label").innerHTML="0"+this.editor.getLang("t_row")+" x 0"+this.editor.getLang("t_col")},_track:function(numCols,numRows){var style=this.getDom("overlay").style;var sideLen=this.lengthOfCellSide;style.width=numCols*sideLen+"px";style.height=numRows*sideLen+"px";var label=this.getDom("label");label.innerHTML=numCols+this.editor.getLang("t_col")+" x "+numRows+this.editor.getLang("t_row");this.numCols=numCols;this.numRows=numRows},_onMouseOver:function(evt,el){var rel=evt.relatedTarget||evt.fromElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom("label").innerHTML="0"+this.editor.getLang("t_col")+" x 0"+this.editor.getLang("t_row");this.getDom("overlay").style.visibility=""}},_onMouseOut:function(evt,el){var rel=evt.relatedTarget||evt.toElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom("label").innerHTML="0"+this.editor.getLang("t_col")+" x 0"+this.editor.getLang("t_row");this.getDom("overlay").style.visibility="hidden"}},_onMouseMove:function(evt,el){var style=this.getDom("overlay").style;var offset=uiUtils.getEventOffset(evt);var sideLen=this.lengthOfCellSide;var numCols=Math.ceil(offset.left/sideLen);var numRows=Math.ceil(offset.top/sideLen);this._track(numCols,numRows)},_onClick:function(){this.fireEvent("picktable",this.numCols,this.numRows)}};utils.inherits(TablePicker,UIBase)}();!function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils;var TPL_STATEFUL='onmousedown="$$.Stateful_onMouseDown(event, this);"'+' onmouseup="$$.Stateful_onMouseUp(event, this);"'+(browser.ie?' onmouseenter="$$.Stateful_onMouseEnter(event, this);"'+' onmouseleave="$$.Stateful_onMouseLeave(event, this);"':' onmouseover="$$.Stateful_onMouseOver(event, this);"'+' onmouseout="$$.Stateful_onMouseOut(event, this);"');baidu.editor.ui.Stateful={alwalysHoverable:false,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl;this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){var tpl=this._Stateful_dGetHtmlTpl();return tpl.replace(/stateful/g,function(){return TPL_STATEFUL})},Stateful_onMouseEnter:function(evt,el){this.target=el;if(!this.isDisabled()||this.alwalysHoverable){this.addState("hover");this.fireEvent("over")}},Stateful_onMouseLeave:function(evt,el){if(!this.isDisabled()||this.alwalysHoverable){this.removeState("hover");this.removeState("active");this.fireEvent("out")}},Stateful_onMouseOver:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseEnter(evt,el)}},Stateful_onMouseOut:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseLeave(evt,el)}},Stateful_onMouseDown:function(evt,el){if(!this.isDisabled()){this.addState("active")}},Stateful_onMouseUp:function(evt,el){if(!this.isDisabled()){this.removeState("active")}},Stateful_postRender:function(){if(this.disabled&&!this.hasState("disabled")){this.addState("disabled")}},hasState:function(state){return domUtils.hasClass(this.getStateDom(),"edui-state-"+state)},addState:function(state){if(!this.hasState(state)){this.getStateDom().className+=" edui-state-"+state}},removeState:function(state){if(this.hasState(state)){domUtils.removeClasses(this.getStateDom(),["edui-state-"+state])}},getStateDom:function(){return this.getDom("state")},isChecked:function(){return this.hasState("checked")},setChecked:function(checked){if(!this.isDisabled()&&checked){this.addState("checked")}else{this.removeState("checked")}},isDisabled:function(){return this.hasState("disabled")},setDisabled:function(disabled){if(disabled){this.removeState("hover");this.removeState("checked");this.removeState("active");this.addState("disabled")}else{this.removeState("disabled")}}}}();!function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,Button=baidu.editor.ui.Button=function(options){if(options.name){var btnName=options.name;var cssRules=options.cssRules;if(!options.className){options.className="edui-for-"+btnName}options.cssRules=".edui-default .edui-for-"+btnName+" .edui-icon {"+cssRules+"}"}this.initOptions(options);this.initButton()};Button.prototype={uiName:"button",label:"",title:"",showIcon:true,showText:true,cssRules:"",initButton:function(){this.initUIBase();this.Stateful_init();if(this.cssRules){utils.cssRule("edui-customize-"+this.name+"-style",this.cssRules)}},getHtmlTpl:function(){return'
'+'
'+'
'+(this.showIcon?'
':"")+(this.showText?'
'+this.label+"
":"")+"
"+"
"+"
"},postRender:function(){this.Stateful_postRender();this.setDisabled(this.disabled)},_onMouseDown:function(e){var target=e.target||e.srcElement,tagName=target&&target.tagName&&target.tagName.toLowerCase();if(tagName=="input"||tagName=="object"||tagName=="object"){return false}},_onClick:function(){if(!this.isDisabled()){this.fireEvent("click")}},setTitle:function(text){var label=this.getDom("label");label.innerHTML=text}};utils.inherits(Button,UIBase);utils.extend(Button.prototype,Stateful)}();!function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,SplitButton=baidu.editor.ui.SplitButton=function(options){this.initOptions(options);this.initSplitButton()};SplitButton.prototype={popup:null,uiName:"splitbutton",title:"",initSplitButton:function(){this.initUIBase();this.Stateful_init();var me=this;if(this.popup!=null){var popup=this.popup;this.popup=null;this.setPopup(popup)}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){this.Stateful_postRender();this._UIBase_postRender()},setPopup:function(popup){if(this.popup===popup)return;if(this.popup!=null){this.popup.dispose()}popup.addListener("show",utils.bind(this._onPopupShow,this));popup.addListener("hide",utils.bind(this._onPopupHide,this));popup.addListener("postrender",utils.bind(function(){popup.getDom("body").appendChild(uiUtils.createElementByHtml('
'));popup.getDom().className+=" "+this.className},this));this.popup=popup},_onPopupShow:function(){this.addState("opened")},_onPopupHide:function(){this.removeState("opened")},getHtmlTpl:function(){return'
'+"
'+'
'+'
'+"
"+'
'+'
'+"
"},showPopup:function(){var rect=uiUtils.getClientRect(this.getDom());rect.top-=this.popup.SHADOW_RADIUS;rect.height+=this.popup.SHADOW_RADIUS;this.popup.showAnchorRect(rect)},_onArrowClick:function(event,el){if(!this.isDisabled()){this.showPopup()}},_onButtonClick:function(){if(!this.isDisabled()){this.fireEvent("buttonclick")}}};utils.inherits(SplitButton,UIBase);utils.extend(SplitButton.prototype,Stateful,true)}();!function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,ColorPicker=baidu.editor.ui.ColorPicker,Popup=baidu.editor.ui.Popup,SplitButton=baidu.editor.ui.SplitButton,ColorButton=baidu.editor.ui.ColorButton=function(options){this.initOptions(options);this.initColorButton()};ColorButton.prototype={initColorButton:function(){var me=this;this.popup=new Popup({content:new ColorPicker({noColorText:me.editor.getLang("clearColor"),editor:me.editor,onpickcolor:function(t,color){me._onPickColor(color)},onpicknocolor:function(t,color){me._onPickNoColor(color)}}),editor:me.editor});this.initSplitButton()},_SplitButton_postRender:SplitButton.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.getDom("button_body").appendChild(uiUtils.createElementByHtml('
'));this.getDom().className+=" edui-colorbutton"},setColor:function(color){this.getDom("colorlump").style.backgroundColor=color;this.color=color},_onPickColor:function(color){if(this.fireEvent("pickcolor",color)!==false){this.setColor(color);this.popup.hide()}},_onPickNoColor:function(color){if(this.fireEvent("picknocolor")!==false){this.popup.hide()}}};utils.inherits(ColorButton,SplitButton)}();!function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,TablePicker=baidu.editor.ui.TablePicker,SplitButton=baidu.editor.ui.SplitButton,TableButton=baidu.editor.ui.TableButton=function(options){this.initOptions(options);this.initTableButton()};TableButton.prototype={initTableButton:function(){var me=this;this.popup=new Popup({content:new TablePicker({editor:me.editor,onpicktable:function(t,numCols,numRows){me._onPickTable(numCols,numRows)}}),editor:me.editor});this.initSplitButton()},_onPickTable:function(numCols,numRows){if(this.fireEvent("picktable",numCols,numRows)!==false){this.popup.hide()}}};utils.inherits(TableButton,SplitButton)}();!function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase;var AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker=function(options){this.initOptions(options);this.initAutoTypeSetPicker()};AutoTypeSetPicker.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this.editor,opt=me.options.autotypeset,lang=me.getLang("autoTypeSet");var textAlignInputName="textAlignValue"+me.uid,imageBlockInputName="imageBlockLineValue"+me.uid,symbolConverInputName="symbolConverValue"+me.uid;return'
'+'
'+""+'"+'"+""+'"+'"+""+""+'"+'"+""+'"+'"+'"+""+'"+'"+'"+""+"
"+lang.mergeLine+'"+lang.delLine+"
"+lang.removeFormat+'"+lang.indent+"
"+lang.alignment+"'+'"+me.getLang("justifyleft")+'"+me.getLang("justifycenter")+'"+me.getLang("justifyright")+"
"+lang.imageFloat+"'+'"+me.getLang("default")+'"+me.getLang("justifyleft")+'"+me.getLang("justifycenter")+'"+me.getLang("justifyright")+"
"+lang.removeFontsize+'"+lang.removeFontFamily+"
"+lang.removeHtml+"
"+lang.pasteFilter+"
"+lang.symbol+"'+'"+lang.bdc2sb+'"+lang.tobdc+""+"
"+"
"+"
"},_UIBase_render:UIBase.prototype.render};utils.inherits(AutoTypeSetPicker,UIBase)}();!function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker,SplitButton=baidu.editor.ui.SplitButton,AutoTypeSetButton=baidu.editor.ui.AutoTypeSetButton=function(options){this.initOptions(options);this.initAutoTypeSetButton()};function getPara(me){var opt={},cont=me.getDom(),editorId=me.editor.uid,inputType=null,attrName=null,ipts=domUtils.getElementsByTagName(cont,"input");for(var i=ipts.length-1,ipt;ipt=ipts[i--];){inputType=ipt.getAttribute("type");if(inputType=="checkbox"){attrName=ipt.getAttribute("name");opt[attrName]&&delete opt[attrName];if(ipt.checked){var attrValue=document.getElementById(attrName+"Value"+editorId);if(attrValue){if(/input/gi.test(attrValue.tagName)){opt[attrName]=attrValue.value}else{var iptChilds=attrValue.getElementsByTagName("input");for(var j=iptChilds.length-1,iptchild;iptchild=iptChilds[j--];){if(iptchild.checked){opt[attrName]=iptchild.value;break}}}}else{opt[attrName]=true}}else{opt[attrName]=false}}else{opt[ipt.getAttribute("value")]=ipt.checked}}var selects=domUtils.getElementsByTagName(cont,"select");for(var i=0,si;si=selects[i++];){var attr=si.getAttribute("name");opt[attr]=opt[attr]?si.value:""}utils.extend(me.editor.options.autotypeset,opt);me.editor.setPreferences("autotypeset",opt)}AutoTypeSetButton.prototype={initAutoTypeSetButton:function(){var me=this;this.popup=new Popup({content:new AutoTypeSetPicker({editor:me.editor}),editor:me.editor,hide:function(){if(!this._hidden&&this.getDom()){getPara(this);this.getDom().style.display="none";this._hidden=true;this.fireEvent("hide")}}});var flag=0;this.popup.addListener("postRenderAfter",function(){var popupUI=this;if(flag)return;var cont=this.getDom(),btn=cont.getElementsByTagName("button")[0];btn.onclick=function(){getPara(popupUI);me.editor.execCommand("autotypeset");popupUI.hide()};domUtils.on(cont,"click",function(e){var target=e.target||e.srcElement,editorId=me.editor.uid;if(target&&target.tagName=="INPUT"){if(target.name=="imageBlockLine"||target.name=="textAlign"||target.name=="symbolConver"){var checked=target.checked,radioTd=document.getElementById(target.name+"Value"+editorId),radios=radioTd.getElementsByTagName("input"),defalutSelect={imageBlockLine:"none",textAlign:"left",symbolConver:"tobdc"};for(var i=0;i");tmpl.push('
');tempIndex===2&&tmpl.push("")}return'
'+'
'+''+tmpl.join("")+"
"+"
"+"
"},getStateDom:function(){return this.target},_onClick:function(evt){var target=evt.target||evt.srcElement;if(/icon/.test(target.className)){this.items[target.parentNode.getAttribute("index")].onclick();Popup.postHide(evt)}},_UIBase_render:UIBase.prototype.render};utils.inherits(CellAlignPicker,UIBase);utils.extend(CellAlignPicker.prototype,Stateful,true)}();!function(){var utils=baidu.editor.utils,Stateful=baidu.editor.ui.Stateful,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var PastePicker=baidu.editor.ui.PastePicker=function(options){this.initOptions(options);this.initPastePicker()};PastePicker.prototype={initPastePicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){return'
'+'
'+'
'+this.editor.getLang("pasteOpt")+"
"+'
'+'
'+'
'+'
'+'
'+'
'+'
'+"
"+"
"+""},getStateDom:function(){return this.target},format:function(param){this.editor.ui._isTransfer=true;this.editor.fireEvent("pasteTransfer",param)},_onClick:function(cur){var node=domUtils.getNextDomNode(cur),screenHt=uiUtils.getViewportRect().height,subPop=uiUtils.getClientRect(node);if(subPop.top+subPop.height>screenHt)node.style.top=-subPop.height-cur.offsetHeight+"px";else node.style.top="";if(/hidden/gi.test(domUtils.getComputedStyle(node,"visibility"))){node.style.visibility="visible";domUtils.addClass(cur,"edui-state-opened")}else{node.style.visibility="hidden";domUtils.removeClasses(cur,"edui-state-opened")}},_UIBase_render:UIBase.prototype.render};utils.inherits(PastePicker,UIBase);utils.extend(PastePicker.prototype,Stateful,true)}();!function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Toolbar=baidu.editor.ui.Toolbar=function(options){this.initOptions(options);this.initToolbar()};Toolbar.prototype={items:null,initToolbar:function(){this.items=this.items||[];this.initUIBase()},add:function(item,index){if(index===undefined){this.items.push(item)}else{this.items.splice(index,0,item)}},getHtmlTpl:function(){var buff=[];for(var i=0;i'+buff.join("")+""},postRender:function(){var box=this.getDom();for(var i=0;i
'},postRender:function(){},queryAutoHide:function(){return true}};Menu.prototype={items:null,uiName:"menu",initMenu:function(){this.items=this.items||[];this.initPopup();this.initItems()},initItems:function(){for(var i=0;i'+buff.join("")+""},_Popup_postRender:Popup.prototype.postRender,postRender:function(){var me=this;for(var i=0;i'+'
'+this.renderLabelHtml()+"
"+""},postRender:function(){var me=this;this.addListener("over",function(){me.ownerMenu.fireEvent("submenuover",me);if(me.subMenu){me.delayShowSubMenu()}});if(this.subMenu){this.getDom().className+=" edui-hassubmenu";this.subMenu.render();this.addListener("out",function(){me.delayHideSubMenu()});this.subMenu.addListener("over",function(){clearTimeout(me._closingTimer);me._closingTimer=null;me.addState("opened")});this.ownerMenu.addListener("hide",function(){me.hideSubMenu()});this.ownerMenu.addListener("submenuover",function(t,subMenu){if(subMenu!==me){me.delayHideSubMenu()}});this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide;this.subMenu.queryAutoHide=function(el){if(el&&uiUtils.contains(me.getDom(),el)){return false}return this._bakQueryAutoHide(el)}}this.getDom().style.tabIndex="-1";uiUtils.makeUnselectable(this.getDom());this.Stateful_postRender()},delayShowSubMenu:function(){var me=this;if(!me.isDisabled()){me.addState("opened");clearTimeout(me._showingTimer);clearTimeout(me._closingTimer);me._closingTimer=null;me._showingTimer=setTimeout(function(){me.showSubMenu()},250)}},delayHideSubMenu:function(){var me=this;if(!me.isDisabled()){me.removeState("opened");clearTimeout(me._showingTimer);if(!me._closingTimer){me._closingTimer=setTimeout(function(){if(!me.hasState("opened")){me.hideSubMenu()}me._closingTimer=null},400)}}},renderLabelHtml:function(){return'
'+'
'+'
'+(this.label||"")+"
"},getStateDom:function(){return this.getDom()},queryAutoHide:function(el){if(this.subMenu&&this.hasState("opened")){return this.subMenu.queryAutoHide(el)}},_onClick:function(event,this_){if(this.hasState("disabled"))return;if(this.fireEvent("click",event,this_)!==false){if(this.subMenu){this.showSubMenu()}else{Popup.postHide(event)}}},showSubMenu:function(){var rect=uiUtils.getClientRect(this.getDom());rect.right-=5;rect.left+=2;rect.width-=7;rect.top-=4;rect.bottom+=4;rect.height+=8;this.subMenu.showAnchorRect(rect,true,true)},hideSubMenu:function(){this.subMenu.hide()}};utils.inherits(MenuItem,UIBase);utils.extend(MenuItem.prototype,Stateful,true)}();!function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,Menu=baidu.editor.ui.Menu,SplitButton=baidu.editor.ui.SplitButton,Combox=baidu.editor.ui.Combox=function(options){this.initOptions(options);this.initCombox()};Combox.prototype={uiName:"combox",onbuttonclick:function(){this.showPopup()},initCombox:function(){var me=this;this.items=this.items||[];for(var i=0;ivpRect.right){left=vpRect.right-rect.width}var top=offset.top;if(top+rect.height>vpRect.bottom){top=vpRect.bottom-rect.height}el.style.left=Math.max(left,0)+"px";el.style.top=Math.max(top,0)+"px"},showAtCenter:function(){var vpRect=uiUtils.getViewportRect();if(!this.fullscreen){this.getDom().style.display="";var popSize=this.fitSize();var titleHeight=this.getDom("titlebar").offsetHeight|0;var left=vpRect.width/2-popSize.width/2;var top=vpRect.height/2-(popSize.height-titleHeight)/2-titleHeight;var popEl=this.getDom();this.safeSetOffset({left:Math.max(left|0,0),top:Math.max(top|0,0)});if(!domUtils.hasClass(popEl,"edui-state-centered")){popEl.className+=" edui-state-centered"}}else{var dialogWrapNode=this.getDom(),contentNode=this.getDom("content");dialogWrapNode.style.display="block";var wrapRect=UE.ui.uiUtils.getClientRect(dialogWrapNode),contentRect=UE.ui.uiUtils.getClientRect(contentNode);dialogWrapNode.style.left="-100000px";contentNode.style.width=vpRect.width-wrapRect.width+contentRect.width+"px";contentNode.style.height=vpRect.height-wrapRect.height+contentRect.height+"px";dialogWrapNode.style.width=vpRect.width+"px";dialogWrapNode.style.height=vpRect.height+"px";dialogWrapNode.style.left=0;this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}};document.documentElement.style.overflowX="hidden";document.documentElement.style.overflowY="hidden";document.body.style.overflowX="hidden";document.body.style.overflowY="hidden"}this._show()},getContentHtml:function(){var contentHtml="";if(typeof this.content=="string"){contentHtml=this.content}else if(this.iframeUrl){contentHtml=''}return contentHtml},getHtmlTpl:function(){var footHtml="";if(this.buttons){var buff=[];for(var i=0;i'+'
'+buff.join("")+"
"+""}return'
'+'
'+'
'+'
'+''+(this.title||"")+""+"
"+this.closeButton.renderHtml()+"
"+'
'+(this.autoReset?"":this.getContentHtml())+"
"+footHtml+"
"},postRender:function(){if(!this.modalMask.getDom()){this.modalMask.render();this.modalMask.hide()}if(!this.dragMask.getDom()){this.dragMask.render();this.dragMask.hide()}var me=this;this.addListener("show",function(){me.modalMask.show(this.getDom().style.zIndex-2)});this.addListener("hide",function(){me.modalMask.hide()});if(this.buttons){for(var i=0;i';me.editor.container.style.zIndex&&(this.getDom().style.zIndex=me.editor.container.style.zIndex*1+1)}}});this.onbuttonclick=function(){this.showPopup()};this.initSplitButton()}};utils.inherits(MultiMenuPop,SplitButton)}();!function(){var UI=baidu.editor.ui,UIBase=UI.UIBase,uiUtils=UI.uiUtils,utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils;var allMenus=[],timeID,isSubMenuShow=false;var ShortCutMenu=UI.ShortCutMenu=function(options){this.initOptions(options);this.initShortCutMenu()};ShortCutMenu.postHide=hideAllMenu;ShortCutMenu.prototype={isHidden:true,SPACE:5,initShortCutMenu:function(){this.items=this.items||[];this.initUIBase();this.initItems();this.initEvent();allMenus.push(this)},initEvent:function(){var me=this,doc=me.editor.document;domUtils.on(doc,"mousemove",function(e){if(me.isHidden===false){if(me.getSubMenuMark()||me.eventType=="contextmenu")return;var flag=true,el=me.getDom(),wt=el.offsetWidth,ht=el.offsetHeight,distanceX=wt/2+me.SPACE,distanceY=ht/2,x=Math.abs(e.screenX-me.left),y=Math.abs(e.screenY-me.top);clearTimeout(timeID);timeID=setTimeout(function(){if(y>0&&ydistanceY&&ydistanceY+70&&y0&&xdistanceX&&xdistanceX+70&&x'+buff+""}};utils.inherits(ShortCutMenu,UIBase);function hideAllMenu(e){var tgt=e.target||e.srcElement,cur=domUtils.findParent(tgt,function(node){return domUtils.hasClass(node,"edui-shortcutmenu")||domUtils.hasClass(node,"edui-popup")},true);if(!cur){for(var i=0,menu;menu=allMenus[i++];){menu.hide()}}}domUtils.on(document,"mousedown",function(e){hideAllMenu(e)});domUtils.on(window,"scroll",function(e){hideAllMenu(e)})}();!function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Breakline=baidu.editor.ui.Breakline=function(options){this.initOptions(options);this.initSeparator()};Breakline.prototype={uiName:"Breakline",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return"
"}};utils.inherits(Breakline,UIBase)}();!function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Message=baidu.editor.ui.Message=function(options){this.initOptions(options);this.initMessage()};Message.prototype={initMessage:function(){this.initUIBase()},getHtmlTpl:function(){return'
'+'
×
'+'
'+' '+'
'+'
'+"
"+"
"+"
"},reset:function(opt){var me=this;if(!opt.keepshow){clearTimeout(this.timer);me.timer=setTimeout(function(){me.hide()},opt.timeout||4e3)}opt.content!==undefined&&me.setContent(opt.content);opt.type!==undefined&&me.setType(opt.type);me.show()},postRender:function(){var me=this,closer=this.getDom("closer");closer&&domUtils.on(closer,"click",function(){me.hide()})},setContent:function(content){this.getDom("content").innerHTML=content},setType:function(type){type=type||"info";var body=this.getDom("body");body.className=body.className.replace(/edui-message-type-[\w-]+/,"edui-message-type-"+type)},getContent:function(){return this.getDom("content").innerHTML},getType:function(){var arr=this.getDom("body").match(/edui-message-type-([\w-]+)/);return arr?arr[1]:""},show:function(){this.getDom().style.display="block"},hide:function(){var dom=this.getDom();if(dom){dom.style.display="none";dom.parentNode&&dom.parentNode.removeChild(dom)}}};utils.inherits(Message,UIBase)}();!function(){var utils=baidu.editor.utils;var editorui=baidu.editor.ui;var _Dialog=editorui.Dialog;editorui.buttons={};editorui.Dialog=function(options){var dialog=new _Dialog(options);dialog.addListener("hide",function(){if(dialog.editor){var editor=dialog.editor;try{if(browser.gecko){var y=editor.window.scrollY,x=editor.window.scrollX;editor.body.focus();editor.window.scrollTo(x,y)}else{editor.focus()}}catch(ex){}}});return dialog};var iframeUrlMap={anchor:"~/dialogs/anchor/anchor.html",insertimage:"~/dialogs/image/image.html",link:"~/dialogs/link/link.html",spechars:"~/dialogs/spechars/spechars.html",searchreplace:"~/dialogs/searchreplace/searchreplace.html",map:"~/dialogs/map/map.html",gmap:"~/dialogs/gmap/gmap.html",insertvideo:"~/dialogs/video/video.html",help:"~/dialogs/help/help.html",preview:"~/dialogs/preview/preview.html",emotion:"~/dialogs/emotion/emotion.html",wordimage:"~/dialogs/wordimage/wordimage.html",attachment:"~/dialogs/attachment/attachment.html",insertframe:"~/dialogs/insertframe/insertframe.html",edittip:"~/dialogs/table/edittip.html",edittable:"~/dialogs/table/edittable.html",edittd:"~/dialogs/table/edittd.html",webapp:"~/dialogs/webapp/webapp.html",snapscreen:"~/dialogs/snapscreen/snapscreen.html",scrawl:"~/dialogs/scrawl/scrawl.html",music:"~/dialogs/music/music.html",template:"~/dialogs/template/template.html",background:"~/dialogs/background/background.html",charts:"~/dialogs/charts/charts.html"};var btnCmds=["undo","redo","formatmatch","bold","italic","underline","fontborder","touppercase","tolowercase","strikethrough","subscript","superscript","source","indent","outdent","blockquote","pasteplain","pagebreak","selectall","print","horizontal","removeformat","time","date","unlink","insertparagraphbeforetable","insertrow","insertcol","mergeright","mergedown","deleterow","deletecol","splittorows","splittocols","splittocells","mergecells","deletetable","drafts"];for(var i=0,ci;ci=btnCmds[i++];){ci=ci.toLowerCase();editorui[ci]=function(cmd){return function(editor){var ui=new editorui.Button({className:"edui-for-"+cmd,title:editor.options.labelMap[cmd]||editor.getLang("labelMap."+cmd)||"",onclick:function(){editor.execCommand(cmd)},theme:editor.options.theme,showText:false});editorui.buttons[cmd]=ui;editor.addListener("selectionchange",function(type,causeByUi,uiReady){var state=editor.queryCommandState(cmd);if(state==-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}}(ci)}editorui.cleardoc=function(editor){var ui=new editorui.Button({className:"edui-for-cleardoc",title:editor.options.labelMap.cleardoc||editor.getLang("labelMap.cleardoc")||"",theme:editor.options.theme,onclick:function(){if(confirm(editor.getLang("confirmClear"))){editor.execCommand("cleardoc")}}});editorui.buttons["cleardoc"]=ui;editor.addListener("selectionchange",function(){ui.setDisabled(editor.queryCommandState("cleardoc")==-1)});return ui};var typeset={justify:["left","right","center","justify"],imagefloat:["none","left","center","right"],directionality:["ltr","rtl"]};for(var p in typeset){!function(cmd,val){for(var i=0,ci;ci=val[i++];){!function(cmd2){editorui[cmd.replace("float","")+cmd2]=function(editor){var ui=new editorui.Button({className:"edui-for-"+cmd.replace("float","")+cmd2,title:editor.options.labelMap[cmd.replace("float","")+cmd2]||editor.getLang("labelMap."+cmd.replace("float","")+cmd2)||"",theme:editor.options.theme,onclick:function(){editor.execCommand(cmd,cmd2)}});editorui.buttons[cmd]=ui;editor.addListener("selectionchange",function(type,causeByUi,uiReady){ui.setDisabled(editor.queryCommandState(cmd)==-1);ui.setChecked(editor.queryCommandValue(cmd)==cmd2&&!uiReady)});return ui}}(ci)}}(p,typeset[p])}for(var i=0,ci;ci=["backcolor","forecolor"][i++];){editorui[ci]=function(cmd){return function(editor){var ui=new editorui.ColorButton({className:"edui-for-"+cmd,color:"default",title:editor.options.labelMap[cmd]||editor.getLang("labelMap."+cmd)||"",editor:editor,onpickcolor:function(t,color){editor.execCommand(cmd,color)},onpicknocolor:function(){editor.execCommand(cmd,"default");this.setColor("transparent");this.color="default"},onbuttonclick:function(){editor.execCommand(cmd,this.color)}});editorui.buttons[cmd]=ui;editor.addListener("selectionchange",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui}}(ci)}var dialogBtns={noOk:["searchreplace","help","spechars","webapp","preview"],ok:["attachment","anchor","link","insertimage","map","gmap","insertframe","wordimage","insertvideo","insertframe","edittip","edittable","edittd","scrawl","template","music","background","charts"]};for(var p in dialogBtns){!function(type,vals){for(var i=0,ci;ci=vals[i++];){if(browser.opera&&ci==="searchreplace"){continue}!function(cmd){editorui[cmd]=function(editor,iframeUrl,title){iframeUrl=iframeUrl||(editor.options.iframeUrlMap||{})[cmd]||iframeUrlMap[cmd];title=editor.options.labelMap[cmd]||editor.getLang("labelMap."+cmd)||"";var dialog;if(iframeUrl){dialog=new editorui.Dialog(utils.extend({iframeUrl:editor.ui.mapUrl(iframeUrl),editor:editor,className:"edui-for-"+cmd,title:title,holdScroll:cmd==="insertimage",fullscreen:/charts|preview/.test(cmd),closeDialog:editor.getLang("closeDialog")},type=="ok"?{buttons:[{className:"edui-okbutton",label:editor.getLang("ok"),editor:editor,onclick:function(){dialog.close(true)}},{className:"edui-cancelbutton",label:editor.getLang("cancel"),editor:editor,onclick:function(){dialog.close(false)}}]}:{}));editor.ui._dialogs[cmd+"Dialog"]=dialog}var ui=new editorui.Button({className:"edui-for-"+cmd,title:title,onclick:function(){if(dialog){switch(cmd){case"wordimage":var images=editor.execCommand("wordimage");if(images&&images.length){dialog.render();dialog.open()}break;case"scrawl":if(editor.queryCommandState("scrawl")!=-1){dialog.render();dialog.open()}break;default:dialog.render();dialog.open()}}},theme:editor.options.theme,disabled:cmd=="scrawl"&&editor.queryCommandState("scrawl")==-1||cmd=="charts"});editorui.buttons[cmd]=ui;editor.addListener("selectionchange",function(){var unNeedCheckState={edittable:1};if(cmd in unNeedCheckState)return;var state=editor.queryCommandState(cmd);if(ui.getDom()){ui.setDisabled(state==-1);ui.setChecked(state)}});return ui}}(ci.toLowerCase())}}(p,dialogBtns[p])}editorui.snapscreen=function(editor,iframeUrl,title){title=editor.options.labelMap["snapscreen"]||editor.getLang("labelMap.snapscreen")||"";var ui=new editorui.Button({className:"edui-for-snapscreen",title:title,onclick:function(){editor.execCommand("snapscreen")},theme:editor.options.theme});editorui.buttons["snapscreen"]=ui;iframeUrl=iframeUrl||(editor.options.iframeUrlMap||{})["snapscreen"]||iframeUrlMap["snapscreen"];if(iframeUrl){var dialog=new editorui.Dialog({iframeUrl:editor.ui.mapUrl(iframeUrl),editor:editor,className:"edui-for-snapscreen",title:title,buttons:[{className:"edui-okbutton",label:editor.getLang("ok"),editor:editor,onclick:function(){dialog.close(true)}},{className:"edui-cancelbutton",label:editor.getLang("cancel"),editor:editor,onclick:function(){dialog.close(false)}}]});dialog.render();editor.ui._dialogs["snapscreenDialog"]=dialog}editor.addListener("selectionchange",function(){ui.setDisabled(editor.queryCommandState("snapscreen")==-1)});return ui};editorui.insertcode=function(editor,list,title){list=editor.options["insertcode"]||[];title=editor.options.labelMap["insertcode"]||editor.getLang("labelMap.insertcode")||"";var items=[];utils.each(list,function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'
'+(this.label||"")+"
"}})});var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand("insertcode",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:"edui-for-insertcode",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons["insertcode"]=ui;editor.addListener("selectionchange",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState("insertcode");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue("insertcode");if(!value){ui.setValue(title);return}value&&(value=value.replace(/['"]/g,"").split(",")[0]);ui.setValue(value)}}});return ui};editorui.fontfamily=function(editor,list,title){list=editor.options["fontfamily"]||[];title=editor.options.labelMap["fontfamily"]||editor.getLang("labelMap.fontfamily")||"";if(!list.length)return;for(var i=0,ci,items=[];ci=list[i];i++){var langLabel=editor.getLang("fontfamily")[ci.name]||"";!function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'
'+(this.label||"")+"
"}})}(ci.label||langLabel,ci.val)}var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand("FontFamily",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:"edui-for-fontfamily",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons["fontfamily"]=ui;editor.addListener("selectionchange",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState("FontFamily");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue("FontFamily");value&&(value=value.replace(/['"]/g,"").split(",")[0]);ui.setValue(value)}}});return ui};editorui.fontsize=function(editor,list,title){title=editor.options.labelMap["fontsize"]||editor.getLang("labelMap.fontsize")||"";list=list||editor.options["fontsize"]||[];if(!list.length)return;var items=[];for(var i=0;i'+(this.label||"")+""}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,onselect:function(t,index){editor.execCommand("FontSize",this.items[index].value)},onbuttonclick:function(){this.showPopup()},className:"edui-for-fontsize"});editorui.buttons["fontsize"]=ui;editor.addListener("selectionchange",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState("FontSize");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);ui.setValue(editor.queryCommandValue("FontSize"))}}});return ui};editorui.paragraph=function(editor,list,title){title=editor.options.labelMap["paragraph"]||editor.getLang("labelMap.paragraph")||"";list=editor.options["paragraph"]||[];if(utils.isEmptyObject(list))return;var items=[];for(var i in list){items.push({value:i,label:list[i]||editor.getLang("paragraph")[i],theme:editor.options.theme,renderLabelHtml:function(){return'
'+(this.label||"")+"
"}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:"edui-for-paragraph",onselect:function(t,index){editor.execCommand("Paragraph",this.items[index].value)},onbuttonclick:function(){this.showPopup()}});editorui.buttons["paragraph"]=ui;editor.addListener("selectionchange",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState("Paragraph");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue("Paragraph");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.customstyle=function(editor){var list=editor.options["customstyle"]||[],title=editor.options.labelMap["customstyle"]||editor.getLang("labelMap.customstyle")||"";if(!list.length)return;var langCs=editor.getLang("customstyle");for(var i=0,items=[],t;t=list[i++];){!function(t){var ck={};ck.label=t.label?t.label:langCs[t.name];ck.style=t.style;ck.className=t.className;ck.tag=t.tag;items.push({label:ck.label,value:ck,theme:editor.options.theme,renderLabelHtml:function(){return'
'+"<"+ck.tag+" "+(ck.className?' class="'+ck.className+'"':"")+(ck.style?' style="'+ck.style+'"':"")+">"+ck.label+""+"
"}})}(t)}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:"edui-for-customstyle",onselect:function(t,index){editor.execCommand("customstyle",this.items[index].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(value){for(var i=0,ti;ti=this.items[i++];){if(ti.label==value){return i-1}}return-1}});editorui.buttons["customstyle"]=ui;editor.addListener("selectionchange",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState("customstyle");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue("customstyle");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.inserttable=function(editor,iframeUrl,title){title=editor.options.labelMap["inserttable"]||editor.getLang("labelMap.inserttable")||"";var ui=new editorui.TableButton({editor:editor,title:title,className:"edui-for-inserttable",onpicktable:function(t,numCols,numRows){editor.execCommand("InsertTable",{numRows:numRows,numCols:numCols,border:1})},onbuttonclick:function(){this.showPopup()}});editorui.buttons["inserttable"]=ui;editor.addListener("selectionchange",function(){ui.setDisabled(editor.queryCommandState("inserttable")==-1)});return ui};editorui.lineheight=function(editor){var val=editor.options.lineheight||[];if(!val.length)return;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand("lineheight",this.value)}})}var ui=new editorui.MenuButton({editor:editor,className:"edui-for-lineheight",title:editor.options.labelMap["lineheight"]||editor.getLang("labelMap.lineheight")||"",items:items,onbuttonclick:function(){var value=editor.queryCommandValue("LineHeight")||this.value;editor.execCommand("LineHeight",value)}});editorui.buttons["lineheight"]=ui;editor.addListener("selectionchange",function(){var state=editor.queryCommandState("LineHeight");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue("LineHeight");value&&ui.setValue((value+"").replace(/cm/,""));ui.setChecked(state)}});return ui};var rowspacings=["top","bottom"];for(var r=0,ri;ri=rowspacings[r++];){!function(cmd){editorui["rowspacing"+cmd]=function(editor){var val=editor.options["rowspacing"+cmd]||[];if(!val.length)return null;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand("rowspacing",this.value,cmd)}})}var ui=new editorui.MenuButton({editor:editor,className:"edui-for-rowspacing"+cmd,title:editor.options.labelMap["rowspacing"+cmd]||editor.getLang("labelMap.rowspacing"+cmd)||"",items:items,onbuttonclick:function(){var value=editor.queryCommandValue("rowspacing",cmd)||this.value;editor.execCommand("rowspacing",value,cmd)}});editorui.buttons[cmd]=ui;editor.addListener("selectionchange",function(){var state=editor.queryCommandState("rowspacing",cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue("rowspacing",cmd);value&&ui.setValue((value+"").replace(/%/,""));ui.setChecked(state)}});return ui}}(ri)}var lists=["insertorderedlist","insertunorderedlist"];for(var l=0,cl;cl=lists[l++];){!function(cmd){editorui[cmd]=function(editor){var vals=editor.options[cmd],_onMenuClick=function(){editor.execCommand(cmd,this.value) +},items=[];for(var i in vals){items.push({label:vals[i]||editor.getLang()[cmd][i]||"",value:i,theme:editor.options.theme,onclick:_onMenuClick})}var ui=new editorui.MenuButton({editor:editor,className:"edui-for-"+cmd,title:editor.getLang("labelMap."+cmd)||"",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(cmd)||this.value;editor.execCommand(cmd,value)}});editorui.buttons[cmd]=ui;editor.addListener("selectionchange",function(){var state=editor.queryCommandState(cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(cmd);ui.setValue(value);ui.setChecked(state)}});return ui}}(cl)}editorui.fullscreen=function(editor,title){title=editor.options.labelMap["fullscreen"]||editor.getLang("labelMap.fullscreen")||"";var ui=new editorui.Button({className:"edui-for-fullscreen",title:title,theme:editor.options.theme,onclick:function(){if(editor.ui){editor.ui.setFullScreen(!editor.ui.isFullScreen())}this.setChecked(editor.ui.isFullScreen())}});editorui.buttons["fullscreen"]=ui;editor.addListener("selectionchange",function(){var state=editor.queryCommandState("fullscreen");ui.setDisabled(state==-1);ui.setChecked(editor.ui.isFullScreen())});return ui};editorui["emotion"]=function(editor,iframeUrl){var cmd="emotion";var ui=new editorui.MultiMenuPop({title:editor.options.labelMap[cmd]||editor.getLang("labelMap."+cmd+"")||"",editor:editor,className:"edui-for-"+cmd,iframeUrl:editor.ui.mapUrl(iframeUrl||(editor.options.iframeUrlMap||{})[cmd]||iframeUrlMap[cmd])});editorui.buttons[cmd]=ui;editor.addListener("selectionchange",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui};editorui.autotypeset=function(editor){var ui=new editorui.AutoTypeSetButton({editor:editor,title:editor.options.labelMap["autotypeset"]||editor.getLang("labelMap.autotypeset")||"",className:"edui-for-autotypeset",onbuttonclick:function(){editor.execCommand("autotypeset")}});editorui.buttons["autotypeset"]=ui;editor.addListener("selectionchange",function(){ui.setDisabled(editor.queryCommandState("autotypeset")==-1)});return ui};editorui["simpleupload"]=function(editor){var name="simpleupload",ui=new editorui.Button({className:"edui-for-"+name,title:editor.options.labelMap[name]||editor.getLang("labelMap."+name)||"",onclick:function(){},theme:editor.options.theme,showText:false});editorui.buttons[name]=ui;editor.addListener("ready",function(){var b=ui.getDom("body"),iconSpan=b.children[0];editor.fireEvent("simpleuploadbtnready",iconSpan)});editor.addListener("selectionchange",function(type,causeByUi,uiReady){var state=editor.queryCommandState(name);if(state==-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}}();!function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,domUtils=baidu.editor.dom.domUtils;var nodeStack=[];function EditorUI(options){this.initOptions(options);this.initEditorUI()}EditorUI.prototype={uiName:"editor",initEditorUI:function(){this.editor.ui=this;this._dialogs={};this.initUIBase();this._initToolbars();var editor=this.editor,me=this;editor.addListener("ready",function(){editor.getDialog=function(name){return editor.ui._dialogs[name+"Dialog"]};domUtils.on(editor.window,"scroll",function(evt){baidu.editor.ui.Popup.postHide(evt)});editor.ui._actualFrameWidth=editor.options.initialFrameWidth;UE.browser.ie&&UE.browser.version===6&&editor.container.ownerDocument.execCommand("BackgroundImageCache",false,true);if(editor.options.elementPathEnabled){editor.ui.getDom("elementpath").innerHTML='
'+editor.getLang("elementPathTip")+":
"}if(editor.options.wordCount){function countFn(){setCount(editor,me);domUtils.un(editor.document,"click",arguments.callee)}domUtils.on(editor.document,"click",countFn);editor.ui.getDom("wordcount").innerHTML=editor.getLang("wordCountTip")}editor.ui._scale();if(editor.options.scaleEnabled){if(editor.autoHeightEnabled){editor.disableAutoHeight()}me.enableScale()}else{me.disableScale()}if(!editor.options.elementPathEnabled&&!editor.options.wordCount&&!editor.options.scaleEnabled){editor.ui.getDom("elementpath").style.display="none";editor.ui.getDom("wordcount").style.display="none";editor.ui.getDom("scale").style.display="none"}if(!editor.selection.isFocus())return;editor.fireEvent("selectionchange",false,true)});editor.addListener("mousedown",function(t,evt){var el=evt.target||evt.srcElement;baidu.editor.ui.Popup.postHide(evt,el);baidu.editor.ui.ShortCutMenu.postHide(evt)});editor.addListener("delcells",function(){if(UE.ui["edittip"]){new UE.ui["edittip"](editor)}editor.getDialog("edittip").open()});var pastePop,isPaste=false,timer;editor.addListener("afterpaste",function(){if(editor.queryCommandState("pasteplain"))return;if(baidu.editor.ui.PastePicker){pastePop=new baidu.editor.ui.Popup({content:new baidu.editor.ui.PastePicker({editor:editor}),editor:editor,className:"edui-wordpastepop"});pastePop.render()}isPaste=true});editor.addListener("afterinserthtml",function(){clearTimeout(timer);timer=setTimeout(function(){if(pastePop&&(isPaste||editor.ui._isTransfer)){if(pastePop.isHidden()){var span=domUtils.createElement(editor.document,"span",{style:"line-height:0px;",innerHTML:""}),range=editor.selection.getRange();range.insertNode(span);var tmp=getDomNode(span,"firstChild","previousSibling");tmp&&pastePop.showAnchor(tmp.nodeType==3?tmp.parentNode:tmp);domUtils.remove(span)}else{pastePop.show()}delete editor.ui._isTransfer;isPaste=false}},200)});editor.addListener("contextmenu",function(t,evt){baidu.editor.ui.Popup.postHide(evt)});editor.addListener("keydown",function(t,evt){if(pastePop)pastePop.dispose(evt);var keyCode=evt.keyCode||evt.which;if(evt.altKey&&keyCode==90){UE.ui.buttons["fullscreen"].onclick()}});editor.addListener("wordcount",function(type){setCount(this,me)});function setCount(editor,ui){editor.setOpt({wordCount:true,maximumWords:1e4,wordCountMsg:editor.options.wordCountMsg||editor.getLang("wordCountMsg"),wordOverFlowMsg:editor.options.wordOverFlowMsg||editor.getLang("wordOverFlowMsg")});var opt=editor.options,max=opt.maximumWords,msg=opt.wordCountMsg,errMsg=opt.wordOverFlowMsg,countDom=ui.getDom("wordcount");if(!opt.wordCount){return}var count=editor.getContentLength(true);if(count>max){countDom.innerHTML=errMsg;editor.fireEvent("wordcountoverflow")}else{countDom.innerHTML=msg.replace("{#leave}",max-count).replace("{#count}",count)}}editor.addListener("selectionchange",function(){if(editor.options.elementPathEnabled){me[(editor.queryCommandState("elementpath")==-1?"dis":"en")+"ableElementPath"]()}if(editor.options.scaleEnabled){me[(editor.queryCommandState("scale")==-1?"dis":"en")+"ableScale"]()}});var popup=new baidu.editor.ui.Popup({editor:editor,content:"",className:"edui-bubble",_onEditButtonClick:function(){this.hide();editor.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(name){this.hide();editor.ui._dialogs[name]&&editor.ui._dialogs[name].open()},_onImgSetFloat:function(value){this.hide();editor.execCommand("imagefloat",value)},_setIframeAlign:function(value){var frame=popup.anchorEl;var newFrame=frame.cloneNode(true);switch(value){case-2:newFrame.setAttribute("align","");break;case-1:newFrame.setAttribute("align","left");break;case 1:newFrame.setAttribute("align","right");break}frame.parentNode.insertBefore(newFrame,frame);domUtils.remove(frame);popup.anchorEl=newFrame;popup.showAnchor(popup.anchorEl)},_updateIframe:function(){var frame=editor._iframe=popup.anchorEl;if(domUtils.hasClass(frame,"ueditor_baidumap")){editor.selection.getRange().selectNode(frame).select();editor.ui._dialogs.mapDialog.open();popup.hide()}else{editor.ui._dialogs.insertframeDialog.open();popup.hide()}},_onRemoveButtonClick:function(cmdName){editor.execCommand(cmdName);this.hide()},queryAutoHide:function(el){if(el&&el.ownerDocument==editor.document){if(el.tagName.toLowerCase()=="img"||domUtils.findParentByTagName(el,"a",true)){return el!==popup.anchorEl}}return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this,el)}});popup.render();if(editor.options.imagePopup){editor.addListener("mouseover",function(t,evt){evt=evt||window.event;var el=evt.target||evt.srcElement;if(editor.ui._dialogs.insertframeDialog&&/iframe/gi.test(el.tagName)){var html=popup.formatHtml(""+editor.getLang("property")+': '+editor.getLang("default")+'  '+editor.getLang("justifyleft")+'  '+editor.getLang("justifyright")+"  "+' '+editor.getLang("modify")+"");if(html){popup.getDom("content").innerHTML=html;popup.anchorEl=el;popup.showAnchor(popup.anchorEl)}else{popup.hide()}}});editor.addListener("selectionchange",function(t,causeByUi){if(!causeByUi)return;var html="",str="",img=editor.selection.getRange().getClosedNode(),dialogs=editor.ui._dialogs;if(img&&img.tagName=="IMG"){var dialogName="insertimageDialog";if(img.className.indexOf("edui-faked-video")!=-1||img.className.indexOf("edui-upload-video")!=-1){dialogName="insertvideoDialog"}if(img.className.indexOf("edui-faked-webapp")!=-1){dialogName="webappDialog"}if(img.src.indexOf("http://api.map.baidu.com")!=-1){dialogName="mapDialog"}if(img.className.indexOf("edui-faked-music")!=-1){dialogName="musicDialog"}if(img.src.indexOf("http://maps.google.com/maps/api/staticmap")!=-1){dialogName="gmapDialog"}if(img.getAttribute("anchorname")){dialogName="anchorDialog";html=popup.formatHtml(""+editor.getLang("property")+': '+editor.getLang("modify")+"  "+""+editor.getLang("delete")+"")}if(img.getAttribute("word_img")){editor.word_img=[img.getAttribute("word_img")];dialogName="wordimageDialog"}if(domUtils.hasClass(img,"loadingclass")||domUtils.hasClass(img,"loaderrorclass")){dialogName=""}if(!dialogs[dialogName]){return}str=""+editor.getLang("property")+": "+''+editor.getLang("default")+"  "+''+editor.getLang("justifyleft")+"  "+''+editor.getLang("justifyright")+"  "+''+editor.getLang("justifycenter")+"  "+"'+editor.getLang("modify")+"";!html&&(html=popup.formatHtml(str))}if(editor.ui._dialogs.linkDialog){var link=editor.queryCommandValue("link");var url;if(link&&(url=link.getAttribute("_href")||link.getAttribute("href",2))){var txt=url;if(url.length>30){txt=url.substring(0,20)+"..."}if(html){html+='
'}html+=popup.formatHtml(""+editor.getLang("anthorMsg")+': '+txt+""+' '+editor.getLang("modify")+""+' '+editor.getLang("clear")+"");popup.showAnchor(link)}}if(html){popup.getDom("content").innerHTML=html;popup.anchorEl=img||link;popup.showAnchor(popup.anchorEl)}else{popup.hide()}})}},_initToolbars:function(){var editor=this.editor;var toolbars=this.toolbars||[];var toolbarUis=[];for(var i=0;i'+'
'+(this.toolbars.length?'
'+this.renderToolbarBoxHtml()+"
":"")+'"+'
'+"
"+'
'+"
"+'
'+''+''+''+"
"+'
'+""},showWordImageDialog:function(){this._dialogs["wordimageDialog"].open()},renderToolbarBoxHtml:function(){var buff=[];for(var i=0;i'+ci+"")}bottom.innerHTML='
'+this.editor.getLang("elementPathTip")+": "+buff.join(" > ")+"
"}else{bottom.style.display="none"}},disableElementPath:function(){var bottom=this.getDom("elementpath");bottom.innerHTML="";bottom.style.display="none";this.elementPathEnabled=false},enableElementPath:function(){var bottom=this.getDom("elementpath");bottom.style.display="";this.elementPathEnabled=true;this._updateElementPath()},_scale:function(){var doc=document,editor=this.editor,editorHolder=editor.container,editorDocument=editor.document,toolbarBox=this.getDom("toolbarbox"),bottombar=this.getDom("bottombar"),scale=this.getDom("scale"),scalelayer=this.getDom("scalelayer");var isMouseMove=false,position=null,minEditorHeight=0,minEditorWidth=editor.options.minFrameWidth,pageX=0,pageY=0,scaleWidth=0,scaleHeight=0;function down(){position=domUtils.getXY(editorHolder);if(!minEditorHeight){minEditorHeight=editor.options.minFrameHeight+toolbarBox.offsetHeight+bottombar.offsetHeight}scalelayer.style.cssText="position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:"+editorHolder.offsetWidth+"px;height:"+editorHolder.offsetHeight+"px;z-index:"+(editor.options.zIndex+1);domUtils.on(doc,"mousemove",move);domUtils.on(editorDocument,"mouseup",up);domUtils.on(doc,"mouseup",up)}var me=this;this.editor.addListener("fullscreenchanged",function(e,fullScreen){if(fullScreen){me.disableScale()}else{if(me.editor.options.scaleEnabled){me.enableScale();var tmpNode=me.editor.document.createElement("span");me.editor.body.appendChild(tmpNode);me.editor.body.style.height=Math.max(domUtils.getXY(tmpNode).y,me.editor.iframe.offsetHeight-20)+"px";domUtils.remove(tmpNode)}}});function move(event){clearSelection();var e=event||window.event;pageX=e.pageX||doc.documentElement.scrollLeft+e.clientX;pageY=e.pageY||doc.documentElement.scrollTop+e.clientY;scaleWidth=pageX-position.x;scaleHeight=pageY-position.y;if(scaleWidth>=minEditorWidth){isMouseMove=true;scalelayer.style.width=scaleWidth+"px"}if(scaleHeight>=minEditorHeight){isMouseMove=true;scalelayer.style.height=scaleHeight+"px"}}function up(){if(isMouseMove){isMouseMove=false;editor.ui._actualFrameWidth=scalelayer.offsetWidth-2;editorHolder.style.width=editor.ui._actualFrameWidth+"px";editor.setHeight(scalelayer.offsetHeight-bottombar.offsetHeight-toolbarBox.offsetHeight-2,true)}if(scalelayer){scalelayer.style.display="none"}clearSelection();domUtils.un(doc,"mousemove",move);domUtils.un(editorDocument,"mouseup",up);domUtils.un(doc,"mouseup",up)}function clearSelection(){if(browser.ie)doc.selection.clear();else window.getSelection().removeAllRanges()}this.enableScale=function(){if(editor.queryCommandState("source")==1)return;scale.style.display="";this.scaleEnabled=true;domUtils.on(scale,"mousedown",down)};this.disableScale=function(){scale.style.display="none";this.scaleEnabled=false;domUtils.un(scale,"mousedown",down)}},isFullScreen:function(){return this._fullscreen},postRender:function(){UIBase.prototype.postRender.call(this);for(var i=0;i[\n\r\t]+([ ]{4})+/g,">").replace(/[\n\r\t]+([ ]{4})+[\n\r\t]+<");holder.className&&(newDiv.className=holder.className);holder.style.cssText&&(newDiv.style.cssText=holder.style.cssText);if(/textarea/i.test(holder.tagName)){editor.textarea=holder;editor.textarea.style.display="none"}else{holder.parentNode.removeChild(holder)}if(holder.id){newDiv.id=holder.id;domUtils.removeAttributes(holder,"id")}holder=newDiv;holder.innerHTML=""}}domUtils.addClass(holder,"edui-"+editor.options.theme);editor.ui.render(holder);var opt=editor.options;editor.container=editor.ui.getDom();var parents=domUtils.findParents(holder,true);var displays=[];for(var i=0,ci;ci=parents[i];i++){displays[i]=ci.style.display;ci.style.display="block"}if(opt.initialFrameWidth){opt.minFrameWidth=opt.initialFrameWidth}else{opt.minFrameWidth=opt.initialFrameWidth=holder.offsetWidth;var styleWidth=holder.style.width;if(/%$/.test(styleWidth)){opt.initialFrameWidth=styleWidth}}if(opt.initialFrameHeight){opt.minFrameHeight=opt.initialFrameHeight}else{opt.initialFrameHeight=opt.minFrameHeight=holder.offsetHeight}for(var i=0,ci;ci=parents[i];i++){ci.style.display=displays[i]}if(holder.style.height){holder.style.height=""}editor.container.style.width=opt.initialFrameWidth+(/%$/.test(opt.initialFrameWidth)?"":"px");editor.container.style.zIndex=opt.zIndex;oldRender.call(editor,editor.ui.getDom("iframeholder"));editor.fireEvent("afteruiready")}})};return editor};UE.getEditor=function(id,opt){var editor=instances[id];if(!editor){editor=instances[id]=new UE.ui.Editor(opt);editor.render(id)}return editor};UE.delEditor=function(id){var editor;if(editor=instances[id]){editor.key&&editor.destroy();delete instances[id]}};UE.registerUI=function(uiName,fn,index,editorId){utils.each(uiName.split(/\s+/),function(name){UE._customizeUI[name]={id:editorId,execFn:fn,index:index}})}}();UE.registerUI("message",function(editor){var editorui=baidu.editor.ui;var Message=editorui.Message;var holder;var _messageItems=[];var me=editor;me.addListener("ready",function(){holder=document.getElementById(me.ui.id+"_message_holder");updateHolderPos();setTimeout(function(){updateHolderPos()},500)});me.addListener("showmessage",function(type,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=new Message({timeout:opt.timeout,type:opt.type,content:opt.content,keepshow:opt.keepshow,editor:me}),mid=opt.id||"msg_"+(+new Date).toString(36);message.render(holder);_messageItems[mid]=message;message.reset(opt);updateHolderPos();return mid});me.addListener("updatemessage",function(type,id,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=_messageItems[id];message.render(holder);message&&message.reset(opt)});me.addListener("hidemessage",function(type,id){var message=_messageItems[id];message&&message.hide()});function updateHolderPos(){var toolbarbox=me.ui.getDom("toolbarbox");if(toolbarbox){holder.style.top=toolbarbox.offsetHeight+3+"px"}holder.style.zIndex=Math.max(me.options.zIndex,me.iframe.style.zIndex)+1}});UE.registerUI("autosave",function(editor){var timer=null,uid=null;editor.on("afterautosave",function(){clearTimeout(timer);timer=setTimeout(function(){if(uid){editor.trigger("hidemessage",uid)}uid=editor.trigger("showmessage",{content:editor.getLang("autosave.success"),timeout:2e3})},2e3)})})}(); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/ueditor.config.js b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/ueditor.config.js new file mode 100644 index 0000000..666b52c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/plugin/ueditor/ueditor.config.js @@ -0,0 +1,285 @@ +/** + * ueditor完整配置项 + * 可以在这里配置整个编辑器的特性 + */ +/**************************提示******************************** + * 所有被注释的配置项均为UEditor默认值。 + * 修改默认配置请首先确保已经完全明确该参数的真实用途。 + * 主要有两种修改方案,一种是取消此处注释,然后修改成对应参数;另一种是在实例化编辑器时传入对应参数。 + * 当升级编辑器时,可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。 + **************************提示********************************/ + +(function () { + + /** + * 编辑器资源文件根路径。它所表示的含义是:以编辑器实例化页面为当前路径,指向编辑器资源文件(即dialog等文件夹)的路径。 + * 鉴于很多同学在使用编辑器的时候出现的种种路径问题,此处强烈建议大家使用"相对于网站根目录的相对路径"进行配置。 + * "相对于网站根目录的相对路径"也就是以斜杠开头的形如"/myProject/ueditor/"这样的路径。 + * 如果站点中有多个不在同一层级的页面需要实例化编辑器,且引用了同一UEditor的时候,此处的URL可能不适用于每个页面的编辑器。 + * 因此,UEditor提供了针对不同页面的编辑器可单独配置的根路径,具体来说,在需要实例化编辑器的页面最顶部写上如下代码即可。当然,需要令此处的URL等于对应的配置。 + * window.UEDITOR_HOME_URL = "/xxxx/xxxx/"; + */ + var URL = window.UEDITOR_HOME_URL || getUEBasePath(); + + /** + * 配置项主体。注意,此处所有涉及到路径的配置别遗漏URL变量。 + */ + window.UEDITOR_CONFIG = { + + //为编辑器实例添加一个路径,这个不能被注释 + UEDITOR_HOME_URL: URL + + // 服务器统一请求接口路径 + , serverUrl: "/jsp/controller.jsp" + + //工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的从新定义 + + , toolbars: [["fullscreen","source","undo","redo","insertunorderedlist","insertorderedlist","link","unlink","help","attachment","simpleupload","insertimage","emotion","pagebreak","date","bold","italic","fontborder","strikethrough","underline","forecolor","justifyleft","justifycenter","justifyright","justifyjustify","paragraph","rowspacingbottom","rowspacingtop","lineheight"]] + //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置,否则以配置值为准 + //,labelMap:{ + // 'anchor':'', 'undo':'' + //} + + //语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换,当然,前提条件是lang文件夹下存在对应的语言文件: + //lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase() + //,lang:"zh-cn" + //,langPath:URL +"lang/" + + //主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换,当然,前提条件是themes文件夹下存在对应的主题文件: + //现有如下皮肤:default + //,theme:'default' + //,themePath:URL +"themes/" + + //,zIndex : 900 //编辑器层级的基数,默认是900 + + //针对getAllHtml方法,会在对应的head标签中增加该编码设置。 + //,charset:"utf-8" + + //若实例化编辑器的页面手动修改的domain,此处需要设置为true + //,customDomain:false + + //常用配置项目 + //,isShow : true //默认显示编辑器 + + //,textarea:'editorValue' // 提交表单时,服务器获取编辑器提交内容的所用的参数,多实例时可以给容器name属性,会将name给定的值最为每个实例的键值,不用每次实例化的时候都设置这个值 + + //,initialContent:'欢迎使用ueditor!' //初始化编辑器的内容,也可以通过textarea/script给值,看官网例子 + + //,autoClearinitialContent:true //是否自动清除编辑器初始内容,注意:如果focus属性设置为true,这个也为真,那么编辑器一上来就会触发导致初始化的内容看不到了 + + //,focus:false //初始化时,是否让编辑器获得焦点true或false + + //如果自定义,最好给p标签如下的行高,要不输入中文时,会有跳动感 + //,initialStyle:'p{line-height:1em}'//编辑器层级的基数,可以用来改变字体等 + + //,iframeCssUrl: URL + '/themes/iframe.css' //给编辑器内部引入一个css文件 + + //,initialFrameWidth:1000 //初始化编辑器宽度,默认1000 + //,initialFrameHeight:320 //初始化编辑器高度,默认320 + + //,readonly : false //编辑器初始化结束后,编辑区域是否是只读的,默认是false + + //,autoClearEmptyNode : true //getContent时,是否删除空的inlineElement节点(包括嵌套的情况) + + //,fullscreen : false //是否开启初始化时即全屏,默认关闭 + + //,imagePopup:true //图片操作的浮层开关,默认打开 + + //,emotionLocalization:false //是否开启表情本地化,默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹 + + //粘贴只保留标签,去除标签所有属性 + //,retainOnlyLabelPasted: false + + //,pasteplain:false //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴 + //纯文本粘贴模式下的过滤规则 + //'filterTxtRules' : function(){ + // function transP(node){ + // node.tagName = 'p'; + // node.setStyle(); + // } + // return { + // //直接删除及其字节点内容 + // '-' : 'script style object iframe embed input select', + // 'p': {$:{}}, + // 'br':{$:{}}, + // 'div':{'$':{}}, + // 'li':{'$':{}}, + // 'caption':transP, + // 'th':transP, + // 'tr':transP, + // 'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP, + // 'td':function(node){ + // //没有内容的td直接删掉 + // var txt = !!node.innerText(); + // if(txt){ + // node.parentNode.insertAfter(UE.uNode.createText('    '),node); + // } + // node.parentNode.removeChild(node,node.innerText()) + // } + // } + //}() + + //,allHtmlEnabled:false //提交到后台的数据是否包含整个html字符串 + + //insertorderedlist + //有序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准 + //,'insertorderedlist':{ + // //自定的样式 + // 'num':'1,2,3...', + // 'num1':'1),2),3)...', + // 'num2':'(1),(2),(3)...', + // 'cn':'一,二,三....', + // 'cn1':'一),二),三)....', + // 'cn2':'(一),(二),(三)....', + // //系统自带 + // 'decimal' : '' , //'1,2,3...' + // 'lower-alpha' : '' , // 'a,b,c...' + // 'lower-roman' : '' , //'i,ii,iii...' + // 'upper-alpha' : '' , lang //'A,B,C' + // 'upper-roman' : '' //'I,II,III...' + //} + + //insertunorderedlist + //无序列表的下拉配置,值留空时支持多语言自动识别,若配置值,则以此值为准 + //,insertunorderedlist : { //自定的样式 + // 'dash' :'— 破折号', //-破折号 + // 'dot':' 。 小圆圈', //系统自带 + // 'circle' : '', // '○ 小圆圈' + // 'disc' : '', // '● 小圆点' + // 'square' : '' //'■ 小方块' + //} + //,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍 + //,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径 + //,maxListLevel : 3 //限制可以tab的级数, 设置-1为不限制 + + //,autoTransWordToList:false //禁止word中粘贴进来的列表自动变成列表标签 + + //paragraph + //段落格式 值留空时支持多语言自动识别,若配置,则以配置值为准 + //,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''} + + //rowspacingtop + //段间距 值和显示的名字相同 + //,'rowspacingtop':['5', '10', '15', '20', '25'] + + //rowspacingBottom + //段间距 值和显示的名字相同 + //,'rowspacingbottom':['5', '10', '15', '20', '25'] + + //lineheight + //行内间距 值和显示的名字相同 + //,'lineheight':['1', '1.5','1.75','2', '3', '4', '5'] + + //快捷菜单 + //,shortcutMenu:["fontfamily", "fontsize", "bold", "italic", "underline", "forecolor", "backcolor", "insertorderedlist", "insertunorderedlist"] + + //tab + //点击tab键时移动的距离,tabSize倍数,tabNode什么字符做为单位 + //,tabSize:4 + //,tabNode:' ' + + //undo + //可以最多回退的次数,默认20 + //,maxUndoCount:20 + //当输入的字符数超过该值时,保存一次现场 + //,maxInputCount:1 + + //scaleEnabled + //是否可以拉伸长高,默认true(当开启时,自动长高失效) + //,scaleEnabled:false + //,minFrameWidth:800 //编辑器拖动时最小宽度,默认800 + //,minFrameHeight:220 //编辑器拖动时最小高度,默认220 + + //pageBreakTag + //分页标识符,默认是_ueditor_page_break_tag_ + //,pageBreakTag:'_ueditor_page_break_tag_' + + //sourceEditor + //源码的查看方式,codemirror 是代码高亮,textarea是文本框,默认是codemirror + //注意默认codemirror只能在ie8+和非ie中使用 + //,sourceEditor:"codemirror" + //如果sourceEditor是codemirror,还用配置一下两个参数 + //codeMirrorJsUrl js加载的路径,默认是 URL + "third-party/codemirror/codemirror.js" + //,codeMirrorJsUrl:URL + "third-party/codemirror/codemirror.js" + //codeMirrorCssUrl css加载的路径,默认是 URL + "third-party/codemirror/codemirror.css" + //,codeMirrorCssUrl:URL + "third-party/codemirror/codemirror.css" + //编辑器初始化完成后是否进入源码模式,默认为否。 + //,sourceEditorFirst:false + + //iframeUrlMap + //dialog内容的路径 ~会被替换成URL,垓属性一旦打开,将覆盖所有的dialog的默认路径 + //,iframeUrlMap:{ + // 'anchor':'~/dialogs/anchor/anchor.html', + //} + + }; + + function getUEBasePath(docUrl, confUrl) { + + return getBasePath(docUrl || self.document.URL || self.location.href, confUrl || getConfigFilePath()); + + } + + function getConfigFilePath() { + + var configPath = document.getElementsByTagName('script'); + + return configPath[ configPath.length - 1 ].src; + + } + + function getBasePath(docUrl, confUrl) { + + var basePath = confUrl; + + + if (/^(\/|\\\\)/.test(confUrl)) { + + basePath = /^.+?\w(\/|\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\/|\\\\)/, ''); + + } else if (!/^[a-z]+:/i.test(confUrl)) { + + docUrl = docUrl.split("#")[0].split("?")[0].replace(/[^\\\/]+$/, ''); + + basePath = docUrl + "" + confUrl; + + } + + return optimizationPath(basePath); + + } + + function optimizationPath(path) { + + var protocol = /^[a-z]+:\/\//.exec(path)[ 0 ], + tmp = null, + res = []; + + path = path.replace(protocol, "").split("?")[0].split("#")[0]; + + path = path.replace(/\\/g, '/').split(/\//); + + path[ path.length - 1 ] = ""; + + while (path.length) { + + if (( tmp = path.shift() ) === "..") { + res.pop(); + } else if (tmp !== ".") { + res.push(tmp); + } + + } + + return protocol + res.join("/"); + + } + function upFiles() { + var myFiles = _editor.getDialog("attachment"); + myFiles.open(); + } + window.UE = { + getUEBasePath: getUEBasePath + }; + +})(); diff --git a/src/main/webapp/WEB-INF/views/src/js/ug-ui/ug-dialog.js b/src/main/webapp/WEB-INF/views/src/js/ug-ui/ug-dialog.js new file mode 100644 index 0000000..c3868a3 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/ug-ui/ug-dialog.js @@ -0,0 +1,88 @@ +/** + * Created by Jeng on 2015/12/17. + */ +/*jshint globalstrict:true*/ +/*global angular:false*/ +(function(){ + // Create global xmg obj and its namespaces + // build processes may have already created an xmg obj + window.ug = window.ug || {}; + window.ug.version = '1.0.0'; +(function(angular){ + 'use strict'; + /** + * dialog框架 + */ +angular.module('ug.dialog', ["ng"]) + .constant("$ugDialogConfig", { + errorElement: "div", + errorClass:"error" + }) + .factory("$ugDialog", ["$q", function ($q) { + return { + alert : function(option){ + var defaultConfig = { + title : "提示", + color : "#5384AF", + timeout: 3000, + icon : "fa fa-bell" + }; + if(!angular.isObject(option)){ + option = { + content:option + } + } + angular.extend(defaultConfig, option); + $.smallBox(defaultConfig); + }, + warn : function(option){ + var defaultConfig = { + title:"警告", + color : "#C46A69", + icon : "fa fa-warning shake animated", + timeout : 6000 + }; + if(!angular.isObject(option)){ + option = { + content:option + } + } + angular.extend(defaultConfig, option); + $.bigBox(defaultConfig); + }, + confirm: function (option) { + var ok = "确认"; + var cancel = "取消"; + if(option.okText){ + ok = option.okText; + } + if(option.cancelText){ + cancel = option.cancelText; + } + var defaultConfig = { + title : "确认框", + color : "#5384AF", + icon : "fa fa-bell", + buttons : '[' +cancel + '][' + ok + ']' + }; + if(!angular.isObject(option)){ + option = { + content:option + } + } + angular.extend(defaultConfig, option); + var deferred = $q.defer(); + $.SmartMessageBox(defaultConfig, function(ButtonPressed) { + if (ButtonPressed === ok) { + deferred.resolve(); + } + if (ButtonPressed === cancel) { + deferred.reject(); + } + }); + return deferred.promise; + } + } + }]) +}(angular)); +})(); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/ug-ui/ug-validate.js b/src/main/webapp/WEB-INF/views/src/js/ug-ui/ug-validate.js new file mode 100644 index 0000000..427cd7a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/ug-ui/ug-validate.js @@ -0,0 +1,93 @@ +/** + * Created by Jeng on 2015/12/17. + */ +/*jshint globalstrict:true*/ +/*global angular:false*/ +(function(){ + // Create global xmg obj and its namespaces + // build processes may have already created an xmg obj + window.ug = window.ug || {}; + window.ug.version = '1.0.0'; +(function(angular){ + 'use strict'; +/** + * 校验规则表达式 + */ +var Regex_Rules = { + // 正数字 + positiveIntegerRegex: /^[0-9]+$/, + // 整数 + integerRegex : /^\-?[0-9]+$/, + // 正浮点数字 + positiveDecimalRegex : /^[0-9]*\.?[0-9]+$/, + // 浮点数字 + decimalRegex : /^\-?[0-9]*\.?[0-9]+$/, + // email + emailRegex : /^[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])?)*$/, + // 大小写字母或数字 + notSpecialCharacterRegex : /^[A-Za-z0-9]+$/i, + // 非汉字 + notChineseRegex : /^[\u4E00-\u9FA5]+$/i, + // 中国身份证 + chinaIdRegex : /^[1-9]\d{5}[1-9]\d{3}(((0[13578]|1[02])(0[1-9]|[12]\d|3[0-1]))|((0[469]|11)(0[1-9]|[12]\d|30))|(02(0[1-9]|[12]\d)))(\d{4}|\d{3}[xX])$/, + // 中国邮政编码 + chinaZipRegex : /^\d{6}$/, + // 手机号码 + telephoneRegex : /^(1)[0-9]{10}$/, + // IP + ipRegex : /^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})$/ +}; + +// 校验框架 +var $ugValidate = ["$ugValidateDefault", function( $ugValidateDefault) { + return { + restrict: 'A', + scope:{ + ugValidate:"=" + }, + require:"form", + link: function(scope, element, attr) { + var option = angular.extend($ugValidateDefault, scope.ugValidate); + scope.ugValidate.validator = $(element).validate(option); + angular.extend(scope.ugValidate, option); + } + }; +}]; + /** + * 校验框架 + */ +angular.module('ug.validate', ["ng"]) + .constant("Regex_Rules", Regex_Rules) + .constant("$ugValidateDefault", { + errorElement: "div", + errorClass:"error", + errorPlacement: function(error, element) { //指定错误信息位置 + if (element.is(':radio') || element.is(':checkbox')) { //如果是radio或checkbox + var eid = element.attr('name'); //获取元素的name属性 + var ele = $(element).parent().parent(); + error.appendTo(ele); //将错误信息添加当前元素的父结点后面 + } else { + error.insertAfter(element); + } + } + }) + .factory("$ugValidateProvider", function () { + return { + setDefaults: function (options) { + $.validator.setDefaults(options); + }, + addMethod: function (name, func, errorText) { + $.validator.addMethod(name, func, errorText); + } + } + }) + .run([function(){ + $.validator.addMethod("positiveInteger", function(value, element) { + value=parseInt(value); + return this.optional(element) || value>0; + }, "请输入大于0的整数"); + }]) + .directive('ugValidate', $ugValidate); + +}(angular)); +})(); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/uploadify/index.html b/src/main/webapp/WEB-INF/views/src/js/uploadify/index.html new file mode 100644 index 0000000..c2b673d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/uploadify/index.html @@ -0,0 +1,50 @@ + + + + +UploadiFive Test + + + + + + + +

Uploadify Demo

+
+
+ +
+
+ + + + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/uploadify/jquery.uploadify.min.js b/src/main/webapp/WEB-INF/views/src/js/uploadify/jquery.uploadify.min.js new file mode 100644 index 0000000..534c52a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/uploadify/jquery.uploadify.min.js @@ -0,0 +1,16 @@ +/* +Uploadify v3.2.1 +Copyright (c) 2012 Reactive Apps, Ronnie Garcia +Released under the MIT License + +SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com +mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/ +SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License: +http://www.opensource.org/licenses/mit-license.php +SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License: +http://www.opensource.org/licenses/mit-license.php + +SWFObject v2.2 +is released under the MIT License +*/ +;var swfobject=function(){var aq="undefined",aD="object",ab="Shockwave Flash",X="ShockwaveFlash.ShockwaveFlash",aE="application/x-shockwave-flash",ac="SWFObjectExprInst",ax="onreadystatechange",af=window,aL=document,aB=navigator,aa=false,Z=[aN],aG=[],ag=[],al=[],aJ,ad,ap,at,ak=false,aU=false,aH,an,aI=true,ah=function(){var a=typeof aL.getElementById!=aq&&typeof aL.getElementsByTagName!=aq&&typeof aL.createElement!=aq,e=aB.userAgent.toLowerCase(),c=aB.platform.toLowerCase(),h=c?/win/.test(c):/win/.test(e),j=c?/mac/.test(c):/mac/.test(e),g=/webkit/.test(e)?parseFloat(e.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,d=!+"\v1",f=[0,0,0],k=null;if(typeof aB.plugins!=aq&&typeof aB.plugins[ab]==aD){k=aB.plugins[ab].description;if(k&&!(typeof aB.mimeTypes!=aq&&aB.mimeTypes[aE]&&!aB.mimeTypes[aE].enabledPlugin)){aa=true;d=false;k=k.replace(/^.*\s+(\S+\s+\S+$)/,"$1");f[0]=parseInt(k.replace(/^(.*)\..*$/,"$1"),10);f[1]=parseInt(k.replace(/^.*\.(.*)\s.*$/,"$1"),10);f[2]=/[a-zA-Z]/.test(k)?parseInt(k.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0;}}else{if(typeof af.ActiveXObject!=aq){try{var i=new ActiveXObject(X);if(i){k=i.GetVariable("$version");if(k){d=true;k=k.split(" ")[1].split(",");f=[parseInt(k[0],10),parseInt(k[1],10),parseInt(k[2],10)];}}}catch(b){}}}return{w3:a,pv:f,wk:g,ie:d,win:h,mac:j};}(),aK=function(){if(!ah.w3){return;}if((typeof aL.readyState!=aq&&aL.readyState=="complete")||(typeof aL.readyState==aq&&(aL.getElementsByTagName("body")[0]||aL.body))){aP();}if(!ak){if(typeof aL.addEventListener!=aq){aL.addEventListener("DOMContentLoaded",aP,false);}if(ah.ie&&ah.win){aL.attachEvent(ax,function(){if(aL.readyState=="complete"){aL.detachEvent(ax,arguments.callee);aP();}});if(af==top){(function(){if(ak){return;}try{aL.documentElement.doScroll("left");}catch(a){setTimeout(arguments.callee,0);return;}aP();})();}}if(ah.wk){(function(){if(ak){return;}if(!/loaded|complete/.test(aL.readyState)){setTimeout(arguments.callee,0);return;}aP();})();}aC(aP);}}();function aP(){if(ak){return;}try{var b=aL.getElementsByTagName("body")[0].appendChild(ar("span"));b.parentNode.removeChild(b);}catch(a){return;}ak=true;var d=Z.length;for(var c=0;c0){for(var h=0;h0){var i=aS(c);if(i){if(ao(aG[h].swfVersion)&&!(ah.wk&&ah.wk<312)){ay(c,true);if(l){a.success=true;a.ref=av(c);l(a);}}else{if(aG[h].expressInstall&&au()){var e={};e.data=aG[h].expressInstall;e.width=i.getAttribute("width")||"0";e.height=i.getAttribute("height")||"0";if(i.getAttribute("class")){e.styleclass=i.getAttribute("class");}if(i.getAttribute("align")){e.align=i.getAttribute("align");}var f={};var d=i.getElementsByTagName("param");var k=d.length;for(var j=0;j';}}a.outerHTML='"+h+"";ag[ag.length]=e.id;d=aS(e.id);}else{var b=ar(aD);b.setAttribute("type",aE);for(var k in e){if(e[k]!=Object.prototype[k]){if(k.toLowerCase()=="styleclass"){b.setAttribute("class",e[k]);}else{if(k.toLowerCase()!="classid"){b.setAttribute(k,e[k]);}}}}for(var l in g){if(g[l]!=Object.prototype[l]&&l.toLowerCase()!="movie"){aQ(b,l,g[l]);}}a.parentNode.replaceChild(b,a);d=b;}}return d;}function aQ(b,d,c){var a=ar("param");a.setAttribute("name",d);a.setAttribute("value",c);b.appendChild(a);}function aw(a){var b=aS(a);if(b&&b.nodeName=="OBJECT"){if(ah.ie&&ah.win){b.style.display="none";(function(){if(b.readyState==4){aT(a);}else{setTimeout(arguments.callee,10);}})();}else{b.parentNode.removeChild(b);}}}function aT(a){var b=aS(a);if(b){for(var c in b){if(typeof b[c]=="function"){b[c]=null;}}b.parentNode.removeChild(b);}}function aS(a){var c=null;try{c=aL.getElementById(a);}catch(b){}return c;}function ar(a){return aL.createElement(a);}function aM(a,c,b){a.attachEvent(c,b);al[al.length]=[a,c,b];}function ao(a){var b=ah.pv,c=a.split(".");c[0]=parseInt(c[0],10);c[1]=parseInt(c[1],10)||0;c[2]=parseInt(c[2],10)||0;return(b[0]>c[0]||(b[0]==c[0]&&b[1]>c[1])||(b[0]==c[0]&&b[1]==c[1]&&b[2]>=c[2]))?true:false;}function az(b,f,a,c){if(ah.ie&&ah.mac){return;}var e=aL.getElementsByTagName("head")[0];if(!e){return;}var g=(a&&typeof a=="string")?a:"screen";if(c){aH=null;an=null;}if(!aH||an!=g){var d=ar("style");d.setAttribute("type","text/css");d.setAttribute("media",g);aH=e.appendChild(d);if(ah.ie&&ah.win&&typeof aL.styleSheets!=aq&&aL.styleSheets.length>0){aH=aL.styleSheets[aL.styleSheets.length-1];}an=g;}if(ah.ie&&ah.win){if(aH&&typeof aH.addRule==aD){aH.addRule(b,f);}}else{if(aH&&typeof aL.createTextNode!=aq){aH.appendChild(aL.createTextNode(b+" {"+f+"}"));}}}function ay(a,c){if(!aI){return;}var b=c?"visible":"hidden";if(ak&&aS(a)){aS(a).style.visibility=b;}else{az("#"+a,"visibility:"+b);}}function ai(b){var a=/[\\\"<>\.;]/;var c=a.exec(b)!=null;return c&&typeof encodeURIComponent!=aq?encodeURIComponent(b):b;}var aR=function(){if(ah.ie&&ah.win){window.attachEvent("onunload",function(){var a=al.length;for(var b=0;b','','','','','','',""].join("");};SWFUpload.prototype.getFlashVars=function(){var c=this.buildParamString();var d=this.settings.http_success.join(",");return["movieName=",encodeURIComponent(this.movieName),"&uploadURL=",encodeURIComponent(this.settings.upload_url),"&useQueryString=",encodeURIComponent(this.settings.use_query_string),"&requeueOnError=",encodeURIComponent(this.settings.requeue_on_error),"&httpSuccess=",encodeURIComponent(d),"&assumeSuccessTimeout=",encodeURIComponent(this.settings.assume_success_timeout),"&params=",encodeURIComponent(c),"&filePostName=",encodeURIComponent(this.settings.file_post_name),"&fileTypes=",encodeURIComponent(this.settings.file_types),"&fileTypesDescription=",encodeURIComponent(this.settings.file_types_description),"&fileSizeLimit=",encodeURIComponent(this.settings.file_size_limit),"&fileUploadLimit=",encodeURIComponent(this.settings.file_upload_limit),"&fileQueueLimit=",encodeURIComponent(this.settings.file_queue_limit),"&debugEnabled=",encodeURIComponent(this.settings.debug_enabled),"&buttonImageURL=",encodeURIComponent(this.settings.button_image_url),"&buttonWidth=",encodeURIComponent(this.settings.button_width),"&buttonHeight=",encodeURIComponent(this.settings.button_height),"&buttonText=",encodeURIComponent(this.settings.button_text),"&buttonTextTopPadding=",encodeURIComponent(this.settings.button_text_top_padding),"&buttonTextLeftPadding=",encodeURIComponent(this.settings.button_text_left_padding),"&buttonTextStyle=",encodeURIComponent(this.settings.button_text_style),"&buttonAction=",encodeURIComponent(this.settings.button_action),"&buttonDisabled=",encodeURIComponent(this.settings.button_disabled),"&buttonCursor=",encodeURIComponent(this.settings.button_cursor)].join("");};SWFUpload.prototype.getMovieElement=function(){if(this.movieElement==undefined){this.movieElement=document.getElementById(this.movieName);}if(this.movieElement===null){throw"Could not find Flash element";}return this.movieElement;};SWFUpload.prototype.buildParamString=function(){var f=this.settings.post_params;var d=[];if(typeof(f)==="object"){for(var e in f){if(f.hasOwnProperty(e)){d.push(encodeURIComponent(e.toString())+"="+encodeURIComponent(f[e].toString()));}}}return d.join("&");};SWFUpload.prototype.destroy=function(){try{this.cancelUpload(null,false);var g=null;g=this.getMovieElement();if(g&&typeof(g.CallFunction)==="unknown"){for(var j in g){try{if(typeof(g[j])==="function"){g[j]=null;}}catch(h){}}try{g.parentNode.removeChild(g);}catch(f){}}window[this.movieName]=null;SWFUpload.instances[this.movieName]=null;delete SWFUpload.instances[this.movieName];this.movieElement=null;this.settings=null;this.customSettings=null;this.eventQueue=null;this.movieName=null;return true;}catch(i){return false;}};SWFUpload.prototype.displayDebugInfo=function(){this.debug(["---SWFUpload Instance Info---\n","Version: ",SWFUpload.version,"\n","Movie Name: ",this.movieName,"\n","Settings:\n","\t","upload_url: ",this.settings.upload_url,"\n","\t","flash_url: ",this.settings.flash_url,"\n","\t","use_query_string: ",this.settings.use_query_string.toString(),"\n","\t","requeue_on_error: ",this.settings.requeue_on_error.toString(),"\n","\t","http_success: ",this.settings.http_success.join(", "),"\n","\t","assume_success_timeout: ",this.settings.assume_success_timeout,"\n","\t","file_post_name: ",this.settings.file_post_name,"\n","\t","post_params: ",this.settings.post_params.toString(),"\n","\t","file_types: ",this.settings.file_types,"\n","\t","file_types_description: ",this.settings.file_types_description,"\n","\t","file_size_limit: ",this.settings.file_size_limit,"\n","\t","file_upload_limit: ",this.settings.file_upload_limit,"\n","\t","file_queue_limit: ",this.settings.file_queue_limit,"\n","\t","debug: ",this.settings.debug.toString(),"\n","\t","prevent_swf_caching: ",this.settings.prevent_swf_caching.toString(),"\n","\t","button_placeholder_id: ",this.settings.button_placeholder_id.toString(),"\n","\t","button_placeholder: ",(this.settings.button_placeholder?"Set":"Not Set"),"\n","\t","button_image_url: ",this.settings.button_image_url.toString(),"\n","\t","button_width: ",this.settings.button_width.toString(),"\n","\t","button_height: ",this.settings.button_height.toString(),"\n","\t","button_text: ",this.settings.button_text.toString(),"\n","\t","button_text_style: ",this.settings.button_text_style.toString(),"\n","\t","button_text_top_padding: ",this.settings.button_text_top_padding.toString(),"\n","\t","button_text_left_padding: ",this.settings.button_text_left_padding.toString(),"\n","\t","button_action: ",this.settings.button_action.toString(),"\n","\t","button_disabled: ",this.settings.button_disabled.toString(),"\n","\t","custom_settings: ",this.settings.custom_settings.toString(),"\n","Event Handlers:\n","\t","swfupload_loaded_handler assigned: ",(typeof this.settings.swfupload_loaded_handler==="function").toString(),"\n","\t","file_dialog_start_handler assigned: ",(typeof this.settings.file_dialog_start_handler==="function").toString(),"\n","\t","file_queued_handler assigned: ",(typeof this.settings.file_queued_handler==="function").toString(),"\n","\t","file_queue_error_handler assigned: ",(typeof this.settings.file_queue_error_handler==="function").toString(),"\n","\t","upload_start_handler assigned: ",(typeof this.settings.upload_start_handler==="function").toString(),"\n","\t","upload_progress_handler assigned: ",(typeof this.settings.upload_progress_handler==="function").toString(),"\n","\t","upload_error_handler assigned: ",(typeof this.settings.upload_error_handler==="function").toString(),"\n","\t","upload_success_handler assigned: ",(typeof this.settings.upload_success_handler==="function").toString(),"\n","\t","upload_complete_handler assigned: ",(typeof this.settings.upload_complete_handler==="function").toString(),"\n","\t","debug_handler assigned: ",(typeof this.settings.debug_handler==="function").toString(),"\n"].join(""));};SWFUpload.prototype.addSetting=function(d,f,e){if(f==undefined){return(this.settings[d]=e);}else{return(this.settings[d]=f);}};SWFUpload.prototype.getSetting=function(b){if(this.settings[b]!=undefined){return this.settings[b];}return"";};SWFUpload.prototype.callFlash=function(functionName,argumentArray){argumentArray=argumentArray||[];var movieElement=this.getMovieElement();var returnValue,returnString;try{returnString=movieElement.CallFunction(''+__flash__argumentsToXML(argumentArray,0)+"");returnValue=eval(returnString);}catch(ex){throw"Call to "+functionName+" failed";}if(returnValue!=undefined&&typeof returnValue.post==="object"){returnValue=this.unescapeFilePostParams(returnValue);}return returnValue;};SWFUpload.prototype.selectFile=function(){this.callFlash("SelectFile");};SWFUpload.prototype.selectFiles=function(){this.callFlash("SelectFiles");};SWFUpload.prototype.startUpload=function(b){this.callFlash("StartUpload",[b]);};SWFUpload.prototype.cancelUpload=function(d,c){if(c!==false){c=true;}this.callFlash("CancelUpload",[d,c]);};SWFUpload.prototype.stopUpload=function(){this.callFlash("StopUpload");};SWFUpload.prototype.getStats=function(){return this.callFlash("GetStats");};SWFUpload.prototype.setStats=function(b){this.callFlash("SetStats",[b]);};SWFUpload.prototype.getFile=function(b){if(typeof(b)==="number"){return this.callFlash("GetFileByIndex",[b]);}else{return this.callFlash("GetFile",[b]);}};SWFUpload.prototype.addFileParam=function(e,d,f){return this.callFlash("AddFileParam",[e,d,f]);};SWFUpload.prototype.removeFileParam=function(d,c){this.callFlash("RemoveFileParam",[d,c]);};SWFUpload.prototype.setUploadURL=function(b){this.settings.upload_url=b.toString();this.callFlash("SetUploadURL",[b]);};SWFUpload.prototype.setPostParams=function(b){this.settings.post_params=b;this.callFlash("SetPostParams",[b]);};SWFUpload.prototype.addPostParam=function(d,c){this.settings.post_params[d]=c;this.callFlash("SetPostParams",[this.settings.post_params]);};SWFUpload.prototype.removePostParam=function(b){delete this.settings.post_params[b];this.callFlash("SetPostParams",[this.settings.post_params]);};SWFUpload.prototype.setFileTypes=function(d,c){this.settings.file_types=d;this.settings.file_types_description=c;this.callFlash("SetFileTypes",[d,c]);};SWFUpload.prototype.setFileSizeLimit=function(b){this.settings.file_size_limit=b;this.callFlash("SetFileSizeLimit",[b]);};SWFUpload.prototype.setFileUploadLimit=function(b){this.settings.file_upload_limit=b;this.callFlash("SetFileUploadLimit",[b]);};SWFUpload.prototype.setFileQueueLimit=function(b){this.settings.file_queue_limit=b;this.callFlash("SetFileQueueLimit",[b]);};SWFUpload.prototype.setFilePostName=function(b){this.settings.file_post_name=b;this.callFlash("SetFilePostName",[b]);};SWFUpload.prototype.setUseQueryString=function(b){this.settings.use_query_string=b;this.callFlash("SetUseQueryString",[b]);};SWFUpload.prototype.setRequeueOnError=function(b){this.settings.requeue_on_error=b;this.callFlash("SetRequeueOnError",[b]);};SWFUpload.prototype.setHTTPSuccess=function(b){if(typeof b==="string"){b=b.replace(" ","").split(",");}this.settings.http_success=b;this.callFlash("SetHTTPSuccess",[b]);};SWFUpload.prototype.setAssumeSuccessTimeout=function(b){this.settings.assume_success_timeout=b;this.callFlash("SetAssumeSuccessTimeout",[b]);};SWFUpload.prototype.setDebugEnabled=function(b){this.settings.debug_enabled=b;this.callFlash("SetDebugEnabled",[b]);};SWFUpload.prototype.setButtonImageURL=function(b){if(b==undefined){b="";}this.settings.button_image_url=b;this.callFlash("SetButtonImageURL",[b]);};SWFUpload.prototype.setButtonDimensions=function(f,e){this.settings.button_width=f;this.settings.button_height=e;var d=this.getMovieElement();if(d!=undefined){d.style.width=f+"px";d.style.height=e+"px";}this.callFlash("SetButtonDimensions",[f,e]);};SWFUpload.prototype.setButtonText=function(b){this.settings.button_text=b;this.callFlash("SetButtonText",[b]);};SWFUpload.prototype.setButtonTextPadding=function(c,d){this.settings.button_text_top_padding=d;this.settings.button_text_left_padding=c;this.callFlash("SetButtonTextPadding",[c,d]);};SWFUpload.prototype.setButtonTextStyle=function(b){this.settings.button_text_style=b;this.callFlash("SetButtonTextStyle",[b]);};SWFUpload.prototype.setButtonDisabled=function(b){this.settings.button_disabled=b;this.callFlash("SetButtonDisabled",[b]);};SWFUpload.prototype.setButtonAction=function(b){this.settings.button_action=b;this.callFlash("SetButtonAction",[b]);};SWFUpload.prototype.setButtonCursor=function(b){this.settings.button_cursor=b;this.callFlash("SetButtonCursor",[b]);};SWFUpload.prototype.queueEvent=function(d,f){if(f==undefined){f=[];}else{if(!(f instanceof Array)){f=[f];}}var e=this;if(typeof this.settings[d]==="function"){this.eventQueue.push(function(){this.settings[d].apply(this,f);});setTimeout(function(){e.executeNextEvent();},0);}else{if(this.settings[d]!==null){throw"Event handler "+d+" is unknown or is not a function";}}};SWFUpload.prototype.executeNextEvent=function(){var b=this.eventQueue?this.eventQueue.shift():null;if(typeof(b)==="function"){b.apply(this);}};SWFUpload.prototype.unescapeFilePostParams=function(l){var j=/[$]([0-9a-f]{4})/i;var i={};var k;if(l!=undefined){for(var h in l.post){if(l.post.hasOwnProperty(h)){k=h;var g;while((g=j.exec(k))!==null){k=k.replace(g[0],String.fromCharCode(parseInt("0x"+g[1],16)));}i[k]=l.post[h];}}l.post=i;}return l;};SWFUpload.prototype.testExternalInterface=function(){try{return this.callFlash("TestExternalInterface");}catch(b){return false;}};SWFUpload.prototype.flashReady=function(){var b=this.getMovieElement();if(!b){this.debug("Flash called back ready but the flash movie can't be found.");return;}this.cleanUp(b);this.queueEvent("swfupload_loaded_handler");};SWFUpload.prototype.cleanUp=function(f){try{if(this.movieElement&&typeof(f.CallFunction)==="unknown"){this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");for(var h in f){try{if(typeof(f[h])==="function"){f[h]=null;}}catch(e){}}}}catch(g){}window.__flash__removeCallback=function(c,b){try{if(c){c[b]=null;}}catch(a){}};};SWFUpload.prototype.fileDialogStart=function(){this.queueEvent("file_dialog_start_handler");};SWFUpload.prototype.fileQueued=function(b){b=this.unescapeFilePostParams(b);this.queueEvent("file_queued_handler",b);};SWFUpload.prototype.fileQueueError=function(e,f,d){e=this.unescapeFilePostParams(e);this.queueEvent("file_queue_error_handler",[e,f,d]);};SWFUpload.prototype.fileDialogComplete=function(d,f,e){this.queueEvent("file_dialog_complete_handler",[d,f,e]);};SWFUpload.prototype.uploadStart=function(b){b=this.unescapeFilePostParams(b);this.queueEvent("return_upload_start_handler",b);};SWFUpload.prototype.returnUploadStart=function(d){var c;if(typeof this.settings.upload_start_handler==="function"){d=this.unescapeFilePostParams(d);c=this.settings.upload_start_handler.call(this,d);}else{if(this.settings.upload_start_handler!=undefined){throw"upload_start_handler must be a function";}}if(c===undefined){c=true;}c=!!c;this.callFlash("ReturnUploadStart",[c]);};SWFUpload.prototype.uploadProgress=function(e,f,d){e=this.unescapeFilePostParams(e);this.queueEvent("upload_progress_handler",[e,f,d]);};SWFUpload.prototype.uploadError=function(e,f,d){e=this.unescapeFilePostParams(e);this.queueEvent("upload_error_handler",[e,f,d]);};SWFUpload.prototype.uploadSuccess=function(d,e,f){d=this.unescapeFilePostParams(d);this.queueEvent("upload_success_handler",[d,e,f]);};SWFUpload.prototype.uploadComplete=function(b){b=this.unescapeFilePostParams(b);this.queueEvent("upload_complete_handler",b);};SWFUpload.prototype.debug=function(b){this.queueEvent("debug_handler",b);};SWFUpload.prototype.debugMessage=function(h){if(this.settings.debug){var f,g=[];if(typeof h==="object"&&typeof h.name==="string"&&typeof h.message==="string"){for(var e in h){if(h.hasOwnProperty(e)){g.push(e+": "+h[e]);}}f=g.join("\n")||"";g=f.split("\n");f="EXCEPTION: "+g.join("\nEXCEPTION: ");SWFUpload.Console.writeLine(f);}else{SWFUpload.Console.writeLine(h);}}};SWFUpload.Console={};SWFUpload.Console.writeLine=function(g){var e,f;try{e=document.getElementById("SWFUpload_Console");if(!e){f=document.createElement("form");document.getElementsByTagName("body")[0].appendChild(f);e=document.createElement("textarea");e.id="SWFUpload_Console";e.style.fontFamily="monospace";e.setAttribute("wrap","off");e.wrap="off";e.style.overflow="auto";e.style.width="700px";e.style.height="350px";e.style.margin="5px";f.appendChild(e);}e.value+=g+"\n";e.scrollTop=e.scrollHeight-e.clientHeight;}catch(h){alert("Exception: "+h.name+" Message: "+h.message);}};(function(c){var b={init:function(d,e){return this.each(function(){var n=c(this);var m=n.clone();var j=c.extend({id:n.attr("id"),swf:"uploadify.swf",uploader:"uploadify.php",auto:true,buttonClass:"",buttonCursor:"hand",buttonImage:null,buttonText:"SELECT FILES",checkExisting:false,debug:false,fileObjName:"Filedata",fileSizeLimit:0,fileTypeDesc:"All Files",fileTypeExts:"*.*",height:30,itemTemplate:false,method:"post",multi:true,formData:{},preventCaching:true,progressData:"percentage",queueID:false,queueSizeLimit:999,removeCompleted:true,removeTimeout:3,requeueErrors:false,successTimeout:30,uploadLimit:0,width:120,overrideEvents:[]},d);var g={assume_success_timeout:j.successTimeout,button_placeholder_id:j.id,button_width:j.width,button_height:j.height,button_text:null,button_text_style:null,button_text_top_padding:0,button_text_left_padding:0,button_action:(j.multi?SWFUpload.BUTTON_ACTION.SELECT_FILES:SWFUpload.BUTTON_ACTION.SELECT_FILE),button_disabled:false,button_cursor:(j.buttonCursor=="arrow"?SWFUpload.CURSOR.ARROW:SWFUpload.CURSOR.HAND),button_window_mode:SWFUpload.WINDOW_MODE.TRANSPARENT,debug:j.debug,requeue_on_error:j.requeueErrors,file_post_name:j.fileObjName,file_size_limit:j.fileSizeLimit,file_types:j.fileTypeExts,file_types_description:j.fileTypeDesc,file_queue_limit:j.queueSizeLimit,file_upload_limit:j.uploadLimit,flash_url:j.swf,prevent_swf_caching:j.preventCaching,post_params:j.formData,upload_url:j.uploader,use_query_string:(j.method=="get"),file_dialog_complete_handler:a.onDialogClose,file_dialog_start_handler:a.onDialogOpen,file_queued_handler:a.onSelect,file_queue_error_handler:a.onSelectError,swfupload_loaded_handler:j.onSWFReady,upload_complete_handler:a.onUploadComplete,upload_error_handler:a.onUploadError,upload_progress_handler:a.onUploadProgress,upload_start_handler:a.onUploadStart,upload_success_handler:a.onUploadSuccess};if(e){g=c.extend(g,e);}g=c.extend(g,j);var o=swfobject.getFlashPlayerVersion();var h=(o.major>=9);if(h){window["uploadify_"+j.id]=new SWFUpload(g);var i=window["uploadify_"+j.id];n.data("uploadify",i);var l=c("
",{id:j.id,"class":"uploadify",css:{height:j.height+"px",width:j.width+"px"}});c("#"+i.movieName).wrap(l);l=c("#"+j.id);l.data("uploadify",i);var f=c("
",{id:j.id+"-button","class":"uploadify-button "+j.buttonClass});if(j.buttonImage){f.css({"background-image":"url('"+j.buttonImage+"')","text-indent":"-9999px"});}f.html(''+j.buttonText+"").css({height:j.height+"px","line-height":j.height+"px",width:j.width+"px"});l.append(f);c("#"+i.movieName).css({position:"absolute","z-index":1});if(!j.queueID){var k=c("
",{id:j.id+"-queue","class":"uploadify-queue"});l.after(k);i.settings.queueID=j.id+"-queue";i.settings.defaultQueue=true;}i.queueData={files:{},filesSelected:0,filesQueued:0,filesReplaced:0,filesCancelled:0,filesErrored:0,uploadsSuccessful:0,uploadsErrored:0,averageSpeed:0,queueLength:0,queueSize:0,uploadSize:0,queueBytesUploaded:0,uploadQueue:[],errorMsg:"Some files were not added to the queue:"};i.original=m;i.wrapper=l;i.button=f;i.queue=k;if(j.onInit){j.onInit.call(n,i);}}else{if(j.onFallback){j.onFallback.call(n);}}});},cancel:function(d,f){var e=arguments;this.each(function(){var l=c(this),i=l.data("uploadify"),j=i.settings,h=-1;if(e[0]){if(e[0]=="*"){var g=i.queueData.queueLength;c("#"+j.queueID).find(".uploadify-queue-item").each(function(){h++;if(e[1]===true){i.cancelUpload(c(this).attr("id"),false);}else{i.cancelUpload(c(this).attr("id"));}c(this).find(".data").removeClass("data").html(" - Cancelled");c(this).find(".uploadify-progress-bar").remove();c(this).delay(1000+100*h).fadeOut(500,function(){c(this).remove();});});i.queueData.queueSize=0;i.queueData.queueLength=0;if(j.onClearQueue){j.onClearQueue.call(l,g);}}else{for(var m=0;m0){alert(this.queueData.errorMsg);}}if(e.onDialogClose){e.onDialogClose.call(this,this.queueData);}if(e.auto){c("#"+e.id).uploadify("upload","*");}},onSelect:function(h){var i=this.settings;var f={};for(var g in this.queueData.files){f=this.queueData.files[g];if(f.uploaded!=true&&f.name==h.name){var e=confirm('The file named "'+h.name+'" is already in the queue.\nDo you want to replace the existing item in the queue?');if(!e){this.cancelUpload(h.id);this.queueData.filesCancelled++;return false;}else{c("#"+f.id).remove();this.cancelUpload(f.id);this.queueData.filesReplaced++;}}}var j=Math.round(h.size/1024);var o="KB";if(j>1000){j=Math.round(j/1000);o="MB";}var l=j.toString().split(".");j=l[0];if(l.length>1){j+="."+l[1].substr(0,2);}j+=o;var k=h.name;if(k.length>25){k=k.substr(0,25)+"...";}itemData={fileID:h.id,instanceID:i.id,fileName:k,fileSize:j};if(i.itemTemplate==false){i.itemTemplate='
X
${fileName} (${fileSize})
';}if(c.inArray("onSelect",i.overrideEvents)<0){itemHTML=i.itemTemplate;for(var m in itemData){itemHTML=itemHTML.replace(new RegExp("\\$\\{"+m+"\\}","g"),itemData[m]);}c("#"+i.queueID).append(itemHTML);}this.queueData.queueSize+=h.size;this.queueData.files[h.id]=h;if(i.onSelect){i.onSelect.apply(this,arguments);}},onSelectError:function(d,g,f){var e=this.settings;if(c.inArray("onSelectError",e.overrideEvents)<0){switch(g){case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:if(e.queueSizeLimit>f){this.queueData.errorMsg+="\nThe number of files selected exceeds the remaining upload limit ("+f+").";}else{this.queueData.errorMsg+="\nThe number of files selected exceeds the queue size limit ("+e.queueSizeLimit+").";}break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:this.queueData.errorMsg+='\nThe file "'+d.name+'" exceeds the size limit ('+e.fileSizeLimit+").";break;case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:this.queueData.errorMsg+='\nThe file "'+d.name+'" is empty.';break;case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:this.queueData.errorMsg+='\nThe file "'+d.name+'" is not an accepted file type ('+e.fileTypeDesc+").";break;}}if(g!=SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED){delete this.queueData.files[d.id];}if(e.onSelectError){e.onSelectError.apply(this,arguments);}},onQueueComplete:function(){if(this.settings.onQueueComplete){this.settings.onQueueComplete.call(this,this.settings.queueData);}},onUploadComplete:function(f){var g=this.settings,d=this;var e=this.getStats();this.queueData.queueLength=e.files_queued;if(this.queueData.uploadQueue[0]=="*"){if(this.queueData.queueLength>0){this.startUpload();}else{this.queueData.uploadQueue=[];if(g.onQueueComplete){g.onQueueComplete.call(this,this.queueData);}}}else{if(this.queueData.uploadQueue.length>0){this.startUpload(this.queueData.uploadQueue.shift());}else{this.queueData.uploadQueue=[];if(g.onQueueComplete){g.onQueueComplete.call(this,this.queueData);}}}if(c.inArray("onUploadComplete",g.overrideEvents)<0){if(g.removeCompleted){switch(f.filestatus){case SWFUpload.FILE_STATUS.COMPLETE:setTimeout(function(){if(c("#"+f.id)){d.queueData.queueSize-=f.size;d.queueData.queueLength-=1;delete d.queueData.files[f.id];c("#"+f.id).fadeOut(500,function(){c(this).remove();});}},g.removeTimeout*1000);break;case SWFUpload.FILE_STATUS.ERROR:if(!g.requeueErrors){setTimeout(function(){if(c("#"+f.id)){d.queueData.queueSize-=f.size;d.queueData.queueLength-=1;delete d.queueData.files[f.id];c("#"+f.id).fadeOut(500,function(){c(this).remove();});}},g.removeTimeout*1000);}break;}}else{f.uploaded=true;}}if(g.onUploadComplete){g.onUploadComplete.call(this,f);}},onUploadError:function(e,i,h){var f=this.settings;var g="Error";switch(i){case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:g="HTTP Error ("+h+")";break;case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:g="Missing Upload URL";break;case SWFUpload.UPLOAD_ERROR.IO_ERROR:g="IO Error";break;case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:g="Security Error";break;case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:alert("The upload limit has been reached ("+h+").");g="Exceeds Upload Limit";break;case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:g="Failed";break;case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:break;case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:g="Validation Error";break;case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:g="Cancelled";this.queueData.queueSize-=e.size;this.queueData.queueLength-=1;if(e.status==SWFUpload.FILE_STATUS.IN_PROGRESS||c.inArray(e.id,this.queueData.uploadQueue)>=0){this.queueData.uploadSize-=e.size;}if(f.onCancel){f.onCancel.call(this,e);}delete this.queueData.files[e.id];break;case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:g="Stopped";break;}if(c.inArray("onUploadError",f.overrideEvents)<0){if(i!=SWFUpload.UPLOAD_ERROR.FILE_CANCELLED&&i!=SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED){c("#"+e.id).addClass("uploadify-error");}c("#"+e.id).find(".uploadify-progress-bar").css("width","1px");if(i!=SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND&&e.status!=SWFUpload.FILE_STATUS.COMPLETE){c("#"+e.id).find(".data").html(" - "+g);}}var d=this.getStats();this.queueData.uploadsErrored=d.upload_errors;if(f.onUploadError){f.onUploadError.call(this,e,i,h,g);}},onUploadProgress:function(g,m,j){var h=this.settings;var e=new Date();var n=e.getTime();var k=n-this.timer;if(k>500){this.timer=n;}var i=m-this.bytesLoaded;this.bytesLoaded=m;var d=this.queueData.queueBytesUploaded+m;var p=Math.round(m/j*100);var o="KB/s";var l=0;var f=(i/1024)/(k/1000);f=Math.floor(f*10)/10;if(this.queueData.averageSpeed>0){this.queueData.averageSpeed=Math.floor((this.queueData.averageSpeed+f)/2);}else{this.queueData.averageSpeed=Math.floor(f);}if(f>1000){l=(f*0.001);this.queueData.averageSpeed=Math.floor(l);o="MB/s";}if(c.inArray("onUploadProgress",h.overrideEvents)<0){if(h.progressData=="percentage"){c("#"+g.id).find(".data").html(" - "+p+"%");}else{if(h.progressData=="speed"&&k>500){c("#"+g.id).find(".data").html(" - "+this.queueData.averageSpeed+o);}}c("#"+g.id).find(".uploadify-progress-bar").css("width",p+"%");}if(h.onUploadProgress){h.onUploadProgress.call(this,g,m,j,d,this.queueData.uploadSize);}},onUploadStart:function(d){var e=this.settings;var f=new Date();this.timer=f.getTime();this.bytesLoaded=0;if(this.queueData.uploadQueue.length==0){this.queueData.uploadSize=d.size;}if(e.checkExisting){c.ajax({type:"POST",async:false,url:e.checkExisting,data:{filename:d.name},success:function(h){if(h==1){var g=confirm('A file with the name "'+d.name+'" already exists on the server.\nWould you like to replace the existing file?');if(!g){this.cancelUpload(d.id);c("#"+d.id).remove();if(this.queueData.uploadQueue.length>0&&this.queueData.queueLength>0){if(this.queueData.uploadQueue[0]=="*"){this.startUpload();}else{this.startUpload(this.queueData.uploadQueue.shift());}}}}}});}if(e.onUploadStart){e.onUploadStart.call(this,d);}},onUploadSuccess:function(f,h,d){var g=this.settings;var e=this.getStats();this.queueData.uploadsSuccessful=e.successful_uploads;this.queueData.queueBytesUploaded+=f.size;if(c.inArray("onUploadSuccess",g.overrideEvents)<0){c("#"+f.id).find(".data").html(" - Complete");}if(g.onUploadSuccess){g.onUploadSuccess.call(this,f,h,d);}}};c.fn.uploadify=function(d){if(b[d]){return b[d].apply(this,Array.prototype.slice.call(arguments,1));}else{if(typeof d==="object"||!d){return b.init.apply(this,arguments);}else{c.error("The method "+d+" does not exist in $.uploadify");}}};})($); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/uploadify/license.txt b/src/main/webapp/WEB-INF/views/src/js/uploadify/license.txt new file mode 100644 index 0000000..f25c175 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/uploadify/license.txt @@ -0,0 +1,20 @@ +Uploadify +Copyright (c) 2012 Reactive Apps, Ronnie Garcia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/uploadify/uploadify.css b/src/main/webapp/WEB-INF/views/src/js/uploadify/uploadify.css new file mode 100644 index 0000000..89e1932 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/uploadify/uploadify.css @@ -0,0 +1,92 @@ +/* +Uploadify +Copyright (c) 2012 Reactive Apps, Ronnie Garcia +Released under the MIT License +*/ + +.uploadify { + position: relative; + margin-bottom: 1em; +} +.uploadify-button { + background-color: #505050; + background-image: linear-gradient(bottom, #505050 0%, #707070 100%); + background-image: -o-linear-gradient(bottom, #505050 0%, #707070 100%); + background-image: -moz-linear-gradient(bottom, #505050 0%, #707070 100%); + background-image: -webkit-linear-gradient(bottom, #505050 0%, #707070 100%); + background-image: -ms-linear-gradient(bottom, #505050 0%, #707070 100%); + background-image: -webkit-gradient( + linear, + left bottom, + left top, + color-stop(0, #505050), + color-stop(1, #707070) + ); + background-position: center top; + background-repeat: no-repeat; + -webkit-border-radius: 30px; + -moz-border-radius: 30px; + border-radius: 30px; + border: 2px solid #808080; + color: #FFF; + font: bold 12px Arial, Helvetica, sans-serif; + text-align: center; + text-shadow: 0 -1px 0 rgba(0,0,0,0.25); + width: 100%; +} +.uploadify:hover .uploadify-button { + background-color: #606060; + background-image: linear-gradient(top, #606060 0%, #808080 100%); + background-image: -o-linear-gradient(top, #606060 0%, #808080 100%); + background-image: -moz-linear-gradient(top, #606060 0%, #808080 100%); + background-image: -webkit-linear-gradient(top, #606060 0%, #808080 100%); + background-image: -ms-linear-gradient(top, #606060 0%, #808080 100%); + background-image: -webkit-gradient( + linear, + left bottom, + left top, + color-stop(0, #606060), + color-stop(1, #808080) + ); + background-position: center bottom; +} +.uploadify-button.disabled { + background-color: #D0D0D0; + color: #808080; +} +.uploadify-queue { + margin-bottom: 1em; +} +.uploadify-queue-item { + background-color: #F5F5F5; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + font: 11px Verdana, Geneva, sans-serif; + margin-top: 5px; + max-width: 350px; + padding: 10px; +} +.uploadify-error { + background-color: #FDE5DD !important; +} +.uploadify-queue-item .cancel a { + background: url('../img/uploadify-cancel.png') 0 0 no-repeat; + float: right; + height: 16px; + text-indent: -9999px; + width: 16px; +} +.uploadify-queue-item.completed { + background-color: #E5E5E5; +} +.uploadify-progress { + background-color: #E5E5E5; + margin-top: 10px; + width: 100%; +} +.uploadify-progress-bar { + background-color: #0099FF; + height: 3px; + width: 1px; +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/js/uploadify/uploadify.php b/src/main/webapp/WEB-INF/views/src/js/uploadify/uploadify.php new file mode 100644 index 0000000..ba4095b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/js/uploadify/uploadify.php @@ -0,0 +1,29 @@ + +*/ + +// Define a destination +$targetFolder = '/uploads'; // Relative to the root + +$verifyToken = md5('unique_salt' . $_POST['timestamp']); + +if (!empty($_FILES) && $_POST['token'] == $verifyToken) { + $tempFile = $_FILES['Filedata']['tmp_name']; + $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; + $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name']; + + // Validate the file type + $fileTypes = array('jpg','jpeg','gif','png'); // File extensions + $fileParts = pathinfo($_FILES['Filedata']['name']); + + if (in_array($fileParts['extension'],$fileTypes)) { + move_uploaded_file($tempFile,$targetFile); + echo '1'; + } else { + echo 'Invalid file type.'; + } +} +?> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/main.js b/src/main/webapp/WEB-INF/views/src/main.js new file mode 100644 index 0000000..eaa208f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/main.js @@ -0,0 +1,8 @@ +/** + * Created by M on 2014/10/29. + */ +require([ + "ngApp" +],function(ngApp) { + +}); diff --git a/src/main/webapp/WEB-INF/views/src/package.json b/src/main/webapp/WEB-INF/views/src/package.json new file mode 100644 index 0000000..a337232 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/package.json @@ -0,0 +1,20 @@ +{ + "name": "sps-website", + "version": "1.0.0", + "description": "Shipping Point System", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "bower": "^1.7.2", + "require-css": "^0.1.8" + }, + "dependencies": { + "angular": "^1.5.1", + "angular-permission": "^2.1.2", + "angular-ui-router": "^0.2.18" + } +} diff --git a/src/main/webapp/WEB-INF/views/src/sound/item.wav b/src/main/webapp/WEB-INF/views/src/sound/item.wav new file mode 100644 index 0000000..cffb64f Binary files /dev/null and b/src/main/webapp/WEB-INF/views/src/sound/item.wav differ diff --git a/src/main/webapp/WEB-INF/views/src/views/app.js b/src/main/webapp/WEB-INF/views/src/views/app.js new file mode 100644 index 0000000..0b4b4a7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/app.js @@ -0,0 +1,305 @@ +define([ + "views/user/user_module", + "views/order/order_module", + "views/schedule/schedule_module", + "views/dashboard", + "views/base/base_module", + "views/templates/template_module", + "views/checklist-model/checklist-model", + "views/plan/plan_module", + "views/package/package_module", + "views/pick/pick_module", + "views/despatch/despatch_module", + "views/receipt/receipt_module", + "views/report/report_module", + "views/stock/stock_module", + "views/wx/wx_module" +], function (user_module, order_module, schedule_module, dashboard, base_module, template_module, checklist_model, plan_module, package_module, despatch_module, report_module, stock, wx_module) { + angular.module('DMS', [ + "smartApp", "ui.router", + "ug.editor", + "DMS.stock", + "DMS.wx", + "DMS.schedule", "DMS.order", "DMS.tpls", "DMS.user", "DMS.base", "ug.pagination", "EnvModule", "permission", "ug.validate", "ug.dialog", + "DMS.REST", "checklist-model", "DMS.plan", "DMS.package", "DMS.pick", "DMS.despatch", "DMS.receipt", "DMS.report" + ]).filter( + 'to_trusted', ['$sce', function ($sce) { + return function (text) { + return $sce.trustAsHtml(text); + } + }] + ).factory({ + HttpInterceptor: ["$q", '$ugDialog', function ($q, $ugDialog) { + return { + request: function (config) { + if (config.method == 'GET') { + if (config.params) { + config.params._noCache = new Date().getTime(); + } + } + return config; + }, + responseError: function (response) { + if (response.status == 400) { + $ugDialog.alert(response.data.message); + return $q.reject(response); + } + if (response.status == 401) { + //未找到用户 + window.location.reload(); + } + return $q.reject(response); + } + } + }], + User: ["UserAPI", "PermissionStore", "$q", function (UserAPI, PermissionStore, $q) { + return { + fetchPermission: function () { + var defered = $q.defer(); + UserAPI.getPermissions(function (data) { + PermissionStore.clearStore(); + for (var i = 0; i < data.permissions.length; i++) { + var obj = data.permissions[i]; + PermissionStore + .definePermission(obj, function (stateParams) { + return true; + }); + } + defered.resolve(); + }, function () { + defered.reject(); + }); + return defered.promise; + }, + resetPermission: function (data) { + PermissionStore.clearStore(); + for (var i = 0; i < data.permissions.length; i++) { + var obj = data.permissions[i]; + PermissionStore + .definePermission(obj, function (stateParams) { + return true; + }); + } + } + } + }], + $baseHttp: ["$http", "$q", "ApiEndpoint", function ($http, $q, ApiEndpoint) { + var urlEndpoint = ""; + if (ApiEndpoint && ApiEndpoint.url) { + urlEndpoint = ApiEndpoint.url; + } + var httpGet = function (url, options) { + var defer = $q.defer(); + $http.get(urlEndpoint + url, options).then(function (response) { + return defer.resolve(response.data, response); + }, function (response) { + return defer.reject(response.data, response); + }); + return defer.promise; + }; + + var httpPost = function (url, data, options) { + var defer = $q.defer(); + $http.post(urlEndpoint + url, data, options).then(function (response) { + return defer.resolve(response.data, response); + }, function (response) { + return defer.reject(response.data, response); + }); + return defer.promise; + }; + return { + get: httpGet, + post: httpPost + }; + }] + }).directive('datepickerLocaldate', ['$filter', function ($filter) { + /** + * change model to iso format (yyyy-MM-dd) + */ + return { + require: 'ngModel', + link: function link(scope, element, attr, ngModel) { + + ngModel.$parsers.push(function toModel(date) { + if (!date) { + return undefined; + } + return $filter('date')(date, 'yyyy-MM-dd'); + }); + + var converted = false; + scope.$watch(function () { + return ngModel.$modelValue; + }, + function (modelValue) { + + // convert to localDate (remove timezone if necessary), this is for datepicker to synchronize with the good date for negative timezone (https://github.com/angular-ui/bootstrap/issues/2072) + if (!converted && modelValue) { + + var dt = new Date(modelValue); + if (dt.getTimezoneOffset() > 0) + dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset()); + + ngModel.$modelValue = dt; + + ngModel.$render(); + + converted = true; + + } + }); + } + }; + }]).directive("ugSelect2", ["CompanyAPI", "$rootScope", function (CompanyAPI, $rootScope) { + return { + restrict: "A", + require: "select", + scope: {ugSelect2Config: '='}, + link: function (scope, element, attr, crtl) { + var config = scope.ugSelect2Config || {}; + config = angular.extend(config, { + initSelectData: function (data) { + setTimeout(function () { + $select2.val(data).trigger("change"); + }, 100); + } + }); + var $select2 = $(element).select2(config); + } + } + }]).directive({ + /** + * 文件上传 + */ + uxUpload: ["$timeout", "$ugDialog", function ($timeout, Dialog) { + var fileType = "*.xlsx;*.xls;*.pdf;*.doc;*.docx;*.*"; + return { + scope: { + uxUploadConfig: '=' + }, + link: function (scope, elem, attr, ctrl) { + var config = scope.uxUploadConfig; + var defaultConfig = { + buttonClass: "btn btn-outline btn-primary", + buttonText: '上传身份证图片', + swf: '/js/uploadify/uploadify.swf', + uploader: '/wms-webapp/', + fileSizeLimit: "10MB", + fileObjName: "files",//对应后台参数名,请勿修改 + fileTypeDesc: "请选择 " + fileType + " 类型的文件", + fileTypeExts: fileType, + overrideEvents: ['onDialogClose', 'onSelectError'], + onFallback: function () { + //Dialog.alert('Flash was not detected or flash version is not supported.'); + Dialog.alert('未发现Flash插件或Flash版本不支持(请确保已下载Flash插件且已启用Flash插件)。'); + }, + onSelectError: function (file, errorCode, errorMsg) { + switch (errorCode) { + case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED: + if (this.settings.queueSizeLimit > errorMsg) { + this.queueData.errorMsg = '选择文件的数量超过了剩余的上传限制 (' + errorMsg + ').'; + } else { + this.queueData.errorMsg = '选择文件的数量超过了队列大小限制 (' + this.settings.queueSizeLimit + ').'; + } + break; + case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT: + this.queueData.errorMsg = "文件大小超出限制( " + this.settings.fileSizeLimit + " 以内)"; + break; + case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE: + this.queueData.errorMsg = "文件大小为0,请检查文件是否正确"; + break; + case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE: + this.queueData.errorMsg = "无效的文件类型,上传文件类型限制为:" + this.settings.fileTypeExts; + break; + default: + this.queueData.errorMsg = "文件上传失败," + errorMsg; + } + }, + onDialogClose: function (queueData) { + if (queueData.filesErrored > 0) { + Dialog.alert(this.queueData.errorMsg); + } + } + }; + angular.extend(defaultConfig, config); + $(elem).uploadify(defaultConfig); + } + }; +// 使用DEMO +// +// $scope.fileUploadConfig = { +// 'buttonText' : '上传身份证图片', +// 'onUploadSuccess':function(file,data,response){ +// var result = $scope.$eval(data); +// if(result.status == "1"){ +// Dialog.alert(result.msg); +// }else if(result.status == "0"){ +// if(result.result[0]){ +// //xxxxxxxxxxx +// } +// } +// } +// }; + }] + }).controller("LeftPanelController", ["$scope", "$rootScope", "$http", function ($scope, $rootScope, $http) { + $http.get("/account/setting").then(function (data) { + if (data.data) { + $rootScope.account = data.data; + } + }) + }]).run(["$rootScope", "User", function ($rootScope, User) { + User.resetPermission(permissionList); + + $rootScope.$on('loadingTree', function () { + setTimeout(function () { + $(".tree").find("li:has(ul)").addClass("parent_li").attr("role", "treeitem").find(" > span").attr("title", "收缩").on("click", function (a) { + var b = $(this).parent("li.parent_li").find(" > ul"); + if (b.is(":visible")) { + b.hide("fast"); + $(this).attr("title", "展开").find(" > i").addClass("fa-plus-circle").removeClass("fa-minus-circle"); + } else { + b.show("fast"); + $(this).attr("title", "收缩").find(" > i").addClass("fa-minus-circle").removeClass("fa-plus-circle"); + } + a.stopPropagation(); + }); + }, 1500); + }); + + $rootScope.$on('$viewContentLoaded', function (event, next, nextParams, fromState) { + // 初始化全局控件 +// pageSetUp(); + }); + }]).config(["$stateProvider", "$urlRouterProvider", "$httpProvider", function ($stateProvider, $urlRouterProvider, $httpProvider) { + $httpProvider.interceptors.push('HttpInterceptor'); + $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + + $urlRouterProvider.otherwise('/dashboard'); + + $stateProvider + .state('dashboard', { + url: '/dashboard', + templateUrl: 'views/dashboard.html', + controller: dashboard + }) + + .state('unauthorized', { + url: '/unauthorized', + templateUrl: 'views/error/error403.html' + }) + + .state('blank', { + url: '/blank', + templateUrl: 'views/blank.html', + controller: ["$scope", function ($scope) { + }] + }) + + }]); + angular.element(document).ready(function () { + $.get('/user/permissions', function (data) { + permissionList = data; + angular.bootstrap(document, ['DMS']); + }); + }); +}); diff --git a/src/main/webapp/WEB-INF/views/src/views/base/activity.html b/src/main/webapp/WEB-INF/views/src/views/base/activity.html new file mode 100644 index 0000000..df6665a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/activity.html @@ -0,0 +1,390 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

活动列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 活动名称有效时间活动描述类型最低赠送金额操作
+ + {{activity.activityBeginTime | date: 'yyyy-MM-dd'}} 至 {{activity.activityEndTime | date: 'yyyy-MM-dd'}}按卡类型按消费金额 +
+ + + + | + + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/activity.js b/src/main/webapp/WEB-INF/views/src/views/base/activity.js new file mode 100644 index 0000000..3e1e76c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/activity.js @@ -0,0 +1,215 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "ActivityAPI", "$modal", "$ugDialog", function($scope, ActivityAPI, $modal, $ugDialog){ + $scope.activityList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getActivityList = function(){ + ActivityAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.activityList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getActivityList; + }); + }; + $scope.removeActivity = function(index){ + $ugDialog.confirm("是否删除活动?").then(function(){ + ActivityAPI.delete({ + id: $scope.activityList[index].id + }, function(){ + $scope.getActivityList(); + }); + }) + }; + $scope.updateActivity = function(index){ + $scope.open(angular.copy($scope.activityList[index])); + }; + $scope.open = function (activity) { + var modalInstance = $modal.open({ + templateUrl: 'addActivity.html', + resolve: { + CurrentActivity: function(){ + return activity; + } + }, + controller: ["$scope", "ActivityAPI","CurrentActivity","ItemAPI", "CouponCategoryAPI","$modalInstance", function ($scope, ActivityAPI, CurrentActivity, ItemAPI,CouponCategoryAPI,$modalInstance) { + $scope.ugSelect2Config = {}; + $scope.choseChildItemList = []; + $scope.activity = { + activityType : 1, + available : 1 + }; + if(CurrentActivity){ + $scope.activity = CurrentActivity; + ActivityAPI.getChoseItemList({ + parentId:$scope.activity.id + },function(data){ + $scope.ugSelect2Config.initSelectData($scope.activity.couponCategory); + $scope.choseChildItemList = data; + }) + } + $scope.pageChildSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryChildParam = {}; + $scope.getChildItemList = function(){ + var choseItemId = null; + if($scope.choseChildItemList && $scope.choseChildItemList.length > 0){ + choseItemId = [] + for (var i = 0; i < $scope.choseChildItemList.length; i++) { + var obj = $scope.choseChildItemList[i]; + choseItemId.push(obj.id); + } + } + ItemAPI.query({ + limit:$scope.pageChildSetting.pageSize, + offset:$scope.pageChildSetting.pageNum, + keyword:$scope.queryChildParam.keyword, + exclude_ids:choseItemId, + sellStatus : 1 + }, function(data){ + $scope.childItemList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getChildItemList; + }); + }; + $scope.openItemNumber = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addItemNumber.html', + resolve: { + CurrentOrderItem: function(){ + return $scope.childItemList[index]; + } + }, + controller: ["$scope", "CurrentOrderItem", "$modalInstance", function ($scope, CurrentOrderItem, $modalInstance) { + $scope.orderItem = {}; + if(CurrentOrderItem){ + $scope.orderItem = CurrentOrderItem; + } + $scope.addItemNumberForm = {}; + $scope.saveItemNumber = function(){ + if($scope.addItemNumberForm.validator.form()){ + $modalInstance.close($scope.orderItem); + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function (data) { + $scope.choseChildItem(index, parseFloat(data.number)); + }); + }; + $scope.getCategoryList = function(){ + $scope.pageInfoSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.categoryList = []; + CouponCategoryAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + categoryType : 1 + }, function(data){ + $scope.categoryList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCategoryList; + }); + } + $scope.getCategoryList(); + + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + beginTime:{ + opened:false + }, + endTime:{ + opened:false + } + }; + $scope.open = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.beginTime.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.endTime.opened = true; + } + }; + $scope.errors = null; + $scope.addActivityForm = {}; + $scope.saveActivity = function(){ + $scope.errors = null; + if($scope.addActivityForm.validator.form()){ + if($scope.activity.id){ + $scope.activity.activityRefList = []; + for (var i = 0; i < $scope.choseChildItemList.length; i++) { + var obj = $scope.choseChildItemList[i]; + $scope.activity.activityRefList.push({ + cdItemId:obj.id, + count:obj.count + }); + } + ActivityAPI.update($scope.activity, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + $scope.activity.activityRefList = []; + for (var i = 0; i < $scope.choseChildItemList.length; i++) { + var obj = $scope.choseChildItemList[i]; + $scope.activity.activityRefList.push({ + cdItemId:obj.id, + count:obj.count + }); + } + ActivityAPI.save($scope.activity, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + $scope.choseChildItem = function(index,count){ + var item = $scope.childItemList[index]; + item.childItemId = item.id; + item.count = count; + $scope.choseChildItemList.push(item); + $scope.getChildItemList(); + }; + + $scope.removeChildItem = function(index){ + $scope.choseChildItemList.splice(index,1); + $scope.getChildItemList(); + }; + }], + size:'lg' + }); + modalInstance.result.then(function () { + $scope.getActivityList(); + }); + }; + + $scope.getActivityList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/base_module.js b/src/main/webapp/WEB-INF/views/src/views/base/base_module.js new file mode 100644 index 0000000..67212f7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/base_module.js @@ -0,0 +1,244 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/base/member_list", + "views/base/company_list", + "views/base/couponCategory", + "views/base/coupon", + "views/base/dictionary", + "views/base/itemCategory", + "views/base/item", + "views/base/contract", + "views/base/contract_create", + "views/base/contract_update", + "views/base/activity", + "views/base/couponActivity", + "views/base/couponAudit", + "views/base/couponAuditBack", + "views/base/express_list", + "views/base/express_member_list", + "views/base/onlineRecharge", + "views/base/tradeRecordList", + "views/base/couponActivityAddress" +],function (memberList,companyList,couponCategory,coupon,dictionary,itemCategory,item,contract,contract_create,contract_update,activity,couponActivity,couponAudit,couponAuditBack,express_list,express_member_list,onlineRecharge,tradeRecordList,couponActivityAddress) { + angular.module('DMS.base', [ + "permission" + ]).config(["$stateProvider", function($stateProvider){ + $stateProvider + .state('member_list', { + url: '/base/member', + templateUrl: 'views/base/member_list.html', + data:{ + permissions:{ + only:["MEMBER_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: memberList + }) + .state('company_list', { + url: '/base/company', + templateUrl: 'views/base/company_list.html', + data:{ + permissions:{ + only:["COMPANY_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: companyList + }) + .state('couponCategory', { + url: '/couponCategory', + templateUrl: 'views/base/couponCategory.html', + data:{ + permissions:{ + only:["COUPON_CATEGORY_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: couponCategory + }) + .state('coupon', { + url: '/coupon', + templateUrl: 'views/base/coupon.html', + data:{ + permissions:{ + only:["COUPON_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: coupon + }) + .state('dictionary', { + url: '/dictionary', + templateUrl: 'views/base/dictionary.html', + data:{ + permissions:{ + only:["DICTIONARY_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: dictionary + }) + .state('itemCategory', { + url: '/itemCategory', + templateUrl: 'views/base/itemCategory.html', + data:{ + permissions:{ + only:["PRODUCT_CATEGORY_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: itemCategory + }) + .state('item', { + url: '/item', + templateUrl: 'views/base/item.html', + data:{ + permissions:{ + only:["PRODUCT_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: item + }) + .state('contract', { + url: '/contract', + templateUrl: 'views/base/contract.html', + data:{ + permissions:{ + only:["CONTRACT_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: contract + }) + .state('contract_create', { + url: '/contract/create', + templateUrl: 'views/base/contract_create.html', + data:{ + permissions:{ + only:["CONTRACT_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: contract_create + }) + + .state('contract_update', { + url: '/contract/:id/update/', + templateUrl: 'views/base/contract_update.html', + controller:contract_update, + data:{ + permissions:{ + only:["CONTRACT_VIEW"], + redirectTo:"unauthorized" + } + } + }) + + .state('activity', { + url: '/activity', + templateUrl: 'views/base/activity.html', + data:{ + permissions:{ + only:["ACTIVITY_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: activity + }) + .state('couponActivity', { + url: '/couponActivity', + templateUrl: 'views/base/couponActivity.html', + data:{ + permissions:{ + only:["COUPON_ACTIVITY_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: couponActivity + }) + .state('couponActivityAddress', { + url: '/couponActivityAddress', + templateUrl: 'views/base/couponActivityAddress.html', + data:{ + permissions:{ + only:["COUPON_ACTIVITY_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: couponActivityAddress + }) + .state('couponAudit', { + url: '/couponAudit', + templateUrl: 'views/base/couponAudit.html', + data:{ + permissions:{ + only:["COUPON_AUDIT_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: couponAudit + }) + .state('couponAuditBack', { + url: '/couponAuditBack', + templateUrl: 'views/base/couponAuditBack.html', + data:{ + permissions:{ + only:["COUPON_AUDIT_BACK_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: couponAuditBack + }) + .state('expressList', { + url: '/expressList', + templateUrl: 'views/base/express_list.html', + data:{ + permissions:{ + only:["EXPRESS_LIST"], + redirectTo:"unauthorized" + } + }, + controller: express_list + }) + + .state('expressMemberList', { + url: '/expressMemberList', + templateUrl: 'views/base/express_member_list.html', + data:{ + permissions:{ + only:["EXPRESS_MEMBER_LIST"], + redirectTo:"unauthorized" + } + }, + controller: express_member_list + }) + + .state('onlineRecharge', { + url: '/onlineRecharge', + templateUrl: 'views/base/onlineRecharge.html', + data:{ + permissions:{ + only:["ONLINE_RECHARGE"], + redirectTo:"unauthorized" + } + }, + controller: onlineRecharge + }) + + .state('tradeRecordList', { + url: '/tradeRecordList', + templateUrl: 'views/base/tradeRecordList.html', + data:{ + permissions:{ + only:["TRADE_RECORD_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: tradeRecordList + }) + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/company_list.html b/src/main/webapp/WEB-INF/views/src/views/base/company_list.html new file mode 100644 index 0000000..b53fcce --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/company_list.html @@ -0,0 +1,203 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

单位、公司列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 单位名称联系人手机号单位地址客服经理操作
+ + + {{customerManager.customerManger}}
+
+
+ + + + | + + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/company_list.js b/src/main/webapp/WEB-INF/views/src/views/base/company_list.js new file mode 100644 index 0000000..578ed2f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/company_list.js @@ -0,0 +1,93 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "CompanyAPI", "$modal", "$ugDialog", function($scope, CompanyAPI, $modal, $ugDialog){ + $scope.companyList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getCompanyList = function(){ + CompanyAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.companyList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCompanyList; + }); + }; + $scope.removeCompany = function(index){ + $ugDialog.confirm("是否删除该单位/公司?").then(function(){ + CompanyAPI.delete({ + id: $scope.companyList[index].id + }, function(){ + $scope.getCompanyList(); + }); + }) + }; + $scope.open = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addCompany.html', + controller: ["$scope", "CompanyAPI", "$modalInstance","currentCompany","UserAPI", "$rootScope", function ($scope, CompanyAPI, $modalInstance,currentCompany,UserAPI,$rootScope) { + $scope.customerManagerList = []; + $scope.ugSelect2Config = {}; + UserAPI.getCustomerManagerList({ + userType:"customer_manager" + },function(data){ + $scope.customerManagerList = data; + $scope.ugSelect2Config.initSelectData($scope.company.customerManagerIds); + }); + $scope.company = {}; + if(currentCompany){ + $scope.company = currentCompany; + if($scope.company.companyCustomerManagers && $scope.company.companyCustomerManagers.length > 0){ + $scope.company.customerManagerIds = []; + for (var i = 0; i < $scope.company.companyCustomerManagers.length; i++) { + var obj = $scope.company.companyCustomerManagers[i]; + $scope.company.customerManagerIds.push(obj.customerMangerId); + } + } + } + $scope.errors = null; + $scope.addCompanyForm = {}; + $scope.saveOrUpdateCompany = function(){ + $scope.errors = null; + if($scope.addCompanyForm.validator.form()){ + if($scope.company.id){ + CompanyAPI.update($scope.company, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + CompanyAPI.save($scope.company, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + resolve: { + currentCompany: function () { + return $scope.companyList[index]; + } + } + }); + modalInstance.result.then(function () { + $scope.getCompanyList(); + }); + }; + + $scope.getCompanyList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/contract.html b/src/main/webapp/WEB-INF/views/src/views/base/contract.html new file mode 100644 index 0000000..83f2dca --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/contract.html @@ -0,0 +1,210 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

合同列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 合同编号合同名称签约单位有效日期作废操作
+ + {{contract.beginTime | date: 'yyyy-MM-dd'}} 至 {{contract.endTime | date: 'yyyy-MM-dd'}} +
+ + + + | + + + + | + + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/contract_update.html b/src/main/webapp/WEB-INF/views/src/views/base/contract_update.html new file mode 100644 index 0000000..3ecb8de --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/contract_update.html @@ -0,0 +1,281 @@ + + + +
+ + +
+ + +
+ + +
+
+ +

创建合同

+
+ +
+ +
+ +
+ + +
+
+ +
+ 合同信息 + +
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ +
+ +
+
+
+ +
+
+ + + + +
+
+
+
+ +
+ 合同详情 +
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ + 折扣输入示例(如95折输入0.95)不打折则输入1 +
+
+
+
+
+
+
+
+
+ +

产品分类

+
+
+
+
+
+
+
    +
  • +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
可选择产品
产品编号名称单价操作
{{item.itemCode}}{{item.itemName}}{{item.sellPrice | number:2}} +
+ + + +
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
已优惠产品*
操作产品编号名称单价优惠方式折扣优惠后金额
+
+ + + +
+
{{choseItem.itemCode}}{{choseItem.itemName}}{{choseItem.sellPrice | number:2}}{{choseItem.contractTypeName}}{{choseItem.discountText}}{{choseItem.contractValue | number:2}}
+
+
+
+
+ + +
+ 错误信息 +
+
+
{{errors.message}}
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+ +
+ + +
+ + +
+ + + +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/couponActivity.js b/src/main/webapp/WEB-INF/views/src/views/base/couponActivity.js new file mode 100644 index 0000000..853b59f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/couponActivity.js @@ -0,0 +1,132 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "CouponAPI", "$modal", "$ugDialog","CouponCategoryAPI","CouponActivityAPI",function($scope, CouponAPI, $modal, $ugDialog,CouponCategoryAPI,CouponActivityAPI){ + + $scope.ugSelect2Config = {}; + $scope.getCategoryList = function(){ + $scope.pageInfoCategorySetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.categoryList = []; + CouponCategoryAPI.query({ + limit:$scope.pageInfoCategorySetting.pageSize, + offset:$scope.pageInfoCategorySetting.pageNum + }, function(data){ + $scope.categoryList = data.data; + $scope.pageInfoCategorySetting = data.pageInfo; + $scope.pageInfoCategorySetting.loadData = $scope.getCategoryList; + }); + } + $scope.getCategoryList(); + + $scope.couponList = []; + $scope.pageInfoSetting = { + pageSize:50, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getCouponList = function(){ + CouponActivityAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + isUseful:0, + isSend:1, + couponCategoryId:$scope.queryParam.couponCategoryId, + batch:$scope.queryParam.batch, + couponType:1 //只有卡回款 + }, function(data){ + $scope.couponList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCouponList; + }); + }; + $scope.getCouponList(); + $scope.updateValue = function(coupon){ + coupon.userPrice = coupon.couponValue; + CouponAPI.update(coupon, function(){ + }, function(data){ + $scope.errors = data.data; + }) + } + + //退卡 + $scope.returnCoupon = function(coupon){ + $ugDialog.confirm("是否退卡/券?").then(function(){ + CouponAPI.returnCoupon({ + id: coupon.id + }, function(){ + $ugDialog.alert("退卡成功"); + $scope.getCouponList(); + }); + }) + }; + + //填写送货地址 + $scope.openEditAddress = function(coupon){ + var modalInstance = $modal.open({ + templateUrl: 'editAddress.html', + resolve: { + CurrentCoupon: function(){ + return coupon; + } + }, + controller: ["$scope", "CouponAPI","CurrentCoupon", "$modalInstance", function ($scope, CouponAPI, CurrentCoupon, $modalInstance) { + if(CurrentCoupon){ + $scope.couponEdit = angular.copy(CurrentCoupon); + } + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + beginTime:{ + opened:false + } + }; + $scope.open = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.beginTime.opened = true; + } + }; + $scope.errors = null; + $scope.editAddressForm = {}; + $scope.updateAddress = function(coupon) { + $scope.errors = null; + if ($scope.editAddressForm.validator.form()) { + CouponAPI.activityAddress({ + couponNumber:$scope.couponEdit.couponNumber, + consignmentName:$scope.couponEdit.consignmentName, + consignmentPhone:$scope.couponEdit.consignmentPhone, + consignmentAddress:$scope.couponEdit.consignmentAddress, + sendTime:$scope.couponEdit.sendTime + },function(){ + CurrentCoupon.couponNumber = $scope.couponEdit.couponNumber; + CurrentCoupon.consignmentName = $scope.couponEdit.consignmentName; + CurrentCoupon.consignmentPhone = $scope.couponEdit.consignmentPhone; + CurrentCoupon.consignmentAddress = $scope.couponEdit.consignmentAddress; + CurrentCoupon.sendTime = $scope.couponEdit.sendTime; + $modalInstance.dismiss('cancel'); + }, function(data){ + $scope.errors = data.data; + }) + } + } + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function () { + $scope.getCouponList(); + }); + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/couponActivityAddress.html b/src/main/webapp/WEB-INF/views/src/views/base/couponActivityAddress.html new file mode 100644 index 0000000..19088c6 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/couponActivityAddress.html @@ -0,0 +1,212 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

卡券列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号卡券类型卡劵类别卡号/劵号批号可用金额最低赠送金额发放单位发放客户经理操作
消费劵 + + + +
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/couponAudit.js b/src/main/webapp/WEB-INF/views/src/views/base/couponAudit.js new file mode 100644 index 0000000..5b6241d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/couponAudit.js @@ -0,0 +1,225 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "CouponAPI", "$modal", "$ugDialog","CouponCategoryAPI","CompanyAPI","UserAPI", function($scope, CouponAPI, $modal, $ugDialog,CouponCategoryAPI,CompanyAPI,UserAPI){ + + $scope.ugSelect2Config = {}; + $scope.getCategoryList = function(){ + $scope.pageInfoSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.categoryList = []; + CouponCategoryAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum + }, function(data){ + $scope.categoryList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCategoryList; + }); + } + $scope.getCategoryList(); + + $scope.companyList = []; + $scope.getCompanyList = function(){ + CompanyAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum + }, function(data){ + $scope.companyList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCompanyList; + }); + }; + $scope.getCompanyList(); + + $scope.companyCustomerManagers = []; + $scope.getCustomerManagersList = function(){ + UserAPI.getCustomerManagerList({ + userType:"customer_manager" + },function(data){ + $scope.companyCustomerManagers = data; + }); + } + $scope.getCustomerManagersList(); + + $scope.couponList = []; + $scope.pageInfoNoAuditSetting = { + pageSize:50, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.chooseCoupon = []; + $scope.checkedAllCoupon = function() { + if($scope.isCheckCoupon == 0){ + $scope.chooseCoupon.splice(0, $scope.chooseCoupon.length); + for (var i = 0; i < $scope.couponList.length; i++) { + var obj = $scope.couponList[i]; + $scope.chooseCoupon.push(obj); + } + }else{ + $scope.chooseCoupon.splice(0, $scope.chooseCoupon.length); + } + }; + + $scope.changeCouponList = function(){ + if($scope.chooseCoupon.length == $scope.couponList.length){ + $scope.isCheckCombine = 0; + }else{ + $scope.isCheckCombine = 1; + } + }; + + $scope.getCouponList = function(){ + CouponAPI.query({ + limit:$scope.pageInfoNoAuditSetting.pageSize, + offset:$scope.pageInfoNoAuditSetting.pageNum, + keyword:$scope.queryParam.keyword, + isUseful:3, + isSend:1, + cdCompanyId:$scope.queryParam.cdCompanyId, + customerMangerId:$scope.queryParam.customerMangerId, + couponCategoryId:$scope.queryParam.couponCategoryId, + batch:$scope.queryParam.batch + }, function(data){ + $scope.couponList = data.data; + $scope.pageInfoNoAuditSetting = data.pageInfo; + $scope.pageInfoNoAuditSetting.loadData = $scope.getCouponList; + }); + }; + $scope.getCouponList(); + $scope.audit = function(index){ + CouponAPI.audit({ + id: $scope.couponList[index].id, + locked: true + },function(data){ + $scope.getCouponList(); + $scope.getCouponAuditList(); + }); + }; + + $scope.batchUsefulCoupon = function(){ + var ids = []; + for(var i in $scope.chooseCoupon){ + ids.push($scope.chooseCoupon[i].id); + } + if(ids.length == 0){ + $ugDialog.warn("请选择卡劵进行批量激活!"); + return false; + } + CouponAPI.batchAudit({ + ids:ids, + locked:true + },function(data){ + $scope.getCouponList(); + $scope.getCouponAuditList(); + }); + } + //已审核列表 + $scope.pageInfoAuditSetting = []; + $scope.pageInfoAuditSetting = { + pageSize:50, + pageNum:1 + }; + + $scope.currentDate = function(){ + var myDate = new Date(); + var fullYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????) + var month = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月) + if(month < 10){ + month = '0'+month; + } + var date = myDate.getDate(); //获取当前日(1-31) + if(date < 10){ + date = '0'+date; + } + return fullYear+"-"+month+"-"+date; + } + + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + auditDateStart:{ + opened:false + }, + auditDateEnd:{ + opened:false + } + }; + $scope.openDate = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.auditDateStart.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.auditDateEnd.opened = true; + } + }; + + $scope.queryParamAudit = { + auditDateStart :$scope.currentDate(), + auditDateEnd:$scope.currentDate() + }; + + $scope.getCouponAuditList = function(){ + CouponAPI.query({ + limit:$scope.pageInfoAuditSetting.pageSize, + offset:$scope.pageInfoAuditSetting.pageNum, + keyword:$scope.queryParamAudit.keyword, + isUseful:1, + isSend:1, + isOver:0, + cdCompanyId:$scope.queryParamAudit.cdCompanyId, + customerMangerId:$scope.queryParamAudit.customerMangerId, + couponCategoryId:$scope.queryParamAudit.couponCategoryId, + batch:$scope.queryParamAudit.batch, + auditDateStart:$scope.queryParamAudit.auditDateStart, + auditDateEnd:$scope.queryParamAudit.auditDateEnd + }, function(data){ + $scope.couponAuditList = data.data; + $scope.pageInfoAuditSetting = data.pageInfo; + $scope.pageInfoAuditSetting.loadData = $scope.getCouponAuditList; + }); + }; + $scope.getCouponAuditList(); + + $scope.noAudit = function(index){ + CouponAPI.audit({ + id: $scope.couponAuditList[index].id, + locked: false + },function(data){ + $scope.getCouponList(); + $scope.getCouponAuditList(); + }); + }; + + $scope.overCoupon = function(coupon){ + $ugDialog.confirm("确定卡完结,完结之后不能做任何修改?").then(function(){ + CouponAPI.overCoupon({ + id: coupon.id, + isOver: 1 + },function(data){ + $scope.getCouponAuditList(); + }); + }) + }; + + $scope.receivedPrice = function(coupon){ + CouponAPI.receivedPrice({ + couponId : coupon.id, + couponNumber : coupon.couponNumber, + receivedPrice : coupon.receivedPrice + },function(){ + + }, function(data){ + $scope.errors = data.data; + }) + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/couponAuditBack.html b/src/main/webapp/WEB-INF/views/src/views/base/couponAuditBack.html new file mode 100644 index 0000000..17df809 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/couponAuditBack.html @@ -0,0 +1,157 @@ + + + +
+ + +
+ + +
+ + +
+
+ +

后付款卡券

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 序号卡券类型卡劵类别卡号/劵号批号充值金额发放单位发放客户经理实收金额操作
+ + 消费劵{{coupon.couponValue}}{{coupon.receivedPrice}} +
+ + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/couponAuditBack.js b/src/main/webapp/WEB-INF/views/src/views/base/couponAuditBack.js new file mode 100644 index 0000000..f264dbf --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/couponAuditBack.js @@ -0,0 +1,184 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "CouponAPI", "$modal", "$ugDialog","CouponCategoryAPI","CompanyAPI","UserAPI", function($scope, CouponAPI, $modal, $ugDialog,CouponCategoryAPI,CompanyAPI,UserAPI){ + + $scope.ugSelect2Config = {}; + $scope.getCategoryList = function(){ + $scope.pageInfoSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.categoryList = []; + CouponCategoryAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum + }, function(data){ + $scope.categoryList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCategoryList; + }); + } + $scope.getCategoryList(); + + $scope.companyList = []; + $scope.getCompanyList = function(){ + CompanyAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum + }, function(data){ + $scope.companyList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCompanyList; + }); + }; + $scope.getCompanyList(); + + $scope.companyCustomerManagers = []; + $scope.getCustomerManagersList = function(){ + UserAPI.getCustomerManagerList({ + userType:"customer_manager" + },function(data){ + $scope.companyCustomerManagers = data; + }); + } + $scope.getCustomerManagersList(); + $scope.changeCompany = function(id){ +// $scope.queryParam.customerMangerId = ""; +// for(var i in $scope.companyList){ +// var company = $scope.companyList[i] +// if(company.id == parseInt(id)){ +// $scope.companyCustomerManagers = company.companyCustomerManagers; +// } +// } + } + + $scope.couponList = []; + $scope.pageInfoNoAuditSetting = { + pageSize:50, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.chooseCoupon = []; + $scope.checkedAllCoupon = function() { + if($scope.isCheckCoupon == 0){ + $scope.chooseCoupon.splice(0, $scope.chooseCoupon.length); + for (var i = 0; i < $scope.couponList.length; i++) { + var obj = $scope.couponList[i]; + $scope.chooseCoupon.push(obj); + } + }else{ + $scope.chooseCoupon.splice(0, $scope.chooseCoupon.length); + } + }; + + $scope.changeCouponList = function(){ + if($scope.chooseCoupon.length == $scope.couponList.length){ + $scope.isCheckCombine = 0; + }else{ + $scope.isCheckCombine = 1; + } + }; + + $scope.getCouponList = function(){ + CouponAPI.query({ + limit:$scope.pageInfoNoAuditSetting.pageSize, + offset:$scope.pageInfoNoAuditSetting.pageNum, + keyword:$scope.queryParam.keyword, + isUseful:4, + isSend:1, + cdCompanyId:$scope.queryParam.cdCompanyId, + customerMangerId:$scope.queryParam.customerMangerId, + couponCategoryId:$scope.queryParam.couponCategoryId, + batch:$scope.queryParam.batch + }, function(data){ + $scope.couponList = data.data; + $scope.pageInfoNoAuditSetting = data.pageInfo; + $scope.pageInfoNoAuditSetting.loadData = $scope.getCouponList; + }); + }; + $scope.getCouponList(); + $scope.audit = function(index){ + CouponAPI.audit({ + id: $scope.couponList[index].id, + locked: $scope.couponList[index].isUseful == 1 ? true : false + },function(data){ + $scope.getCouponList(); + $scope.getCouponAuditList(); + }); + }; + //已审核列表 + $scope.queryParamAudit = {} + $scope.pageInfoAuditSetting = []; + $scope.pageInfoAuditSetting = { + pageSize:50, + pageNum:1 + }; + $scope.getCouponAuditList = function(){ + CouponAPI.query({ + limit:$scope.pageInfoAuditSetting.pageSize, + offset:$scope.pageInfoAuditSetting.pageNum, + keyword:$scope.queryParamAudit.keyword, + isUseful:1, + isSend:1, + isOver:0, + cdCompanyId:$scope.queryParamAudit.cdCompanyId, + customerMangerId:$scope.queryParamAudit.customerMangerId, + couponCategoryId:$scope.queryParamAudit.couponCategoryId, + batch:$scope.queryParamAudit.batch + }, function(data){ + $scope.couponAuditList = data.data; + $scope.pageInfoAuditSetting = data.pageInfo; + $scope.pageInfoAuditSetting.loadData = $scope.getCouponAuditList; + }); + }; + $scope.getCouponAuditList(); + + $scope.noAudit = function(index){ + CouponAPI.audit({ + id: $scope.couponAuditList[index].id, + locked: $scope.couponAuditList[index].isUseful == 1 ? true : false + },function(data){ + $scope.getCouponList(); + $scope.getCouponAuditList(); + }); + }; + //退卡 + $scope.returnCoupon = function(coupon){ + $ugDialog.confirm("是否退卡/券?").then(function(){ + CouponAPI.returnCoupon({ + id: coupon.id + }, function(){ + $ugDialog.alert("退卡成功"); + $scope.getCouponList(); + }); + }) + }; + + $scope.overCoupon = function(coupon){ + $ugDialog.confirm("确定卡完结,完结之后不能做任何修改?").then(function(){ + CouponAPI.overCoupon({ + id: coupon.id, + isOver: 1 + },function(data){ + $scope.getCouponAuditList(); + }); + }) + }; + + $scope.receivedPrice = function(coupon){ + CouponAPI.receivedPrice({ + couponId : coupon.id, + couponNumber : coupon.couponNumber, + receivedPrice : coupon.receivedPrice, + isAutoAudit :1 + },function(){ + + }, function(data){ + $scope.errors = data.data; + }) + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/couponCategory.js b/src/main/webapp/WEB-INF/views/src/views/base/couponCategory.js new file mode 100644 index 0000000..ba3c904 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/couponCategory.js @@ -0,0 +1,174 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "CouponCategoryAPI", "$modal", "$ugDialog", function($scope, CouponCategoryAPI, $modal, $ugDialog){ + $scope.couponCategoryList = []; + $scope.couponCategory = {}; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getCouponCategoryList = function(){ + CouponCategoryAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + categoryType:$scope.queryParam.categoryType + }, function(data){ + $scope.couponCategoryList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCouponCategoryList; + }); + }; + $scope.removeCouponCategory = function(couponCategory){ + $ugDialog.confirm("是否删除该产品?").then(function(){ + CouponCategoryAPI.delete({ + id: couponCategory.id + }, function(){ + $scope.getCouponCategoryList(); + }); + }) + }; + $scope.open = function (couponCategory) { + var modalInstance = $modal.open({ + templateUrl: 'addCouponCategory.html', + controller: ["$scope", "CouponCategoryAPI", "ItemAPI","$modalInstance","currentCouponCategory", function ($scope, CouponCategoryAPI,ItemAPI,$modalInstance,currentCouponCategory) { + $scope.couponCategory = {categoryType : 1}; + if(currentCouponCategory){ + $scope.couponCategory = currentCouponCategory; + if($scope.couponCategory.categoryType == 2){ + CouponCategoryAPI.getChoseItemList({ + parentId:$scope.couponCategory.id + },function(data){ + $scope.choseItemList = data; + }) + } + } + $scope.errors = null; + $scope.addCouponCategoryForm = {}; + $scope.saveOrUpdateCouponCategory = function(){ + $scope.errors = null; + if($scope.addCouponCategoryForm.validator.form()){ + if($scope.couponCategory.id){ + $scope.couponCategory.categoryRefs = []; + for (var i = 0; i < $scope.choseItemList.length; i++) { + var obj = $scope.choseItemList[i]; + $scope.couponCategory.categoryRefs.push({ + cdItemId:obj.id, + count :obj.count + }); + } + CouponCategoryAPI.update($scope.couponCategory, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + $scope.couponCategory.categoryRefs = []; + for (var i = 0; i < $scope.choseItemList.length; i++) { + var obj = $scope.choseItemList[i]; + $scope.couponCategory.categoryRefs.push({ + cdItemId:obj.id, + count :obj.count + }); + } + CouponCategoryAPI.save($scope.couponCategory, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + $scope.choseItemList = []; + $scope.pageInfoSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryParam = {}; + + $scope.getItemList = function(){ + var choseItemId = null; + if($scope.choseItemList && $scope.choseItemList.length > 0){ + choseItemId = [] + for (var i = 0; i < $scope.choseItemList.length; i++) { + var obj = $scope.choseItemList[i]; + choseItemId.push(obj.id); + } + } + ItemAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + exclude_ids:choseItemId, + sellStatus : 1 + }, function(data){ + $scope.itemList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getItemList; + }); + }; + + $scope.openItemNumber = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addItemNumber.html', + resolve: { + CurrentOrderItem: function(){ + return $scope.itemList[index]; + } + }, + controller: ["$scope", "CurrentOrderItem", "$modalInstance", function ($scope, CurrentOrderItem, $modalInstance) { + $scope.orderItem = {}; + if(CurrentOrderItem){ + $scope.orderItem = CurrentOrderItem; + } + $scope.addItemNumberForm = {}; + $scope.saveItemNumber = function(){ + if($scope.addItemNumberForm.validator.form()){ + $modalInstance.close($scope.orderItem); + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function (data) { + $scope.choseItem(index, parseFloat(data.number)); + }); + }; + + $scope.choseItem = function(index,count){ + var item = $scope.itemList[index]; + item.cdItemId = item.id; + item.count = count; + $scope.choseItemList.push(item); + $scope.getItemList(); + }; + + $scope.removeItem = function(index){ + $scope.choseItemList.splice(index,1); + $scope.getItemList(); + }; + }], + resolve: { + currentCouponCategory: function () { + return couponCategory; + } + }, + size : 'lg' + }); + modalInstance.result.then(function () { + $scope.getCouponCategoryList(); + }); + }; + + $scope.getCouponCategoryList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/express_list.html b/src/main/webapp/WEB-INF/views/src/views/base/express_list.html new file mode 100644 index 0000000..b4e5e83 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/express_list.html @@ -0,0 +1,165 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

快递商列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + 编号名称操作
+ + +
+ + + + | + + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/express_list.js b/src/main/webapp/WEB-INF/views/src/views/base/express_list.js new file mode 100644 index 0000000..68191b6 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/express_list.js @@ -0,0 +1,78 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "ExpressAPI", "$modal", "$ugDialog", function($scope, ExpressAPI, $modal, $ugDialog){ + $scope.expressList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getExpressList = function(){ + ExpressAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.expressList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getExpressList; + }); + }; + $scope.removeExpress = function(index){ + $ugDialog.confirm("是否删除该快递公司?").then(function(){ + ExpressAPI.delete({ + id: $scope.expressList[index].id + }, function(){ + $scope.getExpressList(); + }); + }) + }; + $scope.open = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addExpress.html', + controller: ["$scope", "ExpressAPI", "$modalInstance","currentExpress", "$rootScope", function ($scope, ExpressAPI, $modalInstance,currentExpress,$rootScope) { + $scope.express = {}; + if(currentExpress){ + $scope.express = currentExpress; + } + $scope.errors = null; + $scope.addExpressForm = {}; + $scope.saveOrUpdateExpress = function(){ + $scope.errors = null; + if($scope.addExpressForm.validator.form()){ + if($scope.express.id){ + ExpressAPI.update($scope.express, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + ExpressAPI.save($scope.express, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + resolve: { + currentExpress: function () { + return $scope.expressList[index]; + } + } + }); + modalInstance.result.then(function () { + $scope.getExpressList(); + }); + }; + + $scope.getExpressList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/express_member_list.js b/src/main/webapp/WEB-INF/views/src/views/base/express_member_list.js new file mode 100644 index 0000000..29670e4 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/express_member_list.js @@ -0,0 +1,99 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "ExpressMemberAPI", "$modal", "$ugDialog", function($scope, ExpressMemberAPI, $modal, $ugDialog){ + $scope.expressList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getExpressMemberList = function(){ + ExpressMemberAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.expressMemberList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getExpressMemberList; + }); + }; + $scope.removeExpress = function(index){ + $ugDialog.confirm("是否删除该快递员?").then(function(){ + ExpressMemberAPI.delete({ + id: $scope.expressList[index].id + }, function(){ + $scope.getExpressList(); + }); + }) + }; + $scope.open = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addExpressMember.html', + controller: ["$scope", "ExpressAPI","ExpressMemberAPI", "$modalInstance","currentExpressMember", "$rootScope", function ($scope,ExpressAPI, ExpressMemberAPI, $modalInstance,currentExpressMember,$rootScope) { + $scope.expressMember = {}; + if(currentExpressMember){ + $scope.expressMember = currentExpressMember; + } + + $scope.expressList = []; + $scope.pageInfoSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.ugSelect2Config = {}; + $scope.getExpressList = function(){ + ExpressAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.expressList = data.data; + $scope.ugSelect2Config.initSelectData($scope.expressMember.cdExpressId); + }); + }; + $scope.getExpressList(); + + + $scope.errors = null; + $scope.addExpressMemberForm = {}; + $scope.saveOrUpdateExpressMember = function(){ + $scope.errors = null; + if($scope.addExpressMemberForm.validator.form()){ + if($scope.expressMember.id){ + ExpressMemberAPI.update($scope.expressMember, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + ExpressMemberAPI.save($scope.expressMember, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + resolve: { + currentExpressMember: function () { + return $scope.expressMemberList[index]; + } + } + }); + modalInstance.result.then(function () { + $scope.getExpressMemberList(); + }); + }; + + $scope.getExpressMemberList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/item.detail.html b/src/main/webapp/WEB-INF/views/src/views/base/item.detail.html new file mode 100644 index 0000000..0eaa33e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/item.detail.html @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/item.html b/src/main/webapp/WEB-INF/views/src/views/base/item.html new file mode 100644 index 0000000..247f844 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/item.html @@ -0,0 +1,558 @@ + + + +
+ + +
+
+
+ +
+ +

产品分类

+
+ +
+ +
+ +
+ + +
+ + + + + + + +
+
    +
  • +
+
+
+ +
+ +
+
+ +
+ +
+ +
+ +

产品列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 产品类别产品编号产品名称产品类型产品规格销售状态销售价格进货价格会员价格操作
+ + 常规产品组合产品下架上架 +
+ + + + | + + + + | + + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/itemCategory.html b/src/main/webapp/WEB-INF/views/src/views/base/itemCategory.html new file mode 100644 index 0000000..13da19f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/itemCategory.html @@ -0,0 +1,148 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

产品分类管理

+ +
+ + +
+ + +
+ + +
+ + + +
+ +
+ + +
+ +
+ + + +
+ +
+ +
+ +
+
    +
  • +
+
+ +
+ + +
+ + +
+ + +
+ + +
+ + + +
+ + + + + diff --git a/src/main/webapp/WEB-INF/views/src/views/base/member_list.html b/src/main/webapp/WEB-INF/views/src/views/base/member_list.html new file mode 100644 index 0000000..8eff2ee --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/member_list.html @@ -0,0 +1,147 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

客户列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 绑定卡号姓名手机号地址所属单位客户经理可用金额操作
+ + + {{couponNumber.couponNumber}}
+
+ {{couponNumber.userPrice}}
+
+
+ + + + | + + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + diff --git a/src/main/webapp/WEB-INF/views/src/views/base/member_list.js b/src/main/webapp/WEB-INF/views/src/views/base/member_list.js new file mode 100644 index 0000000..dd2a46f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/member_list.js @@ -0,0 +1,43 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "MemberAPI", "$modal", "$ugDialog", "$modalMemberAdd", function($scope, MemberAPI, $modal, $ugDialog, $modalMemberAdd){ + $scope.memberList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getMemberList = function(){ + MemberAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + couponNumber:$scope.queryParam.couponNumber + }, function(data){ + $scope.memberList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getMemberList; + }); + }; + $scope.open = function (index) { + $modalMemberAdd.open({ + currentMember: $scope.memberList[index] + }).result.then(function () { + $scope.getMemberList(); + }); + }; + $scope.removeMember = function(index){ + $ugDialog.confirm("是否删除客户?").then(function(){ + MemberAPI.delete({ + id: $scope.memberList[index].id + },function(){ + $scope.getMemberList(); + }); + }) + }; + + $scope.getMemberList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/onlineRecharge.js b/src/main/webapp/WEB-INF/views/src/views/base/onlineRecharge.js new file mode 100644 index 0000000..d8bf52b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/onlineRecharge.js @@ -0,0 +1,55 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "CouponAPI","$modal", "$ugDialog","$stateParams", function($scope, CouponAPI,$modal, $ugDialog,$stateParams){ + + $scope.readCard = function(){ + if($scope.searchCouponNo){ + //查找卡信息 + CouponAPI.readCard({ + couponNo:$scope.searchCouponNo, + password:"" + }, function (data) { + if(data.userName == null || data.userName == undefined){ + $ugDialog.warn("卡不能识别!"); + $scope.pick.couponNo = ""; + $scope.pick.password = ""; + return; + }; + $scope.pick.userName = data.userName; + $scope.pick.phoneNumber = data.phoneNumber; + $scope.pick.couponNo = data.couponNo; + $scope.pick.couponPrice = data.couponPrice; + }, function (data) { + $ugDialog.warn(data.data.error); + }) + }else{ + $ugDialog.alert("请输入卡号/密码") + } + } + + + $scope.pickForm = {}; + $scope.cardRecharge = function(){ + if($scope.pick.couponNo == "" || $scope.pick.couponNo == null || $scope.pick.couponNo == undefined ){ + $ugDialog.alert("请输入卡号"); + return; + } + CouponAPI.cardRecharge({ + couponNo : $scope.pick.couponNo, + rechargePrice : $scope.pick.rechargePrice + },function(){ + $ugDialog.alert("充值成功"); + $scope.pick = {} + }, function(data){ + $ugDialog.warn(data.data.error); + }) + } + + var initialize = function(){ + $scope.pick = {}; + } + initialize(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/base/tradeRecordList.js b/src/main/webapp/WEB-INF/views/src/views/base/tradeRecordList.js new file mode 100644 index 0000000..e85943b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/base/tradeRecordList.js @@ -0,0 +1,26 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "TradeRecordAPI", "$modal", "$ugDialog",function($scope, TradeRecordAPI, $modal, $ugDialog){ + + $scope.tradeRecordList = []; + $scope.pageInfoSetting = { + pageSize:50, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getTradeRecordList = function(){ + TradeRecordAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.tradeRecordList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getTradeRecordList; + }); + }; + $scope.getTradeRecordList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/blank.js b/src/main/webapp/WEB-INF/views/src/views/blank.js new file mode 100644 index 0000000..c3abea6 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/blank.js @@ -0,0 +1,6 @@ +/** + * Created by Jeng on 2016/1/5. + */ +define(function () { + return {}; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/checklist-model/checklist-model.js b/src/main/webapp/WEB-INF/views/src/views/checklist-model/checklist-model.js new file mode 100644 index 0000000..8f4c2dc --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/checklist-model/checklist-model.js @@ -0,0 +1,169 @@ +/** + * Checklist-model + * AngularJS directive for list of checkboxes + * https://github.com/vitalets/checklist-model + * License: MIT http://opensource.org/licenses/MIT + */ + +/* commonjs package manager support (eg componentjs) */ +if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports){ + module.exports = 'checklist-model'; +} + +angular.module('checklist-model', []) + .directive('checklistModel', ['$parse', '$compile', function($parse, $compile) { + // contains + function contains(arr, item, comparator) { + if (angular.isArray(arr)) { + for (var i = arr.length; i--;) { + if (comparator(arr[i], item)) { + return true; + } + } + } + return false; + } + + // add + function add(arr, item, comparator) { + arr = angular.isArray(arr) ? arr : []; + if(!contains(arr, item, comparator)) { + arr.push(item); + } + return arr; + } + + // remove + function remove(arr, item, comparator) { + if (angular.isArray(arr)) { + for (var i = arr.length; i--;) { + if (comparator(arr[i], item)) { + arr.splice(i, 1); + break; + } + } + } + return arr; + } + + // http://stackoverflow.com/a/19228302/1458162 + function postLinkFn(scope, elem, attrs) { + // exclude recursion, but still keep the model + var checklistModel = attrs.checklistModel; + attrs.$set("checklistModel", null); + // compile with `ng-model` pointing to `checked` + $compile(elem)(scope); + attrs.$set("checklistModel", checklistModel); + + // getter for original model + var checklistModelGetter = $parse(checklistModel); + var checklistChange = $parse(attrs.checklistChange); + var checklistBeforeChange = $parse(attrs.checklistBeforeChange); + var ngModelGetter = $parse(attrs.ngModel); + + + + var comparator = angular.equals; + + if (attrs.hasOwnProperty('checklistComparator')){ + if (attrs.checklistComparator[0] == '.') { + var comparatorExpression = attrs.checklistComparator.substring(1); + comparator = function (a, b) { + return a[comparatorExpression] === b[comparatorExpression]; + }; + + } else { + comparator = $parse(attrs.checklistComparator)(scope.$parent); + } + } + + // watch UI checked change + var unbindModel = scope.$watch(attrs.ngModel, function(newValue, oldValue) { + if (newValue === oldValue) { + return; + } + + if (checklistBeforeChange && (checklistBeforeChange(scope) === false)) { + ngModelGetter.assign(scope, contains(checklistModelGetter(scope.$parent), getChecklistValue(), comparator)); + return; + } + + setValueInChecklistModel(getChecklistValue(), newValue); + + if (checklistChange) { + checklistChange(scope); + } + }); + + // watches for value change of checklistValue + var unbindCheckListValue = scope.$watch(getChecklistValue, function(newValue, oldValue) { + if( newValue != oldValue && angular.isDefined(oldValue) && scope[attrs.ngModel] === true ) { + var current = checklistModelGetter(scope.$parent); + checklistModelGetter.assign(scope.$parent, remove(current, oldValue, comparator)); + checklistModelGetter.assign(scope.$parent, add(current, newValue, comparator)); + } + }, true); + + var unbindDestroy = scope.$on('$destroy', destroy); + + function destroy() { + unbindModel(); + unbindCheckListValue(); + unbindDestroy(); + } + + function getChecklistValue() { + return attrs.checklistValue ? $parse(attrs.checklistValue)(scope.$parent) : attrs.value; + } + + function setValueInChecklistModel(value, checked) { + var current = checklistModelGetter(scope.$parent); + if (angular.isFunction(checklistModelGetter.assign)) { + if (checked === true) { + checklistModelGetter.assign(scope.$parent, add(current, value, comparator)); + } else { + checklistModelGetter.assign(scope.$parent, remove(current, value, comparator)); + } + } + + } + + // declare one function to be used for both $watch functions + function setChecked(newArr, oldArr) { + if (checklistBeforeChange && (checklistBeforeChange(scope) === false)) { + setValueInChecklistModel(getChecklistValue(), ngModelGetter(scope)); + return; + } + ngModelGetter.assign(scope, contains(newArr, getChecklistValue(), comparator)); + } + + // watch original model change + // use the faster $watchCollection method if it's available + if (angular.isFunction(scope.$parent.$watchCollection)) { + scope.$parent.$watchCollection(checklistModel, setChecked); + } else { + scope.$parent.$watch(checklistModel, setChecked, true); + } + } + + return { + restrict: 'A', + priority: 1000, + terminal: true, + scope: true, + compile: function(tElement, tAttrs) { + + if (!tAttrs.checklistValue && !tAttrs.value) { + throw 'You should provide `value` or `checklist-value`.'; + } + + // by default ngModel is 'checked', so we set it if not specified + if (!tAttrs.ngModel) { + // local scope var storing individual checkbox model + tAttrs.$set("ngModel", "checked"); + } + + return postLinkFn; + } + }; + }]); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/despatch/despatchJob.js b/src/main/webapp/WEB-INF/views/src/views/despatch/despatchJob.js new file mode 100644 index 0000000..f53c3b0 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/despatch/despatchJob.js @@ -0,0 +1,151 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "OrderAPI", "$modal", "$ugDialog","ExpressAPI","$filter", function($scope, OrderAPI, $modal, $ugDialog,ExpressAPI,$filter){ + $scope.orderList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + appointmentTimeStart:{ + opened:false + }, + appointmentTimeEnd:{ + opened:false + } + }; + $scope.openDate = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.appointmentTimeStart.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.appointmentTimeEnd.opened = true; + } + }; + + $scope.queryParam = { + appointmentTimeStart :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + appointmentTimeEnd :$filter('date')(new Date(new Date().getTime()+86400000), 'yyyy-MM-dd') + }; + + $scope.getOrderList = function(){ + //查询待配送的订单 + OrderAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + appointmentTimeStart:$scope.queryParam.appointmentTimeStart, + appointmentTimeEnd:$scope.queryParam.appointmentTimeEnd, + hasNoShowCancel:true, + hasShowDespatch:false //不显示已分配的 + }, function(data){ + $scope.orderList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getOrderList; + }); + }; + + $scope.pageSetting = { + pageSize:10, + pageNum:1 + }; + //查询快递商 + $scope.expressList = []; + $scope.getExpressList = function(){ + ExpressAPI.query({ + limit:$scope.pageSetting.pageSize, + offset:$scope.pageSetting.pageNum, + keyword:$scope.queryParam.keyword + },function(data){ + $scope.expressList = data.data; + }); + } + //选择快递商 + $scope.choseExpressUser = function(index){ + $scope.currentCustomer = $scope.expressList[index]; + }; + $scope.getOrderList(); + $scope.getExpressList(); + + $scope.bindExpress = function(index){ + if(!$scope.currentCustomer){ + $ugDialog.warn("请选择运输的快递商"); + return; + } + var orderNos = []; + orderNos.push($scope.orderList[index].orderNo); + ExpressAPI.bindExpress({ + expressId:$scope.currentCustomer.id, + orderNos:orderNos + }, function(){ + $scope.getOrderList(); + $scope.getExpressList(); + }) + }; + $scope.unbindExpress = function(index){ + var orderNos = []; + orderNos.push($scope.orderList[index].orderNo); + ExpressAPI.unbindExpress({ + orderNos:orderNos + }, function(){ + $scope.getOrderList(); + $scope.getExpressList(); + }) + } + + //批量分配 + $scope.chooseOrder = []; + $scope.chooseAllCheck = {}; + $scope.checkedAllOrder = function() { + if($scope.chooseAllCheck.isCheckOrder == 0){ + $scope.chooseOrder.splice(0, $scope.chooseOrder.length); + for (var i = 0; i < $scope.orderList.length; i++) { + var obj = $scope.orderList[i]; + if(obj.expressName == null){ + $scope.chooseOrder.push(obj); + } + } + }else{ + $scope.chooseOrder.splice(0, $scope.chooseOrder.length); + } + }; + + $scope.changeOrderList = function(){ + if($scope.chooseOrder.length == $scope.orderList.length){ + $scope.isCheckCombine = 0; + }else{ + $scope.isCheckCombine = 1; + } + }; + $scope.saveBtnLoading = false; + $scope.batchBindExpress = function(){ + if(!$scope.currentCustomer){ + $ugDialog.warn("请选择运输的快递商"); + return; + } + $scope.saveBtnLoading = true; + var orderNos = []; + for(var i in $scope.chooseOrder){ + orderNos.push($scope.chooseOrder[i].orderNo); + } + ExpressAPI.bindExpress({ + expressId:$scope.currentCustomer.id, + orderNos:orderNos + }, function(){ + $scope.getOrderList(); + $scope.getExpressList(); + }).$promise.finally(function(){ + $scope.saveBtnLoading = false; + }); + }; + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/despatch/despatchSuccessList.html b/src/main/webapp/WEB-INF/views/src/views/despatch/despatchSuccessList.html new file mode 100644 index 0000000..06dd502 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/despatch/despatchSuccessList.html @@ -0,0 +1,157 @@ + + + +
+ + +
+ + + +
+ + +
+
+ +

已分配列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 序号订单编号订单状态快递商分配状态客户姓名手机号地址配送日期操作
+ + +
已分配
+
待分配
+
+
+ + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/despatch/despatchSuccessList.js b/src/main/webapp/WEB-INF/views/src/views/despatch/despatchSuccessList.js new file mode 100644 index 0000000..5e5e7d5 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/despatch/despatchSuccessList.js @@ -0,0 +1,147 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "OrderAPI", "$modal", "$ugDialog","ExpressAPI","$filter", function($scope, OrderAPI, $modal, $ugDialog,ExpressAPI,$filter){ + $scope.orderList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + appointmentTimeStart:{ + opened:false + }, + appointmentTimeEnd:{ + opened:false + } + }; + $scope.openDate = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.appointmentTimeStart.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.appointmentTimeEnd.opened = true; + } + }; + + $scope.queryParam = { + appointmentTimeStart :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + appointmentTimeEnd :$filter('date')(new Date(new Date().getTime()+86400000), 'yyyy-MM-dd') + }; + + $scope.getOrderList = function(){ + //显示已分配的 + OrderAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + appointmentTimeStart:$scope.queryParam.appointmentTimeStart, + appointmentTimeEnd:$scope.queryParam.appointmentTimeEnd, + hasNoShowCancel:true, + hasShowDespatch:true //显示已分配的 + }, function(data){ + $scope.orderList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getOrderList; + }); + }; + + $scope.pageSetting = { + pageSize:10, + pageNum:1 + }; + //查询快递商 + $scope.expressList = []; + $scope.getExpressList = function(){ + ExpressAPI.query({ + limit:$scope.pageSetting.pageSize, + offset:$scope.pageSetting.pageNum, + keyword:$scope.queryParam.keyword + },function(data){ + $scope.expressList = data.data; + }); + } + //选择快递商 + $scope.choseExpressUser = function(index){ + $scope.currentCustomer = $scope.expressList[index]; + }; + $scope.getOrderList(); + $scope.getExpressList(); + + $scope.bindExpress = function(index){ + if(!$scope.currentCustomer){ + $ugDialog.warn("请选择运输的快递商"); + return; + } + var orderNos = []; + orderNos.push($scope.orderList[index].orderNo); + ExpressAPI.bindExpress({ + expressId:$scope.currentCustomer.id, + orderNos:orderNos + }, function(){ + $scope.getOrderList(); + $scope.getExpressList(); + }) + }; + $scope.unbindExpress = function(index){ + var orderNos = []; + orderNos.push($scope.orderList[index].orderNo); + ExpressAPI.unbindExpress({ + orderNos:orderNos + }, function(){ + $scope.getOrderList(); + $scope.getExpressList(); + }) + } + + //批量分配 + $scope.chooseOrder = []; + $scope.chooseAllCheck = {}; + $scope.checkedAllOrder = function() { + if($scope.chooseAllCheck.isCheckOrder == 0){ + $scope.chooseOrder.splice(0, $scope.chooseOrder.length); + for (var i = 0; i < $scope.orderList.length; i++) { + var obj = $scope.orderList[i]; + if(obj.expressName == null){ + $scope.chooseOrder.push(obj); + } + } + }else{ + $scope.chooseOrder.splice(0, $scope.chooseOrder.length); + } + }; + + $scope.changeOrderList = function(){ + if($scope.chooseOrder.length == $scope.orderList.length){ + $scope.isCheckCombine = 0; + }else{ + $scope.isCheckCombine = 1; + } + }; + + $scope.batchBindExpress = function(){ + if(!$scope.currentCustomer){ + $ugDialog.warn("请选择运输的快递商"); + return; + } + var orderNos = []; + for(var i in $scope.chooseOrder){ + orderNos.push($scope.chooseOrder[i].orderNo); + } + ExpressAPI.bindExpress({ + expressId:$scope.currentCustomer.id, + orderNos:orderNos + }, function(){ + $scope.getOrderList(); + $scope.getExpressList(); + }) + }; + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/despatch/despatch_module.js b/src/main/webapp/WEB-INF/views/src/views/despatch/despatch_module.js new file mode 100644 index 0000000..e8c093d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/despatch/despatch_module.js @@ -0,0 +1,50 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/despatch/despatchJob", + "views/despatch/despatchSuccessList", + "views/despatch/takeDelivery" +],function (despatchJob,despatchSuccessList,takeDelivery) { + angular.module('DMS.despatch', [ + "permission" + ]).config(["$stateProvider", function($stateProvider){ + $stateProvider + .state('despatch_job', { + url: '/despatch', + templateUrl: 'views/despatch/despatchJob.html', + data:{ + permissions:{ + only:["DESPATCH_JOB"], + redirectTo:"unauthorized" + } + }, + controller: despatchJob + }) + + .state('despatchSuccessList', { + url: '/despatchSuccessList', + templateUrl: 'views/despatch/despatchSuccessList.html', + data:{ + permissions:{ + only:["DESPATCH_JOB"], + redirectTo:"unauthorized" + } + }, + controller: despatchSuccessList + }) + + .state('despatch_operation', { + url: '/takeDelivery', + templateUrl: 'views/despatch/takeDelivery.html', + data:{ + permissions:{ + only:["DESPATCH_OPERATION"], + redirectTo:"unauthorized" + } + }, + controller: takeDelivery + }) + + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/despatch/takeDelivery.html b/src/main/webapp/WEB-INF/views/src/views/despatch/takeDelivery.html new file mode 100644 index 0000000..d18c112 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/despatch/takeDelivery.html @@ -0,0 +1,310 @@ + + + +
+ + +
+
+ +
+
+ +

分配列表

+
+ +
+ +
+ +
+ + +
+
+ 工作区 +
+
+
+ +
+
+
+
+
+
+
+
+ +
+ +
+
+ +

未提货列表

+
+ +
+ +
+ +
+ + +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
序号订单编号订单状态快递商分配状态客户姓名手机号地址配送时间总箱数/已扫描箱数
已分配{{order.totalBoxNum}}/{{order.expressScanBoxNum}}
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + + +
+ +
+
+ +

已提货列表

+
+ +
+ +
+ +
+ + +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 序号订单编号订单状态快递商分配状态客户姓名手机号地址配送时间操作
+ + +
已分配
+
待分配
+
+
+ + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/despatch/takeDelivery.js b/src/main/webapp/WEB-INF/views/src/views/despatch/takeDelivery.js new file mode 100644 index 0000000..f74ed0e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/despatch/takeDelivery.js @@ -0,0 +1,150 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "$modal", "$ugDialog","ExpressAPI", "OrderAPI","$filter",function($scope,$modal, $ugDialog,ExpressAPI,OrderAPI,$filter){ + //已分配未提货订单 + $scope.orderTakeDeliveryList = []; + $scope.pageInfoTakeDeliverySetting = { + pageSize:10, + pageNum:1 + }; + + + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + startTime:{ + opened:false + }, + endTime:{ + opened:false + }, + takeDeliveryStartTime:{ + opened:false + }, + takeDeliveryEndTime:{ + opened:false + } + }; + $scope.openDatepicker = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 1){ + $scope.datepickerSetting.startTime.opened = true; + }else if(index == 2){ + $scope.datepickerSetting.endTime.opened = true; + }else if(index ==3){ + $scope.datepickerSetting.takeDeliveryStartTime.opened = true; + }else if(index == 4){ + $scope.datepickerSetting.takeDeliveryEndTime.opened = true; + } + }; + + + $scope.queryTakeDeliveryParam = { + takeDeliveryStartTime :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + takeDeliveryEndTime :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd') + }; + + + $scope.getOrderTakeDeliveryList = function(){ + //查询已分配未提货的订单 + ExpressAPI.noScanOrder({ + limit:$scope.pageInfoTakeDeliverySetting.pageSize, + offset:$scope.pageInfoTakeDeliverySetting.pageNum, + keyword:$scope.queryTakeDeliveryParam.keyword, + startTime:$scope.queryTakeDeliveryParam.takeDeliveryStartTime, + endTime:$scope.queryTakeDeliveryParam.takeDeliveryEndTime + }, function(data){ + $scope.orderTakeDeliveryList = data.data; + $scope.pageInfoTakeDeliverySetting = data.pageInfo; + $scope.pageInfoTakeDeliverySetting.loadData = $scope.getOrderTakeDeliveryList; + }); + }; + $scope.getOrderTakeDeliveryList(); + + $scope.orderList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + + $scope.queryParam = { + startTime :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + endTime :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd') + }; + + $scope.getOrderList = function(){ + //查询提货的订单 + ExpressAPI.queryOrder({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + hasNoShowCancel:true + }, function(data){ + $scope.orderList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getOrderList; + }); + }; + + $scope.getOrderList(); + + //扫描订单编号 + $scope.saoOrderNoEvent = function(e){ + var keycode = window.event?e.keyCode:e.which; + if(keycode==13){ + $scope.takeDelivery(); + } + } + + // + $scope.takeDelivery = function(){ + if(!$scope.boxNo){ + $ugDialog.warn("请扫描条形码"); + return; + } + + ExpressAPI.takeDelivery({ + boxNo:$scope.boxNo + }, function(){ + $ugDialog.alert("提货成功"); + $scope.getOrderList(); + $("#boxNo").focus(); + $("#boxNo").select(); + $("#boxNo").val(""); + $scope.getOrderTakeDeliveryList(); + },function(data){ + $ugDialog.warn(data.data.message); + $("#boxNo").focus(); + $("#boxNo").select(); + $("#boxNo").val(""); + }) + } + + $scope.unTakeDelivery = function(orderNo){ + ExpressAPI.unTakeDelivery({ + orderNo:orderNo + }, function(){ + $ugDialog.alert("取消提货成功"); + $scope.getOrderList(); + $("#boxNo").focus(); + $("#boxNo").select(); + $("#boxNo").val(""); + },function(data){ + $ugDialog.warn(data.data.message) + $("#boxNo").focus(); + $("#boxNo").select(); + $("#boxNo").val(""); + }) + } + + $scope.exportExcel = function(type){ + window.location.href = "/export/exportTakeDeliveryExcel?startTime="+$("#startTimeId").val()+"&endTime="+$("#endTimeId").val()+"&type="+type; + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/includes/left-panel.html b/src/main/webapp/WEB-INF/views/src/views/includes/left-panel.html new file mode 100644 index 0000000..3887475 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/includes/left-panel.html @@ -0,0 +1,240 @@ + + + + + + + + +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + + +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+ +
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ diff --git a/src/main/webapp/WEB-INF/views/src/views/order/order.js b/src/main/webapp/WEB-INF/views/src/views/order/order.js new file mode 100644 index 0000000..edcb7d4 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/order/order.js @@ -0,0 +1,128 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "OrderAPI", "$modal", "$ugDialog","UserAPI","$filter", function($scope, OrderAPI, $modal, $ugDialog,UserAPI,$filter){ + + $scope.managers = []; + $scope.getCustomerManagersList = function(){ + UserAPI.getCustomerManagerList({ + userType:"customer_manager" + },function(data){ + $scope.managers = data; + }); + } + $scope.getCustomerManagersList(); + + $scope.orderList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + orderCreateTimeStart:{ + opened:false + }, + orderCreateTimeEnd:{ + opened:false + } + }; + $scope.openDate = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.orderCreateTimeStart.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.orderCreateTimeEnd.opened = true; + } + }; + + $scope.queryParam = { + orderCreateTimeStart :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + orderCreateTimeEnd:$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd') + }; + + $scope.getOrderList = function(){ + OrderAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + orderCreateTimeStart:$scope.queryParam.orderCreateTimeStart, + orderCreateTimeEnd: $scope.queryParam.orderCreateTimeEnd, + couponNumber:$scope.queryParam.couponNumber, + hasNoShowCancel:false + }, function(data){ + $scope.orderList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getOrderList; + }); + }; + $scope.cancelOrder = function(index){ + $ugDialog.confirm("是否取消此订单?").then(function(){ + OrderAPI.cancel({ + id: $scope.orderList[index].id + }, function(){ + $scope.getOrderList(); + }); + }) + }; + $scope.updateOrder = function(index){ + $scope.open(angular.copy($scope.orderList[index])); + }; + $scope.viewOrder = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'viewOrderDetail.html', + resolve: { + CurrentOrder: function(){ + return angular.copy($scope.orderList[index]); + } + }, + controller: ["$scope", "OrderAPI", "CurrentOrder", "$modalInstance", function ($scope, OrderAPI, CurrentOrder, $modalInstance) { + $scope.order = {}; + if(CurrentOrder){ + $scope.order = CurrentOrder; + } + $scope.setting = { + pageInfo : { + pageSize:30, + pageNum:1 + } + }; + OrderAPI.getItemList({ + limit: $scope.setting.pageInfo.pageSize, + offset: $scope.setting.pageInfo.pageNum, + id:$scope.order.id, + orderNo:$scope.order.orderNo + }, function(data){ + $scope.order.itemList = data.data; + $scope.calTotalItem(); + }); + $scope.calTotalItem = function(){ + $scope.totalItem = {}; + var totalNumber = 0; + var totalPrice = 0; + for (var i = 0; i < $scope.order.itemList.length; i++) { + var obj = $scope.order.itemList[i]; + totalNumber += obj.itemQty; + totalPrice += (obj.itemQty * obj.itemPrice); + } + $scope.totalItem.totalNumber = totalNumber; + $scope.totalItem.totalPrice = totalPrice; + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function () { + $scope.getOrderList(); + }); + }; + $scope.getOrderList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/order/order_create.html b/src/main/webapp/WEB-INF/views/src/views/order/order_create.html new file mode 100644 index 0000000..b31a057 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/order/order_create.html @@ -0,0 +1,749 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

创建订单

+
+ +
+ +
+ +
+ + +
+
+ +
+ 订单类型 + +
+ +
+ + + +
+
+ +
+ + +
+ 客户信息 +
+ +
+
+ + + + + + + + + + + +
+
+ +
+ +
+
+
+ +
+
+ + + + +
+
+ +
+ + +
+
+
+ +
+
+ + + + + + + +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ + +
+ +
+ + +
+
+ +
+ + +
+ +
+ +
+ +
+
+ + +
+
+ +
+
+ +
+
+ +
+ +
+ +
+ +
+
+
+ + +
+
+
+ +
+
+ + + + +
+
+ +
+ +
+ +
+ +
+
+
+
+ +
+ +
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+ 订购产品 +
+
+
+
+
+
+ +

产品分类

+
+
+
+
+
+
+
    +
  • +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
可选购产品
序号名称规格单价折扣价库存操作
{{item.itemName}}{{item.spec}}{{item.sellPrice | number:2}}{{item.discountPrice | number:2}}{{item.stockNum}} +
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
已选购产品*
序号名称规格单价折扣价份数总价操作
{{choseItem.itemName}}{{choseItem.spec}}{{choseItem.sellPrice | number:2}}{{choseItem.discountPrice | number:2}}{{choseItem.itemQty | number:2}}{{totalItemPrice(choseItem) | number:2}} +
+ + + +
+
合计{{totalItem.totalNumber | number:2}}{{totalItem.totalPrice | number:2}} +
+ + + +
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ 订单金额 +
+ +
+ + + +
+ +
+ + + +
+
+
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+
+ +
+ + +
+ 付款方式 +
+ + +
+ + + + + + + + +
+
+
+ + +
+ + + + + + + + + + + + + + + + + +
+
+
+ +
+ 订单快照 +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + + + + + + + +
+
+
+ +
+ + + + + + + + + (附加付款金额:{{order.otherPaAmount}}) +
+
+
+ +
+ + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
已选购产品
序号名称单价折扣价份数总价
{{choseItem.itemName}}{{choseItem.sellPrice | number:2}}{{choseItem.discountPrice | number:2}}{{choseItem.itemQty | number:2}}{{totalItemPrice(choseItem) | number:2}}
合计{{totalItem.totalNumber | number:2}}{{totalItem.totalPrice | number:2}}
+
+
+
+
+
+ 错误信息 +
+
+
{{errors.message}}
+
+
+
+
+
+
+ + + +
+
+
+ +
+
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + + + + + diff --git a/src/main/webapp/WEB-INF/views/src/views/order/order_packing.html b/src/main/webapp/WEB-INF/views/src/views/order/order_packing.html new file mode 100644 index 0000000..97b046f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/order/order_packing.html @@ -0,0 +1,674 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

待装箱订单列表

+
+ +
+ +
+ +
+ + +
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 订单编号客户经理收货人批次号订单状态任务负责人任务分配时间任务开始时间任务完成时间装箱任务状态操作
+ + +
+ + + + + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + + + +
+ + +
+ +
+ +

订单商品装箱汇总

+
+ +
+ +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
序号商品代码商品名称已装数量/总数量商品装箱状态
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ +
+
+ 订单备注:{{newCurrentPackingTask.remark}} +
+
+ +
+ + +
+ +
+ +

当前装箱订单列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+ + + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
箱位号装箱编号订单编号收货人创建时间装箱数订单状态任务状态操作
+
+ + + + | + + + + | + + + + + +
+
+
暂无数据
+
+
+
+ +
+ +
+ + +
+ + + + + + +
+ + +
+ +
+ +

放入箱位号

+
+ +
+ +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + +
+ + +
+ + + + +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/order/order_update.html b/src/main/webapp/WEB-INF/views/src/views/order/order_update.html new file mode 100644 index 0000000..373a2a3 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/order/order_update.html @@ -0,0 +1,634 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

编辑订单

+
+ +
+ +
+ +
+ + +
+
+ +
+ 订单类型 +
+ +
+ +
+
+
+ +
+ + + + +
+
+ +
+ + +
+ 客户信息 +
+ +
+ + + + + +
+ +
+ +
+
+
+ +
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+ + +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ + +
+ +
+ + +
+
+ + +
+
+ +
+
+ +
+
+ +
+ +
+ +
+ +
+
+
+ + +
+
+
+ +
+
+ + + + +
+
+ +
+ +
+ +
+ +
+
+
+
+ +
+ +
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ 订购产品 +
+
+
+
+
+
+ +

产品分类

+
+
+
+
+
+
+
    +
  • +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
可选购产品
序号名称规格单价折扣价库存数操作
{{item.itemName}}{{item.spec}}{{item.sellPrice | number:2}}{{item.discountPrice | number:2}}{{item.stockNum}} +
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
已选购产品*
序号名称规格单价折扣价份数总价操作
{{choseItem.itemName}}{{choseItem.spec}}{{choseItem.sellPrice | number:2}}{{choseItem.discountPrice | number:2}}{{choseItem.itemQty | number:2}}{{totalItemPrice(choseItem) | number:2}} +
+ + + +
+
合计{{totalItem.totalNumber | number:2}}{{totalItem.totalPrice | number:2}} +
+ + + +
+
+
+
+ + + + + + + + +
+
+ +
+ 订单金额 +
+ +
+ + + +
+ +
+ + + +
+
+
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+
+ +
+ + +
+ 付款方式 +
+ + +
+ + + + + + + + +
+
+
+ +
+ 订单快照 +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + + + + + + + +
+
+
+ +
+ +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
已选购产品
序号名称单价份数总价
{{choseItem.itemName}}{{choseItem.sellPrice | number:2}}{{choseItem.itemQty | number:2}}{{totalItemPrice(choseItem) | number:2}}
合计{{totalItem.totalNumber | number:2}}{{totalItem.totalPrice | number:2}}
+
+
+
+
+
+ 错误信息 +
+
+
{{errors.message}}
+
+
+
+
+
+
+ + +
+
+
+ +
+
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/order/packing.js b/src/main/webapp/WEB-INF/views/src/views/order/packing.js new file mode 100644 index 0000000..6686af4 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/order/packing.js @@ -0,0 +1,153 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PackingAPI", "$modal", "$ugDialog","UserAPI", function($scope, PackingAPI, $modal, $ugDialog,UserAPI){ + $scope.managers = []; + $scope.getCustomerManagersList = function(){ + UserAPI.getCustomerManagerList({ + userType:"customer_manager" + },function(data){ + $scope.managers = data; + }); + }; + $scope.getCustomerManagersList(); + + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + packingTaskCreateTimeStart:{ + opened:false + }, + packingTaskCreateTimeEnd:{ + opened:false + } + }; + $scope.open = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.packingTaskCreateTimeStart.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.packingTaskCreateTimeEnd.opened = true; + } + }; + + $scope.currentDate = function(date){ + var myDate = date; + var fullYear = myDate.getFullYear(); //获取完整的年份(4位,1970-????) + var month = myDate.getMonth() + 1; //获取当前月份(0-11,0代表1月) + if(month < 10){ + month = '0'+month; + } + var date = myDate.getDate(); //获取当前日(1-31) + if(date < 10){ + date = '0'+date; + } + return fullYear+"-"+month+"-"+date; + }; + + $scope.packingList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = { + packingTaskCreateTimeStart :$scope.currentDate(new Date()), + packingTaskCreateTimeEnd:$scope.currentDate(new Date()) + }; + + $scope.getPackingList = function(){ + PackingAPI.getPackingOrderList({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + isHasPackingTaskUserId:true, + packingTaskCreateTimeStart:$scope.queryParam.packingTaskCreateTimeStart, + packingTaskCreateTimeEnd:$scope.queryParam.packingTaskCreateTimeEnd, + keyword:$scope.queryParam.keyword, + consigneeName:$scope.queryParam.consigneeName, + managerId:$scope.queryParam.managerId + }, function(data){ + $scope.packingList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPackingList; + }); + }; + $scope.getPackingList(); + $scope.showPackingDetail = function(index){ + var modalInstance = $modal.open({ + size:'lg', + templateUrl: 'viewPackingDetail.html', + resolve: { + choseOrder: function(){ + return $scope.packingList[index]; + } + }, + controller: ["$scope", "choseOrder", "$modalInstance", function ($scope, choseOrder, $modalInstance) { + $scope.choseOrder = choseOrder || {}; + $scope.orderItemPageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.packingRecordPageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.viewOrderPacking = function(index){ + $scope.choseOrder = $scope.currentPackingBoxList[index]; + $scope.getPackingOrderItemList(); + $scope.packingRecordList = []; + $scope.errors = null; + }; + $scope.queryParam = {}; + $scope.getPackingOrderItemList = function(){ + if($scope.choseOrder && + $scope.choseOrder.id){ + PackingAPI.getPackingOrderItemList({ + limit:$scope.orderItemPageInfoSetting.pageSize, + offset:$scope.orderItemPageInfoSetting.pageNum, + id:1, + keyword:$scope.queryParam.packingOrderKeyword, + orderId:$scope.choseOrder.id + }, function(data){ + $scope.packingOrderItemList = data.data; + $scope.orderItemPageInfoSetting = data.pageInfo; + $scope.orderItemPageInfoSetting.loadData = $scope.getPackingOrderItemList; + }); + } + }; + $scope.choseOrderItem = function(index){ + $scope.choseOrder.choseOrderItem = $scope.packingOrderItemList[index]; + $scope.getPackingRecordList(); + }; + $scope.getPackingRecordList = function(){ + if($scope.choseOrder && + $scope.choseOrder.choseOrderItem && + $scope.choseOrder.choseOrderItem.orderItemId){ + PackingAPI.getPackingRecordList({ + limit:$scope.packingRecordPageInfoSetting.pageSize, + offset:$scope.packingRecordPageInfoSetting.pageNum, + id:$scope.choseOrder.id, + keyword:$scope.queryParam.packingRecordKeyword, + orderItemId:$scope.choseOrder.choseOrderItem.orderItemId + }, function(data){ + $scope.packingRecordList = data.data; + $scope.packingRecordPageInfoSetting = data.pageInfo; + $scope.packingRecordPageInfoSetting.loadData = $scope.getPackingRecordList; + }); + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function (data) { + // $scope.choseItem(index, parseFloat(data.number)); + }); + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/order/packingTaskSuccessList.js b/src/main/webapp/WEB-INF/views/src/views/order/packingTaskSuccessList.js new file mode 100644 index 0000000..e58b516 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/order/packingTaskSuccessList.js @@ -0,0 +1,71 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "OrderAPI", "$modal", "$ugDialog", "UserAPI", "PackingAPI", function($scope, OrderAPI, $modal, $ugDialog, UserAPI, PackingAPI){ + $scope.managers = []; + $scope.getCustomerManagersList = function(){ + UserAPI.getCustomerManagerList({ + userType:"customer_manager" + },function(data){ + $scope.managers = data; + }); + } + $scope.getCustomerManagersList(); + + $scope.orderList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + + $scope.queryParam = {}; + $scope.getOrderList = function(){ + PackingAPI.getPackingOrderList({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + consigneeName:$scope.queryParam.consigneeName, + managerId:$scope.queryParam.managerId, + isShowPackingAssigns:true + }, function(data){ + $scope.orderList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getOrderList; + }); + }; + + $scope.unbindPackingTask = function(index){ + var orderNos = []; + orderNos.push($scope.orderList[index].orderNo); + PackingAPI.unbindPackingTask({ + orderNos:orderNos + }, function(){ + $scope.getOrderList(); + $scope.getCustomerManagersList(); + }) + } + + $scope.removePacking = function(index){ + $ugDialog.confirm("是否删除此装箱记录?").then(function(){ + PackingAPI.delete({ + id: $scope.packingList[index].id + }, function(){ + $scope.getPackingList(); + }); + }) + }; + $scope.updatePacking = function(index){ + $scope.open(angular.copy($scope.packingList[index])); + }; + $scope.getOrderList(); + + $scope.changeOrderList = function(){ + if($scope.chooseOrder.length == $scope.orderList.length){ + $scope.isCheckCombine = 0; + }else{ + $scope.isCheckCombine = 1; + } + }; + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/order/purchase.js b/src/main/webapp/WEB-INF/views/src/views/order/purchase.js new file mode 100644 index 0000000..7d93466 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/order/purchase.js @@ -0,0 +1,160 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PurchaseAPI", "$modal", "$ugDialog","$filter", function($scope, PurchaseAPI, $modal, $ugDialog,$filter){ + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭", + "format":"yyyy-MM-dd" + }, + startTime:{ + opened:false + }, + endTime:{ + opened:false + }, + appointmentTimeStart:{ + opened:false + }, + appointmentTimeEnd:{ + opened:false + } + }; + $scope.openDatepicker = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 1){ + $scope.datepickerSetting.startTime.opened = true; + }else if(index == 2){ + $scope.datepickerSetting.endTime.opened = true; + }else if(index == 3){ + $scope.datepickerSetting.appointmentTimeStart.opened = true; + }else if(index == 4){ + $scope.datepickerSetting.appointmentTimeEnd.opened = true; + } + }; + $scope.purchasePlan = {}; + $scope.purchaseList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = { + purchaseStatus : "0", + startTime:$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + endTime :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd') + }; + $scope.getPurchaseList = function(){ + PurchaseAPI.query({ + startTime: $scope.queryParam.startTime, + endTime:$scope.queryParam.endTime, + purchaseStatus:$scope.queryParam.purchaseStatus, + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + sellUnit:$scope.queryParam.sellUnit + }, function(data){ + $scope.purchaseList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPurchaseList; + }); + }; + + $scope.finish = function(index){ + $ugDialog.confirm("是否已完成此产品的采购?").then(function(){ + PurchaseAPI.update({ + id: $scope.purchaseList[index].purchaseId, + purchaseStatus:1 + }, function(){ + $scope.getPurchaseList(); + }); + }) + }; + $scope.removePurchase = function(index){ + $ugDialog.confirm("是否删除此订单?").then(function(){ + PurchaseAPI.delete({ + id: $scope.purchaseList[index].purchaseId + }, function(){ + $scope.getPurchaseList(); + }); + }) + }; + $scope.createPlan = function(){ + PurchaseAPI.save({ + orderDate:new Date() + }, function(data){ + $scope.getPurchaseList(); + }, function(data){ + $ugDialog.warn(data.data.message); + }); + } + + $scope.createPlanAppointmenTime = function(){ + if($scope.purchasePlan.appointmentTimeEnd == undefined || $scope.purchasePlan.appointmentTimeStart == undefined){ + $ugDialog.warn("请输入起始结束日期"); + return false; + } + PurchaseAPI.save({ + appointmentTimeStart:$scope.purchasePlan.appointmentTimeStart, + appointmentTimeEnd:$scope.purchasePlan.appointmentTimeEnd + }, function(data){ + $scope.getPurchaseList(); + }, function(data){ + $ugDialog.warn(data.data.message); + }); + } + + $scope.updatePurchase = function(index){ + $scope.open(angular.copy($scope.purchaseList[index])); + }; + $scope.open = function (purchase) { + var modalInstance = $modal.open({ + templateUrl: 'addPurchase.html', + resolve: { + CurrentPurchase: function(){ + return purchase; + } + }, + controller: ["$scope", "PurchaseAPI", "CurrentPurchase", "$modalInstance", function ($scope, PurchaseAPI, CurrentPurchase, $modalInstance) { + $scope.purchase = {}; + if(CurrentPurchase){ + $scope.purchase = CurrentPurchase; + } + $scope.errors = null; + $scope.addPurchaseForm = {}; + $scope.savePurchase = function(){ + $scope.errors = null; + if($scope.addPurchaseForm.validator.form()){ + if($scope.purchase.id){ + PurchaseAPI.update($scope.purchase, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + PurchaseAPI.save($scope.purchase, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function () { + $scope.getPurchaseList(); + }); + }; + $scope.exportExcel = function(){ + window.location.href = "/export/exportPurchaseExcel"; + } + $scope.getPurchaseList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/package/packageTaskDown.html b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskDown.html new file mode 100644 index 0000000..e28f84c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskDown.html @@ -0,0 +1,226 @@ + + + +
+ + +
+ + + +
+ + +
+
+ +

包装工列表

+
+ +
+ +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + +
序号包装工操作
+
+ + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+
+ + +
+
+ +

分配列表

+
+ +
+ +
+ +
+ + +
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
采购单号产品名称规格数量已分配数操作
{{purchase.spec}}{{purchase.itemUnit}} + +
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/package/packageTaskDown.js b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskDown.js new file mode 100644 index 0000000..0398b75 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskDown.js @@ -0,0 +1,92 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PurchaseAPI", "$modal", "$ugDialog","UserAPI", function($scope, PurchaseAPI, $modal, $ugDialog,UserAPI){ + $scope.purchaseList = []; + $scope.pageInfoSetting = { + pageSize:100, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getPurchaseList = function(){ + PurchaseAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + isDistribute:1, + sellUnit:0 + }, function(data){ + $scope.purchaseList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPurchaseList; + }); + }; + //查询包装工 + $scope.packageUserList = []; + UserAPI.getCustomerManagerList({ + userType:"baozhuangzu" + },function(data){ + $scope.packageUserList = data; + }); + //选择包装工 + $scope.chosePackageUser = function(index){ + $scope.currentCustomer = $scope.packageUserList[index]; + }; + + $scope.openDistributeModal = function (currentPurchase) { + if($scope.currentCustomer == null){ + $ugDialog.alert("请选择包装工人"); + return false; + } + var modalInstance = $modal.open({ + templateUrl: 'addPackageTask.html', + controller: ["$scope", "PackageTaskAPI", "$modalInstance","currentPurchase","UserAPI", "$rootScope", function ($scope, PackageTaskAPI, $modalInstance,currentPurchase,UserAPI,$rootScope) { + $scope.packageUserList = []; + $scope.ugSelect2Config = {}; + UserAPI.getCustomerManagerList({ + userType:"baozhuangzu" + },function(data){ + $scope.packageUserList = data; + }); + $scope.company = {}; + if(currentPurchase){ + $scope.packageTask = currentPurchase; + $scope.packageTask.noDistributeValue = $scope.packageTask.totalItemQty - $scope.packageTask.distributeValue ; + } + $scope.errors = {}; + $scope.addPackageTaskForm = {}; + $scope.savePackageTask = function(){ + $scope.errors = {}; + if($scope.packageTask.countValue > $scope.packageTask.noDistributeValue){ + $scope.errors.message = "不能大于未分配数"; + return; + } + if($scope.addPackageTaskForm.validator.form()){ + PackageTaskAPI.save($scope.packageTask, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + resolve: { + currentPurchase: function () { + currentPurchase.jobUser = $scope.currentCustomer.customerMangerId; + currentPurchase.jobUserName = $scope.currentCustomer.customerManger; + return currentPurchase; + } + } + }); + modalInstance.result.then(function () { + $scope.getPurchaseList(); + }); + }; + + $scope.getPurchaseList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/package/packageTaskList.html b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskList.html new file mode 100644 index 0000000..692d7cd --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskList.html @@ -0,0 +1,241 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

包装任务列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
采购单号产品名称包装份数已包装份数未包装份数任务创建时间任务开始时间任务完成时间任务执行人任务状态操作
{{packageTask.jobCreateTime | date: 'yyyy-MM-dd HH:mm:ss'}}{{packageTask.jobBeginTime | date: 'yyyy-MM-dd HH:mm:ss'}}{{packageTask.finishTime | date: 'yyyy-MM-dd HH:mm:ss'}}未开始包装中包装完成 +
+ + + + +
+
+ + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/package/packageTaskView.html b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskView.html new file mode 100644 index 0000000..32bdbec --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskView.html @@ -0,0 +1,153 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

包装任务看板

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
采购单号产品名称包装份数已包装份数未包装份数任务创建时间任务开始时间任务完成时间任务执行人任务状态
{{packageTask.jobCreateTime | date: 'yyyy-MM-dd HH:mm:ss'}}{{packageTask.jobBeginTime | date: 'yyyy-MM-dd HH:mm:ss'}}{{packageTask.finishTime | date: 'yyyy-MM-dd HH:mm:ss'}}未开始包装中包装完成
+
暂无包装任务
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/package/packageTaskView.js b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskView.js new file mode 100644 index 0000000..b3560e2 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/package/packageTaskView.js @@ -0,0 +1,55 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PackageTaskAPI", "$modal", "$ugDialog","$stateParams","$filter", function($scope, PackageTaskAPI, $modal, $ugDialog,$stateParams,$filter){ + + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + packageTaskCreateTimeStart:{ + opened:false + }, + packageTaskCreateTimeEnd:{ + opened:false + } + }; + $scope.open = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.packageTaskCreateTimeStart.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.packageTaskCreateTimeEnd.opened = true; + } + }; + + $scope.packageTaskList = []; + $scope.pageInfoSetting = { + pageSize:100, + pageNum:1 + }; + $scope.queryParam = { + packageTaskCreateTimeStart :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + packageTaskCreateTimeEnd:$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd') + }; + + $scope.getPackageTaskList = function(){ + PackageTaskAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + packageTaskCreateTimeStart:$scope.queryParam.packageTaskCreateTimeStart, + packageTaskCreateTimeEnd:$scope.queryParam.packageTaskCreateTimeEnd + }, function(data){ + $scope.packageTaskList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPackageTaskList; + }); + }; + $scope.getPackageTaskList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/package/packageWorking.html b/src/main/webapp/WEB-INF/views/src/views/package/packageWorking.html new file mode 100644 index 0000000..08627c2 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/package/packageWorking.html @@ -0,0 +1,156 @@ +
+ + +
+ + +
+ + +
+ +
+ +

包装页面

+
+ +
+ +
+ +
+ + +
+ +
+
+ 任务信息 +
+ +
+ {{packageTask.itemName}} +
+ +
+ {{packageTask.itemCode}} +
+ +
+ {{packageTask.spec}} +
+
+
+ +
+ {{packageTask.countValue}} +
+ +
+ {{packageTask.finishValue}} +
+ +
+ {{packageTask.noFinishValue}} +
+
+
+
+ 工作区 +
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
条码号产品编码操作
+ + + + + + +
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/package/packageWorking.js b/src/main/webapp/WEB-INF/views/src/views/package/packageWorking.js new file mode 100644 index 0000000..8bcfbcc --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/package/packageWorking.js @@ -0,0 +1,247 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PackageTaskAPI", "$modal", "$ugDialog", "$stateParams", "JobOperationLogAPI", function ($scope, PackageTaskAPI, $modal, $ugDialog, $stateParams, JobOperationLogAPI) { + $scope.packageTaskList = []; + $scope.pageInfoSetting = { + pageSize: 1, + pageNum: 1 + }; + $scope.queryParam = {}; + $scope.getPackageTaskList = function (id) { + PackageTaskAPI.query({ + limit: $scope.pageInfoSetting.pageSize, + offset: $scope.pageInfoSetting.pageNum, + packageTaskId: id + }, function (data) { + $scope.packageTaskList = data.data; + $scope.packageTask = $scope.packageTaskList[0]; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPackageTaskList; + }); + }; + + $scope.jobOperationLogList = []; + $scope.operationLogPageInfoSetting = { + pageSize: 50, + pageNum: 1 + }; + $scope.getJobOperationLogList = function (id) { + JobOperationLogAPI.query({ + limit: $scope.operationLogPageInfoSetting.pageSize, + offset: $scope.operationLogPageInfoSetting.pageNum, + jobId: id + }, function (data) { + $scope.jobOperationLogList = data.data; + $scope.operationLogPageInfoSetting = data.pageInfo; + $scope.operationLogPageInfoSetting.loadData = $scope.getPackageTaskList; + }); + }; + + /** + * 下一个按钮功能 + * @param id + */ + $scope.nextPackageTask = function (id) { + PackageTaskAPI.query({ + limit: $scope.pageInfoSetting.pageSize, + offset: $scope.pageInfoSetting.pageNum, + nextPackageTaskId: id + }, function (data) { + if (data.data.length == 0) { + $ugDialog.alert("无下一个任务了!") + return; + } + $scope.packageTaskList = data.data; + $scope.packageTask = $scope.packageTaskList[0]; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPackageTaskList; + $scope.getJobOperationLogList($scope.packageTask.id); + }); + } + //作废 + $scope.cancelJobOperationLog = function (index) { + var jobOperationLog = $scope.jobOperationLogList[index]; + JobOperationLogAPI.delete({ + id: jobOperationLog.id + }, function (data) { + $ugDialog.alert("作废成功"); + $scope.packageTask.finishValue -= 1; + $scope.packageTask.noFinishValue += 1; + $scope.getJobOperationLogList($stateParams.id) + }) + } + //回车生成条码 + $scope.printBarCodeEvent = function (e) { + var keycode = window.event ? e.keyCode : e.which; + if (keycode == 13) { + $scope.printBarCode(); + } + } + + $scope.printBarCode = function () { + if ($scope.packageTask.noFinishValue == 0) { + $ugDialog.warn("全部包装完成!请换下一个任务"); + $("#weight").focus(); + $("#weight").select(); + $("#weight").value(""); + return; + } + if ($scope.packageTask.weight == undefined) { + $ugDialog.warn("请称重!"); + $("#weight").focus(); + $("#weight").select(); + $("#weight").val(""); + return; + } + var max = parseFloat($scope.packageTask.spec) + parseFloat(($scope.packageTask.spec * 0.1)); + var min = parseFloat($scope.packageTask.spec); + if ($scope.packageTask.weight < min) { + $("#weight").focus(); + $("#weight").select(); + $("#weight").val(""); + return; + } + if ($scope.packageTask.weight.length > 4) { + $("#weight").focus(); + $("#weight").select(); + $("#weight").val(""); + return; + } + var barCode = $scope.packageTask.itemCode + "" + $scope.packageTask.weight + Math.floor(Math.random() * 10000); + var LODOP = getLodop(); +// if($scope.packageTask.weight > max){ +// //元素设置为readonly +// $("#weight").attr("readonly","readonly"); +// $ugDialog.confirm("超过最大重量,是否打印?").then(function(){ +// $scope.print(barCode); +// //去除input元素的readonly属性 +// $("#weight").removeAttr("readonly"); +// PackageTaskAPI.packageWorking({ +// id:$scope.packageTask.id, +// barCode:barCode +// },function(data){ +// $scope.packageTask.finishValue +=1; +// $scope.packageTask.noFinishValue -=1; +// $scope.getJobOperationLogList($stateParams.id) +// }) +// $("#weight").focus(); +// $("#weight").select(); +// $("#weight").val(""); +// },function(){ +// //去除input元素的readonly属性 +// $("#weight").removeAttr("readonly"); +// $("#weight").focus(); +// $("#weight").select(); +// $("#weight").val(""); +// }) +// }else{ + $scope.print(barCode); + PackageTaskAPI.packageWorking({ + id: $scope.packageTask.id, + barCode: barCode + }, function (data) { + $scope.packageTask.finishValue += 1; + $scope.packageTask.noFinishValue -= 1; + $scope.getJobOperationLogList($scope.packageTask.id) + //如果完成自动跳转到下一个任务 + if ($scope.packageTask.noFinishValue == 0) { + $scope.nextPackageTask($scope.packageTask.id); + } + }) + $("#weight").focus(); + $("#weight").select(); + $("#weight").val(""); +// } + } + + + //回车批量生成条码 + $scope.printBatchBarCodeEvent = function (e) { + var keycode = window.event ? e.keyCode : e.which; + if (keycode == 13) { + $scope.printBatchBarCode(); + } + } + + $scope.printBatchBarCode = function () { + if ($scope.packageTask.batch == undefined) { + $ugDialog.warn("请输入批量打印数量!"); + $("#batch").focus(); + $("#batch").select(); + $("#batch").val(""); + return; + } + if ($scope.packageTask.noFinishValue < $scope.packageTask.batch) { + $ugDialog.warn("输入的数量超过未包装数!"); + $("#batch").focus(); + $("#batch").select(); + $("#batch").val(""); + return; + } + + var LODOP = getLodop(); + var barCodes = ""; + for (var i = 0; i < $scope.packageTask.batch; i++) { + //重量默认商品规格 + var barCode = $scope.packageTask.itemCode + "" + $scope.packageTask.spec + Math.floor(Math.random() * (9999 - 1000 + 1) + 1000); + $scope.print(barCode); + $scope.packageTask.finishValue += 1; + $scope.packageTask.noFinishValue -= 1; + barCodes = barCodes + barCode + ","; + } + PackageTaskAPI.packageWorking({ + id: $scope.packageTask.id, + barCode: barCodes + }, function (data) { + $scope.getJobOperationLogList($scope.packageTask.id) + //如果完成自动跳转到下一个任务 + if ($scope.packageTask.noFinishValue == 0) { + $scope.nextPackageTask($scope.packageTask.id); + } + }); + $("#batch").focus(); + $("#batch").select(); + $("#batch").val(""); + } + + + $scope.print = function (barCode) { + var LODOP = getLodop(); + LODOP.PRINT_INITA(-6, 0, "56.3mm", "60.01mm", "商品条码打印"); + LODOP.ADD_PRINT_IMAGE(12, 128, 53, 45, ""); + LODOP.SET_PRINT_STYLEA(0, "Stretch", 2); + LODOP.ADD_PRINT_BARCODE(68, 9, "50.96mm", "10.21mm", "128B", barCode); + LODOP.ADD_PRINT_TEXT(138, 107, 91, 19, "采摘人:" + $scope.packageTask.caizaiUser); + LODOP.SET_PRINT_STYLEA(0, "FontName", "黑体"); + LODOP.SET_PRINT_STYLEA(0, "FontSize", 8); + LODOP.ADD_PRINT_TEXT(135, 19, 78, 19, "检验人:" + $scope.packageTask.jianceUser); + LODOP.SET_PRINT_STYLEA(0, "FontName", "黑体"); + LODOP.SET_PRINT_STYLEA(0, "FontSize", 8); + LODOP.ADD_PRINT_TEXT(109, 20, 158, 19, "产品名称:" + $scope.packageTask.itemName); + LODOP.SET_PRINT_STYLEA(0, "FontName", "黑体"); + LODOP.SET_PRINT_STYLEA(0, "FontSize", 8); + LODOP.ADD_PRINT_TEXT(151, 19, 100, 20, "采摘点:" + ($scope.packageTask.yieldly == null ? "无" : $scope.packageTask.yieldly)); + LODOP.SET_PRINT_STYLEA(0, "FontName", "黑体"); + LODOP.SET_PRINT_STYLEA(0, "FontSize", 8); + LODOP.ADD_PRINT_TEXT(167, 19, 137, 20, "采摘时间:6:00-9:00"); + LODOP.SET_PRINT_STYLEA(0, "FontName", "黑体"); + LODOP.SET_PRINT_STYLEA(0, "FontSize", 8); + LODOP.ADD_PRINT_TEXT(123, 20, 119, 19, "检测结果:μb=" + $scope.packageTask.nongCanLv); + LODOP.SET_PRINT_STYLEA(0, "FontName", "黑体"); + LODOP.SET_PRINT_STYLEA(0, "FontSize", 8); + + // LODOP.PRINT_DESIGN(); + LODOP.PRINT(); + } + var initialize = function () { + $("#weight").focus(); + $("#weight").select(); + $("#weight").val(""); + $scope.getPackageTaskList($stateParams.id); + $scope.getJobOperationLogList($stateParams.id); + } + initialize(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/pick/pick.js b/src/main/webapp/WEB-INF/views/src/views/pick/pick.js new file mode 100644 index 0000000..a9dfe56 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/pick/pick.js @@ -0,0 +1,140 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PickAPI", "CouponAPI","$modal", "$ugDialog","$stateParams", function($scope, PickAPI, CouponAPI,$modal, $ugDialog,$stateParams){ + + $scope.readCard = function(){ + var strls = ""; + var errorno = ""; + var BLOCK0_EN = 0x01;//读第一块的(16个字节) + var BLOCK1_EN = 0x02;//读第二块的(16个字节) + var BLOCK2_EN = 0x04;//读第四块的(16个字节) + + var EXTERNKEY = 0x10;//用明码认证密码,产品开发完成后,建议把密码放到设备的只写区,然后用该区的密码后台认证,这样谁都不知道密码是多少,需要这方面支持请联系 + //指定控制字 + var myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY; + //指定区号 + var myareano = 8; //指定为第8区 + //批定密码模式 + var authmode = 1; //大于0表示用A密码认证,推荐用A密码认证 + + //指定序列号,未知卡序列号时可指定为8个0 + var mypiccserial="00000000"; + + //指定密码,以下密码为厂家出厂密码 + var mypicckey = "ffffffffffff"; + strls=IcCardReader.piccreadex(myctrlword, mypiccserial,myareano,authmode,mypicckey); + errorno = strls.substr(0,4); + switch(errorno) + { + case "ER08": + alert("寻不到卡"); + break; + case "ER09": + alert("寻不到卡"); + break; + case "ER10": + alert("寻不到卡"); + break; + + case "ER11": + $ugDialog.alert("密码认证错误"); + break; + case "ER12": + $ugDialog.alert("密码认证错误"); + break; + case "ER13": + $ugDialog.alert("读卡错误"); + break; + + case "ER14": + $ugDialog.alert("写卡错误"); + break; + + case "ER21": + $ugDialog.alert("没找到动态库"); + break; + case "ER22": + $ugDialog.alert("动态库或驱动程序异常"); + break; + + case "ER23": + $ugDialog.alert("读卡器未插上或动态库或驱动程序异常"); + break; + case "ER24": + $ugDialog.alert("操作超时,一般是动态库没有反应"); + break; + case "ER25": + $ugDialog.alert("发送字数不够"); + break; + case "ER26": + $ugDialog.alert("发送的CRC错"); + break; + case "ER27": + $ugDialog.alert("接收的字数不够"); + break; + case "ER28": + $ugDialog.alert("接收的CRC错"); + break; + case "ER29": + $ugDialog.alert("函数输入参数格式错误,请仔细查看" ); + break; + default : + //读卡成功,其中ER00表示完全成功,ER01表示完全没读到卡数据,ER02表示仅读该卡的第一块成功,,ER02表示仅读该卡的第一二块成功,这是刷卡太快原因 + var e=new RegExp("F","g"); + $scope.pick.couponNo = strls.substr(14,32).replace(e,""); + $scope.pick.password = strls.substr(46,32).replace(e,""); + break; + } + if($scope.pick.couponNo){ + //查找卡信息 + CouponAPI.readCard({ + couponNo:$scope.pick.couponNo, + password:$scope.pick.password + }, function (data) { + if(data.userName == null || data.userName == undefined){ + $ugDialog.warn("卡不能识别!"); + $scope.pick.couponNo = ""; + $scope.pick.password = ""; + return; + }; + $scope.pick.userName = data.userName; + $scope.pick.phoneNumber = data.phoneNumber; + $scope.pick.couponNo = data.couponNo; + $scope.pick.couponPrice = data.couponPrice; + IcCardReader.pcdbeep(200);//100表示响100毫秒 + $("#pickWeight").focus(); + $("#pickWeight").select(); + }, function (data) { + $ugDialog.warn(data.data.error); + }) + } + } + + + $scope.pickForm = {}; + $scope.pickSave = function(){ + if($scope.pick.couponNo == "" || $scope.pick.couponNo == null || $scope.pick.couponNo == undefined ){ + $ugDialog.alert("请刷卡"); + return; + } + PickAPI.settleAccounts($scope.pick,function(){ + $ugDialog.alert("结算成功"); + $scope.pick = { + pickPayType:1 + } + }, function(data){ + IcCardReader.pcdbeep(200);//100表示响100毫秒 + $ugDialog.warn(data.data.error); + }) + } + + var initialize = function(){ + $scope.pick={ + pickPayType:1 + } + } + initialize(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/pick/pickCard.html b/src/main/webapp/WEB-INF/views/src/views/pick/pickCard.html new file mode 100644 index 0000000..70ded11 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/pick/pickCard.html @@ -0,0 +1,169 @@ +
+ + +
+ + +
+ + +
+ +
+ +

办新卡

+
+ +
+ +
+ +
+ + +
+
+
+
+
+ 工作区 +
+
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ 客户信息 +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ + {{member.name}} +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+ +
+
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+ +
+ +
+ +
+ diff --git a/src/main/webapp/WEB-INF/views/src/views/pick/pickCard.js b/src/main/webapp/WEB-INF/views/src/views/pick/pickCard.js new file mode 100644 index 0000000..5115c66 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/pick/pickCard.js @@ -0,0 +1,126 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "CouponAPI","CompanyAPI","PickAPI","$modal", "$ugDialog","$stateParams", function($scope, CouponAPI,CompanyAPI,PickAPI,$modal, $ugDialog,$stateParams){ + $scope.readCard = function(){ + var strls = ""; + var errorno = ""; + var BLOCK0_EN = 0x01;//读第一块的(16个字节) + var BLOCK1_EN = 0x02;//读第二块的(16个字节) + var BLOCK2_EN = 0x04;//读第四块的(16个字节) + var EXTERNKEY = 0x10;//用明码认证密码,产品开发完成后,建议把密码放到设备的只写区,然后用该区的密码后台认证,这样谁都不知道密码是多少,需要这方面支持请联系 + //指定控制字 + var myctrlword=BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY; + //指定区号 + var myareano = 8; //指定为第8区 + //批定密码模式 + var authmode = 1; //大于0表示用A密码认证,推荐用A密码认证 + //指定序列号,未知卡序列号时可指定为8个0 + var mypiccserial="00000000"; + //指定密码,以下密码为厂家出厂密码 + var mypicckey = "ffffffffffff"; + strls=IcCardReader.piccreadex(myctrlword, mypiccserial,myareano,authmode,mypicckey); + errorno = strls.substr(0,4); + switch(errorno) + { + case "ER08": + alert("寻不到卡"); + break; + case "ER09": + alert("寻不到卡"); + break; + case "ER10": + alert("寻不到卡"); + break; + case "ER11": + $ugDialog.alert("密码认证错误"); + break; + case "ER12": + $ugDialog.alert("密码认证错误"); + break; + case "ER13": + $ugDialog.alert("读卡错误"); + break; + case "ER14": + $ugDialog.alert("写卡错误"); + break; + case "ER21": + $ugDialog.alert("没找到动态库"); + break; + case "ER22": + $ugDialog.alert("动态库或驱动程序异常"); + break; + case "ER23": + $ugDialog.alert("读卡器未插上或动态库或驱动程序异常"); + break; + case "ER24": + $ugDialog.alert("操作超时,一般是动态库没有反应"); + break; + case "ER25": + $ugDialog.alert("发送字数不够"); + break; + case "ER26": + $ugDialog.alert("发送的CRC错"); + break; + case "ER27": + $ugDialog.alert("接收的字数不够"); + break; + case "ER28": + $ugDialog.alert("接收的CRC错"); + break; + case "ER29": + $ugDialog.alert("函数输入参数格式错误,请仔细查看" ); + break; + default : + //读卡成功,其中ER00表示完全成功,ER01表示完全没读到卡数据,ER02表示仅读该卡的第一块成功,,ER02表示仅读该卡的第一二块成功,这是刷卡太快原因 + var e=new RegExp("F","g"); + $scope.member.newCouponNo = strls.substr(14,32).replace(e,""); + $scope.member.newPassword = strls.substr(46,32).replace(e,""); + IcCardReader.pcdbeep(200);//100表示响100毫秒 + break; + } + } + $scope.companyList = []; + $scope.ugSelect2Config = {}; + $scope.pageSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.getCompanyList = function(){ + CompanyAPI.query({ + limit:$scope.pageSetting.pageSize, + offset:$scope.pageSetting.pageNum + }, function(data){ + $scope.companyList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCompanyList; + }); + }; + $scope.getCompanyList(); + $scope.changeCompany = function(id){ + for(var i in $scope.companyList){ + var company = $scope.companyList[i]; + if(company.id == parseInt(id)){ + $scope.companyCustomerManagers = company.companyCustomerManagers; + } + } + }; + //提交办卡 + $scope.pickCard = function(){ + alert($scope.member.newCouponNo); + if($scope.pickCardForm.validator.form()){ + PickAPI.pickCard($scope.member, function(){ + alert("办卡成功"); + }, function(data){ + alert(data.data.error); + }) + } + } + var initialize = function(){ + $scope.member = {}; + $scope.pickCardForm = {}; + } + initialize(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/pick/pick_module.js b/src/main/webapp/WEB-INF/views/src/views/pick/pick_module.js new file mode 100644 index 0000000..2d6b4f7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/pick/pick_module.js @@ -0,0 +1,59 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/pick/pick", + "views/pick/cardRecharge", + "views/pick/exchangeCard", + "views/pick/pickCard" +],function (pick,cardRecharge,exchangeCard,pickCard) { + angular.module('DMS.pick', [ + "permission" + ]).config(["$stateProvider", function($stateProvider){ + $stateProvider + .state('pick', { + url: '/pick', + templateUrl: 'views/pick/pick.html', + data:{ + permissions:{ + only:["PICK"], + redirectTo:"unauthorized" + } + }, + controller: pick + }) + .state('cardRecharge', { + url: '/cardRecharge', + templateUrl: 'views/pick/cardRecharge.html', + data:{ + permissions:{ + only:["CARD_RECHARGE"], + redirectTo:"unauthorized" + } + }, + controller: cardRecharge + }) + .state('exchangeCard', { + url: '/exchangeCard', + templateUrl: 'views/pick/exchangeCard.html', + data:{ + permissions:{ + only:["EXCHANGE_CARD"], + redirectTo:"unauthorized" + } + }, + controller: exchangeCard + }) + .state('pickCard', { + url: '/pickCard', + templateUrl: 'views/pick/pickCard.html', + data:{ + permissions:{ + only:["PICK_CARD"], + redirectTo:"unauthorized" + } + }, + controller: pickCard + }) + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/plan/basePlan.html b/src/main/webapp/WEB-INF/views/src/views/plan/basePlan.html new file mode 100644 index 0000000..63cf72d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/plan/basePlan.html @@ -0,0 +1,392 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

计划设定

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
计划名称配送频率(周)配送次数金额是否随机操作
+ 1周 + 2周 + 3周 + 4周 + + + + +
+ + + + | + + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/plan/plan_module.js b/src/main/webapp/WEB-INF/views/src/views/plan/plan_module.js new file mode 100644 index 0000000..d1c9580 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/plan/plan_module.js @@ -0,0 +1,34 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/plan/basePlan", + "views/plan/tablePlan" +],function (basePlan,tablePlan) { + angular.module('DMS.plan', ["permission"]).config(["$stateProvider", "$urlRouterProvider", "$httpProvider", function ($stateProvider, $urlRouterProvider, $httpProvider) { + + $stateProvider + .state('basePlan', { + url: '/basePlan', + templateUrl: 'views/plan/basePlan.html', + data:{ + permissions:{ + only:["BASE_PLAN"], + redirectTo:"unauthorized" + } + }, + controller: basePlan + }) + .state('tablePlan', { + url: '/tablePlan', + templateUrl: 'views/plan/tablePlan.html', + data:{ + permissions:{ + only:["TABLE_PLAN"], + redirectTo:"unauthorized" + } + }, + controller: tablePlan + }) + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/plan/tablePlan.js b/src/main/webapp/WEB-INF/views/src/views/plan/tablePlan.js new file mode 100644 index 0000000..5b623d0 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/plan/tablePlan.js @@ -0,0 +1,214 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "TablePlanAPI", "$modal", "$ugDialog", function($scope, TablePlanAPI, $modal, $ugDialog){ + $scope.isCouponNumberExist = false; + $scope.tablePlanList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getTablePlanList = function(){ + TablePlanAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.tablePlanList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getTablePlanList; + }); + }; + $scope.stop = function(index){ + TablePlanAPI.stop({ + id: $scope.tablePlanList[index].id, + locked: $scope.tablePlanList[index].isStop == 1 ? true : false + }); + }; + + $scope.createPlanOrder = function(){ + TablePlanAPI.createPlanOrder({ + + }, function(data){ + $ugDialog.alert("执行成功"); + $scope.getTablePlanList(); + }); + }; + + $scope.open = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addTablePlan.html', + controller: ["$scope", "TablePlanAPI", "$modalInstance","currentTablePlan","BasePlanAPI","CouponAPI" ,"$rootScope", "$modalMemberAdd","MemberAPI", function ($scope, TablePlanAPI, $modalInstance,currentTablePlan,BasePlanAPI,CouponAPI,$rootScope,$modalMemberAdd,MemberAPI) { + $scope.chooseTablePlans = []; + $scope.ugSelect2Config = {}; + $scope.tablePlan = { + }; + + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + beginTime:{ + opened:false + } + }; + $scope.open = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.beginTime.opened = true; + } + }; + + if(currentTablePlan){ + $scope.tablePlan = currentTablePlan; + } + + $scope.getBasePlanList = function(){ + $scope.pageInfoSetting = { + pageSize:1000, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.basePlanList = []; + BasePlanAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum + }, function(data){ + $scope.basePlanList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCategoryList; + if(currentTablePlan){ + $scope.ugSelect2Config.initSelectData(currentTablePlan.cdPlanId); + } + }); + } + $scope.getBasePlanList(); + $scope.errors = null; + $scope.addTablePlanForm = {}; + $scope.saveOrUpdateTablePlan = function(){ + $scope.errors = null; + if($scope.addTablePlanForm.validator.form()){ + if($scope.tablePlan.id){ + TablePlanAPI.update($scope.tablePlan, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + if($scope.isCouponNumberExist){ + $scope.tablePlan.tablePlans = $scope.chooseTablePlans; + TablePlanAPI.save($scope.tablePlan, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }); + }else{ + $ugDialog.alert("请先查询卡号信息"); + } + } + $scope.isCouponNumberExist = false; + } + }; + var bindMember = function(){ + $modalMemberAdd.open({ + currentMember:{ + couponNumber:$scope.tablePlan.couponNumber + } + }).result.then(function (data) { + $scope.queryMemberByCouponNumber(); + }); + }; + $scope.queryMemberByCouponNumber = function(){ + if($scope.tablePlan.couponNumber){ + CouponAPI.query({ + limit:1, + offset:1, + couponNumber:$scope.tablePlan.couponNumber, + couponType:1 + }, function(data){ + if(data.data && data.data.length > 0){ + $scope.isCouponNumberExist = true; + var coupon = data.data[0]; + if(coupon.memberId){ + MemberAPI.get({ + id:coupon.memberId + },function(data){ + var member = data; + $scope.tablePlan.cdMemberId = member.id; + $scope.tablePlan.memberCode = member.memberCode; + $scope.tablePlan.consigneeAddress = member.address; + $scope.tablePlan.consigneeName = member.name; + $scope.tablePlan.consigneePhone = member.phoneNumber; + }) + } + else{ + $ugDialog.confirm("未找到客户信息,是否新增客户?").then(function(){ + bindMember(); + }); + } + }else{ + $ugDialog.alert("卡号不存在!"); + } + }) + }else{ + $ugDialog.alert("请输入卡号"); + } + }; + + //添加计划生效时间 + $scope.changeSelect =function(){ + if($scope.tablePlan.id == null){ + $scope.chooseTablePlans=[]; + var cdPlanIdList = $scope.tablePlan.cdPlanIds; + for(var i = 0;i and you can use wells or panels instead + --> + + +
+ + +
+ + +
+ + +
+ +
+ +

订单列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 订单编号订单类型卡/劵号订购日期配送日期订单状态收货码
+ +
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + diff --git a/src/main/webapp/WEB-INF/views/src/views/receipt/receivingCodeRequest.js b/src/main/webapp/WEB-INF/views/src/views/receipt/receivingCodeRequest.js new file mode 100644 index 0000000..0848aa8 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/receipt/receivingCodeRequest.js @@ -0,0 +1,55 @@ +/** + */ +define(function () { + return ["$scope", "ReceivingCodeRequestAPI", "$modal", "$ugDialog","UserAPI","$filter", function($scope, ReceivingCodeRequestAPI, $modal, $ugDialog,UserAPI,$filter){ + + $scope.receivingCodeRequestList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.datepickerSetting = { + datepickerPopupConfig:{ + "current-text":"今天", + "clear-text":"清除", + "close-text":"关闭" + }, + requestTimeStart:{ + opened:false + }, + requestTimeEnd:{ + opened:false + } + }; + $scope.openDate = function($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if(index == 0){ + $scope.datepickerSetting.requestTimeStart.opened = true; + }else if(index == 1){ + $scope.datepickerSetting.requestTimeEnd.opened = true; + } + }; + + $scope.queryParam = { + requestTimeStart :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), + requestTimeEnd:$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd') + }; + + $scope.getReceivingCodeRequestList = function(){ + ReceivingCodeRequestAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + requestTimeStart:$scope.queryParam.requestTimeStart, + requestTimeEnd: $scope.queryParam.requestTimeEnd, + orderNo:$scope.queryParam.orderNo + }, function(data){ + $scope.receivingCodeRequestList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getReceivingCodeRequestList; + }); + }; + $scope.getReceivingCodeRequestList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/receipt/returnOrder.html b/src/main/webapp/WEB-INF/views/src/views/receipt/returnOrder.html new file mode 100644 index 0000000..d37885b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/receipt/returnOrder.html @@ -0,0 +1,299 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

退货订单列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
订单编号订单类型卡/劵号配送日期退货日期退货状态客户信息客户经理审核状态审核人审核时间取货快递员手机号取货时间操作
同意拒绝 + + + + + + + + + +
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/receipt/returnOrderShouHuo.js b/src/main/webapp/WEB-INF/views/src/views/receipt/returnOrderShouHuo.js new file mode 100644 index 0000000..6d8b9f7 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/receipt/returnOrderShouHuo.js @@ -0,0 +1,59 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "$modal", "$ugDialog", "ReturnOrderAPI", "$filter", function ($scope, $modal, $ugDialog, ReturnOrderAPI, $filter) { + //扫描订单编号 + $scope.saoOrderNoEvent = function (e) { + var keycode = window.event ? e.keyCode : e.which; + if (keycode == 13) { + $scope.returnOrderShouhuo(); + } + } + + //收货扫描 + $scope.returnOrderShouhuo = function () { + if (!$scope.boxNo) { + $ugDialog.warn("请扫描条形码"); + return; + } + ReturnOrderAPI.returnOrderShouhuo({ + boxNo: $scope.boxNo + }, function (data) { + $ugDialog.alert("扫描成功"); + $scope.returnOrderItemList = data.itemList; + $scope.orderNo = data.orderNo; + $("#boxNo").focus(); + $("#boxNo").select(); + $("#boxNo").val(""); + }, function (data) { + $ugDialog.warn(data.data.message); + $("#boxNo").focus(); + $("#boxNo").select(); + $("#boxNo").val(""); + $scope.returnOrderItemList = []; + $scope.orderNo = null; + }) + } + + //收货扫描 + $scope.shouhuo = function () { + if (!$scope.orderNo) { + $ugDialog.warn("请扫描条形码"); + return; + } + ReturnOrderAPI.shouhuo({ + orderNo: $scope.orderNo + }, function (data) { + $ugDialog.alert("收货成功"); + $scope.returnOrderItemList = []; + $scope.orderNo = null; + $("#boxNo").focus(); + $("#boxNo").select(); + $("#boxNo").val(""); + }, function (data) { + $ugDialog.warn(data.data.message); + }) + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/receipt/reviewDespatch.html b/src/main/webapp/WEB-INF/views/src/views/receipt/reviewDespatch.html new file mode 100644 index 0000000..4cb1639 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/receipt/reviewDespatch.html @@ -0,0 +1,138 @@ + + + +
+ + +
+ + +
+ +
+
+ +

二次配送审核列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 序号订单编号订单状态快递商分配状态客户姓名手机号地址操作
+ + +
已分配
+
待分配
+
+
+ + + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+
+ + + +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/receipt/reviewDespatch.js b/src/main/webapp/WEB-INF/views/src/views/receipt/reviewDespatch.js new file mode 100644 index 0000000..b198765 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/receipt/reviewDespatch.js @@ -0,0 +1,60 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "$modal", "$ugDialog", "ExpressAPI", "OrderAPI", function ($scope, $modal, $ugDialog, ExpressAPI, OrderAPI) { + + $scope.pageInfoExpressSetting = { + pageSize: 100, + pageNum: 1 + }; + $scope.getExpressList = function () { + ExpressAPI.query({ + limit: $scope.pageInfoExpressSetting.pageSize, + offset: $scope.pageInfoExpressSetting.pageNum + }, function (data) { + $scope.expressList = data.data; + $scope.pageInfoExpressSetting = data.pageInfo; + $scope.pageInfoExpressSetting.loadData = $scope.getExpressList; + }); + }; + $scope.getExpressList(); + + $scope.orderList = []; + $scope.pageInfoSetting = { + pageSize: 10, + pageNum: 1 + }; + $scope.queryParam = {}; + $scope.getOrderList = function () { + //查询收货的订单 + OrderAPI.query({ + limit: $scope.pageInfoSetting.pageSize, + offset: $scope.pageInfoSetting.pageNum, + keyword: $scope.queryParam.keyword, + hasNoShowCancel: true, + orderStatus: 8, + despatchExpressId: $scope.queryParam.despatchExpressId, + consigneeName: $scope.queryParam.consigneeName + }, function (data) { + $scope.orderList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getOrderList; + }); + }; + + $scope.getOrderList(); + + $scope.auditTwoSend = function (id) { + OrderAPI.auditTwoSend({ + id: id, + auditStatusCd: 1 + }, function () { + $ugDialog.alert("审核成功"); + $scope.getOrderList(); + }, function (data) { + $ugDialog.warn(data.data.message) + }) + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/receipt/twoSendOrder.html b/src/main/webapp/WEB-INF/views/src/views/receipt/twoSendOrder.html new file mode 100644 index 0000000..08b559f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/receipt/twoSendOrder.html @@ -0,0 +1,313 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

二次配送订单列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 订单编号订单类型卡/劵号订购日期配送日期订单状态付款方式附加付款方式总金额优惠金额付款金额附加付款金额客户信息客户经理下单人备注是否有下架商品操作
+ + + + + +
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/receipt/twoSendOrder.js b/src/main/webapp/WEB-INF/views/src/views/receipt/twoSendOrder.js new file mode 100644 index 0000000..72ae8cd --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/receipt/twoSendOrder.js @@ -0,0 +1,119 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "OrderAPI", "$modal", "$ugDialog","UserAPI","$filter", function($scope, OrderAPI, $modal, $ugDialog,UserAPI,$filter){ + + $scope.managers = []; + $scope.getCustomerManagersList = function(){ + UserAPI.getCustomerManagerList({ + userType:"customer_manager" + },function(data){ + $scope.managers = data; + }); + } + $scope.getCustomerManagersList(); + + $scope.orderList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + +// $scope.datepickerSetting = { +// datepickerPopupConfig:{ +// "current-text":"今天", +// "clear-text":"清除", +// "close-text":"关闭" +// }, +// orderCreateTimeStart:{ +// opened:false +// }, +// orderCreateTimeEnd:{ +// opened:false +// } +// }; +// $scope.openDate = function($event, index) { +// $event.preventDefault(); +// $event.stopPropagation(); +// if(index == 0){ +// $scope.datepickerSetting.orderCreateTimeStart.opened = true; +// }else if(index == 1){ +// $scope.datepickerSetting.orderCreateTimeEnd.opened = true; +// } +// }; + + $scope.queryParam = { +// orderCreateTimeStart :$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd'), +// orderCreateTimeEnd:$filter('date')(new Date(new Date().getTime()), 'yyyy-MM-dd') + }; + + $scope.getOrderList = function(){ + OrderAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword, + isTwoSend:1, +// orderCreateTimeStart:$scope.queryParam.orderCreateTimeStart, +// orderCreateTimeEnd: $scope.queryParam.orderCreateTimeEnd, + couponNumber:$scope.queryParam.couponNumber, + hasNoShowCancel:false + }, function(data){ + $scope.orderList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getOrderList; + }); + }; + + $scope.viewOrder = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'viewOrderDetail.html', + resolve: { + CurrentOrder: function(){ + return angular.copy($scope.orderList[index]); + } + }, + controller: ["$scope", "OrderAPI", "CurrentOrder", "$modalInstance", function ($scope, OrderAPI, CurrentOrder, $modalInstance) { + $scope.order = {}; + if(CurrentOrder){ + $scope.order = CurrentOrder; + } + $scope.setting = { + pageInfo : { + pageSize:30, + pageNum:1 + } + }; + OrderAPI.getItemList({ + limit: $scope.setting.pageInfo.pageSize, + offset: $scope.setting.pageInfo.pageNum, + id:$scope.order.id, + orderNo:$scope.order.orderNo + }, function(data){ + $scope.order.itemList = data.data; + $scope.calTotalItem(); + }); + $scope.calTotalItem = function(){ + $scope.totalItem = {}; + var totalNumber = 0; + var totalPrice = 0; + for (var i = 0; i < $scope.order.itemList.length; i++) { + var obj = $scope.order.itemList[i]; + totalNumber += obj.itemQty; + totalPrice += (obj.itemQty * obj.itemPrice); + } + $scope.totalItem.totalNumber = totalNumber; + $scope.totalItem.totalPrice = totalPrice; + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function () { + $scope.getOrderList(); + }); + }; + $scope.getOrderList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/report/reportFinance.html b/src/main/webapp/WEB-INF/views/src/views/report/reportFinance.html new file mode 100644 index 0000000..18d4c9c --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/report/reportFinance.html @@ -0,0 +1,97 @@ +
+ + +
+ + +
+ +
+
+ +

财务报表

+
+ +
+ +
+ +
+ + +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+
+
+
+ +
+ +
+ + +
+ +
+ +
+ diff --git a/src/main/webapp/WEB-INF/views/src/views/report/reportFinance.js b/src/main/webapp/WEB-INF/views/src/views/report/reportFinance.js new file mode 100644 index 0000000..1d27730 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/report/reportFinance.js @@ -0,0 +1,80 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "ReportOrderAPI", "$modal", "$ugDialog", "$filter", "CouponCategoryAPI", "CompanyAPI", "UserAPI", function ($scope, ReportOrderAPI, $modal, $ugDialog, $filter, CouponCategoryAPI, CompanyAPI, UserAPI) { + $scope.queryParam = {}; + + $scope.pageInfoSetting = { + pageSize: 1000, + pageNum: 1 + }; + + $scope.companyList = []; + $scope.getCompanyList = function () { + CompanyAPI.query({ + limit: $scope.pageInfoSetting.pageSize, + offset: $scope.pageInfoSetting.pageNum + }, function (data) { + $scope.companyList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getCompanyList; + }); + }; + $scope.getCompanyList(); + + $scope.companyCustomerManagers = []; + $scope.getCustomerManagersList = function () { + UserAPI.getCustomerManagerList({ + userType: "customer_manager" + }, function (data) { + $scope.companyCustomerManagers = data; + }); + } + $scope.getCustomerManagersList(); + + $scope.datepickerSetting = { + datepickerPopupConfig: { + "current-text": "今天", + "clear-text": "清除", + "close-text": "关闭" + }, + startTime: { + opened: false + }, + endTime: { + opened: false + } + }; + + $scope.openDatepicker = function ($event, index) { + $event.preventDefault(); + $event.stopPropagation(); + if (index == 1) { + $scope.datepickerSetting.startTime.opened = true; + } else if (index == 2) { + $scope.datepickerSetting.endTime.opened = true; + } + }; + + + $scope.exportFinanceExcel = function () { + if (!$("#startTimeId").val()) { + $ugDialog.warn("请输入开始时间"); + return; + } + if (!$("#endTimeId").val()) { + $ugDialog.warn("请输入结束时间"); + return; + } + var url = "/report/finance?beginTime=" + $("#startTimeId").val() + "&endTime=" + $("#endTimeId").val(); + if ($scope.queryParam.cdCompanyId != undefined) { + url += "&companyId=" + $scope.queryParam.cdCompanyId; + } + if ($scope.queryParam.customerMangerId != undefined) { + url += "&managerId=" + $scope.queryParam.customerMangerId; + } + window.location.href = url; + } + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/schedule/list.html b/src/main/webapp/WEB-INF/views/src/views/schedule/list.html new file mode 100644 index 0000000..0a39105 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/schedule/list.html @@ -0,0 +1,323 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

任务调度

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 任务属组任务名称状态触发器ID描述操作
+ + + +
+ + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/schedule/list.js b/src/main/webapp/WEB-INF/views/src/views/schedule/list.js new file mode 100644 index 0000000..4a306fe --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/schedule/list.js @@ -0,0 +1,151 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "ScheduleAPI", "$modal", "$ugDialog", function($scope, ScheduleAPI, $modal, $ugDialog){ + $scope.scheduleList = []; + $scope.pageInfoSetting = { + pageSize:50, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getScheduleList = function(){ + ScheduleAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + if(data.data && data.data.length > 0){ + $scope.scheduleList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getScheduleList; + } + }); + }; + $scope.restart = function(index){ + ScheduleAPI.update({ + id: $scope.scheduleList[index].id, + action:"restart" + }, function(data){ + $ugDialog.alert("任务已重启"); + $scope.getScheduleList(); + }) + }; + $scope.remove = function(index){ + var schedule = $scope.scheduleList[index]; + $ugDialog.confirm("是否删除定时任务:" + schedule.jobName + "?").then(function(data){ + ScheduleAPI.remove({ + id:schedule.id + }, function(){ + $scope.getScheduleList(); + $ugDialog.alert("删除成功!") + }, function(data){ + $ugDialog.warn({ + title:"删除失败", + content:"错误信息:" + data.data.message + }) + }); + }); + }; + $scope.pause = function(index){ + ScheduleAPI.update({ + id: $scope.scheduleList[index].id, + action:"pause" + }, function(data){ + $ugDialog.alert("任务已暂停"); + $scope.getScheduleList(); + }) + }; + $scope.open = function (index) { + $modal.open({ + templateUrl: 'addScheduleJob.html', + controller: ["$scope", "$modalInstance", "ScheduleAPI", function ($scope, $modalInstance, ScheduleAPI) { + $scope.addScheduleForm = {}; + $scope.schedule = {}; + $scope.errors = null; + $scope.addSchedule = function(){ + if($scope.addScheduleForm.validator.form()){ + $scope.errors = null; + ScheduleAPI.save($scope.schedule, function(){ + $modalInstance.close(); + }, function(data){ + if(data.data){ + $scope.errors = data.data.message; + } + }); + } + }; + $scope.scheduleTemplates = []; + $scope.getScheduleTemplate = function(){ + ScheduleAPI.getTemplates(function(data){ + $scope.scheduleTemplates = data; + }); + }; + $scope.getScheduleTemplate(); + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + size: "lg" + }).result.then(function(){ + $scope.getScheduleList(); + }); + }; + $scope.openView = function(index){ + openUpdate(index, "view"); + }; + $scope.openUpdate = function(index){ + openUpdate(index, "update"); + }; + var openUpdate = function (index, action) { + $modal.open({ + templateUrl: 'updateScheduleJob.html', + controller: ["$scope", "$modalInstance", "schedule", "action", "ScheduleAPI", function ($scope, $modalInstance, schedule, action, ScheduleAPI) { + $scope.schedule = schedule; + $scope.setting = { + disabled: true + }; + $scope.updateScheduleForm = {}; + $scope.updateSchedule = function(){ + if($scope.updateScheduleForm.validator.form()){ + ScheduleAPI.update({ + id:$scope.schedule.id, + jobName:$scope.schedule.jobName, + jobGroup:$scope.schedule.jobGroup, + description:$scope.schedule.jobDescription, + cronExpression:$scope.schedule.cronExpression, + jobTriggerId:$scope.schedule.triggerId + }, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data.message; + }); + } + }; + $scope.getScheduleTemplate = function(){ + ScheduleAPI.getTemplates(function(data){ + $scope.scheduleTemplates = data; + }); + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + $scope.getScheduleTemplate(); + if(action == "update"){ + $scope.setting.disabled = false; + } + }], + size: "lg", + resolve: { + action: function(){ + return action; + }, + schedule: function () { + return $scope.scheduleList[index]; + } + } + }); + }; + $scope.getScheduleList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/schedule/schedule_module.js b/src/main/webapp/WEB-INF/views/src/views/schedule/schedule_module.js new file mode 100644 index 0000000..f5a9f2b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/schedule/schedule_module.js @@ -0,0 +1,24 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/schedule/list" +],function (scheduleList) { + angular.module('DMS.schedule', ["permission"]).config(["$stateProvider", "$urlRouterProvider", "$httpProvider", function ($stateProvider, $urlRouterProvider, $httpProvider) { + + $stateProvider + + .state('schedule', { + url: '/schedule', + templateUrl: 'views/schedule/list.html', + data:{ + permissions:{ + only:["SCHEDULE_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: scheduleList + }) + + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/service/rest_module.js b/src/main/webapp/WEB-INF/views/src/views/service/rest_module.js new file mode 100644 index 0000000..c699fa3 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/service/rest_module.js @@ -0,0 +1,564 @@ +/** + * Created by Jeng on 2016/1/28. + */ +define(function () { + var ngREST = angular.module("DMS.REST", ["ngResource"]); + ngREST.factory("UserAPI", ["$resource", function ($resource) { + return $resource("/user/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + lock: { + method: "PUT", + url: "/user/:id/locked", + params: { + id: "@id", + locked: "@locked" + } + }, + resetDefaultPassword: { + method: "PUT", + url: "/user/:id/resetPassword", + params: { + id: "@id" + } + }, + getPermissions: { + url: "/user/permissions" + }, + resetPassword: { + url: "/account/resetPassword", + method: "POST", + params: { + current_password: "@current_password", + password: "@password" + } + }, + getCustomerManagerList: { + method: "GET", url: "/customerManagerList", + params: {userType: "@userType", keyword: "@keyword"}, + isArray: true + } + }); + }]); + ngREST.factory("MessageAPI", ["$resource", function ($resource) { + return $resource("/message/:id", {id: '@id'}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + log: { + isArray: true, + method: "GET", + url: "/message/:id/log", + params: {id: "@id"} + }, + retry: { + url: "/message/retry", + method: "POST", + params: {messageId: "@messageId"} + } + }); + }]); + ngREST.factory("StockAPI", ["$resource", function ($resource) { + return $resource("/stock/:id", {id: '@id'}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + change: {method: "PUT", url: "/stock/:id/change", params: {id: "@id"}}, + beforehandPackageChangeStock: { + method: "GET", + url: "/stock/beforehandPackageChangeStock", + params: {itemId: "@itemId", changeStockNum: "@changeStockNum"} + } + }); + }]); + + ngREST.factory("StockDailyAPI", ["$resource", function ($resource) { + return $resource("/stockDaily/:id", {id: '@id'}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + createStockDaily: {method: "GET", url: "/stockDaily/createStockDaily"} + }); + }]); + + ngREST.factory("StockRecordAPI", ["$resource", function ($resource) { + return $resource("/stockRecord/:id", {id: '@id'}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("ResourceAPI", ["$resource", function ($resource) { + return $resource("/resource/:id", {id: '@id'}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("UserGroupAPI", ["$resource", function ($resource) { + return $resource("/group/:id", {id: '@id'}, { + query: {isArray: false} + }); + }]); + ngREST.factory("UserGroupRelationAPI", ["$resource", function ($resource) { + return $resource("/group/:id/user", {id: '@id', userId: '@userId'}, { + query: {isArray: false}, + save: { + method: "PUT", + params: { + chose: "@chose", + userId: "@userId" + } + } + }); + }]); + ngREST.factory("GroupPermissionRelationAPI", ["$resource", function ($resource) { + return $resource("/group/:id/permissions", {id: '@id'}, { + query: {isArray: false}, + save: { + method: "PUT", + params: { + chose: "@chose", + permissionId: "@permissionId" + } + } + }); + }]); + ngREST.factory("PermissionAPI", ["$resource", function ($resource) { + return $resource("/permission/:id", {id: '@id'}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + ngREST.factory("ScheduleAPI", ["$resource", function ($resource) { + return $resource("/schedule/:id", {id: '@id'}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + getTemplates: { + url: "/schedule/template", + method: "GET", + isArray: true + } + }); + }]); + ngREST.factory("OrganizationAPI", ["$resource", function ($resource) { + return $resource("/organization/:id", {id: '@id'}, { + // query:{ isArray:false}, + update: {method: "PUT", params: {id: "@id"}}, + bindUser: { + url: "/organization/:id/user", + method: "POST", params: {id: "@id", userIds: "@userIds"} + }, + unBindUser: { + url: "/organization/:id/user", + method: "DELETE", params: {id: "@id", userIds: "@userIds"} + } + }); + }]); + + ngREST.factory("MemberAPI", ["$resource", function ($resource) { + return $resource("/member/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("MemberAddressAPI", ["$resource", function ($resource) { + return $resource("/memberAddress/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("CompanyAPI", ["$resource", function ($resource) { + return $resource("/company/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + getCompanyList: {method: "GET", url: "/companyList", isArray: true} + }); + }]); + + ngREST.factory("ItemCategoryAPI", ["$resource", function ($resource) { + return $resource("/itemCategory/:id", {id: "@id"}, { + // query:{ isArray:false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("ItemAPI", ["$resource", function ($resource) { + return $resource("/item/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + getChildItemList: {method: "GET", url: "/getChildItem", isArray: true}, + defaultImage: {method: "GET", url: "/item/defaultImage"} + }); + }]); + + ngREST.factory("ItemDetailAPI", ["$resource", function ($resource) { + return $resource("/itemDetail/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("CouponCategoryAPI", ["$resource", function ($resource) { + return $resource("/couponCategory/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + getChoseItemList: {method: "GET", url: "/getChoseItemList", isArray: true} + }); + }]); + + ngREST.factory("CouponAPI", ["$resource", function ($resource) { + return $resource("/coupon/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + sendOneCoupon: {method: "GET", url: "/coupon/sendOneCoupon", params: {id: "@id", companyId: "@companyId", couponNumber: "@couponNumber", batch: "@batch", isGift: "@isGift"}}, + sendMoreCoupon: {method: "GET", url: "/coupon/sendMoreCoupon", params: {companyId: "@companyId", couponNumberList: "@couponNumberList", batch: "@batch", isGift: "@isGift"}}, + updateBatchCoupon: {method: "GET", url: "/coupon/updateBatchCoupon", params: {companyId: "@companyId", customerMangerId: "@customerMangerId", batch: "@batch"}}, + updateBatchCouponType: {method: "GET", url: "/coupon/updateBatchCouponType", params: {couponCategoryId: "@couponCategoryId", couponNumberList: "@couponNumberList"}}, + activityAddress: {method: "POST", url: "/coupon/activityAddress"}, + updateUserPrice: { + method: "GET", + url: "/coupon/updateBalance", + params: { + couponNo: "@couponNo", + updatePrice: "@updatePrice", + couponNo: "@remark" + } + }, + audit: { + method: "PUT", + url: "/coupon/:id/audit", + params: { + id: "@id", + locked: "@locked" + } + }, + batchAudit: { + method: "PUT", + url: "/coupon/batchAudit", + params: { + ids: "@ids", + locked: "@locked" + } + }, + overCoupon: { + method: "PUT", + url: "/coupon/:id/overCoupon", + params: { + id: "@id", + isOver: "@isOver" + } + }, + returnCoupon: { + method: "PUT", + url: "/coupon/:id/returnCoupon", + params: { + id: "@id" + } + }, + receivedPrice: { + method: "GET", + url: "/coupon/receivedPrice", + params: { + couponId: "@couponId", + couponNumber: "@couponNumber", + receivedPrice: "@receivedPrice", + isAutoAudit: "@isAutoAudit" + } + }, + readCard: { + method: "GET", + url: "/coupon/readCard", + params: { + couponNo: "@couponNo", + password: "@password" + } + }, + cardRecharge: { + method: "GET", + url: "/coupon/cardRecharge", + params: { + couponNo: "@couponNo", + rechargePrice: "@rechargePrice" + } + }, + exchangeCard: { + method: "GET", + url: "/coupon/exchangeCard", + params: { + oldCouponNo: "@oldCouponNo", + oldPassword: "@oldPassword", + newCouponNo: "@newCouponNo", + newPassword: "@newPassword" + } + } + }); + }]); + + ngREST.factory("CouponActivityAPI", ["$resource", function ($resource) { + return $resource("/couponActivity/:id", {id: "@id"}, { + query: {isArray: false}, + getCouponAddressList: { + method: "GET", + url: "/couponActivity/couponActivityAddress" + }, + getCouponActivityAddress: { + method: "GET", + url: "/couponActivity/getCouponActivityAddress" + } + }); + }]); + ngREST.factory("ActivityAPI", ["$resource", function ($resource) { + return $resource("/activity/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + getChoseItemList: {method: "GET", url: "/activity/getChoseItemList", isArray: true} + }); + }]); + + ngREST.factory("ContractAPI", ["$resource", function ($resource) { + return $resource("/contract/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("ContractItemAPI", ["$resource", function ($resource) { + return $resource("/contractItem/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("DictionaryGroupAPI", ["$resource", function ($resource) { + return $resource("/dictionary/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("DictionaryAPI", ["$resource", function ($resource) { + return $resource("/dictionary/:group_id/child/:id", {id: "@id", group_id: "@sysDictionaryId"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("OrderAPI", ["$resource", function ($resource) { + return $resource("/order/:id", {id: "@id"}, { + query: {isArray: false}, + batch: { + method: "POST", + url: "/order/batch" + }, + update: {method: "PUT", params: {id: "@id"}}, + cancel: {method: "DELETE", url: "/order/:id"}, + getItemList: { + method: "GET", + url: "/order/:id/item", + params: {id: "@id"} + }, + updateTotalBox: { + method: "POST", + url: "/order/updateTotalBox", + params: {orderNo: "@orderNo", totalBox: "@totalBox"} + }, + auditTwoSend: {method: "POST", url: "/order/:id/twoSend", params: {id: "@id", auditStatusCd: "@auditStatusCd"}} + }); + }]); + + ngREST.factory("ReportOrderAPI", ["$resource", function ($resource) { + return $resource("/report/:id", {id: "@id"}, { + report: { + method: "GET", + url: "/report/order", + responseType: "blob" + } + }); + }]); + + ngREST.factory("ReturnOrderAPI", ["$resource", function ($resource) { + return $resource("/returnOrder/:id", {id: "@id"}, { + query: {isArray: false}, + getItemList: { + method: "GET", + url: "/returnOrder/:id/item", + params: {id: "@id"} + }, + auditReturnOrder: { + method: "POST", url: "/returnOrder/:id/audit", + params: { + id: "@id", + statusCd: "@statusCd" + } + }, + returnOrderShouhuo: { + method: "PUT", url: "/returnOrder/returnOrderShouhuo", params: { + boxNo: "@boxNo" + } + }, + shouhuo: { + method: "PUT", url: "/returnOrder/shouhuo", params: { + orderNo: "@orderNo" + } + } + }); + }]); + + ngREST.factory("PackingAPI", ["$resource", function ($resource) { + return $resource("/packing/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + getPackingOrderItemList: {method: "GET", url: "/packing/:id/order", isArray: false}, + getPackingOrderItemCount: {method: "GET", url: "/packing/order/item", isArray: false}, + getPackingRecordList: {method: "GET", url: "/packing/:id/record", isArray: false}, + getPackingOrderList: {method: "GET", url: "/packing/order", isArray: false}, + removePackingRecord: {method: "DELETE", url: "/packing/:id/record/:recordId"}, + getPackingTaskList: {method: "GET", url: "/packing/task", isArray: false}, + bindPackingTask: {method: "PUT", url: "/packing/task/bind"}, + unbindPackingTask: { + method: "PUT", url: "/packing/task/unbind", params: { + orderNos: "@orderNos" + } + }, + scanItem: {method: "POST", url: "/packing/:id/record"}, + autoScan: { + method: "POST", url: "/packing/auto", + isArray: true, + params: {orderNo: "@orderNo", packingId: "@packingId"} + }, + printOrder: { + method: "GET", url: "/packing/printOrder", params: { + orderId: "@orderId" + } + } + }); + }]); + + ngREST.factory("PurchaseAPI", ["$resource", function ($resource) { + return $resource("/purchase/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id", purchaseStatus: "@purchaseStatus"}} + }); + }]); + + ngREST.factory("BasePlanAPI", ["$resource", function ($resource) { + return $resource("/basePlan/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + getChoseItemList: {method: "GET", url: "/basePlan/getChosePlanItemList", isArray: true} + }); + }]); + + ngREST.factory("PackageTaskAPI", ["$resource", function ($resource) { + return $resource("/packageTask/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + packageWorking: { + method: "PUT", + url: "/packageTask/:id/packageWorking", + params: { + id: "@id", + barCode: "@barCode" + } + } + }); + }]); + + ngREST.factory("JobOperationLogAPI", ["$resource", function ($resource) { + return $resource("/jobOperationLog/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("TablePlanAPI", ["$resource", function ($resource) { + return $resource("/tablePlan/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + stop: { + method: "PUT", + url: "/tablePlan/:id/stop", + params: { + id: "@id", + locked: "@locked" + } + }, + createPlanOrder: { + method: "PUT", + url: "/tablePlan/createPlanOrder" + } + }); + }]); + + ngREST.factory("PickAPI", ["$resource", function ($resource) { + return $resource("/pick/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + settleAccounts: {method: "PUT", url: "/pick/settleAccounts"}, + pickCard: {method: "PUT", url: "/pick/pickCard"} + }); + }]); + + ngREST.factory("ExpressAPI", ["$resource", function ($resource) { + return $resource("/express/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}}, + bindExpress: {method: "PUT", url: "/express/order/bind"}, + unbindExpress: { + method: "PUT", url: "/express/order/unbind", params: { + orderNos: "@orderNos" + } + }, + noScanOrder: { + method: "GET", url: "/express/noScanOrder", params: {} + }, + queryOrder: { + method: "GET", url: "/express/order", params: {} + }, + takeDelivery: { + method: "PUT", url: "/express/order/takeDelivery", params: { + boxNo: "@boxNo" + } + }, + unTakeDelivery: { + method: "PUT", url: "/express/order/untakeDelivery", params: { + orderNo: "@orderNo" + } + } + }); + }]); + + ngREST.factory("ExpressMemberAPI", ["$resource", function ($resource) { + return $resource("/expressMember/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("TradeRecordAPI", ["$resource", function ($resource) { + return $resource("/tradeRecord/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("ReceivingCodeRequestAPI", ["$resource", function ($resource) { + return $resource("/receivingCodeRequest/:id", {id: "@id"}, { + query: {isArray: false} + }); + }]); + + ngREST.factory("AdviceAPI", ["$resource", function ($resource) { + return $resource("/advice/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); + + ngREST.factory("BeforehandPackageRecordAPI", ["$resource", function ($resource) { + return $resource("/beforehandPackageRecord/:id", {id: "@id"}, { + query: {isArray: false}, + update: {method: "PUT", params: {id: "@id"}} + }); + }]); +}); diff --git a/src/main/webapp/WEB-INF/views/src/views/stock/beforehandPackage.html b/src/main/webapp/WEB-INF/views/src/views/stock/beforehandPackage.html new file mode 100644 index 0000000..3b413f3 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/stock/beforehandPackage.html @@ -0,0 +1,225 @@ +
+ + +
+ + +
+ + +
+
+ +

预包装页面

+
+ +
+ +
+ +
+ + +
+ +
+
+ 选择产品 +
+
+
+
+
+ +

产品分类

+
+
+
+
+
+
+
    +
  • +
+
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
产品列表
序号名称编号规格库存操作
{{item.itemName}}{{item.itemCode}}{{item.spec}}{{item.stockNum}} +
+ + + +
+
+ +
+
+ +
+
+ 工作区 + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ 商品信息 +
+ +
+ {{currentItem.itemName}} +
+ +
+ {{currentItem.itemCode}} +
+ +
+ {{currentItem.spec}} +
+
+
+ +
+ {{currentItem.stockNum}} +
+
+
+
+
+
+ +
+
+
+ 包装记录 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
包装记录
序号名称编号包装数量包装时间包装人
{{beforehandPackageRecord.itemName}}{{beforehandPackageRecord.itemCode}}{{beforehandPackageRecord.packageNum}}{{beforehandPackageRecord.insertDate | date: 'yyyy-MM-dd HH:mm:ss'}}{{beforehandPackageRecord.packageUserName}}
+ +
+
+
+ + +
+ +
+ + +
+ + +
+ + + +
+ + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/stock/stock.html b/src/main/webapp/WEB-INF/views/src/views/stock/stock.html new file mode 100644 index 0000000..ed5fd91 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/stock/stock.html @@ -0,0 +1,248 @@ + + +
+ + +
+ + +
+ + +
+ +
+ +

库存列表

+
+ +
+ +
+ +
+ + +
+
+
+
+
+ + +
+
+
+ + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
序号商品名称商品编号库存数预警数量操作
{{stock.stockNum}}(库存不足) + + 编辑 + + +
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/stock/stock_module.js b/src/main/webapp/WEB-INF/views/src/views/stock/stock_module.js new file mode 100644 index 0000000..26496bc --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/stock/stock_module.js @@ -0,0 +1,47 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/stock/stock", + "views/stock/beforehandPackage", + "views/stock/stockDaily" +], function (stock, beforehandPackage, stockDaily) { + angular.module('DMS.stock', [ + "permission" + ]).config(["$stateProvider", function ($stateProvider) { + $stateProvider + .state('stock', { + url: '/stock', + templateUrl: 'views/stock/stock.html', + data: { + permissions: { + only: ["STOCK_LIST"], + redirectTo: "unauthorized" + } + }, + controller: stock + }) + .state('beforehandPackage', { + url: '/beforehandPackage', + templateUrl: 'views/stock/beforehandPackage.html', + data: { + permissions: { + only: ["BEFOREHAND_PACKAGE"], + redirectTo: "unauthorized" + } + }, + controller: beforehandPackage + }) + .state('stockDaily', { + url: '/stockDaily', + templateUrl: 'views/stock/stockDaily.html', + data: { + permissions: { + only: ["STOCK_LIST"], + redirectTo: "unauthorized" + } + }, + controller: stockDaily + }) + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/task/task_list.js b/src/main/webapp/WEB-INF/views/src/views/task/task_list.js new file mode 100644 index 0000000..30e9aa9 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/task/task_list.js @@ -0,0 +1,73 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PackageTaskAPI", "$modal", "$ugDialog", function($scope, PackageTaskAPI, $modal, $ugDialog){ + $scope.packageTaskList = []; + $scope.pageInfoSetting = { + pageSize:100, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getPackageTaskList = function(){ + PackageTaskAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.packageTaskList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPackageTaskList; + }); + }; + + $scope.openDistributeModal = function (currentPackageTask) { + var modalInstance = $modal.open({ + templateUrl: 'addPackageTask.html', + controller: ["$scope", "PackageTaskAPI", "$modalInstance","currentPackageTask","UserAPI", "$rootScope", function ($scope, PackageTaskAPI, $modalInstance,currentPackageTask,UserAPI,$rootScope) { + $scope.packageUserList = []; + $scope.ugSelect2Config = {}; + UserAPI.getCustomerManagerList({ + userType:"baozhuangzu" + },function(data){ + $scope.packageUserList = data; + }); + $scope.company = {}; + if(currentPackageTask){ + $scope.packageTask = currentPackageTask; + $scope.packageTask.noDistributeValue = $scope.packageTask.totalItemQty - $scope.packageTask.distributeValue ; + } + $scope.errors = {}; + $scope.addPackageTaskForm = {}; + $scope.savePackageTask = function(){ + $scope.errors = {}; + if($scope.packageTask.countValue > $scope.packageTask.noDistributeValue){ + $scope.errors.message = "不能大于未分配数"; + return; + } + if($scope.addPackageTaskForm.validator.form()){ + PackageTaskAPI.save($scope.packageTask, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + resolve: { + currentPackageTask: function () { + return currentPackageTask; + } + } + }); + modalInstance.result.then(function () { + $scope.getPackageTaskList(); + }); + }; + + $scope.getPackageTaskList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/user/group_list.html b/src/main/webapp/WEB-INF/views/src/views/user/group_list.html new file mode 100644 index 0000000..37de944 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/user/group_list.html @@ -0,0 +1,241 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

用户组列表

+
+ +
+ +
+ +
+ + +
+
+
+
+ +
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + 用户组描述操作
+ + + + +
+ + + + 权限 + +
+
+
暂无数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/user/group_list.js b/src/main/webapp/WEB-INF/views/src/views/user/group_list.js new file mode 100644 index 0000000..4796c6e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/user/group_list.js @@ -0,0 +1,228 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "UserGroupAPI", "$modal", "$ugDialog", function($scope, UserGroupAPI, $modal, $ugDialog){ + $scope.groupList = []; + $scope.pageInfoSetting = { + pageSize:10, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getGroupList = function(){ + UserGroupAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.groupList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getGroupList; + }); + }; + $scope.removeGroup = function(index){ + $ugDialog.confirm("是否删除用户组?").then(function(){ + UserGroupAPI.delete({ + id: $scope.groupList[index].id + }, function(){ + $scope.getGroupList(); + }); + }) + }; + $scope.locked = function(index){ + UserGroupAPI.save({ + id: $scope.groupList[index].id, + available: $scope.groupList[index].available == 1 ? true : false + }); + }; + // 新增用户组 + $scope.open = function (index, size) { + var modalInstance = $modal.open({ + templateUrl: 'addGroup.html', + controller: ["$scope", "$modalInstance", function ($scope, $modalInstance) { + $scope.userGroup = {}; + $scope.addGroupForm = {}; + $scope.saveGroup = function(){ + if($scope.addGroupForm.validator.form()){ + UserGroupAPI.save($scope.userGroup, function(){ + $modalInstance.close(); + }) + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + size: size + }); + modalInstance.result.then(function () { + $scope.getGroupList(); + }); + }; + // 新增用户到用户组 + $scope.openAddUserToGroup = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addUserToGroup.html', + controller: ["$scope", "$modalInstance", "UserGroupRelationAPI", "UserGroupModel", function ($scope, $modalInstance, UserGroupRelationAPI, UserGroupModel) { + $scope.userGroup = UserGroupModel; + $scope.choseUsers = []; + $scope.queryParam = {}; + $scope.choseUsersPageInfo = { + pageSize:50, + pageNum:1 + }; + $scope.addGroupForm = {}; + $scope.getChoseUser = function(){ + UserGroupRelationAPI.query({ + id:$scope.userGroup.id, + chose:true, + limit:$scope.choseUsersPageInfo.pageSize, + offset:$scope.choseUsersPageInfo.pageNum + },function(data){ + $scope.choseUsers = data.data; + $scope.choseUsersPageInfo = data.pageInfo; + $scope.choseUsersPageInfo.loadData = $scope.getChoseUser; + }) + }; + $scope.unChoseUsersPageInfo = { + pageSize:50, + pageNum:1 + }; + $scope.unChoseUsers = []; + $scope.getUnChoseUser = function(){ + UserGroupRelationAPI.query({ + id:$scope.userGroup.id, + chose:false, + keyword:$scope.queryParam.keyword, + limit:$scope.unChoseUsersPageInfo.pageSize, + offset:$scope.unChoseUsersPageInfo.pageNum + },function(data){ + $scope.unChoseUsers = data.data; + $scope.unChoseUsersPageInfo = data.pageInfo; + $scope.unChoseUsersPageInfo.loadData = $scope.getUnChoseUser; + }) + }; + $scope.getChoseUser(); + $scope.getUnChoseUser(); + $scope.removeUser = function(index){ + UserGroupRelationAPI.save({ + id:$scope.userGroup.id, + userId:$scope.choseUsers[index].userId, + chose:false + }, function(){ + $scope.unChoseUsers.push($scope.choseUsers[index]); + $scope.choseUsers.splice(index, 1); + }) + }; + $scope.addUser = function(index){ + UserGroupRelationAPI.save({ + id:$scope.userGroup.id, + userId:$scope.unChoseUsers[index].userId, + chose:true + }, function(){ + $scope.choseUsers.push($scope.unChoseUsers[index]); + $scope.unChoseUsers.splice(index, 1); + }) + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + resolve:{ + UserGroupModel:function(){ + return $scope.groupList[index] + } + }, + size: "lg" + }); + modalInstance.result.then(function () { + $scope.getGroupList(); + }); + }; + // 修改用户组权限 + $scope.openUpdateGroupPermission = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'updateGroupPermission.html', + controller: ["$scope", "$modalInstance","User", "GroupPermissionRelationAPI", "UserGroupModel", function ($scope, $modalInstance,User, GroupPermissionRelationAPI, UserGroupModel) { + $scope.userGroup = UserGroupModel; + $scope.chosePermissions = []; + $scope.queryParam = {}; + $scope.chosePermissionsPageInfo = { + pageSize:50, + pageNum:1 + }; + $scope.addGroupForm = {}; + $scope.getChosePermissions = function(){ + GroupPermissionRelationAPI.query({ + id:$scope.userGroup.id, + chose:true, + limit:$scope.chosePermissionsPageInfo.pageSize, + offset:$scope.chosePermissionsPageInfo.pageNum + },function(data){ + $scope.chosePermissions = data.data; + $scope.chosePermissionsPageInfo = data.pageInfo; + $scope.chosePermissionsPageInfo.loadData = $scope.getChosePermissions; + }) + }; + $scope.unChosePermissionPageInfo = { + pageSize:50, + pageNum:1 + }; + $scope.unChosePermissions = []; + $scope.getUnChosePermissions = function(){ + GroupPermissionRelationAPI.query({ + id:$scope.userGroup.id, + chose:false, + keyword:$scope.queryParam.keyword, + limit:$scope.unChosePermissionPageInfo.pageSize, + offset:$scope.unChosePermissionPageInfo.pageNum + },function(data){ + $scope.unChosePermissions = data.data; + $scope.unChosePermissionPageInfo = data.pageInfo; + $scope.unChosePermissionPageInfo.loadData = $scope.getUnChosePermissions; + }) + }; + $scope.getChosePermissions(); + $scope.getUnChosePermissions(); + $scope.unCorrelationPermission = function(index){ + GroupPermissionRelationAPI.save({ + id:$scope.userGroup.id, + permissionId:$scope.chosePermissions[index].permissionId, + chose:false + }, function(){ + $scope.unChosePermissions.push($scope.chosePermissions[index]); + $scope.chosePermissions.splice(index, 1); + User.fetchPermission(); + }) + }; + $scope.correlationUser = function(index){ + GroupPermissionRelationAPI.save({ + id:$scope.userGroup.id, + permissionId:$scope.unChosePermissions[index].permissionId, + chose:true + }, function(){ + $scope.chosePermissions.push($scope.unChosePermissions[index]); + $scope.unChosePermissions.splice(index, 1); + User.fetchPermission(); + }) + }; + $scope.cancel = function () { +// window.location.reload(); + $modalInstance.dismiss('cancel'); + }; + }], + resolve:{ + UserGroupModel:function(){ + return $scope.groupList[index] + } + }, + size: "lg" + }); + modalInstance.result.then(function () { + $scope.getGroupList(); + }); + }; + + $scope.getGroupList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/user/organization.html b/src/main/webapp/WEB-INF/views/src/views/user/organization.html new file mode 100644 index 0000000..cf6e51d --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/user/organization.html @@ -0,0 +1,187 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

组织机构管理

+ +
+ + +
+ + +
+ + +
+ + + +
+ +
+ + +
+ +
+ + + + +
+ +
+ +
+ +
+
    +
  • +
+
+ +
+ + +
+ + +
+ + +
+ + +
+ + + +
+ + + + + diff --git a/src/main/webapp/WEB-INF/views/src/views/user/organization.js b/src/main/webapp/WEB-INF/views/src/views/user/organization.js new file mode 100644 index 0000000..82f4277 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/user/organization.js @@ -0,0 +1,139 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "OrganizationAPI", "$modal", "$ugDialog", "$rootScope", function($scope, OrganizationAPI, $modal, $ugDialog, $rootScope){ + $scope.organizationList = []; + $scope.queryParam = {}; + $scope.getOrganizationTree = function(){ + OrganizationAPI.query({ + id:$scope.queryParam.id + }, function(data){ + $scope.organizationList = data; + $rootScope.$broadcast("loadingTree"); + }); + }; + $scope.removeNode = function(item){ + var msg = "是否删除此组织?"; + if(item.nodes && item.nodes.length > 0){ + msg = "此组织存在下级组织,确认将同步删除此组织所有下级组织,是否删除?" + } + $ugDialog.confirm(msg).then(function(){ + OrganizationAPI.delete({ + id: item.id + }, function(){ + $scope.getOrganizationTree(); + }); + }) + }; + $scope.addChildOrganization = function(item){ + $scope.openAddModel({ + parentId:item.id, + parentName:item.name + }, 'ADD_CHILD_NODE'); + }; + $scope.updateChildOrganization = function(item){ + $scope.openAddModel(angular.copy(item)); + }; + $scope.openAddModel = function (organization, action) { + var modalInstance = $modal.open({ + templateUrl: 'addOrganization.html', + resolve:{ + CurrentOrganization : function(){ + return organization; + }, + Action: function(){ + return action; + } + }, + controller: ["$scope", "OrganizationAPI", "$modalInstance", "CurrentOrganization", "Action", function ($scope, OrganizationAPI, $modalInstance, CurrentOrganization, Action) { + $scope.organization = {}; + if(CurrentOrganization){ + if(Action == 'ADD_CHILD_NODE'){ + $scope.organization.parentId = CurrentOrganization.parentId; + $scope.organization.parentName = CurrentOrganization.parentName; + }else{ + $scope.organization = { + id:CurrentOrganization.id, + name:CurrentOrganization.name, + description:CurrentOrganization.description, + parentId:CurrentOrganization.parentId, + parentName:CurrentOrganization.parentName + }; + } + } + $scope.errors = null; + $scope.addOrganizationForm = {}; + $scope.saveOrganization = function(){ + $scope.errors = null; + if($scope.addOrganizationForm.validator.form()){ + if($scope.organization.id){ + OrganizationAPI.update($scope.organization, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + }else{ + OrganizationAPI.save($scope.organization, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function () { + $scope.getOrganizationTree(); + }); + }; + + $scope.openUserModel = function (organization) { + var modalInstance = $modal.open({ + templateUrl: 'organizationUser.html', + resolve:{ + CurrentOrganization : function(){ + return organization; + } + }, + controller: ["$scope", "OrganizationAPI", "UserAPI", "$modalInstance", "CurrentOrganization", function ($scope, OrganizationAPI, UserAPI, $modalInstance, CurrentOrganization) { + $scope.organization = {}; + if(CurrentOrganization){ + $scope.organization = { + id:CurrentOrganization.id, + name:CurrentOrganization.name, + description:CurrentOrganization.description, + parentId:CurrentOrganization.parentId, + parentName:CurrentOrganization.parentName + }; + } + UserAPI.query({ + limit:10, + offset:1 + }, function(data){ + $scope.userList = data.data; + }); + $scope.choseUser = {}; + $scope.saveOrganizationUser = function(){ + OrganizationAPI.bindUser({ + id:$scope.organization.id, + userIds:$scope.choseUser.items + }) + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }] + }); + modalInstance.result.then(function () { + $scope.getOrganizationTree(); + }); + }; + + $scope.getOrganizationTree(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/user/permission_list.js b/src/main/webapp/WEB-INF/views/src/views/user/permission_list.js new file mode 100644 index 0000000..583e9ec --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/user/permission_list.js @@ -0,0 +1,63 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "PermissionAPI", "$modal", "$ugDialog", function($scope, PermissionAPI, $modal, $ugDialog){ + $scope.userList = []; + $scope.pageInfoSetting = { + pageSize:30, + pageNum:1 + }; + $scope.queryParam = {}; + $scope.getPermissionList = function(){ + PermissionAPI.query({ + limit:$scope.pageInfoSetting.pageSize, + offset:$scope.pageInfoSetting.pageNum, + keyword:$scope.queryParam.keyword + }, function(data){ + $scope.permissionList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getPermissionList; + }); + }; + $scope.removePermission = function(index){ + $ugDialog.confirm("是否删除权限?").then(function(){ + PermissionAPI.delete({ + id: $scope.permissionList[index].id + }, function(){ + $scope.getPermissionList(); + }); + }) + }; + $scope.open = function (index, size) { + var modalInstance = $modal.open({ + templateUrl: 'addPermission.html', + controller: ["$scope", "PermissionAPI", "$modalInstance", function ($scope, PermissionAPI, $modalInstance) { + $scope.permission = {}; + $scope.errors = null; + $scope.addPermissionForm = {}; + $scope.savePermission = function(){ + $scope.errors = null; + if($scope.addPermissionForm.validator.form()){ + $scope.permission.available = true; + PermissionAPI.save($scope.permission, function(){ + $modalInstance.close(); + }, function(data){ + $scope.errors = data.data; + }) + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + size: size + }); + modalInstance.result.then(function () { + $scope.getPermissionList(); + }); + }; + + $scope.getPermissionList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/user/user_module.js b/src/main/webapp/WEB-INF/views/src/views/user/user_module.js new file mode 100644 index 0000000..3de15d4 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/user/user_module.js @@ -0,0 +1,62 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/user/user_list", + "views/user/group_list", + "views/user/permission_list", + "views/user/organization" +],function (accountList,group_list,permission_list,organization) { + angular.module('DMS.user', [ + "permission" + ]).config(["$stateProvider", function($stateProvider){ + $stateProvider + .state('user_list', { + url: '/user/list', + templateUrl: 'views/user/user_list.html', + data:{ + permissions:{ + only:["USER_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: accountList + }) + // 用户组 + .state('group_list', { + url: '/user/groups', + templateUrl: 'views/user/group_list.html', + data:{ + permissions:{ + only:["USER_GROUP_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: group_list + }) + // 权限管理 + .state('permission_list', { + url: '/permission', + templateUrl: 'views/user/permission_list.html', + data:{ + permissions:{ + only:["PERMISSION_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: permission_list + }) + // 组织管理 + .state('organization', { + url: '/organization', + templateUrl: 'views/user/organization.html', + data:{ + permissions:{ + only:["ORGANIZATION_VIEW"], + redirectTo:"unauthorized" + } + }, + controller: organization + }) + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/wx/advice.html b/src/main/webapp/WEB-INF/views/src/views/wx/advice.html new file mode 100644 index 0000000..87aa585 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/wx/advice.html @@ -0,0 +1,153 @@ + + + +
+ + +
+ + +
+ + +
+ +
+ +

咨询快报列表

+
+ +
+ +
+ +
+ + +
+
+ + + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + +
标题发布时间发布人操作
+
+ + + + | + + + +
+
+
暂无消息数据
+
+
+ +
+ +
+ +
+ + +
+ + +
+ + + +
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/wx/advice.js b/src/main/webapp/WEB-INF/views/src/views/wx/advice.js new file mode 100644 index 0000000..aa3f641 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/wx/advice.js @@ -0,0 +1,81 @@ +/** + * Created by Jeng on 2016/1/8. + */ +define(function () { + return ["$scope", "AdviceAPI", "$modal", "$ugDialog", function ($scope, AdviceAPI, $modal, $ugDialog) { + $scope.adviceList = []; + $scope.pageInfoSetting = { + pageSize: 10, + pageNum: 1 + }; + $scope.queryParam = {}; + $scope.getAdviceList = function () { + AdviceAPI.query({ + limit: $scope.pageInfoSetting.pageSize, + offset: $scope.pageInfoSetting.pageNum, + keyword: $scope.queryParam.keyword + }, function (data) { + $scope.adviceList = data.data; + $scope.pageInfoSetting = data.pageInfo; + $scope.pageInfoSetting.loadData = $scope.getAdviceList; + }); + }; + $scope.removeAdvice = function (index) { + $ugDialog.confirm("是否删除该快报?").then(function () { + AdviceAPI.delete({ + id: $scope.adviceList[index].id + }, function () { + $scope.getAdviceList(); + }); + }) + }; + + $scope.open = function (index) { + var modalInstance = $modal.open({ + templateUrl: 'addAdvice.html', + controller: ["$scope", "AdviceAPI", "$modalInstance", "currentAdvice", function ($scope, AdviceAPI, $modalInstance, currentAdvice) { + + $scope.advice = {}; + if (currentAdvice) { + $scope.advice = currentAdvice; + } + $scope.errors = null; + $scope.addAdviceForm = {}; + $scope.saveOrUpdateAdvice = function () { + $scope.errors = null; + if ($scope.addAdviceForm.validator.form()) { + if ($scope.advice.id) { + AdviceAPI.update($scope.advice, function () { + $modalInstance.close(); + }, function (data) { + $scope.errors = data.data; + }) + } else { + AdviceAPI.save($scope.advice, function () { + $modalInstance.close(); + }, function (data) { + $scope.errors = data.data; + }) + } + + } + }; + $scope.cancel = function () { + $modalInstance.dismiss('cancel'); + }; + }], + resolve: { + currentAdvice: function () { + return $scope.adviceList[index]; + } + }, + size: 'lg' + }); + modalInstance.result.then(function () { + $scope.getAdviceList(); + }); + }; + + $scope.getAdviceList(); + }]; +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/src/views/wx/wx_module.js b/src/main/webapp/WEB-INF/views/src/views/wx/wx_module.js new file mode 100644 index 0000000..26627ad --- /dev/null +++ b/src/main/webapp/WEB-INF/views/src/views/wx/wx_module.js @@ -0,0 +1,21 @@ +/** + * Created by Administrator on 2016/1/15. + */ +define([ + "views/wx/advice" +], function (advice) { + angular.module('DMS.wx', ["permission"]).config(["$stateProvider", "$urlRouterProvider", "$httpProvider", function ($stateProvider, $urlRouterProvider, $httpProvider) { + $stateProvider + .state('advice', { + url: '/advice', + templateUrl: 'views/wx/advice.html', + data: { + permissions: { + only: ["ADVICE_VIEW"], + redirectTo: "unauthorized" + } + }, + controller: advice + }) + }]); +}); \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/welcome.jsp b/src/main/webapp/WEB-INF/views/welcome.jsp new file mode 100644 index 0000000..834cec0 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/welcome.jsp @@ -0,0 +1,15 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> + + + + 欢迎游客访问,点击登录
+
+ + 欢迎[]登录
+
+ + 您有角色admin + + + diff --git a/src/main/webapp/WEB-INF/views/wx/bind.jsp b/src/main/webapp/WEB-INF/views/wx/bind.jsp new file mode 100644 index 0000000..f59aa63 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/wx/bind.jsp @@ -0,0 +1,101 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="mytags.jsp"%> + + + + + 微信页面 + + + + + + + + + + + + + + +
+ + +
+
+
+
+
+
+ 绑定手机号 +
+
+
+ ${message} +
+
+ + + + +
+
+
+ +
+
+
+
+
+
+ +
+ + + + + + + + + + + + diff --git a/src/main/webapp/WEB-INF/views/wx/bindFail.jsp b/src/main/webapp/WEB-INF/views/wx/bindFail.jsp new file mode 100644 index 0000000..603ab1b --- /dev/null +++ b/src/main/webapp/WEB-INF/views/wx/bindFail.jsp @@ -0,0 +1,50 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="mytags.jsp"%> + + + + + 微信页面 + + + + + + + + + + + + + + +
+ +
+
+
+
+ 未找到对应的手机号信息,请确认手机号填写是否填写正确! + +
+
+
+
+
+ + + + + + + + diff --git a/src/main/webapp/WEB-INF/views/wx/bindSuccess.jsp b/src/main/webapp/WEB-INF/views/wx/bindSuccess.jsp new file mode 100644 index 0000000..7f2b309 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/wx/bindSuccess.jsp @@ -0,0 +1,49 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="mytags.jsp"%> + + + + + 微信页面 + + + + + + + + + + + + + + +
+ +
+
+
+
+ 恭喜绑定手机号:<<${phone}>>成功,以后您将可以直接通过微信扫一扫进行扫码收货,同时可以通过微信公众号接收订单信息! +
+
+
+
+
+ + + + + + + + diff --git a/src/main/webapp/WEB-INF/views/wx/mytags.jsp b/src/main/webapp/WEB-INF/views/wx/mytags.jsp new file mode 100644 index 0000000..e2fc5bc --- /dev/null +++ b/src/main/webapp/WEB-INF/views/wx/mytags.jsp @@ -0,0 +1,8 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt_rt"%> +<% +String path = request.getContextPath(); +String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path; +%> + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/wx/receipt.jsp b/src/main/webapp/WEB-INF/views/wx/receipt.jsp new file mode 100644 index 0000000..91c47c3 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/wx/receipt.jsp @@ -0,0 +1,228 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java"%> +<%@include file="mytags.jsp"%> + + + + +微信页面 + + + + + + + + + + + + + + +
+ +
+
+
+
+
+
+
+
+ +
+
+
+ 订单编号:${orderInfo.orderNo}
+ 订购人姓名:${orderInfo.consigneeName}
+ 电话:${orderInfo.consigneePhone}
+ 地址:${orderInfo.consigneeAddress}
+ 订单要求:${orderInfo.remark}
+
+
+
+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + +
产品名称份数
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+ + + + + + +
${message}
+
+
+ + + + + + +
+
+
+
+
+
+ + + + + + + + diff --git a/src/main/webapp/WEB-INF/views/wx/receiptNoAuth.jsp b/src/main/webapp/WEB-INF/views/wx/receiptNoAuth.jsp new file mode 100644 index 0000000..9efa57e --- /dev/null +++ b/src/main/webapp/WEB-INF/views/wx/receiptNoAuth.jsp @@ -0,0 +1,49 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@include file="mytags.jsp"%> + + + + + 微信页面 + + + + + + + + + + + + + + +
+ +
+
+
+
+ 扫描出错了,错误原因:${message} +
+
+
+
+
+ + + + + + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..77a9b51 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,103 @@ + + + + + contextConfigLocation + + classpath:config/spring-core.xml + + + + org.springframework.web.context.ContextLoaderListener + + + + spring + org.springframework.web.servlet.DispatcherServlet + + contextConfigLocation + classpath:config/spring-servlet.xml + + 1 + + + spring + / + + + + 字符集过滤器 + encodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + 字符集编码 + encoding + UTF-8 + + + + encodingFilter + /* + + + + + + shiroFilter + org.springframework.web.filter.DelegatingFilterProxy + true + + targetFilterLifecycle + true + + + + + + + + shiroFilter + /* + + + + DruidStatView + com.alibaba.druid.support.http.StatViewServlet + + + DruidStatView + /druid/* + + + + cors + com.xmomen.framework.web.interceptor.CrossInterceptor + + + cors + /* + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/webapp/doc/swagger-ui/dist/css/typography.css b/src/main/webapp/doc/swagger-ui/dist/css/typography.css new file mode 100644 index 0000000..e69de29 diff --git a/src/main/webapp/doc/swagger-ui/dist/fonts/DroidSans.ttf b/src/main/webapp/doc/swagger-ui/dist/fonts/DroidSans.ttf new file mode 100644 index 0000000..e517a0c Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/fonts/DroidSans.ttf differ diff --git a/src/main/webapp/doc/swagger-ui/dist/images/collapse.gif b/src/main/webapp/doc/swagger-ui/dist/images/collapse.gif new file mode 100644 index 0000000..8843e8c Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/images/collapse.gif differ diff --git a/src/main/webapp/doc/swagger-ui/dist/images/explorer_icons.png b/src/main/webapp/doc/swagger-ui/dist/images/explorer_icons.png new file mode 100644 index 0000000..be43b27 Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/images/explorer_icons.png differ diff --git a/src/main/webapp/doc/swagger-ui/dist/images/favicon-16x16.png b/src/main/webapp/doc/swagger-ui/dist/images/favicon-16x16.png new file mode 100644 index 0000000..0f7e13b Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/images/favicon-16x16.png differ diff --git a/src/main/webapp/doc/swagger-ui/dist/images/favicon-32x32.png b/src/main/webapp/doc/swagger-ui/dist/images/favicon-32x32.png new file mode 100644 index 0000000..b0a3352 Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/images/favicon-32x32.png differ diff --git a/src/main/webapp/doc/swagger-ui/dist/images/favicon.ico b/src/main/webapp/doc/swagger-ui/dist/images/favicon.ico new file mode 100644 index 0000000..8b60bcf Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/images/favicon.ico differ diff --git a/src/main/webapp/doc/swagger-ui/dist/images/pet_store_api.png b/src/main/webapp/doc/swagger-ui/dist/images/pet_store_api.png new file mode 100644 index 0000000..1192ad8 Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/images/pet_store_api.png differ diff --git a/src/main/webapp/doc/swagger-ui/dist/images/wordnik_api.png b/src/main/webapp/doc/swagger-ui/dist/images/wordnik_api.png new file mode 100644 index 0000000..dc0ddab Binary files /dev/null and b/src/main/webapp/doc/swagger-ui/dist/images/wordnik_api.png differ diff --git a/src/main/webapp/doc/swagger-ui/dist/lang/es.js b/src/main/webapp/doc/swagger-ui/dist/lang/es.js new file mode 100644 index 0000000..13fa015 --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lang/es.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Advertencia: Obsoleto", + "Implementation Notes":"Notas de implementación", + "Response Class":"Clase de la Respuesta", + "Status":"Status", + "Parameters":"Parámetros", + "Parameter":"Parámetro", + "Value":"Valor", + "Description":"Descripción", + "Parameter Type":"Tipo del Parámetro", + "Data Type":"Tipo del Dato", + "Response Messages":"Mensajes de la Respuesta", + "HTTP Status Code":"Código de Status HTTP", + "Reason":"Razón", + "Response Model":"Modelo de la Respuesta", + "Request URL":"URL de la Solicitud", + "Response Body":"Cuerpo de la Respuesta", + "Response Code":"Código de la Respuesta", + "Response Headers":"Encabezados de la Respuesta", + "Hide Response":"Ocultar Respuesta", + "Try it out!":"Pruébalo!", + "Show/Hide":"Mostrar/Ocultar", + "List Operations":"Listar Operaciones", + "Expand Operations":"Expandir Operaciones", + "Raw":"Crudo", + "can't parse JSON. Raw result":"no puede parsear el JSON. Resultado crudo", + "Example Value":"Valor de Ejemplo", + "Model Schema":"Esquema del Modelo", + "Model":"Modelo", + "apply":"aplicar", + "Username":"Nombre de usuario", + "Password":"Contraseña", + "Terms of service":"Términos de Servicio", + "Created by":"Creado por", + "See more at":"Ver más en", + "Contact the developer":"Contactar al desarrollador", + "api version":"versión de la api", + "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta", + "fetching resource":"buscando recurso", + "fetching resource list":"buscando lista del recurso", + "Explore":"Explorar", + "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.", + "Please specify the protocol for":"Por favor, especificar el protocola para", + "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde", + "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI", + "Unable to read api":"No se puede leer la api", + "from path":"desde ruta", + "server returned":"el servidor retornó" +}); diff --git a/src/main/webapp/doc/swagger-ui/dist/lang/fr.js b/src/main/webapp/doc/swagger-ui/dist/lang/fr.js new file mode 100644 index 0000000..388dff1 --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lang/fr.js @@ -0,0 +1,54 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Avertissement : Obsolète", + "Implementation Notes":"Notes d'implémentation", + "Response Class":"Classe de la réponse", + "Status":"Statut", + "Parameters":"Paramètres", + "Parameter":"Paramètre", + "Value":"Valeur", + "Description":"Description", + "Parameter Type":"Type du paramètre", + "Data Type":"Type de données", + "Response Messages":"Messages de la réponse", + "HTTP Status Code":"Code de statut HTTP", + "Reason":"Raison", + "Response Model":"Modèle de réponse", + "Request URL":"URL appelée", + "Response Body":"Corps de la réponse", + "Response Code":"Code de la réponse", + "Response Headers":"En-têtes de la réponse", + "Hide Response":"Cacher la réponse", + "Headers":"En-têtes", + "Try it out!":"Testez !", + "Show/Hide":"Afficher/Masquer", + "List Operations":"Liste des opérations", + "Expand Operations":"Développer les opérations", + "Raw":"Brut", + "can't parse JSON. Raw result":"impossible de décoder le JSON. Résultat brut", + "Example Value":"Exemple la valeur", + "Model Schema":"Définition du modèle", + "Model":"Modèle", + "apply":"appliquer", + "Username":"Nom d'utilisateur", + "Password":"Mot de passe", + "Terms of service":"Conditions de service", + "Created by":"Créé par", + "See more at":"Voir plus sur", + "Contact the developer":"Contacter le développeur", + "api version":"version de l'api", + "Response Content Type":"Content Type de la réponse", + "fetching resource":"récupération de la ressource", + "fetching resource list":"récupération de la liste de ressources", + "Explore":"Explorer", + "Show Swagger Petstore Example Apis":"Montrer les Apis de l'exemple Petstore de Swagger", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Impossible de lire à partir du serveur. Il se peut que les réglages access-control-origin ne soient pas appropriés.", + "Please specify the protocol for":"Veuillez spécifier un protocole pour", + "Can't read swagger JSON from":"Impossible de lire le JSON swagger à partir de", + "Finished Loading Resource Information. Rendering Swagger UI":"Chargement des informations terminé. Affichage de Swagger UI", + "Unable to read api":"Impossible de lire l'api", + "from path":"à partir du chemin", + "server returned":"réponse du serveur" +}); diff --git a/src/main/webapp/doc/swagger-ui/dist/lang/it.js b/src/main/webapp/doc/swagger-ui/dist/lang/it.js new file mode 100644 index 0000000..8529c2a --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lang/it.js @@ -0,0 +1,52 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Attenzione: Deprecato", + "Implementation Notes":"Note di implementazione", + "Response Class":"Classe della risposta", + "Status":"Stato", + "Parameters":"Parametri", + "Parameter":"Parametro", + "Value":"Valore", + "Description":"Descrizione", + "Parameter Type":"Tipo di parametro", + "Data Type":"Tipo di dato", + "Response Messages":"Messaggi della risposta", + "HTTP Status Code":"Codice stato HTTP", + "Reason":"Motivo", + "Response Model":"Modello di risposta", + "Request URL":"URL della richiesta", + "Response Body":"Corpo della risposta", + "Response Code":"Oggetto della risposta", + "Response Headers":"Intestazioni della risposta", + "Hide Response":"Nascondi risposta", + "Try it out!":"Provalo!", + "Show/Hide":"Mostra/Nascondi", + "List Operations":"Mostra operazioni", + "Expand Operations":"Espandi operazioni", + "Raw":"Grezzo (raw)", + "can't parse JSON. Raw result":"non è possibile parsare il JSON. Risultato grezzo (raw).", + "Model Schema":"Schema del modello", + "Model":"Modello", + "apply":"applica", + "Username":"Nome utente", + "Password":"Password", + "Terms of service":"Condizioni del servizio", + "Created by":"Creato da", + "See more at":"Informazioni aggiuntive:", + "Contact the developer":"Contatta lo sviluppatore", + "api version":"versione api", + "Response Content Type":"Tipo di contenuto (content type) della risposta", + "fetching resource":"recuperando la risorsa", + "fetching resource list":"recuperando lista risorse", + "Explore":"Esplora", + "Show Swagger Petstore Example Apis":"Mostra le api di esempio di Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Non è possibile leggere dal server. Potrebbe non avere le impostazioni di controllo accesso origine (access-control-origin) appropriate.", + "Please specify the protocol for":"Si prega di specificare il protocollo per", + "Can't read swagger JSON from":"Impossibile leggere JSON swagger da:", + "Finished Loading Resource Information. Rendering Swagger UI":"Lettura informazioni risorse termianta. Swagger UI viene mostrata", + "Unable to read api":"Impossibile leggere la api", + "from path":"da cartella", + "server returned":"il server ha restituito" +}); diff --git a/src/main/webapp/doc/swagger-ui/dist/lang/pl.js b/src/main/webapp/doc/swagger-ui/dist/lang/pl.js new file mode 100644 index 0000000..ce41e91 --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lang/pl.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Uwaga: Wycofane", + "Implementation Notes":"Uwagi Implementacji", + "Response Class":"Klasa Odpowiedzi", + "Status":"Status", + "Parameters":"Parametry", + "Parameter":"Parametr", + "Value":"Wartość", + "Description":"Opis", + "Parameter Type":"Typ Parametru", + "Data Type":"Typ Danych", + "Response Messages":"Wiadomości Odpowiedzi", + "HTTP Status Code":"Kod Statusu HTTP", + "Reason":"Przyczyna", + "Response Model":"Model Odpowiedzi", + "Request URL":"URL Wywołania", + "Response Body":"Treść Odpowiedzi", + "Response Code":"Kod Odpowiedzi", + "Response Headers":"Nagłówki Odpowiedzi", + "Hide Response":"Ukryj Odpowiedź", + "Headers":"Nagłówki", + "Try it out!":"Wypróbuj!", + "Show/Hide":"Pokaż/Ukryj", + "List Operations":"Lista Operacji", + "Expand Operations":"Rozwiń Operacje", + "Raw":"Nieprzetworzone", + "can't parse JSON. Raw result":"nie można przetworzyć pliku JSON. Nieprzetworzone dane", + "Model Schema":"Schemat Modelu", + "Model":"Model", + "apply":"użyj", + "Username":"Nazwa użytkownika", + "Password":"Hasło", + "Terms of service":"Warunki używania", + "Created by":"Utworzone przez", + "See more at":"Zobacz więcej na", + "Contact the developer":"Kontakt z deweloperem", + "api version":"wersja api", + "Response Content Type":"Typ Zasobu Odpowiedzi", + "fetching resource":"ładowanie zasobu", + "fetching resource list":"ładowanie listy zasobów", + "Explore":"Eksploruj", + "Show Swagger Petstore Example Apis":"Pokaż Przykładowe Api Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Brak połączenia z serwerem. Może on nie mieć odpowiednich ustawień access-control-origin.", + "Please specify the protocol for":"Proszę podać protokół dla", + "Can't read swagger JSON from":"Nie można odczytać swagger JSON z", + "Finished Loading Resource Information. Rendering Swagger UI":"Ukończono Ładowanie Informacji o Zasobie. Renderowanie Swagger UI", + "Unable to read api":"Nie można odczytać api", + "from path":"ze ścieżki", + "server returned":"serwer zwrócił" +}); diff --git a/src/main/webapp/doc/swagger-ui/dist/lang/ru.js b/src/main/webapp/doc/swagger-ui/dist/lang/ru.js new file mode 100644 index 0000000..592744e --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lang/ru.js @@ -0,0 +1,56 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Предупреждение: Устарело", + "Implementation Notes":"Заметки", + "Response Class":"Пример ответа", + "Status":"Статус", + "Parameters":"Параметры", + "Parameter":"Параметр", + "Value":"Значение", + "Description":"Описание", + "Parameter Type":"Тип параметра", + "Data Type":"Тип данных", + "HTTP Status Code":"HTTP код", + "Reason":"Причина", + "Response Model":"Структура ответа", + "Request URL":"URL запроса", + "Response Body":"Тело ответа", + "Response Code":"HTTP код ответа", + "Response Headers":"Заголовки ответа", + "Hide Response":"Спрятать ответ", + "Headers":"Заголовки", + "Response Messages":"Что может прийти в ответ", + "Try it out!":"Попробовать!", + "Show/Hide":"Показать/Скрыть", + "List Operations":"Операции кратко", + "Expand Operations":"Операции подробно", + "Raw":"В сыром виде", + "can't parse JSON. Raw result":"Не удается распарсить ответ:", + "Example Value":"Пример", + "Model Schema":"Структура", + "Model":"Описание", + "Click to set as parameter value":"Нажмите, чтобы испльзовать в качестве значения параметра", + "apply":"применить", + "Username":"Имя пользователя", + "Password":"Пароль", + "Terms of service":"Условия использования", + "Created by":"Разработано", + "See more at":"Еще тут", + "Contact the developer":"Связаться с разработчиком", + "api version":"Версия API", + "Response Content Type":"Content Type ответа", + "Parameter content type:":"Content Type параметра:", + "fetching resource":"Получение ресурса", + "fetching resource list":"Получение ресурсов", + "Explore":"Показать", + "Show Swagger Petstore Example Apis":"Показать примеры АПИ", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, проблема с настройками доступа", + "Please specify the protocol for":"Пожалуйста, укажите протокол для", + "Can't read swagger JSON from":"Не получается прочитать swagger json из", + "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим", + "Unable to read api":"Не удалось прочитать api", + "from path":"по адресу", + "server returned":"сервер сказал" +}); diff --git a/src/main/webapp/doc/swagger-ui/dist/lang/tr.js b/src/main/webapp/doc/swagger-ui/dist/lang/tr.js new file mode 100644 index 0000000..16426a9 --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lang/tr.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotmark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Uyarı: Deprecated", + "Implementation Notes":"Gerçekleştirim Notları", + "Response Class":"Dönen Sınıf", + "Status":"Statü", + "Parameters":"Parametreler", + "Parameter":"Parametre", + "Value":"Değer", + "Description":"Açıklama", + "Parameter Type":"Parametre Tipi", + "Data Type":"Veri Tipi", + "Response Messages":"Dönüş Mesajı", + "HTTP Status Code":"HTTP Statü Kodu", + "Reason":"Gerekçe", + "Response Model":"Dönüş Modeli", + "Request URL":"İstek URL", + "Response Body":"Dönüş İçeriği", + "Response Code":"Dönüş Kodu", + "Response Headers":"Dönüş Üst Bilgileri", + "Hide Response":"Dönüşü Gizle", + "Headers":"Üst Bilgiler", + "Try it out!":"Dene!", + "Show/Hide":"Göster/Gizle", + "List Operations":"Operasyonları Listele", + "Expand Operations":"Operasyonları Aç", + "Raw":"Ham", + "can't parse JSON. Raw result":"JSON çözümlenemiyor. Ham sonuç", + "Model Schema":"Model Şema", + "Model":"Model", + "apply":"uygula", + "Username":"Kullanıcı Adı", + "Password":"Parola", + "Terms of service":"Servis şartları", + "Created by":"Oluşturan", + "See more at":"Daha fazlası için", + "Contact the developer":"Geliştirici ile İletişime Geçin", + "api version":"api versiyon", + "Response Content Type":"Dönüş İçerik Tipi", + "fetching resource":"kaynak getiriliyor", + "fetching resource list":"kaynak listesi getiriliyor", + "Explore":"Keşfet", + "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.", + "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz", + "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor", + "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor", + "Unable to read api":"api okunamadı", + "from path":"yoldan", + "server returned":"sunucuya dönüldü" +}); diff --git a/src/main/webapp/doc/swagger-ui/dist/lang/translator.js b/src/main/webapp/doc/swagger-ui/dist/lang/translator.js new file mode 100644 index 0000000..ffb879f --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lang/translator.js @@ -0,0 +1,39 @@ +'use strict'; + +/** + * Translator for documentation pages. + * + * To enable translation you should include one of language-files in your index.html + * after . + * For example - + * + * If you wish to translate some new texts you should do two things: + * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. + * 2. Mark that text it templates this way New Phrase or . + * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. + * + */ +window.SwaggerTranslator = { + + _words:[], + + translate: function(sel) { + var $this = this; + sel = sel || '[data-sw-translate]'; + + $(sel).each(function() { + $(this).html($this._tryTranslate($(this).html())); + + $(this).val($this._tryTranslate($(this).val())); + $(this).attr('title', $this._tryTranslate($(this).attr('title'))); + }); + }, + + _tryTranslate: function(word) { + return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; + }, + + learn: function(wordsMap) { + this._words = wordsMap; + } +}; diff --git a/src/main/webapp/doc/swagger-ui/dist/lib/backbone-min.js b/src/main/webapp/doc/swagger-ui/dist/lib/backbone-min.js new file mode 100644 index 0000000..8eff02e --- /dev/null +++ b/src/main/webapp/doc/swagger-ui/dist/lib/backbone-min.js @@ -0,0 +1 @@ +!function(t,e){if("function"==typeof define&&define.amd)define(["underscore","jquery","exports"],function(i,n,s){t.Backbone=e(t,s,i,n)});else if("undefined"!=typeof exports){var i=require("underscore");e(t,exports,i)}else t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}(this,function(t,e,i,n){var s=t.Backbone,r=[],a=(r.push,r.slice);r.splice;e.VERSION="1.1.2",e.$=n,e.noConflict=function(){return t.Backbone=s,this},e.emulateHTTP=!1,e.emulateJSON=!1;var o=e.Events={on:function(t,e,i){if(!c(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var n=this._events[t]||(this._events[t]=[]);return n.push({callback:e,context:i,ctx:i||this}),this},once:function(t,e,n){if(!c(this,"once",t,[e,n])||!e)return this;var s=this,r=i.once(function(){s.off(t,r),e.apply(this,arguments)});return r._callback=e,this.on(t,r,n)},off:function(t,e,n){var s,r,a,o,h,u,l,d;if(!this._events||!c(this,"off",t,[e,n]))return this;if(!t&&!e&&!n)return this._events=void 0,this;for(o=t?[t]:i.keys(this._events),h=0,u=o.length;h").attr(t);this.setElement(n,!1)}}}),e.sync=function(t,n,s){var r=E[t];i.defaults(s||(s={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:r,dataType:"json"};if(s.url||(a.url=i.result(n,"url")||j()),null!=s.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(a.contentType="application/json",a.data=JSON.stringify(s.attrs||n.toJSON(s))),s.emulateJSON&&(a.contentType="application/x-www-form-urlencoded",a.data=a.data?{model:a.data}:{}),s.emulateHTTP&&("PUT"===r||"DELETE"===r||"PATCH"===r)){a.type="POST",s.emulateJSON&&(a.data._method=r);var o=s.beforeSend;s.beforeSend=function(t){if(t.setRequestHeader("X-HTTP-Method-Override",r),o)return o.apply(this,arguments)}}"GET"===a.type||s.emulateJSON||(a.processData=!1),"PATCH"===a.type&&x&&(a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")});var h=s.xhr=e.ajax(i.extend(a,s));return n.trigger("request",n,h,s),h};var x=!("undefined"==typeof window||!window.ActiveXObject||window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent),E={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var k=e.Router=function(t){t||(t={}),t.routes&&(this.routes=t.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},T=/\((.*?)\)/g,$=/(\(\?)?:\w+/g,S=/\*\w+/g,H=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend(k.prototype,o,{initialize:function(){},route:function(t,n,s){i.isRegExp(t)||(t=this._routeToRegExp(t)),i.isFunction(n)&&(s=n,n=""),s||(s=this[n]);var r=this;return e.history.route(t,function(i){var a=r._extractParameters(t,i);r.execute(s,a),r.trigger.apply(r,["route:"+n].concat(a)),r.trigger("route",n,a),e.history.trigger("route",r,n,a)}),this},execute:function(t,e){t&&t.apply(this,e)},navigate:function(t,i){return e.history.navigate(t,i),this},_bindRoutes:function(){if(this.routes){this.routes=i.result(this,"routes");for(var t,e=i.keys(this.routes);null!=(t=e.pop());)this.route(t,this.routes[t])}},_routeToRegExp:function(t){return t=t.replace(H,"\\$&").replace(T,"(?:$1)?").replace($,function(t,e){return e?t:"([^/?]+)"}).replace(S,"([^?]*?)"),new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return i.map(n,function(t,e){return e===n.length-1?t||null:t?decodeURIComponent(t):null})}});var A=e.History=function(){this.handlers=[],i.bindAll(this,"checkUrl"),"undefined"!=typeof window&&(this.location=window.location,this.history=window.history)},I=/^[#\/]|\s+$/g,N=/^\/+|\/+$/g,R=/msie [\w.]+/,O=/\/$/,P=/#.*$/;A.started=!1,i.extend(A.prototype,o,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(null==t)if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var i=this.root.replace(O,"");t.indexOf(i)||(t=t.slice(i.length))}else t=this.getHash();return t.replace(I,"")},start:function(t){if(A.started)throw new Error("Backbone.history has already been started");A.started=!0,this.options=i.extend({root:"/"},this.options,t),this.root=this.options.root,this._wantsHashChange=this.options.hashChange!==!1,this._wantsPushState=!!this.options.pushState,this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var n=this.getFragment(),s=document.documentMode,r=R.exec(navigator.userAgent.toLowerCase())&&(!s||s<=7);if(this.root=("/"+this.root+"/").replace(N,"/"),r&&this._wantsHashChange){var a=e.$('