Ë

����£éfÍ�ã�������������������ó¸��—�d�Z�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZ�ddlZddl
Z
ddlZddlZddlZddlmZ�ddlZddlmZ�ddlmZ�ddlmZ�ddlmZ�	�dd	lmZ�dd
lmZmZ�dZej<������������������efZ�ejB������������������«�������Z"g�d
¢Z#h�d£Z$h�d£Z%e$e%z��ddhz��Z&g�d¢Z'dgZ(ddgZ)g�d¢Z*ddgZ+g�d¢Z,dgZ-dgZ.g�d¢Z/g�d¢�e0ejb������������������je������������������«�������«������z���Z3g�d¢Z4g�d¢Z5g�d ¢Z6d!d"gZ7d#„�Z8d$„�Z9d%„�Z:d&„�Z;e:e8e;d'„�d(„�d)„�d*„�d+œZ<�G�d,„�d-e=«������Z>dWd.„Z?�ej€������������������e?«�������d/„�ZAd0„�ZBd1„�ZCd2„�ZDd3„�ZEd4„�ZFd5„�ZGd6„�ZHd7„�ZId8„�ZJdXd9„ZKd:„�ZLd;„�ZMd<„�ZNd=„�ZOd>„�ZPd?„�ZQd@„�ZRdA„�ZSi�dBeO“dCeG“dDd“dEd“dFeQ“dGd“dHeR“dId“dJeE“dKeF“dLd“dMdN„�“dOd“dPd“dQeC“dReS“dSd“ePdeNdeMdeHeOdT„�eIddeJdUœ
¥ZTdV„�ZUy#�e $�r�eZdZej<������������������fZY�ŒVw�xY�w)Yz>Module to handle the operations within the aggregate pipeline.é����N)Úversion)ÚNOTHING)Úcommand_cursor)Ú	filtering)Úhelpers)ÚOperationFailure)ÚInvalidDocument)ÚRegexÚ
decimal128TF)ú	$addToSetú$avgú$firstú$lastú$maxú
$mergeObjectsú$minú$pushú
$stdDevPopú$stdDevSampú$sum>���ú$lnú$absú$expú$ceilú$sqrtú$floorú$log10ú$trunc>���ú$logú$modú$powú$divideú	$subtractú$addú	$multiply)	r���r���r
���r���r���r���ú$arrayElemAtr���r���ú$switchú$letú$literal)z$dateFromStringú
$dateToStringú$dateFromPartsú$dayOfMonthú
$dayOfWeekú
$dayOfYearú$hourz
$isoDayOfWeekz$isoWeekz$isoWeekYearú$millisecondú$minuteú$monthú$secondú$weekú$yearú$condú$ifNull)
ú
$concatArraysú$filterz
$indexOfArrayú$mapz$rangez$reducez
$reverseArrayú$sizeú$slicez$zipr���z$meta)ú$concatz
$indexOfBytesz
$indexOfCPú$regexMatchú$splitú$strcasecmpz$strLenBytesz	$strLenCPú$substrz$substrBytesz	$substrCPú$toLowerú$toUpperz$trim)z$cmpú$eqú$ne)ú$andú$orú$not)ú$inú
$setEqualsz$setIntersectionz$setDifferenceú	$setUnionz$setIsSubsetz$anyElementTruez$allElementsTrue)z$convertú	$toStringú$toIntú
$toDecimalú$toLongú$arrayToObjectú$objectToArrayú	$isNumberú$isArrayc�����������������ó~���—�t��������d„�|�D�«�������«������}|sy�t��������|«������t��������t��������t��������|«������«������«������z��S�)Nc��������������3���óV���K��—�|�]!��}t��������|t��������j������������������«������sŒ|–—�Œ#�y�­w©N©Ú
isinstanceÚnumbersÚNumber©Ú.0Úvs���  ú\/var/lib/jenkins/workspace/mettalog/venv/lib/python3.12/site-packages/mongomock/aggregate.pyú	<genexpr>z!_avg_operation.<locals>.<genexpr>°���s���è�ø€�ÒJ˜Q¬J°q¼'¿.¹.Õ,I”qÑJùó���‚)¢))ÚlistÚsumÚfloatÚlen)ÚvaluesÚvalues_lists���  r^���Ú_avg_operationrg���¯���s7���€�ÜÑJ &ÔJÓJ€KÙØ܈{Óœe¤C¬¨[Ó(9Ó$:Ó;Ñ;Ð;ó����c�����������������ó<���—�t��������d„�|�D�«�������«������}|sy��||«������S�)Nc��������������3���ó&���K��—�|�]	��}|€Œ|–—�Œ�y�­wrV���©�r[���s���  r^���r_���z#_group_operation.<locals>.<genexpr>·���s���è�ø€�Ò:˜Q¨A©M”qÑ:ùs���‚Š)ra���)re���Úoperatorrf���s���   r^���Ú_group_operationrm���¶���s#���€�ÜÑ: &Ô:Ó:€KÙØِKÓ Ð rh���c�����������������óš��—�t��������«�������}t��������rn|�D�]h��}t��������|t��������j������������������«������r|j������������������|«�������Œ/t��������|t��������j������������������«������sŒJ|j������������������|j������������������«�������«�������Œj�nt��������d„�|�D�«�������«������}t��������|«������}t��������|t��������j������������������«������rt
��������j������������������|«������S�|S�)Nc��������������3���óV���K��—�|�]!��}t��������|t��������j������������������«������sŒ|–—�Œ#�y�­wrV���rW���r[���s���  r^���r_���z!_sum_operation.<locals>.<genexpr>Æ���s���è�ø€�ÒN ´
¸1¼g¿n¹nÕ0Mœ1ÑNùr`���)ra���Údecimal_supportrX���rY���rZ���Úappendr���Ú
Decimal128Ú
to_decimalrb���ÚdecimalÚDecimal)re���rf���r]���Ú	sum_values���    r^���Ú_sum_operationrw���½���s–���€�Ü“&€KÝÛˆAܘ!œWŸ^™^Ô,Ø×"Ñ" 1Õ%ܘAœz×4Ñ4Õ5Ø×"Ñ" 1§<¡<£>Õ2ñ	�ô�ÑN fÔNÓNˆÜKÓ €IÜ/9¸)ÄWÇ_Á_Ô/UŒ:× Ñ  Ó+ÐdÐ[dÐdrh���c�����������������ól���—�t��������«�������}|�D�]$��}t��������|t���������«������sŒ|j������������������|«�������Œ&�|S�rV���)ÚdictrX���Úupdate)re���Ú
merged_docr]���s���   r^���Ú_merge_objects_operationr|���Ë���s3���€�Ü“€JÛ
ˆÜaœÕØ×Ñ˜aÕ ð�ð�Ðrh���c�����������������ó"���—�t��������|�t��������«������S�rV���)rm���Úmin©re���s��� r^���ú<lambda>r€���×���ó���€�Ô+¨F´CÔ8rh���c�����������������ó"���—�t��������|�t��������«������S�rV���)rm���Úmaxr���s��� r^���r€���r€���Ø���r���rh���c�����������������ó���—�|�r|�d���S�d�S�©Nr���rk���r���s��� r^���r€���r€���Ù���s���€�©&˜V A™YÐ:°dÐ:rh���c�����������������ó���—�|�r|�d���S�d�S�)Néÿÿÿÿrk���r���s��� r^���r€���r€���Ú���s���€�©&˜F 2™JÐ:°dÐ:rh���)r���r
���r���r���r���r���r���c�������������������ó„���—�e�Zd�ZdZdd„Zd„�Zd„�Zd„�Zd„�Zd„�Z	d	„�Z
d
„�Zd„�Zd„�Z
d
„�Zd„�Zd„�Zd„�Zd„�Zd„�Zd„�Zd„�Zd„�Zy)Ú_Parserz:Helper to parse expressions within the aggregate pipeline.Nc�����������������ó6���—�||�_���������||�_��������|xs�i�|�_��������y�rV���)Ú	_doc_dictÚ_ignore_missing_keysÚ
_user_vars)ÚselfÚdoc_dictÚ	user_varsÚignore_missing_keyss���    r^���Ú__init__z_Parser.__init__á���s���€�Ø!ˆŒØ$7ˆÔ!Ø#š/ rˆrh���c�����������������ó¸��—�t��������|t��������«������s|�j������������������|«������S�t��������|«������dkD��r+t	��������d„�|D�«�������«������rt��������dt��������|«������|fz��«������‚i�}|j
������������������«�������D�]Ì��\��}}|t��������v�r|�j������������������||«������c�S�|t��������v�r|�j������������������||«������c�S�|t��������v�r|�j������������������||«������c�S�|t��������v�r|�j������������������||«������c�S�|t��������v�r|�j!������������������||«������c�S�|t"��������v�r|�j%������������������||«������c�S�|t&��������v�r|�j)������������������||«������c�S�|t*��������v�r|�j-������������������||«������c�S�|t.��������v�r|�j1������������������||«������c�S�|t2��������v�r|�j5������������������||«������c�S�|t6��������v�r|�j9������������������||«������c�S�|t:��������v�r|�j=������������������||«������c�S�|t>��������v�r|�jA������������������||«������c�S�|tB��������t��������z���tD��������z���v�rtG��������d|z��«������‚|jI������������������d«������rt��������d|z��«������‚	�|�jK������������������|«������}|||<���ŒÏ�|S�#�tL��������$�r�|�jN������������������rY�Œê‚�w�xY�w)zParse a MongoDB expression.é���c��������������3���ó>���K��—�|�]��}|j������������������d�«������–—�Œ�y­w)ú$N)Ú
startswith)r\���Úkeys���  r^���r_���z _Parser.parse.<locals>.<genexpr>ì���s���è�ø€�Ò&Q¸s s§~¡~°c×':Ñ&Qùs���‚zman expression specification must contain exactly one field, the name of the expression. Found %d fields in %szC'%s' is a valid operation but it is not supported by Mongomock yet.r–���zUnrecognized expression '%s')(rX���ry���Ú_parse_basic_expressionrd���Úanyr���ÚitemsÚarithmetic_operatorsÚ_handle_arithmetic_operatorÚproject_operatorsÚ_handle_project_operatorÚprojection_operatorsÚ_handle_projection_operatorÚcomparison_operatorsÚ_handle_comparison_operatorÚdate_operatorsÚ_handle_date_operatorÚarray_operatorsÚ_handle_array_operatorÚconditional_operatorsÚ_handle_conditional_operatorÚcontrol_flow_operatorsÚ_handle_control_flow_operatorÚ
set_operatorsÚ_handle_set_operatorÚstring_operatorsÚ_handle_string_operatorÚtype_convertion_operatorsÚ _handle_type_convertion_operatorÚtype_operatorsÚ_handle_type_operatorÚboolean_operatorsÚ_handle_boolean_operatorÚtext_search_operatorsÚobject_operatorsÚNotImplementedErrorr—���ÚparseÚKeyErrorrŒ���)rŽ���Ú
expressionÚ
value_dictÚkr]���Úvalues���      r^���r¹���z
_Parser.parseæ���sq��€�ä˜*¤dÔ+à×/Ñ/°
Ó;Ð;äˆz‹?˜QÒ¤3Ñ&QÀjÔ&QÔ#QÜ"ðDäz“? JÐ/ñ0ó1ð�
1ð
�ˆ
Ø×$Ñ$×&‰DˆAˆqØÔ(Ñ(Ø×7Ñ7¸¸1Ó=Ò=ØÔ%Ñ%Ø×4Ñ4°Q¸Ó:Ò:ØÔ(Ñ(Ø×7Ñ7¸¸1Ó=Ò=ØÔ(Ñ(Ø×7Ñ7¸¸1Ó=Ò=Ø”NÑ"Ø×1Ñ1°!°QÓ7Ò7Ø”OÑ#Ø×2Ñ2°1°aÓ8Ò8ØÔ)Ñ)Ø×8Ñ8¸¸AÓ>Ò>ØÔ*Ñ*Ø×9Ñ9¸!¸QÓ?Ò?Ø”MÑ!Ø×0Ñ0°°AÓ6Ò6ØÔ$Ñ$Ø×3Ñ3°A°qÓ9Ò9ØÔ-Ñ-Ø×<Ñ<¸QÀÓBÒBØ”NÑ"Ø×1Ñ1°!°QÓ7Ò7ØÔ%Ñ%Ø×4Ñ4°Q¸Ó:Ò:ØÔ)Ô,@Ñ@ÔCSÑSÑSÜ)ØYÐ\]Ñ]ó_ð�_à|‰|˜CÔ Ü&Ð'EÈÑ'IÓJÐJð
ØŸ
™
 1›
ð
�"ˆJq‹MðM�'ðP�Ðøô
�ò�
Ø×,Ò,ÚØð
ús���È$H?È?IÉIc��������������#���ó„���K��—�|D�]��}	�|�j������������������|«������–—�Œ�y�#�t��������$�r�|�j������������������rd�–—�n‚�Y�Œ7w�xY�w­wrV���)r¹���rº���rŒ���)rŽ���re���r¾���s���   r^���Ú
parse_manyz_Parser.parse_many��sJ���è�ø€�ÛˆEð
Ø—j‘j Ó'Ó'ñ�øô�ò�
Ø×,Ò,Ø“Jàñ�ð
üs ���‚A�‰œA�Ÿ=ºA�¼=½A�c�����������������ój���—�	�t��������j������������������|�j������������������|«������«������S�#�t��������$�r�Y�yw�xY�w)z6Parse a MongoDB expression and then convert it to boolF)r���Úmongodb_to_boolr¹���rº���©rŽ���r»���s���  r^���Ú_parse_to_boolz_Parser._parse_to_bool'��s3���€�ð	Ü×*Ñ*¨4¯:©:°jÓ+AÓBÐBøÜò�	Ùð	ús���‚#&�¦	2±2c�����������������óP���—�	�|�j������������������|«������S�#�t��������$�r	�t��������cY�S�w�xY�wrV���)r¹���rº���r���rÃ���s���  r^���Ú_parse_or_nothingz_Parser._parse_or_nothing/��s*���€�ð	Ø—:‘:˜jÓ)Ð)øÜò�	ÜŠNð	ús���‚�“%¤%c�����������������ó@��—�t��������|t��������«������r|j������������������d«������r||j������������������d«������rFt��������j������������������t��������|�j������������������|�j������������������dœfi�|�j������������������¤Ž|dd��d¬«������S�t��������j������������������|�j������������������|dd��d¬«������S�|S�)Nr–���z$$)ÚROOTÚCURRENTé���T)Úcan_generate_arrayr”���)rX���Ústrr—���r���Úget_value_by_dotry���r‹���r���rÃ���s���  r^���r™���z_Parser._parse_basic_expression5��s™���€�ܐj¤#Ô&¨:×+@Ñ+@ÀÔ+EØ×$Ñ$ TÔ*Ü×/Ñ/´Ø ŸN™NØ#Ÿ~™~ñ6ñ�1&ð�—_‘_ñ1&ð�(2°!°" ~È$ôPð�Pô�×+Ñ+¨D¯N©N¸JÀqÀr¸NÐ_cÔdÐdØÐrh���c�����������������óä���‡�—�|dk(��r(t��������|D�cg�c]��}‰�j������������������|«������‘Œ�c}«������S�|dk(��rt��������ˆ�fd„|D�«�������«������S�|dk(��r‰�j������������������|«�������S�t��������d|z��«������‚c�c}w�)NrF���rG���c��������������3���ó@���•K��—�|�]��}‰j������������������|«������–—�Œ�y�­wrV���)rÄ���)r\���r¾���rŽ���s���  €r^���r_���z3_Parser._handle_boolean_operator.<locals>.<genexpr>C��s���øè�ø€�ÒF°et×*Ñ*¨5×1ÑFùs���ƒrH���zuAlthough '%s' is a valid boolean operator for the aggregation pipeline, it is currently not implemented in Mongomock.)ÚallrÄ���rš���r¸���)rŽ���rl���re���r¾���s���`   r^���rµ���z _Parser._handle_boolean_operator?��s���ø€�ؐvÒÜÀÖG°u˜×+Ñ+¨EÕ2ÒGÓHÐHؐuÒÜÓF¸vÔFÓFÐFؐvÒØ×*Ñ*¨6Ó2Ð2Ð2ä!ð
à'ñ
(ó
ð�	
ùò
�Hs���A-c�����������������ón��—�|t���������v�r	�|�j������������������|«������}|€y�t��������|t��������j
������������������«������st
��������d|›dt��������|«������›d«������‚|dk(��rt��������|«������S�|dk(��rt��������j������������������|«������S�|dk(��rt��������j������������������|«������S�|dk(��rt��������j������������������|«������S�|dk(��rt��������j������������������|«������S�|d	k(��rt��������j������������������|«������S�|d
k(��rt��������j������������������|«������S�|dk(��rt��������j ������������������|«������S�|t"��������v�rIt��������|t$��������t&��������f«������st
��������d|›dt��������|«������›d«������‚t)��������|«������d
k7��rt
��������d|z��«������‚|�j+������������������|«������\��}}||€y�|dk(��r||z��S�|dk(��rt��������j������������������||«������S�|dk(��rt��������j,������������������||«������S�|dk(��rt��������j.������������������||«������S�|dk(��rƒt��������|t0��������j0������������������«������r,t��������|t2��������t4��������f«������rt1��������j6������������������|¬«������}||z
��}t��������|t0��������j6������������������«������rt9��������|j;������������������«�������dz��«������S�|S�t��������|t$��������t&��������f«������sJ�d|›dt��������|«������›d«�������‚t'��������|�j+������������������|«������«������}|s
J�d|z��«�������‚|D�]*��}|€�y�t��������|t��������j
������������������«������rŒ"J�d|z��«�������‚�|dk(��rt=��������|«������S�|dk(��rt?��������j@������������������d„�|«������S�tC��������d|z��«������‚#�t��������$�r�Y�y�w�xY�w)Nz
Parameter to z! must evaluate to a number, got 'ú'r���r���r���r���r���r���r���r���z must evaluate to a list, got 'rÊ���z%s must have only 2 parametersr"���r���r ���r!���r#���)Úmillisecondséè��z#%s must have at least one parameterz%s only uses numbersr$���r%���c�����������������ó���—�|�|z��S�rV���rk���)ÚxÚys���  r^���r€���z5_Parser._handle_arithmetic_operator.<locals>.<lambda>”��s���€�°°Q²rh���zxAlthough '%s' is a valid aritmetic operator for the aggregation pipeline, it is currently not implemented  in Mongomock.)"Úunary_arithmetic_operatorsr¹���rº���rX���rY���rZ���r���ÚtypeÚabsÚmathÚceilÚexpÚfloorÚlogÚlog10ÚsqrtÚtruncÚbinary_arithmetic_operatorsÚtuplera���rd���rÀ���ÚfmodÚpowÚdatetimeÚintrc���Ú	timedeltaÚroundÚ
total_secondsrb���Ú	functoolsÚreducer¸���)	rŽ���rl���re���ÚnumberÚnumber_0Únumber_1ÚresÚ
parsed_valuesr¾���s	���         r^���r���z#_Parser._handle_arithmetic_operatorM��s-��€�ØÔ1Ò1ð
ØŸ™ FÓ+ð�ˆ~Øܘf¤g§n¡nÔ5Ý&âœt F|ð-ó.ð�.ð�˜6Ò!ܘ6“{Ð"ؘ7Ò"Ü—y‘y Ó(Ð(ؘ6Ò!Ü—x‘x Ó'Ð'ؘ8Ò#Ü—z‘z &Ó)Ð)ؘ5Ò Ü—x‘x Ó'Ð'ؘ8Ò#Ü—z‘z &Ó)Ð)ؘ7Ò"Ü—y‘y Ó(Ð(ؘ8Ò#Ü—z‘z &Ó)Ð)àÔ2Ò2ܘf¤u¬d mÔ4Ý&âœt F|ð-ó.ð�.ô�6‹{˜aÒÜ&Ð'GÈ(Ñ'RÓSÐSØ!%§¡°Ó!8ÑˆHhØР8Ð#3Øà˜9Ò$Ø (Ñ*Ð*ؘ6Ò!Ü—x‘x ¨(Ó3Ð3ؘ6Ò!Ü—y‘y ¨8Ó4Ð4ؘ6Ò!Ü—x‘x ¨(Ó3Ð3ؘ;Ò&ܘh¬×(9Ñ(9Ô:Ü" 8¬c´5¨\Ô:Ü'×1Ñ1¸xÔHHØ Ñ)Ü˜c¤8×#5Ñ#5Ô6Ü  ×!2Ñ!2Ó!4°tÑ!;Ó<Ð<ؐ
ä˜&¤5¬$ -Ô0ñ�	[ÚCKÌTÐRXÍ\ÐZó	[Ð0ô�˜TŸ_™_¨VÓ4Ó5ˆ
ÙÐNÐCÀhÑNÓNˆ}Û"ˆE؈}Ùܘe¤W§^¡^Õ4ÐWÐ6LÈxÑ6WÓWÐ4ð�#ð�vÒܐ}Ó%Ð%ؐ{Ò"Ü×#Ñ#Ñ$6¸
ÓFÐFô�"ð
GØIQñ
RóSð�	SøôM�ò�
Ùð
ús���‹L(�Ì(	L4Ì3L4c�����������������óL��—�|t���������v�r@t��������|t��������«������r|�j������������������|«������n|�j	������������������|«������}t��������|���|«������S�|dk(��r-|\��}}|�j������������������|«������}|�j������������������|«������}	�||���S�t��������d|z��«������‚#�t
��������$�r}t
��������d«������|‚d�}~ww�xY�w)Nr&���z'Array have length less than index valueúuAlthough '%s' is a valid project operator for the aggregation pipeline, it is currently not implemented in Mongomock.)Ú_GROUPING_OPERATOR_MAPrX���rÌ���r¹���rÀ���Ú
IndexErrorrº���r¸���)rŽ���rl���re���r˜���r¾���ÚarrayÚindexÚerrors���        r^���rŸ���z _Parser._handle_project_operator›��s¸���€�ØÔ-Ñ-Ü+5°f¼cÔ+BT—Z‘Z Ô'ÈÏÉÐX^ÓH_ˆFÜ)¨(Ñ3°FÓ;Ð;ؐ~Ò%؉JˆCØ—J‘J˜s“OˆEØ—J‘J˜uÓ%ˆEð
UؘU‘|Ð#ô�"ð�#2à4<ñ#=ó�>ð�	>øô�ò�
UÜÐHÓIÈuÐTûð
Uús���Á6B	�Â		B#ÂBÂB#c�����������������óø��—�|dk(��r|S�|dk(��rÛt��������|t��������«������st��������d«������‚dD�] ��}||vsŒt��������dj	������������������|«������«������‚�t��������|d���t��������«������st��������d«������‚|d���j������������������«�������D�ci�c]��\��}}||�j
������������������|«������“Œ�}}}t��������|�j������������������t��������|�j������������������fi�|¤Ž|�j������������������¬«������j
������������������|d	���«������S�t��������d
|z��«������‚c�c}}w�)Nr)���r(���z,$let only supports an object as its argument)ÚvarsÚinzMissing '{}' parameter to $letrû���z,invalid parameter: expected an object (vars)©r‘���rü���rô���)rX���ry���r	���r���Úformatr›���r¹���r‰���r‹���r���rŒ���r¸���)rŽ���rl���r¾���ÚfieldÚvar_keyÚ	var_valuer���s���       r^���r¡���z#_Parser._handle_projection_operator¬��s��€�ؐzÒ!؈LؐvÒܘe¤TÔ*Ü%Ð&TÓUÐUÛ'Ø Ò%Ü*Ð+K×+RÑ+RÐSXÓ+YÓZÐZð�(ô�˜e F™m¬TÔ2Ü&Ð'UÓVÐVð�+0°©-×*=Ñ*=Ó*?÷á&G˜Yð�˜Ÿ™ IÓ.Ñ.ðˆIñ�ô�Ø—‘ܐT—_‘_Ñ2¨	Ñ2Ø$(×$=Ñ$=ô÷�‰eE˜$‘KÓ ð	
!ô
�"ð�#2à4<ñ#=ó�>ð�	>ùós���ÂC6c�����������������ó4��—�t��������|«������dk(��sJ�d«�������‚|�j������������������|d���«������}|�j������������������|d���«������}|dk(��r||k(��S�|dk(��r||k7��S�|t��������j������������������v�r(t��������j������������������t��������j������������������|���||«������S�t��������d|z��«������‚)NrÊ���z#Comparison requires two expressionsr���r”���rD���rE���zyAlthough '%s' is a valid comparison operator for the aggregation pipeline, it is currently not implemented  in Mongomock.)rd���r¹���r���ÚSORTING_OPERATOR_MAPÚbson_comparer¸���)rŽ���rl���re���ÚaÚbs���     r^���r£���z#_Parser._handle_comparison_operatorÄ��sª���€�ܐ6‹{˜aÒÐFÐ!FÓFÐØJ‰Jv˜a‘yÓ!ˆØJ‰Jv˜a‘yÓ!ˆØuÒؘ‘6ˆMؐuÒؘ‘6ˆMØ”y×5Ñ5Ñ5Ü×)Ñ)¬)×*HÑ*HÈÑ*RÐTUÐWXÓYÐYÜ!ð
à'ñ
(ó)ð�	)rh���c�����������������ó��—�|dk(��r.|�j������������������|«������}|t��������|«������j������������������«�������S�dS�|dk(��r.|�j������������������|«������}|t��������|«������j������������������«�������S�dS�|dk(��rHt	��������|�j������������������|«������«������}d�|v�rd�S�dj
������������������|D�cg�c]
��}t��������|«������‘Œ�c}«������S�|dk(��rŽt��������|«������dk7��rt��������d«������‚	�|�j������������������|d���«������}|�j������������������|d	���«������}||€y�t��������|t��������«������st��������d
«������‚t��������|t��������«������st��������d«������‚|j������������������|«������S�|dk(��r°t��������|«������d
k7��rt��������d«������‚t��������|�j������������������|d���«������«������}|�j������������������|d	���«������}|�j������������������|d���«������}	|€y|dk��rt��������j������������������d«�������y|	dk��rt��������j������������������d«�������|	dk��rt��������|«������n||	z���}
|||
�S�|dk(��rct��������|«������dk7��rt��������d«������‚t��������|�j������������������|d���«������«������t��������|�j������������������|d	���«������«������}}||k(��rdS�||k��rdS�d	S�|dk(��rãt��������|t��������«������st��������dt!��������|«������z��«������‚dD�]��}
|
|vsŒt��������d|
z��«������‚�t#��������|«������h�d£z
��}|rt��������dt	��������|«������d���z��«������‚	�|�j������������������|d���«������}t��������|t��������«������st��������d«������‚	�|�j������������������|d���«������}d�}|j%������������������dd«������D�]<��}|dvrt��������d |z��«������‚t'��������t(��������|j������������������«�������«������}|€|}Œ8||z��}Œ>�t��������|t��������«������r1|€t)��������j*������������������|«������}nœt)��������j*������������������||«������}n„d|v�r|j,������������������rt��������d!«������‚t��������|t.��������j0������������������«������rœ|r.|j,������������������s"t)��������j*������������������|j2������������������|«������}n|j,������������������t(��������j4������������������t(��������j6������������������z��t(��������j8������������������z��t(��������j:������������������z���z��rt��������d |j,������������������z��«������‚|}n³t��������|t<��������«������r˜|j,������������������t(��������j4������������������t(��������j6������������������z��t(��������j8������������������z��t(��������j:������������������z���z��rt��������d |j,������������������z��«������‚t)��������j*������������������|j2������������������|j,������������������xs�|«������}nt��������d"«������‚t?��������|jA������������������|«������«������S�tC��������d#|z��«������‚c�c}w�#�t��������$�r�Y�y�w�xY�w#�t��������$�r�Y�yw�xY�w#�t��������$�r�Y�yw�xY�w)$NrB���Ú�rC���r=���r?���rÊ���zsplit must have 2 itemsr���r”���z,split first argument must evaluate to stringz-split second argument must evaluate to stringrA���é���zsubstr must have 3 itemszuNegative starting point given to $substr is accepted only until MongoDB 3.7. This behavior will change in the future.zmNegative length given to $substr is accepted only until MongoDB 3.7. This behavior will change in the future.r@���zstrcasecmp must have 2 itemsr‡���r>���z>$regexMatch expects an object of named arguments but found: %s)ÚinputÚregexz#$regexMatch requires '%s' parameter>���r
��r��Úoptionsz)$regexMatch found an unknown argument: %sr
��Fz.$regexMatch needs 'input' to be of type stringr��r��Úimxsz-$regexMatch invalid flag in regex options: %szJ$regexMatch: regex option(s) specified in both 'regex' and 'option' fieldsz7$regexMatch needs 'regex' to be of type string or regexzuAlthough '%s' is a valid string operator for the aggregation pipeline, it is currently not implemented  in Mongomock.)"r¹���rÌ���ÚlowerÚupperra���rÀ���Újoinrd���r���rº���rX���Ú	TypeErrorÚsplitÚwarningsÚwarnry���rÙ���ÚsetÚgetÚgetattrÚreÚcompileÚflagsr���ÚRE_TYPEÚpatternÚIÚMÚXÚSÚ	_RE_TYPESÚboolÚsearchr¸���)rŽ���rl���re���ÚparsedÚparsed_listrÖ���ÚstringÚ	delimiterÚfirstÚlengthÚsecondr��r��rÿ���Úunknown_argsÚinput_valueÚ	regex_valr��ÚoptionÚ	re_optionr��s���                     r^���r¯���z_Parser._handle_string_operatorÓ��sT��€�ؐzÒ!Ø—Z‘Z Ó'ˆFØ*0Ð*<”3v“;×$Ñ$Ó&ÐDÀ"ÐDؐzÒ!Ø—Z‘Z Ó'ˆFØ*0Ð*<”3v“;×$Ñ$Ó&ÐDÀ"ÐDؐyÒ Ü˜tŸ™¨vÓ6Ó7ˆKØ ;Ñ.4ÐZ°B·G±GÈ[Ö<YȼSÀ½VÒ<YÓ4ZÐZؐxÒܐ6‹{˜aÒÜ&Ð'@ÓAÐAð
ØŸ™ F¨1¡IÓ.Ø ŸJ™J v¨a¡yÓ1	ð�ˆ~ Ð!2Øܘf¤cÔ*ÜÐ NÓOÐOܘi¬Ô-ÜÐ OÓPÐPØ—<‘< 	Ó*Ð*ؐyÒ Ü6‹{˜aÒÜ&Ð'AÓBÐBܘŸ™ F¨1¡IÓ.Ó/ˆFØ—J‘J˜v a™yÓ)ˆEØ—Z‘Z  q¡	Ó*ˆF؈~ØؐqŠyÜ—
‘
ð�Vô�WàؘŠzÜ—
‘
ð�Vô�Wà$*¨Q¢J”S˜”[°E¸F±NˆFؘ% Ð'Ð'ؐ}Ò$ܐ6‹{˜aÒÜ&Ð'EÓFÐFܐt—z‘z &¨¡)Ó,Ó-¬s°4·:±:¸fÀQ¹iÓ3HÓ/IˆqˆAؘQš1Ð6¨!¨aª% BÐ6°QÐ6ؐ}Ó$ܘf¤dÔ+Ü&ØTÔW[Ð\bÓWcÑcóeð�eã+Ø Ò&Ü*Ð+PÐSXÑ+XÓYÐYð�,ô�˜v›;Ò)FÑFˆLÙÜ&Ø?Ä$À|ÓBTÐUVÑBWÑWóYð�Yð
Ø"Ÿj™j¨°©Ó9ô�˜k¬3Ô/Ü&Ð'WÓXÐXð
Ø ŸJ™J v¨g¡Ó7	ð�ˆGØ Ÿ*™* Y°Ö3Ø Ñ'Ü*ØGÈ&ÑPóRð�Rä#¤B¨¯©«Ó7	ؐ?Ø'‘Gà˜yÑ(‘Gð�4ô�˜)¤SÔ)ؐ?ÜŸJ™J yÓ1’EäŸJ™J y°'Ó:’EؘfÑ$¨¯ªÜ&Ø`óbð�bä˜I¤w§¡Ô7Ù 9§?¢?ÜŸJ™J y×'8Ñ'8¸'ÓB’EØ—_‘_¬¯©´·±©´r·t±tÑ);¼b¿d¹dÑ)BÐ'CÒCÜ*ØGÈ)Ï/É/ÑYó[ð�[ð�&‘EܘI¤yÔ1à—?‘?¤r§t¡t¬b¯d©d¡{´R·T±TÑ'9¼B¿D¹DÑ'@Ð%AÒAÜ*ØGÈ)Ï/É/ÑYó[ð�[äŸ
™
 9×#4Ñ#4°i·o±oÒ6PÈÓQ‘ä&Ð'`ÓaÐa䘟™ [Ó1Ó2Ð2ô�"ð
GØIQñ
RóSð�	SùòI�=Zøô�ò�
Ùð
ûô\�ò�
Ùð
ûô�ò�
Ùð
ús<���ÂUÃ(U �ËU/�ÌU>�Õ 	U,Õ+U,Õ/	U;Õ:U;Õ>	V
Ö	V
c�����������	������óZ��—�t��������|t��������«������rq|j������������������«�������ddhk(��r\|�j������������������|d���«������}t	��������j
������������������|d���«������}|j
������������������t��������j������������������¬«������j������������������|«������}n|�j������������������|«������}|dk(��r|j������������������«�������j������������������S�|dk(��r|j������������������S�|dk(��r|j������������������«�������dz��dz���S�|d	k(��r|j������������������S�|d
k(��r|j������������������S�|dk(��rt��������|j!������������������d«������«������S�|d
k(��r|j"������������������S�|dk(��r|j$������������������S�|dk(��r|j&������������������S�|dk(��rt��������|j(������������������dz��«������S�|dk(��r›t��������|t��������«������st+��������d«������‚t��������|t��������«������rddht-��������|«������k��st+��������d«������‚d|d���v�rt/��������d«������‚d|v�rt/��������d«������‚d|j������������������«�������v�rt/��������d«������‚|d���j!������������������|d���«������S�|dk(��r
t��������|t��������«������st+��������|›�d«������‚t1��������t-��������|«������ddhz��«������dk7��rt+��������|›�d«������‚dD�]��}||v�sŒt/��������d|›�d |›�d!«������‚�|d���}|j3������������������d"d«������xs�d}|j3������������������d#d«������xs�d}	|j3������������������d$d%«������xs�d%}
|j3������������������d&d%«������xs�d%}|j3������������������d'd%«������xs�d%}|j3������������������d(d%«������xs�d%}
t5��������j4������������������|||	|
|||
¬)«������S�t/��������d*|z��«������‚)+NÚdateÚtimezone)Útzinfor.���r,���r-���é���r”���r5���r2���r4���z%Ur/���r1���r3���r0���rÔ���r*���zP$dateToString operator must correspond a dictthat has "format" and "date" field.rþ���z%LzqAlthough %L is a valid date format for the $dateToString operator, it is currently not implemented  in Mongomock.ÚonNullzoAlthough onNull is a valid field for the $dateToString operator, it is currently not implemented  in Mongomock.zqAlthough timezone is a valid field for the $dateToString operator, it is currently not implemented  in Mongomock.r+���zH operator must correspond a dict that has "year" or "isoWeekYear" field.ÚyearÚisoWeekYear)r7��ÚisoWeekÚisoDayOfWeekr2��z	Although z is a valid field for the z8 operator, it is currently not implemented in Mongomock.ÚmonthÚdayÚhourr���Úminuter*��Úmillisecond)r6��r:��r;��r<��r=��r*��ÚmicrosecondzsAlthough '%s' is a valid date operator for the aggregation pipeline, it is currently not implemented  in Mongomock.)rX���ry���Úkeysr¹���Úpytzr2��ÚreplaceÚutcÚ
astimezoneÚ	timetupleÚtm_ydayr;��Ú
isoweekdayr6��r:��rè���Ústrftimer<��r=��r*��r?��r���r��r¸���rd���r��rç���)rŽ���rl���re���r¾���Ú	target_tzÚ	out_valuerÿ���r6��r:��r;��r<��r=��r*��r>��s���              r^���r¥���z_Parser._handle_date_operatorD��sš��€�ܐfœdÔ#¨¯©«
¸&À*Ð9MÒ(MØ—J‘J˜v f™~Ó.ˆEÜŸ
™
 f¨ZÑ&8Ó9ˆIØŸ
™
¬T¯X©X˜
Ó6×AÑAÀ)ÓL‰IàŸ
™
 6Ó*ˆIà|Ò#Ø×&Ñ&Ó(×0Ñ0Ð0ؐ}Ò$Ø—=‘=Ð ؐ|Ò#Ø×(Ñ(Ó*¨QÑ.°!Ñ3Ð3ؐwÒØ—>‘>Ð!ؐxÒØ—?‘?Ð"ؐwÒܐy×)Ñ)¨$Ó/Ó0Ð0ؐwÒØ—>‘>Ð!ؐyÒ Ø×#Ñ#Ð#ؐyÒ Ø×#Ñ#Ð#ؐ~Ò%ܐy×,Ñ,¨tÑ3Ó4Ð4ؐÒ&ܘf¤dÔ+Ü&ð:óð�ô�˜f¤dÔ+°H¸fÐ3EÌÈVËÒ3TÜ&ð:óð�ð�y Ñ*Ñ*Ü)ð%óð�ð
�˜6Ñ!Ü)ð%óð�ð
�˜VŸ[™[›]Ñ*Ü)ð%óð�ð
�˜VÑ$×-Ñ-¨i¸Ñ.AÓBÐBØÐ'Ó'ܘi¬Ô.Ü&ؐjð�!>ð�>óð�ô�”3y“> V¨]Ð$;Ñ;Ó<ÀÒAÜ&ؐjð�!>ð�>óð�ó�PØ˜IÒ%Ü-Ø# E 7Ð*DØ#˜*ð�%(ð(óð�ð�Pð�˜VÑ$ˆDØ—M‘M '¨1Ó-Ò2°ˆEØ—-‘-  qÓ)Ò.¨QˆCØ—=‘= ¨Ó+Ò0¨qˆDØ—]‘] 8¨QÓ/Ò4°1ˆFØ—]‘] 8¨QÓ/Ò4°1ˆFØ#Ÿ-™-¨
°qÓ9Ò>¸QˆKä×$Ñ$ØØØØØØØ'ôð�
ô�"ð
à'ñ
(ó)ð�	)rh���c�����������������ó°	��—�|dk(��r¤t��������|t��������t��������f«������s|g}t��������|�j������������������|«������«������}|D�]>��}|€Œt��������|t��������t��������f«������rŒt	��������dj������������������t
��������|«������«������«������‚�d�|v�rd�S�t��������t��������j������������������j������������������|«������«������S�|dk(��rt��������|t��������«������st	��������d«������‚dD�]��}||vsŒt	��������d|z��«������‚�|D�]��}|dvsŒt	��������d|z��«������‚�|�j������������������|d	���«������}||t��������u�ry�t��������|t��������t��������f«������st	��������d
t
��������|«������z��«������‚|j������������������dd«������}|d
���}|D�	cg�c]I��}	t��������|�j������������������t��������|�j ������������������fi�||	i¤Ž|�j"������������������¬«������j%������������������|«������‘ŒK�c}	S�|dk(��r“t��������|t��������«������r*t'��������|«������dk7��rt	��������dt'��������|«������z��«������‚|d���}|�j������������������|«������}
t��������|
t��������t��������f«������s't	��������d|
t��������u�rdz��«������‚t
��������|
«������z��«������‚t'��������|
«������S�|dk(��rùt��������|t��������«������st	��������d«������‚t)��������|«������h�d£z
��}|rt	��������d|j+������������������«�������z��«������‚d	dht)��������|«������z
��}|rt	��������d|j+������������������«�������z��«������‚|�j%������������������|d	���«������}|j������������������dd«������}|d���}
|D�	cg�c]K��}	t��������|�j������������������t��������|�j ������������������fi�||	i¤Ž|�j"������������������¬«������j%������������������|
«������r|	‘ŒM�c}	S�|dk(��rot��������|t��������«������st	��������d«������‚t'��������|«������dk��st'��������|«������dkD��r#t	��������dj������������������t'��������|«������«������«������‚|�j%������������������|d���«������}
t��������|
t��������«������s#t	��������d j������������������t
��������|
«������«������«������‚t-��������d!|dd��«������D�]9��\��}}t��������|t.��������«������rŒt	��������d"j������������������|t
��������|«������«������«������‚�t'��������|«������dkD��r%|d���dk��rt	��������d#j������������������|d���«������«������‚|d���}|dk��r&t'��������|«������dkD��rt'��������|
«������|z���|d���z���}nd�}nt'��������|«������dkD��r	||d���z���}n|}d}|
||�S�t1��������d$|z��«������‚c�c}	w�c�c}	w�)%Nr8���z*$concatArrays only supports arrays, not {}r:���z,$map only supports an object as its argument)r
��rü���zMissing '%s' parameter to $map>���Úasrü���r
��z"Unrecognized parameter to $map: %sr
��z%input to $map must be an array not %srL��Úthisrü���rý���r;���r”���z>Expression $size takes exactly 1 arguments. %d were passed in.r���z;The argument to $size must be an array, but was of type: %sÚmissingr9���z/$filter only supports an object as its argument>���rL��Úcondr
��z%Unrecognized parameter to $filter: %srO��z!Missing '%s' parameter to $filterr<���z+$slice only supports a list as its argumentrÊ���r	��zRExpression $slice takes at least 2 arguments, and at most 3, but {} were passed inz=First argument to $slice must be an array, but is of type: {})ÚSecondÚThirdz9{} argument to $slice must be numeric, but is of type: {}z-Third argument to $slice must be positive: {}zsAlthough '%s' is a valid array operator for the aggregation pipeline, it is currently not implemented in Mongomock.)rX���ra���rä���rÀ���r���rþ���rÙ���Ú	itertoolsÚchainÚ
from_iterablery���rÆ���r���r��r‰���r‹���r���rŒ���r¹���rd���r��ÚpopÚziprè���r¸���)rŽ���rl���r¾���r%��Úparsed_itemr½���Úinput_arrayÚ	fieldnameÚin_exprÚitemÚarray_valueÚextra_paramsÚmissing_paramsrO��Únumr]���ÚstartÚstops���                  r^���r§���z_Parser._handle_array_operator¨��s��€�ؐÒ&ܘe¤d¬E ]Ô3ؘä˜tŸ™¨uÓ5Ó6ˆKÛ*ØÑ*´:¸kÌDÔRWÈ=Õ3YÜ*ØD×KÑKÌDÐQ\ÓL]Ó^óð�ð� +ð�  ;Ñ.4Ðd´D¼¿¹×9VÑ9VÐWbÓ9cÓ4dÐdàvÓܘe¤TÔ*Ü&Ð'UÓVÐVó�%Ø˜E’>Ü*Ð+KÈaÑ+OÓPÐPð�%ó�ØÐ1Ò1Ü*Ð+OÐRSÑ+SÓTÐTð�ð�×0Ñ0°°w±Ó@ˆKàÐ" k´WÑ&<Øä˜k¬D´%¨=Ô9Ü&Ð'NÔQUÐVaÓQbÑ'bÓcÐcàŸ	™	 $¨Ó/ˆIؘD‘kˆGð�(ö
ð�ô�Ø—N‘NܘŸ™Ñ>¨Y¸Ð,=Ñ>Ø(,×(AÑ(Aô÷�‘%˜“.ñ	!òð�
ð�wÒܘ%¤Ô&ܐu“: ’?Ü*ð�,@ÜBEÀeÃ*ñ,Mó�Nð�Nà˜a™Ø×0Ñ0°Ó7ˆKܘk¬D´%¨=Ô9Ü&ØQØ"-´Ñ"8YñQóRð�Rä>BÀ;Ó>OñQóRð�Rô�{Ó#Ð#àyÒ Ü˜e¤TÔ*Ü&Ð'XÓYÐYܘu›:Ò(?Ñ?ˆLÙÜ&Ð'NÐQ]×QaÑQaÓQcÑ'cÓdÐdØ% vÐ.´°U³Ñ;ˆNÙÜ&Ð'JÈ^×M_ÑM_ÓMaÑ'aÓbÐbàŸ*™* U¨7¡^Ó4ˆKØŸ	™	 $¨Ó/ˆIؘ‘=ˆDà!,öØÜØ—N‘NܘŸ™Ñ>¨Y¸Ð,=Ñ>Ø(,×(AÑ(Aô÷�‘%˜“+ð	ò�òð�
ð�xÓܘe¤TÔ*Ü&Ð'TÓUÐUܐ5‹z˜AŠ~¤ U£¨a¢Ü&ð�(BßBHÁ&ÌÈUËÓBTóVð�VàŸ*™* U¨1¡XÓ.ˆKܘk¬4Ô0Ü&ØSß‘VœD Ó-Ó.ó0ð�0ô�Ð1°5¸¸°9Ö=‘QÜ! !¤SÕ)Ü*ØSß™ ¤T¨!£WÓ-ó/ð�/ð�>ô
�5‹z˜AŠ~ %¨¡(¨a¢-Ü&ð�(6ß6<±f¸UÀ1¹XÓ6FóHð�Hð�˜!‘HˆEؐqŠyܐu“: ’>ܘ{Ó+¨eÑ3°e¸A±hÑ>‘Dà‘DܐU“˜a’ؘu Q™xÑ'‘àØØ˜u TÐ*Ð*ä!ð
à&ñ
'ó(ð�	(ùòYùòFs���Å$ASË8ASc�����������������ó
��—�|dk(��rv	�|�j������������������|«������}t��������|t��������«������rt	��������|«������j������������������«�������S�t��������|t��������j������������������«������r|j������������������«�������d�d�dz���S�t	��������|«������S�|dk(��ra	�|�j������������������|«������}t��������r>t��������|t��������j������������������«������rt��������|j������������������«�������«������S�t��������|«������S�t��������d«������‚|dk(��ra	�|�j������������������|«������}t��������r>t��������|t��������j������������������«������rt��������|j������������������«�������«������S�t��������|«������S�t��������d«������‚|dk(��rÊt��������st��������d«������‚	�|�j������������������|«������}t��������|t��������«������r|du�rd	nd
}t��������j������������������|«������}|S�t��������|t��������«������r t��������j������������������t	��������|«������«������}|S�t��������|t��������«������rYt��������j ������������������d«������}t��������j ������������������t	��������|«������«������j#������������������|«������}t��������j������������������|«������}|S�t��������|t��������j������������������«������r|}|S�t��������|t��������«������r	�t��������j������������������|«������}|S�t��������|t��������j������������������«������rht��������j������������������j)������������������d
«������}t	��������||z
��j+������������������«�������dz��«������j-������������������dd«������d
���}t��������j������������������|«������}|S�t/��������dt1��������|«������z��«������‚|dk(��rŸ	�|�j������������������|«������}|€y�t��������|t2��������t4��������f«������s#t'��������dj7������������������t1��������|«������«������«������‚t9��������d„�|D�«�������«������r|D�	ci�c]��}	|	d���|	d���“Œ
�c}	S�t9��������d„�|D�«�������«������rt;��������|«������S�t'��������d«������‚|dk(��r­	�|�j������������������|«������}|€y�t��������|t:��������t<��������j>������������������f«������s#t'��������dj7������������������t1��������|«������«������«������‚tA��������|«������dkD��r!tB��������jD������������������dk��rt��������d|z��«������‚|jG������������������«�������D�
cg�c]
��\��}
}|
|dœ‘Œ�c}}
S�t��������d|z��«������‚#�t��������$�r�Y�y�w�xY�w#�t��������$�r�Y�y�w�xY�w#�t��������$�r�Y�y�w�xY�w#�t��������$�r�Y�y�w�xY�w#�t��������j$������������������$�r}t'��������d|z��«������|‚d�}~ww�xY�w#�t��������$�r�Y�y�w�xY�wc�c}	w�#�t��������$�r�Y�y�w�xY�wc�c}}
w�)NrL���éýÿÿÿÚZrM���zBYou need to import the pymongo library to support decimal128 type.rO���rN���TÚ1Ú0z.00000000000000z_Failed to parse number '%s' in $convert with no onError value:Failed to parse string to decimalr���rÔ���ú.r”���z'%s' type is not supportedrP���z1$arrayToObject requires an array input, found: {}c��������������3���ó|���K��—�|�]4��}t��������|t��������«������xr�t��������|j������������������«�������«������d�dhk(��–—�Œ6�y­w)r½���r]���N)rX���ry���r��r@��©r\���rÖ���s���  r^���r_���z;_Parser._handle_type_convertion_operator.<locals>.<genexpr>|��s2���è�ø€�ÒWÈ1”:˜a¤Ó&ÒF¬3¨q¯v©v«x«=¸SÀ#¸JÑ+FÓFÑWùs���‚:<r½���r]���c��������������3���óh���K��—�|�]*��}t��������|t��������t��������f«������xr�t��������|«������d�k(��–—�Œ,�y­w)rÊ���N)rX���ra���rä���rd���ri��s���  r^���r_���z;_Parser._handle_type_convertion_operator.<locals>.<genexpr>��s+���è�ø€�ÒPÀA”:˜a¤$¬ Ó/Ò?´C¸³F¸a±KÓ?ÑPùs���‚02z`arrays used with $arrayToObject must contain documents with k and v fields or two-element arraysrQ���z2$objectToArray requires an object input, found: {})r	��é���zmAlthough '%s' is a valid type conversion, it is not implemented for Python 2 and Python 3.5 in Mongomock yet.)r½���r]���z}Although '%s' is a valid type conversion operator for the aggregation pipeline, it is currently not implemented in Mongomock.)$r¹���rº���rX���r"��rÌ���r��rç���Ú	isoformatrp���r���rr���rè���rs���r¸���rc���rt���ru���ÚquantizeÚInvalidOperationr���Úutcfromtimestamprë���r��r��rÙ���ra���rä���rþ���rÐ���ry���ÚcollectionsÚOrderedDictrd���ÚsysÚversion_infor›���)rŽ���rl���re���r$��Ú
decimal_valuerÝ���ÚerrÚepochÚstring_micro_secondsÚdr½���r]���s���            r^���r±���z(_Parser._handle_type_convertion_operator#��s��€�ؐ{Ò"ð
ØŸ™ FÓ+ô�˜&¤$Ô'ܘ6“{×(Ñ(Ó*Ð*ܘ&¤(×"3Ñ"3Ô4Ø×'Ñ'Ó)¨#¨2Ð.°Ñ4Ð4ܐv“;ÐàxÒð
ØŸ™ FÓ+õ�ܘf¤j×&;Ñ&;Ô<ܘv×0Ñ0Ó2Ó3Ð3ܘ6“{Ð"Ü%ØTóð�
ð�yÒ ð
ØŸ™ FÓ+õ�ܘf¤j×&;Ñ&;Ô<ܘv×0Ñ0Ó2Ó3Ð3ܘ6“{Ð"Ü%ØTóð�
ð
�|Ó#Ý"Ü)ØXóð�ð
ØŸ™ FÓ+ô�˜&¤$Ô'Ø &¨$¡™°CÜ *× 5Ñ 5°fÓ =
ð,�!Ð ô+�˜F¤CÔ(Ü *× 5Ñ 5´c¸&³kÓ B
ð(�!Ð ô'�˜F¤EÔ*Ü—o‘oÐ&7Ó8Ü '§¡´°F³Ó <× EÑ EÀcÓ J
Ü *× 5Ñ 5°mÓ D
ð �!Ð ô�˜F¤J×$9Ñ$9Ô:Ø &
ð�!Ð ô�˜F¤CÔ(ðOÜ$.×$9Ñ$9¸&Ó$AMð�!Ð ô
�˜F¤H×$5Ñ$5Ô6Ü ×)Ñ)×:Ñ:¸1Ó=Ü'*¨F°U©N×+IÑ+IÓ+KÈdÑ+RÓ'S×'YÑ'YÐZ]Ð_`Ó'aÐbcÑ'dÐ$Ü *× 5Ñ 5Ð6JÓ K
ð�!Ð ô� Ð <¼tÀF»|Ñ KÓLÐLð�Ð'Ò'ð
ØŸ™ FÓ+ð�ˆ~Øä˜f¤t¬U mÔ4Ü&ØG×NÑNÌtÐTZË|Ó\óð�ô�ÑWÐPVÔWÔWØ06Ö7¨1˜˜#™  #¡™Ò7Ð7äÑPÈÔPÔPܘF“|Ð#ä"ð<óð�
ð�Ð'Ò'ð
ØŸ™ FÓ+ð�ˆ~Øä˜f¤t¬[×-DÑ-DÐ&EÔFÜ&ØH×OÑOÔPTÐU[ÓP\Ó]óð�ô�6‹{˜QŠ¤3×#3Ñ#3°fÒ#<Ü)ð7Ø9AñBóCð�Cð�28·±³×@©¨¨A˜! !Ó$Ó@Ð@ä!ð
à&ñ
'ó(ð�	(øôm�ò�
Ùð
ûô�ò�
Ùð
ûô�ò�
Ùð
ûô$�ò�
Ùð
ûô �×/Ñ/ò�OÜ*ð<Ø>DñEóFàKNðOûðOûô �ò�
Ùð
üò�8øô�ò�
Ùð
üó �As���‡Q<�ÂR�Ã(R�Å R)�É(R8�ÌS"�ÎS1ÏS6�ÑTÑ<	RÒRÒ	RÒRÒ	R&Ò%R&Ò)	R5Ò4R5Ò8SÓSÓSÓ"	S.Ó-S.Ó6	TÔTc�����������������ó:��—�|dk(��r>	�|�j������������������|«������}t��������|t��������«������rdS�t��������|t��������j
������������������«������S�|dk(��r(	�|�j������������������|«������}t��������|t��������t��������f«������S�t��������d|z��«������‚#�t��������$�r�Y�yw�xY�w#�t��������$�r�Y�yw�xY�w)NrR���FrS���zrAlthough '%s' is a valid type operator for the aggregation pipeline, it is currently not implemented in Mongomock.)	r¹���rº���rX���r"��rY���rZ���rä���ra���r¸���)rŽ���rl���re���r$��s���    r^���r³���z_Parser._handle_type_operator¢��s¯���€�à{Ò"ð
ØŸ™ FÓ+ô�' v¬tÔ45Ð\¼*ÀVÌWÏ^É^Ó:\Ð\ð�zÒ!ð
ØŸ™ FÓ+ô�˜f¤u¬d mÓ4Ð4ä!ð
,Ø.6ñ
7ó8ð�	8øô�ò�
Ùð
ûô�ò�
Ùð
ús#���‡A?�Á
B�Á?	BÂ
BÂ	BÂBc�����������������ó$��—�|dk(��rŒ|d�d�}t��������|«������dkD��rDt��������j������������������t��������j������������������«������t��������j������������������d«������k��rt��������d«������‚|d���}|D�]��}	�|�j������������������|«������}||c�S�Œ�|�j������������������|«������S�|dk(��r^t��������|t��������«������r|\��}}}	nt��������|t��������«������r|d���}|d���}|d	���}	|�j������������������«������}
|
rn	}|�j������������������|«������S�t��������d
|z��«������‚#�t��������$�r�Y�Œªw�xY�w)Nr7���r‡���r”���z4.4zE$ifNull supports only one input expression  in MongoDB v4.4 and lowerr6���ÚifÚthenÚelsezzAlthough '%s' is a valid conditional operator for the aggregation pipeline, it is currently not implemented  in Mongomock.)rd���r���r¹���Ú	mongomockÚSERVER_VERSIONr���rº���rX���ra���ry���rÄ���r¸���)rŽ���rl���re���ÚfieldsÚfallbackrÿ���rJ��Ú	conditionÚ	true_caseÚ
false_caseÚcondition_valuer»���s���            r^���r©���z$_Parser._handle_conditional_operator·��s5��€�ؐyÒ Ø˜C˜R[ˆFܐ6‹{˜QŠ¤7§=¡=´×1IÑ1IÓ#JÌgÏmÉmÐ\aÓNbÒ#bÜ&ð1óð�ð�˜b‘zˆHېðØ $§
¡
¨5Ó 1IØ Ð,Ø(Ò(ð�-ð� ð�—:‘:˜hÓ'Ð'ؐwÒܘ&¤$Ô'Ø39Ñ0	˜9¡jܘF¤DÔ)Ø" 4™L	Ø" 6™N	Ø# F™^
Ø"×1Ñ1°)Ó<ˆOÙ&5™¸:ˆJØ—:‘:˜jÓ)Ð)ä!ð
à'ñ
(ó)ð�	)øô� ò�Ùðús���Á(DÄ	DÄDc�����������������óP��—�|dk(��rt��������|t��������«������st��������dt��������|«������z��«������‚|j	������������������dg�«������}t��������|t
��������t��������f«������st��������dt��������|«������z��«������‚|st��������d«������‚|D�]G��}t��������|t��������«������st��������dt��������|«������z��«������‚d|vrt��������d«������‚d	|vsŒ>t��������d
«������‚�|D�],��}|�j������������������|d���«������sŒ|�j������������������|d	���«������c�S��d|vrt��������d«������‚|�j������������������|d���«������S�t��������d
|z��«������‚)Nr'���z4$switch requires an object as an argument, found: %sÚbranchesz3$switch expected an array for 'branches', found: %sz%$switch requires at least one branch.z7$switch expected each branch to be an object, found: %sÚcasez5$switch requires each branch have a 'case' expressionr|��z6$switch requires each branch have a 'then' expression.ÚdefaultzT$switch could not find a matching branch for an input, and no default was specified.zzAlthough '%s' is a valid control flow operator for the aggregation pipeline, it is currently not implemented in Mongomock.)
rX���ry���r���rÙ���r��ra���rä���rÄ���r¹���r¸���)rŽ���rl���re���r‡��Úbranchs���     r^���r«���z%_Parser._handle_control_flow_operatorØ��sl��€�ؐyÓ Ü˜f¤dÔ+Ü&ð Ü"& v£,ñ/óð�ð
�—z‘z *¨bÓ1ˆHܘh¬¬u¨
Ô6Ü&ð Ü"& x£.ñ1óð�ñ�Ü&Ø;óð�ó�#Ü! &¬$Ô/Ü*ð$Ü&*¨6£lñ3óð�ð� Ñ'Ü*ØOóð�ð� Ò'Ü*ØPóð�ð�#ó�#Ø×&Ñ& v¨f¡~Õ6ØŸ:™: f¨V¡nÓ5Ò5ð�#ð� Ñ&Ü&ð4óð�ð�—:‘:˜f YÑ/Ó0Ð0ô�"ð
à&ñ
'ó(ð�	(rh���c�����������������óœ��—�|dk(��r'|\��}}|�j������������������|«������|�j������������������|«������v�S�|dk(��r7g�}|D�].��}|�j������������������|«������D�]��}||vsŒ|j������������������|«�������Œ�Œ0�|S�|dk(��rM|D�cg�c]��}t��������|�j������������������|«������«������‘Œ�}}t��������j������������������|d«������D�]��\��}	}
|	|
k7��sŒ�y�yt��������d|z��«������‚c�c}w�)NrI���rK���rJ���rÊ���FTzqAlthough '%s' is a valid set operator for the aggregation pipeline, it is currently not implemented in Mongomock.)r¹���rq���r��rR��Úcombinationsr¸���)rŽ���rl���re���r»���r÷���ÚresultÚ	set_valuer¾���Ú
set_valuesÚset1Úset2s���           r^���r­���z_Parser._handle_set_operator��sî���€�ؐuÒØ &ÑˆJ˜Ø—:‘:˜jÓ)¨T¯Z©Z¸Ó->Ð>Ð>ؐ{Ò"؈FÛ#	Ø!ŸZ™Z¨	Ö2EØ FÒ*ØŸ
™
 eÕ,ñ�3ð�$ð�ˆMؐ|Ò#Ø>DÖE°Uœ#˜dŸj™j¨Ó/Õ0ÐEˆJÐEÜ'×4Ñ4°ZÀÖC‘
dؘ4“<Ù ð�Dð�Ü!ð
FØHPñ
QóRð�	Rùò�Fs���Á2!C	)NF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r’���r¹���rÀ���rÄ���rÆ���r™���rµ���r���rŸ���r¡���r£���r¯���r¥���r§���r±���r³���r©���r«���r­���rk���rh���r^���r‰���r‰���Þ���st���„�ÙDó*ò
5ònòòòò
òLSò\>ò">ò0
)òoSòbb)òHy(òv}(ò~8ò*)òB1(ófRrh���r‰���c�����������������ó:���—�t��������||¬«������j������������������|�«������S�)aƒ��Parse an expression.

    Args:
        expression: an Aggregate Expression, see
            https://docs.mongodb.com/manual/meta/aggregation-quick-reference/#aggregation-expressions.
        doc_dict: the document on which to evaluate the expression.
        ignore_missing_keys: if True, missing keys evaluated by the expression are ignored silently
            if it is possible.
    rý���)r‰���r¹���)r»���r���r‘���s���   r^���Ú_parse_expressionr—��!��s���€�ô�8Ð1DÔE×KÑKÈJÓWÐWrh���c�����������	������ó��—�i�}|�j������������������«�������D�]Ü��\��}}|dk(��rŒ|j������������������«�������D�]¾��\��}}g�}|D�]��}	�|j������������������t��������||«������«�������Œ �|t��������v�rt	��������|���|«������||<���ŒE|dk(��r.g�}d„�|D�«�������}	|	D�]��}
|
|vsŒ|j������������������|
«�������Œ�|||<���Œx|dk(��r||vr|||<���Œ‡||���j������������������|«�������Œœ|t��������v�rt��������d|z��«������‚t��������d|z��«������‚�ŒÞ�|S�#�t��������$�r�Y�ŒÆw�xY�w)NÚ_idr���c��������������3���ó(���K��—�|�]
��}|xs�d�–—�Œ�y�­wrV���rk���)r\���Úvals���  r^���r_���z$_accumulate_group.<locals>.<genexpr>A��s���è�ø€�Ò8¨#˜#š+ ›+Ñ8ùs���‚r���zqAlthough %s is a valid group operator for the aggregation pipeline, it is currently not implemented in Mongomock.z«%s is not a valid group operator for the aggregation pipeline. See http://docs.mongodb.org/manual/meta/aggregation-quick-reference/ for a complete list of valid operators.)r›���rq���r—��rº���rõ���ÚextendÚgroup_operatorsr¸���)Ú
output_fieldsÚ
group_listr���rÿ���r¾���rl���r˜���re���ÚdocÚval_itÚelts���           r^���Ú_accumulate_groupr£��1��sI��€�Ø€HØ%×+Ñ+Ö-‰ˆˆuؐEŠ>ØØ"Ÿ[™[ž]‰MˆHc؈FÛ!ðØ—M‘MÔ"3°C¸Ó"=Õ>ð�"ð
�Ô1Ñ1Ü"8¸Ñ"BÀ6Ó"J˜’ؘ[Ò(ؐÙ8°Ô8ã!CØ %Ò'ØŸ™ SÕ)ð�"ð�#(˜’ؘWÒ$Ø Ñ(Ø&,H˜U’Oà˜U‘O×*Ñ*¨6Õ2Øœ_Ñ,Ü)ð$à&.ñ/ó0ð�0ô
�*ð'ð�*2ñ2ó3ð�3ñ9�+ð�.ðH�€Oøô9� ò�Ùðús���½C4Ã4	D�	Ã?D�	c�����������������ó���‡�—�ˆ�fd„}|S�)Nc�����������������ó ���•—��‰|�«������}t��������|t��������«������r.t��������|j������������������«�������«������D�cg�c]	��\��}}||f‘Œ�c}}S�|S�c�c}}w�rV���)rX���ry���Úsortedr›���)r ��r˜���r½���r]���Ú
key_getters���    €r^���Úfixed_getterz#_fix_sort_key.<locals>.fixed_getter[��sD���ø€�Ù˜‹oˆäcœ4Ô Ü)/°·	±	³Ó)<×=™v  1Q˜’FÓ=Ð=؈
ùó�>s���¶A
rk���)r§��r¨��s���` r^���Ú
_fix_sort_keyr©��Z��s���ø€�ôð�Ðrh���c�����������������óB��—�dD�]��}||v�sŒt��������d|z��«������‚�dD�]m��}||vrt��������d|z��«������‚t��������||���t��������«������st��������d«������‚|dv�r||���j	������������������d«������rt��������d«������‚|d	k(��sŒ\d
||���v�sŒdt��������d«������‚�|d���}|d
���}|d���}|d	���}|j������������������|«������}|�D�]S��}		�t
��������j������������������|	|«������}
t��������|
t��������«������rd|
i}
|j������������������||
i«������}|D�cg�c]��}|‘Œ�c}|	|<���ŒU�|�S�#�t��������$�r�d�}
Y�ŒKw�xY�wc�c}w�)N)ÚletÚpipelineztAlthough '%s' is a valid lookup operator for the aggregation pipeline, it is currently not implemented in Mongomock.)ÚfromÚ
localFieldÚforeignFieldrL��z%Must specify '%s' field for a $lookupz$Arguments to $lookup must be strings)rL��r®��r¯��r–���ú,FieldPath field names may not start with '$'rL��rg��zŒAlthough '.' is valid in the 'as' parameters for the lookup stage of the aggregation pipeline, it is currently not implemented in Mongomock.r­��r®��r¯��rI���)r¸���r���rX���rÌ���r—���Úget_collectionr���rÍ���rº���ra���Úfind)
Ú
in_collectionÚdatabaser��rl���Úforeign_nameÚlocal_fieldÚ
foreign_fieldÚ
local_nameÚforeign_collectionr ��ÚqueryÚmatchesÚforeign_docs
���             r^���Ú_handle_lookup_stager½��d��s��€�Û'ˆØwÒÜ%ð,à.6ñ7ó8ð�
8ð�(ó�AˆØ˜7Ñ"Ü"Ø7¸(ÑBóDð�
Dä˜' (Ñ+¬SÔ1Ü"Ø6ó8ð�
8àÐ;Ñ;ؘÑ!×,Ñ,¨SÔ1Ü"Ø>ó@ð�
@àtÓؐw˜xÑ(Ò(Ü%ðJóKð�
Kð�Að$�˜6‘?€Lؘ,Ñ'€KؘNÑ+€Mؘ‘€JØ!×0Ñ0°Ó>ÐÛˆð	Ü×,Ñ,¨S°+Ó>ˆEô�eœTÔ"ؘENˆEØ$×)Ñ)¨=¸%Ð*@ÓAˆØ:AÖB¨;š;ÒBˆˆJŠð�ð�Ðøô�ò�	ØŠEð	üò
�Cs���Â7DÃ8	DÄDÄDc��������������#���óþ���K��—�|�j������������������|d���«������}|dd��}|s|–—�y�t��������|t��������t��������f«������r|D�]��}t	��������||«������D�]��}|–—�Œ�Œ�y�t��������|t
��������«������rt	��������||«������D�]��}|–—�Œ�y�y�­w)Nr���r”���)r��rX���ra���rä���Ú_recursive_getry���)ÚmatchÚ
nested_fieldsÚheadÚremaining_fieldsÚmÚanswers���      r^���r¿��r¿����sˆ���è�ø€�؏9‰9] 1Ñ%Ó&€DØ$ Q RÐ(ÐÙàŠ
Øä$œœu˜
Ô&ÛˆAä(¨Ð,<Ö=Ø“ñ�>ñ�ô�
Dœ$Ô	ä$ TÐ+;Ö<ˆFØ‹Lñ�=ð�
 ùs���‚A;A=c�����������������óR��‡‡‡‡‡‡—�t��������|j������������������dd«������t��������«������st��������d«������‚t��������|j������������������di�«������t��������«������st��������d«������‚t��������|j������������������dd«������t
��������«������st��������d«������‚d	|vrt��������d
«������‚dD�]o��}||vrt��������d|z��«������‚t��������||���t
��������«������st��������d
|z��«������‚||���j
������������������d«������rt��������d«������‚|dk(��sŒ[d||���v�sŒct��������d|z��«������‚�|d���}|d	���}|d���}|d���Š|d���}|j������������������dd�«������}|j������������������dd�«������Š|j������������������di�«������Š|j������������������|«������Št��������j������������������|�«������}	ˆˆˆˆˆˆfd„}
|	D�]‰��}t��������«�������ŠdŠ	�t��������||«������}�|
|«������x}
||<���|
sŒ,|‰|k��sŒ4‰dz
��Šg�}|
D�]/��}|j������������������d«������}t��������||«������D�]
��}|�|
|«������z
��}Œ�Œ1�||xx���|z
��cc<���|}
|
sŒ|€ŒP‰|k��rŒVŒ‹�|	S�#�t��������$�r�Y�Œ™w�xY�w)NÚmaxDepthr���z4Argument 'maxDepth' to $graphLookup must be a numberÚrestrictSearchWithMatchzGArgument 'restrictSearchWithMatch' to $graphLookup must be a DictionaryÚ
depthFieldr��z6Argument 'depthField' to $graphlookup must be a stringÚ	startWithz1Must specify 'startWith' field for a $graphLookup)rL��ÚconnectFromFieldÚconnectToFieldr­��z*Must specify '%s' field for a $graphLookupz,Argument '%s' to $graphLookup must be stringr–���r°��rL��rg��z‘Although '.' is valid in the '%s' parameter for the $graphLookup stage of the aggregation pipeline, it is currently not implemented in Mongomock.r­��rË��rÌ��c�����������������ó$��•—�t��������|�t��������«������rd|�i}�‰j������������������‰|�i«������}g�}|D�]`��}t��������j������������������‰	|«������sŒ|d���‰vsŒ"‰t��������j������������������|fi�‰‰i¤Ž}|j������������������|«�������‰j������������������|d���«�������Œb�|S�)NrI���r™��)	rX���ra���r²��r���Úfilter_appliesrp��rq��rq���Úadd)
rº��r»��Únew_matchesÚ	new_matchÚconnect_to_fieldÚdepthÚdepth_fieldr¹��Úfound_itemsÚrestrict_search_with_matchs
���    €€€€€€r^���Ú_find_matches_for_depthz;_handle_graph_lookup_stage.<locals>._find_matches_for_depthÉ��s¡���ø€�ܐeœTÔ"ؘENˆEØ$×)Ñ)Ð+;¸UÐ*CÓDˆØˆÛ ˆIÜ×'Ñ'Ð(BÀIÕNØ! %Ñ(°Ò;ØÐ*Ü +× 7Ñ 7¸	Ñ ZÀkÐSXÐEYÑ ZIØ×"Ñ" 9Ô-Ø—‘ 	¨%Ñ 0Õ1ð
�!ð�Ðrh���r”���)rX���r��rè���r���ry���rÌ���r—���r¸���r±��ÚcopyÚdeepcopyr��r—��rº���r��r¿��)r³��r´��r��rl���rµ��Ú
start_withÚconnect_from_fieldr¸��Ú	max_depthÚout_docr×��r ��r��Úorigin_matchesÚnewly_discovered_matchesrÀ��rÁ��Úmatch_targetrÒ��rÓ��rÔ��r¹��rÕ��rÖ��s���                  @@@@@@r^���Ú_handle_graph_lookup_stagerá��¢��s¡��ý€�ܐg—k‘k *¨aÓ0´#Ô6ÜØBóDð�	Däg—k‘kÐ";¸RÓ@Ä$ÔGÜØUóWð�	Wäg—k‘k ,°Ó3´SÔ9ÜØDóFð�	Fà˜'Ñ!ÜØ?óAð�	AãHˆØ˜7Ñ"Ü"Ø<¸xÑGóIð�
Iä˜' (Ñ+¬SÔ1Ü"Ø>ÀÑIóKð�
Kà8Ñ×'Ñ'¨Ô,Ü"Ð#QÓRÐRؐtÓ  w¨xÑ'8Ò 8Ü%ðJàLTñUóVð�
Vð�Ið�˜6‘?€LؘÑ%€JØ Ð!3Ñ4ÐØÐ/Ñ0Ðؘ‘€JØ—‘˜J¨Ó-€IØ—+‘+˜l¨DÓ1€KØ!(§¡Ð-FÈÓ!KÐØ!×0Ñ0°Ó>Ð܏m‰m˜MÓ*€G÷ñ�ó�ˆÜ“eˆØˆð	Ü& z°3Ó7ˆFñ�,CÀ6Ó+JÐJˆ˜˜Z™Ú )Ð"3°u¸yÓ7HØQ‰JˆEØ')Ð$Û'Ø 2× 8Ñ 8¸Ó =
Ü$2°5¸-Ö$HLØ,Ñ0GÈÓ0UÑUÑ,ñ�%Ið�(ð�

‹OÐ7Ñ7‹OØ5ˆNò� )Ñ"3°u¸yÔ7Hð�ð"�€Nøô�ò�	Ùð	ús���ÆHÈ	H&È%H&c�����������������ó��‡‡
—�g�}|d���Š‰r.ˆfd„Š
ˆ
fd„}t��������|�|¬«������}t��������j������������������|‰
«������}nd�|�fg}|D�]6��\��}}|D�	cg�c]��}	|	‘Œ�}
}	t��������||
«������}||d<���|j	������������������|«�������Œ8�|S�c�c}	w�)Nr™��c�����������������ó@���•—�	�t��������‰|�d¬«������S�#�t��������$�r�Y�y�w�xY�w)NTrý���)r—��rº���)r ��r™��s��� €r^���Ú_key_getterz(_handle_group_stage.<locals>._key_getterð��s)���ø€�ð
Ü(¨¨cÀtÔLÐLøÜò�
Ùð
ús���ƒ
�‘	œc�����������������ó:���•—�t��������j�������������������‰|�«������«������S�rV���)r���ÚBsonComparable)r ��rä��s��� €r^���Ú_sort_key_getterz-_handle_group_stage.<locals>._sort_key_getterö��s���ø€�Ü×+Ñ+©K¸Ó,<Ó=Ð=rh���©r˜���)r¦��rR��Úgroupbyr£��rq���)r³��Úunused_databaser��Úgrouped_collectionrç��Úsorted_collectionÚgroupedÚdoc_idÚgrouprÖ���rŸ��r���r™��rä��s���            @@r^���Ú_handle_group_stagerð��ë��s ���ù€�ØÐØ
%‰.€CÙ
ô	ô	>ô
�# =Ð6FÔGÐÜ×#Ñ#Ð$5°{ÓC‰à˜-Ð(Ð)ˆã ‰
ˆØ"'Ö(˜Q’qÐ(ˆ
Ð(Ü$ W¨jÓ9ˆØ ˆ‰Ø×!Ñ! (Õ+ð	�!ð�Ðùò�)s���Á	A<c�����������������ó���‡‡‡‡‡‡—�t��������‰«������h�d£z
��}|rt��������d|j������������������«�������z��«������‚d‰vsd‰vrt��������d«������‚‰d���Š‰d���Št��������‰t��������«������st��������dt��������‰«������z��«������‚t
��������‰«������dk��rt��������dt
��������‰«������z��«������‚t��������‰«������‰k7��rt��������d	«������‚‰j������������������d
ddd
ii«������}‰j������������������dd�«������}	�|‰d���k\��Šˆfd„Šˆˆˆˆfd„Šˆfd„|�D�«�������}�t��������|�d„�¬«������}t��������j������������������|d„�«������}g�}|D�]<��\��\��}}	}
|
D�cg�c]��}|d
���‘Œ	�}}t��������||«������}
|	|
d<���|j������������������|
«�������Œ>�|S�#�t��������$�r�dŠY�Œw�xY�wc�c}w�)N>���Úoutputr‰��ÚgroupByÚ
boundariesz#Unrecognized option to $bucket: %s.ró��rô��z<$bucket requires 'groupBy' and 'boundaries' to be specified.zCThe $bucket 'boundaries' field must be an array, but found type: %srÊ���zRThe $bucket 'boundaries' field must have at least 2 values, but found %d value(s).zDThe 'boundaries' option to $bucket must be sorted in ascending orderrò��Úcountr���r”���r‰��r‡���Tc������������������óJ���•—�	�‰d���S�#�t���������$�r}�t��������d«������|�‚d�}�~�ww�xY�w)Nr‰��zT$bucket could not find a matching branch for an input, and no default was specified.)rº���r���)ru��r��s��� €r^���Ú_get_default_bucketz1_handle_bucket_stage.<locals>._get_default_bucket%��s<���ø€�ð	Dؘ9Ñ%Ð%øÜò�	DÜ"ð:ó;à@Cð
Dûð	Dús���ƒ�ˆ	"‘"c�����������������óÀ���•—�	�t��������‰|�«������}t��������j������������������‰|«������}|r|t	��������‰«������k��r
d‰|dz
�����fS�‰�‰«�������fS�#�t��������$�r�‰�‰«�������fcY�S�w�xY�w)zÜGet the bucket ID for a document.

        Note that it actually returns a tuple with the first
        param being a sort key to sort the default bucket even
        if it's not the same type as the boundaries.
        Fr”���)r—��rº���ÚbisectÚbisect_rightrd���)r ��r¾���rø���r÷��rô��Úgroup_byÚis_default_lasts���   €€€€r^���Ú_get_bucket_idz,_handle_bucket_stage.<locals>._get_bucket_id-��sy���ø€�ð	<Ü% h°Ó4ˆEô�×#Ñ# J°Ó6ˆÙUœS ›_Ò,ؘ: e¨a¡iÑ0Ð1Ð1ØÑ!4Ó!6Ð7Ð7øô�ò�	<Ø#Ñ%8Ó%:Ð;Ò;ð	<ús���ƒA�ÁAÁAc��������������3���ó2���•K��—�|�]��}�‰|«������|f–—�Œ�y�­wrV���rk���)r\���r ��rý��s���  €r^���r_���z'_handle_bucket_stage.<locals>.<genexpr>=��s���øè�ø€�ÒI°C‘n SÓ)¨3Ô/ÑIùs���ƒc�����������������ó���—�|�d���S�r…���rk���©Úkvs��� r^���r€���z&_handle_bucket_stage.<locals>.<lambda>>��s���€�¸"¸Qº%rh���rè��c�����������������ó���—�|�d���S�r…���rk���r���s��� r^���r€���z&_handle_bucket_stage.<locals>.<lambda>?��s���€�¸2¸aº5rh���r™��)r��r���rU��rX���ra���rÙ���rd���r¦��r��r��rR��ré��r£��rq���)r³��rê��r��Úunknown_optionsrž��Ú
default_valueÚout_collectionrí��Ú
unused_keyrî��rï��r��rŸ��r���rý��r÷��rô��rû��rü��s���  `           @@@@@r^���Ú_handle_bucket_stager��	��sÉ��ý€�ܘ'“lÒ%SÑS€OÙÜØ1°O×4GÑ4GÓ4IÑIóKð�	Kà˜Ñ <°wÑ#>ÜØJóLð�	LàyÑ!€HؘÑ&€Jܐj¤$Ô'ÜØQܐ:Óñ
ó ð�	 ô�ˆ:ƒ˜ÒÜð
!Ü#& z£?ñ
3ó4ð�	4ô�ˆjÓ˜ZÒ'ÜØRóTð�	Tà—K‘K ¨7°V¸Q°KÐ*@ÓA€MØ—K‘K 	¨4Ó0€MðØ'¨:°b©>Ñ9ˆôD÷8ó �J¸=ÔI€MܘMÑ/?Ô@€NÜ×Ñ Ñ0@ÓA€Gà€NÛ'.Ñ#шV˜eØ&+Ö, b˜“eÐ,ˆ
Ð,Ü$ ]°JÓ?ˆØ ˆ‰Ø×јhÕ'ð	�(/ð
�ÐøôK�ò�ØŠðüòB�-s���à E*�Ä6E;Å*E8Å7E8c�����������������ó��—�t��������|t��������«������st��������d«������‚|j������������������dd�«������}|€t��������d«������‚|r%t��������dt	��������|«������j������������������«�������z��«������‚t��������|�«������}t��������j������������������|«�������|d�|�S�)Nz1the $sample stage specification must be an objectÚsizez!$sample stage must specify a sizez"unrecognized option to $sample: %s)rX���ry���r���rU��r��ra���Ú_randomÚshuffle)r³��rê��r��r	��Úshuffleds���     r^���Ú_handle_sample_stager
��J��s|���€�ܐgœtÔ$ÜÐRÓSÐS؏;‰;v˜tÓ$€DØ€|ÜÐBÓCÐCÙÜÐCÄcÈ'Ãl×FVÑFVÓFXÑXÓYÐYܐMÓ"€H܇OOHÔؐETˆ?Ðrh���c�����������������óÚ���‡	—�t��������|j������������������«�������D�cg�c]	��\��}}||i‘Œ�c}}«������}|�}|D�].��}|j������������������«�������D�]��\��Š	}t��������|ˆ	fd„|dk��¬«������}Œ�Œ0�|S�c�c}}w�)Nc�����������������ó0���•—�t��������j������������������‰|�«������S�rV���)r���Úresolve_sort_key)rÖ���ÚsortKeys��� €r^���r€���z$_handle_sort_stage.<locals>.<lambda>^��s���ø€�œi×8Ñ8¸À!ÔDrh���r���)r˜���Úreverse)Úreversedr›���r¦��)
r³��rê��r��rÖ���r×���Ú
sort_arrayrì��Ú	sort_pairÚ
sortDirectionr��s
���         @r^���Ú_handle_sort_stager��W��sr���ø€�ܨg¯m©m«o×>¡d a¨˜A˜qš6Ó>Ó?€JØ%ÐÛˆ	Ø&/§o¡oÖ&7Ñ"ˆG]Ü &Ø!ÛDØ%¨Ñ)ô!+Ññ�'8ð� ð�Ðùó�?s���šA'
c�����������������ó��—�t��������|t��������«������sd|i}|d���}t��������|t��������«������r|d���dk7��rt��������d|z��«������‚|dd��}|j	������������������d«������}|j	������������������d«������}g�}|�D�]ô��}	�t��������j������������������||«������}|€|r|j������������������|«�������Œ0|g�k(��r?|r<t��������j������������������|«������}	t��������j������������������|	|«�������|j������������������|	«�������Œtt��������|t��������«������rt��������|«������}
nd�|fg}
|
D�][��\��}}t��������j������������������|«������}	t��������j������������������|	||«������}	|rt��������j������������������|	||«������}	|j������������������|	«�������Œ]�Œö�|S�#�t��������$�r�|r|j������������������|«�������Y�Œw�xY�w)NÚpathr���r–���zQ$unwind failed: exception: field path references must be prefixed with a '$' '%s'r”���ÚpreserveNullAndEmptyArraysÚincludeArrayIndex)rX���ry���rÌ���Ú
ValueErrorr��r���rÍ���rº���rq���rØ��rÙ��Údelete_value_by_dotra���Ú	enumerateÚset_value_by_dot)
r³��rê��r��r��Úshould_preserve_null_and_emptyÚinclude_array_indexÚunwound_collectionr ��r\��Únew_docÚ
iter_arrayrø���Ú
field_items
���             r^���Ú_handle_unwind_stager&��c��s��€�ܐgœtÔ$ؘ7Ð#ˆØ6‰?€DܐdœCÔ  D¨¡G¨s¢NÜð
Ø $ñ
%ó&ð�	&ð�ˆ8€DØ%,§[¡[Ð1MÓ%NÐ"Ø!Ÿ+™+Ð&9Ó:ÐØÐÛˆð	Ü!×2Ñ2°3¸Ó=ˆKð
�ÐÙ-Ø"×)Ñ)¨#Ô.Øؘ"ÒÙ-ÜŸ-™-¨Ó,ä×+Ñ+¨G°TÔ:Ø"×)Ñ)¨'Ô2Øܐk¤4Ô(Ü" ;Ó/‰Jà Ð-Ð.ˆJÛ!+ÑˆE:Ü—m‘m CÓ(ˆGÜ×.Ñ.¨w¸¸jÓIˆGÙ"Ü!×2Ñ2°7Ð<OÐQVÓWØ×%Ñ% gÕ.ñ�",ð-�ð:�Ðøô5�ò�	Ù-Ø"×)Ñ)¨#Ô.Úð	ús���Á/E$Å$FÆFc�����������
������óp��‡‡—�t��������|�t��������«������s|�S�t��������j������������������«�������}|�D�]Ý��}|j	������������������d«������\��}}}|s_t��������|j������������������|«������t��������«������r:|dz���||���d���z���}t
��������dt��������‰|z���«������›dt��������‰|z���«������›d‰›«������‚d||<���Œyt��������|j������������������|g�«������t��������«������s,t
��������dt��������‰|z���«������›dt��������‰|z���«������›d‰›«������‚|j������������������|g�«������|gz���||<���Œß�t��������j������������������ˆˆfd„|j������������������«�������D�«�������«������S�)z‚Re-format a projection fields spec into a nested dictionary.

    e.g: ['a', 'b.c', 'b.d'] => {'a': 1, 'b': {'c': 1, 'd': 1}}
    rg��r���zcInvalid $project :: caused by :: specification contains two conflicting paths. Cannot specify both z and z: r”���c�����������	���3���óN���•K��—�|�]��\��}}|t��������|‰‰›|›d�¬«������f–—�Œ�y­w)rg��)ÚprefixN)Ú_combine_projection_spec)r\���r½���r]���Úoriginal_filterr)��s���   €€r^���r_���z+_combine_projection_spec.<locals>.<genexpr>­��s2���øè�ø€�ò�#áˆAˆqð�
Ô$ Q¨É6ÒSTÐ@UÔVÔWñ#ùs���ƒ"%)	rX���ra���rp��rq��Ú	partitionr��r���Úreprr›���)	Úfilter_listr+��r)��Úfilter_dictr˜���rÿ���Ú	separatorÚsubkeyÚ	other_keys	��� ``      r^���r*��r*��‘��s>��ù€�ô
�k¤4Ô(ØÐä×)Ñ)Ó+€KãˆØ#&§=¡=°Ó#5Ñ ˆˆy˜&Ùܘ+Ÿ/™/¨%Ó0´$Ô7Ø! C™K¨+°eÑ*<¸QÑ*?Ñ?	Ý&ô�˜V e™^Õ,¬d°6¸IÑ3EÕ.FÉðYóZð�Zð�"#ˆK˜ÑØܘ+Ÿ/™/¨%°Ó4´dÔ;Ý"ô�˜ %™Õ(¬$¨v¸©|Õ*<¹oðOóPð�
Pð�)Ÿ_™_¨U°BÓ7¸6¸(ÑBˆEÒð!�ô$�×"Ñ"ô�#à×%Ñ%Ó'ô#ó�ð�rh���c�����������	������ón��—�i�}|�j������������������«�������D�]š��\��}}||vr|s|||<���Œt��������||���t��������«������s|r|||<���Œ-t��������|t��������«������rt��������|||���|«������||<���ŒQt��������|t��������«������r2|D�cg�c]"��}t��������|t��������«������rt��������|||���|«������‘Œ$�c}||<���Œ“|rŒ–|||<���Œœ�|S�c�c}w�rV���)r›���rX���ry���Ú_project_by_specra���)r ��Ú	proj_specÚ
is_includerò��r˜���r¾���r\��s���       r^���r4��r4��³��sÆ���€�Ø
€FØ—i‘i–k‰
ˆˆUؐiÑÙØ#s‘Øä˜) C™.¬$Ô/ÙØ#s‘ØäeœTÔ"Ü*¨5°)¸C±.À*ÓMˆF3ŠKÜ
˜œtÔ
$à.3öVØ*´zÀ+ÌtÔ7Tô�,¨K¸À3¹ÈÕTò�VˆF3ŠKâ؈F3ŠKð#�"ð&�€MùòVs���Á8'B2c�����������������óþ���—�d|vrt��������d«������‚|d���}g�}|�D�]L��}	�t��������||d¬«������}t	��������|t
��������«������st��������dj
������������������|«������«������‚|j������������������|«�������ŒN�|S�#�t��������$�r	�t��������}Y�ŒPw�xY�w)NÚnewRootz:Parameter 'newRoot' is missing for $replaceRoot operation.Trý���zL'newRoot' expression must evaluate to an object, but resulting value was: {})r���r—��rº���r���rX���ry���rþ���rq���)r³��rê��r��Únew_rootr��r ��r#��s���       r^���Ú_handle_replace_root_stager:��Ë��s•���€�ؘÑÜÐ[Ó\Ð\ؐyÑ!€HØ€NÛˆð	Ü'¨°#È4ÔPˆGô�˜'¤4Ô(Ü"Ø^ß‘˜“ó"ð�
"ð�	×јgÕ&ð�ð�Ðøô�ò�	ÜŠGð	ús���A*Á*A<Á;A<c�����������	������ó¼��—�g�}d�}|j������������������d«������}d�}|j������������������«�������D�]–��\��}}|€|dk7��s|r|rdnd}n/|dk(��r|s|dk7��rt��������d|z��«������‚|dk(��r|rt��������d|z��«������‚|dv�r|dk7��r|j������������������|«�������Œ`|s|�D�	cg�c]��}	i�‘Œ�}}	t	��������|�|«������D�]��\��}
}	�t��������||
d¬«������||<���Œ�Œ˜�|dk(��|d	uxr�|d
k7��k(��r|j������������������d«�������|s|S�t��������||¬«������}|�D�
cg�c]��}
t��������|
||dk(��¬«������‘Œ�}}
|r)t	��������||«������D�cg�c]��\��}}t��������|fi�|¤Ž‘Œ�c}}S�|S�c�c}	w�#�t��������$�r�Y�Œªw�xY�wc�c}
w�c�c}}w�)
Nr™��ÚincludeÚexcludezcBad projection specification, cannot exclude fields other than '_id' in an inclusion projection: %szmBad projection specification, cannot include fields or add computed fields during an exclusion projection: %s)r���r”���TFTrý���Fr���)r+��)r6��)
r��r›���r���rq���rV��r—��rº���r*��r4��ry���)r³��rê��r��r.��ÚmethodÚ
include_idÚnew_fields_collectionrÿ���r¾���Ú
unused_docÚin_docrÝ��Úprojection_specr ��r��r��r��s���                 r^���Ú_handle_project_stagerD��Ý��sÝ��€�Ø€KØ
€FØ—‘˜UÓ#€Jð�!ÐØŸ
™
ž‰ˆˆu؈>˜u¨š~±Ù"'‘Y¨Y‰FØ
yÒ
 ©°5¸E²>Ü"ðBØDKñLóMð�
Mð�yÒ
 ¡UÜ"ðLØNUñVóWð�
Wð�Ð'Ñ'ؘŠ~Ø×"Ñ" 5Ô)ØÙ$Ø:GÖ$H¨J¢RÐ$HÐ!Ð$Hä" =Ð2GÖH‰OˆFGð
Ü!2°5¸&ÐVZÔ![˜’ñ� Ið%�(ð0�	)Ñ °5Ð!8Ò!L¸ZÈ1¹_ÒMØ×ј5Ô!áØ$Ð$ô�/¨{ÈGÔT€Oð�!öàô�	˜˜o¸&ÀIÑ:MÖNð€Nð�ñ�ô�˜NÐ,AÓB÷
ᐐ1ô�
‰La‹Ló
ð�	
ð�Ðùò3�%Iøô
�ò�
áð
üòùó

s$���Â	D?Â,EÃ8EÄ#EÅ	EÅEc�����������������ó˜��—�|st��������d«������‚|�D�cg�c]
��}t��������|«������‘Œ�}}|j������������������«�������D�]}��\��}}t��������|�|«������D�]i��\��}}	�t	��������||d¬«������}	|j
������������������d«������}
|
d�d�D�]4��}|j������������������|i�«������||<���t��������||���t��������«������si�||<���||���}Œ6�|	||
d���<���Œk�Œ�|S�c�c}w�#�t
��������$�r�Y�Œ€w�xY�w)NzMInvalid $addFields :: caused by :: specification must have at least one fieldTrý���rg��r‡���)	r���ry���r›���rV��r—��rº���r��r��rX���)r³��rê��r��r ��r��rÿ���r¾���rB��rÝ��rJ��ÚpartsÚsubfields���            r^���Ú_handle_add_fields_stagerH����sõ���€�ÙÜØ[ó]ð�	]à+8Ö9 C”d˜3•iÐ9€NÐ9ØŸ
™
ž‰ˆˆuÜ" =°.ÖA‰OˆFGð
Ü-¨e°VÐQUÔV	ð�—K‘K Ó$ˆEØ! # 2›JØ$+§K¡K°¸"Ó$=˜Ñ!Ü! '¨(Ñ"3´TÔ:Ø(*G˜HÑ%Ø! (Ñ+‘ð	�'ð
�"+ˆGE˜"‘IÒñ� Bð�(ð�Ðùò�:øô
�ò�
Ùð
ús���’B8ÁB=Â=	C	ÃC	c�����������������óŽ���—�|j������������������|«������}|j������������������«�������r|j������������������«��������|�r|j������������������|�«�������|�S�rV���)r±��Úfind_oneÚdropÚinsert_many)r³��r´��r��r��s���    r^���Ú_handle_out_stagerM��%��sA���€�à×,Ñ,¨WÓ5€NØ×ÑÔ Ø×ÑÔÙØ×"Ñ" =Ô1ØÐrh���c�����������������ó´���—�t��������|t��������«������r|dk(��rt��������d«������‚|j������������������d«������rt��������d«������‚d|v�rt��������d«������‚|t	��������|�«������igS�)Nr��z*the count field must be a non-empty stringr–���z+the count field cannot be a $-prefixed pathrg��z"the count field cannot contain '.')rX���rÌ���r���r—���rd���)r³��r´��r��s���   r^���Ú_handle_count_stagerO��/��s^���€�ܐgœsÔ# w°"¢}ÜÐKÓLÐLØ	×	Ñ	˜CÔ	 ÜÐLÓMÐMØ	‰ÜÐCÓDÐDØ
”c˜-Ó(Ð)Ð*Ð*rh���c�����������	������óp���—�i�}|j������������������«�������D�]��\��}}t��������t��������|�||d�«������«������||<���Œ!�|gS�rV���)r›���ra���Úprocess_pipeline)r³��r´��r��Úout_collection_by_pipelineÚpipeline_titler¬��s���      r^���Ú_handle_facet_stagerT��9��sI���€�Ø!#ÐØ$+§M¡M¦OÑ ˆ˜Ü59Ô:JØ˜8 X¨tó;5ó�66Ð" >Ò2ð�%4ð�
'Ð'Ð'rh���c�����������	������ó¨���—�t��������j������������������|«������}|�D�cg�c]-��}t��������j������������������|t��������j������������������|«������«������r|‘Œ/�c}S�c�c}w�rV���)r���Ú$patch_datetime_awareness_in_documentr���rÎ��)r³��r´��r��Úspecr ��s���     r^���Ú_handle_match_stagerX��A��sN���€�Ü×7Ñ7¸Ó@€Dà$öØÜ×#Ñ# D¬'×*VÑ*VÐWZÓ*[Ô\ò�	òð�ùò�s���š2Az
$addFieldsz$bucketz$bucketAutoz
$collStatsz$countz
$currentOpz$facetz$geoNearz$graphLookupz$groupz$indexStatsz$limitc�����������������ó���—�|�d�|�S�rV���rk���©Úcrx��Úos���   r^���r€���r€���U��s
���€�˜a  ™erh���z$listLocalSessionsz
$listSessionsz$lookupz$matchz$mergec�����������������ó���—�|�|d��S�rV���rk���rZ��s���   r^���r€���r€���c��s
���€�˜Q˜q˜r™Urh���)
z$outz$planCacheStatsz$projectz$redactz$replaceRootz$replaceWithz$samplez$setz$skipz$sortz$sortByCountz$unsetz$unwindc�����������������ó��—�|rt��������d«������‚|D�]>��}|j������������������«�������D�])��\��}}	�t��������|���}|st��������d|z��«������‚�||�||«������}�Œ+�Œ@�t	��������j
������������������|�«������S�#�t��������$�r}t��������d|z��«������|‚d�}~ww�xY�w)Nz&Mongomock does not handle sessions yetz¥%s is not a valid operator for the aggregation pipeline. See http://docs.mongodb.org/manual/meta/aggregation-quick-reference/ for a complete list of valid operators.zmAlthough '%s' is a valid operator for the aggregation pipeline, it is currently not implemented in Mongomock.)r¸���r›���Ú_PIPELINE_HANDLERSrº���r���Ú
CommandCursor)	Ú
collectionr´��r¬��ÚsessionÚstagerl���r��Úhandlerru��s	���         r^���rQ��rQ��k��s½���€�ÙÜ!Ð"JÓKÐKãˆØ!&§¡¦ÑˆHgð
SÜ,¨XÑ6ñ�Ü)ð>Ø@HñIóJð�Jñ�! ¨X°wÓ?‰Jñ�"/ð�ô�×'Ñ'¨
Ó3Ð3øô�ò�
SÜ)ð>à@HñIóJð�PSðSûð
Sús���ª	A&Á&	BÁ/A>Á>B)F)r��)Vr•��rù��rp��rØ��rç���rt���rì���rR��rÛ���rY���Ú	packagingr���Úrandomr��rr��r��rA��Ú	sentinelsr���r~��r���r���r���r���Úbson.errorsr	���Úbsonr
���r���rp���r��r!��ÚImportErrorÚRandomr
��r��rØ���rã���rœ���rž���rª���r ���r¤���r¨���r¦���r·���r¶���r®���ra���r��r@��r¢���r´���r¬���r°���r²���rg���rm���rw���r|���rõ���Úobjectr‰���r—��Úregister_parse_expressionr£��r©��r½��r¿��rá��rð��r��r
��r��r&��r*��r4��r:��rD��rH��rM��rO��rT��rX��r_��rQ��rk���rh���r^���ú<module>rn�����sO��ðÙ�Dã�
����������
Û�	Û�
Û�ã�Ý�ã�Ý�$Ý�Ý�Ý�&ð#Ý+ß&Ø€OØ—‘ %Ð(€Ið�ˆ&-‰-‹/€ò€ò	Ð�òÐ�ð�2Ð4OÑOØ
ØðSñ�Ð�ò
Ð�ð�ðÐ�ð�ØðÐ�ò€ð$�! )Ð,Ð�ò€ð�ðÐ�ð�!˜	Ð�òÐ�ò ñ�	ˆ×	'Ñ	'×	,Ñ	,Ó	.Ó/ñ	0Ð�ò
�,Ð�ò	€
òÐ�ð�Øð€ò<ò!òeòð�
ØØ-Ù8Ù8Ù:Ù
:ñÐ�ô@
Rˆfô�@
RóF
Xð�$€	×�#Ñ�#Ð$5Ô�6ò&òRò(òVò&FòRò<>òB
ò	ò)ó\òDò0ò$0òfò*ò+ò(òðØÐ*ðà
Ð#ðð�4ðð�$ð	ð
�
Ð!ðð�$ð
ð�
Ð!ðð�ðð�Ð.ðð�
Ð!ðð�4ðð�
Ñ#ðð�˜$ðð�Tðð�Ð#ðð �
Ð!ð!ð"�
ˆdð#ð$�
ØØ%ØØ.ØØ#Ø$Ù
"Ø
ØØØ#ò=Ð�óD4øðW2�ò�#Ø&€OØ€OØ—‘Ð"ƒIð#ús���Á$F?�Æ?GÇG