IX; foreach ($messages as $id => $message) { unset($this->messages[$altDomain][$id]); $this->messages[$domain][$id] = $message; } if ([] === ($this->messages[$altDomain] ?? null)) { unset($this->messages[$altDomain]); } } public function addCatalogue(MessageCatalogueInterface $catalogue): void { if ($catalogue->getLocale() !== $this->locale) { throw new LogicException(\sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s".', $catalogue->getLocale(), $this->locale)); } foreach ($catalogue->all() as $domain => $messages) { if ($intlMessages = $catalogue->all($domain.self::INTL_DOMAIN_SUFFIX)) { $this->add($intlMessages, $domain.self::INTL_DOMAIN_SUFFIX); $messages = array_diff_key($messages, $intlMessages); } $this->add($messages, $domain); } foreach ($catalogue->getResources() as $resource) { $this->addResource($resource); } if ($catalogue instanceof MetadataAwareInterface) { $metadata = $catalogue->getMetadata('', ''); $this->addMetadata($metadata); } if ($catalogue instanceof CatalogueMetadataAwareInterface) { $catalogueMetadata = $catalogue->getCatalogueMetadata('', ''); $this->addCatalogueMetadata($catalogueMetadata); } } public function addFallbackCatalogue(MessageCatalogueInterface $catalogue): void { // detect circular references $c = $catalogue; while ($c = $c->getFallbackCatalogue()) { if ($c->getLocale() === $this->getLocale()) { throw new LogicException(\sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); } } $c = $this; do { if ($c->getLocale() === $catalogue->getLocale()) { throw new LogicException(\sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); } foreach ($catalogue->getResources() as $resource) { $c->addResource($resource); } } while ($c = $c->parent); $catalogue->parent = $this; $this->fallbackCatalogue = $catalogue; foreach ($catalogue->getResources() as $resource) { $this->addResource($resource); } } public function getFallbackCatalogue(): ?MessageCatalogueInterface { return $this->fallbackCatalogue; } public function getResources(): array { return array_values($this->resources); } public function addResource(ResourceInterface $resource): void { $this->resources[$resource->__toString()] = $resource; } public function getMetadata(string $key = '', string $domain = 'messages'): mixed { if ('' == $domain) { return $this->metadata; } if (isset($this->metadata[$domain.self::INTL_DOMAIN_SUFFIX])) { if ('' === $key) { return $this->metadata[$domain.self::INTL_DOMAIN_SUFFIX]; } if (isset($this->metadata[$domain.self::INTL_DOMAIN_SUFFIX][$key])) { return $this->metadata[$domain.self::INTL_DOMAIN_SUFFIX][$key]; } } if (isset($this->metadata[$domain])) { if ('' == $key) { return $this->metadata[$domain]; } if (isset($this->metadata[$domain][$key])) { return $this->metadata[$domain][$key]; } } return null; } public function setMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->metadata[$domain][$key] = $value; } public function deleteMetadata(string $key = '', string $domain = 'messages'): void { if ('' == $domain) { $this->metadata = []; } elseif ('' == $key) { unset($this->metadata[$domain]); } else { unset($this->metadata[$domain][$key]); } } public function getCatalogueMetadata(string $key = '', string $domain = 'messages'): mixed { if (!$domain) { return $this->catalogueMetadata; } if (isset($this->catalogueMetadata[$domain])) { if (!$key) { return $this->catalogueMetadata[$domain]; } if (isset($this->catalogueMetadata[$domain][$key])) { return $this->catalogueMetadata[$domain][$key]; } } return null; } public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->catalogueMetadata[$domain][$key] = $value; } public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages'): void { if (!$domain) { $this->catalogueMetadata = []; } elseif (!$key) { unset($this->catalogueMetadata[$domain]); } else { unset($this->catalogueMetadata[$domain][$key]); } } /** * Adds current values with the new values. * * @param array $values Values to add */ private function addMetadata(array $values): void { foreach ($values as $domain => $keys) { foreach ($keys as $key => $value) { $this->setMetadata($key, $value, $domain); } } } private function addCatalogueMetadata(array $values): void { foreach ($values as $domain => $keys) { foreach ($keys as $key => $value) { $this->setCatalogueMetadata($key, $value, $domain); } } } } JFIF ( %"1!%)+...383-7(-.+  -%%----5---/--/------/-------------------------------"H !1AQaq"2BRbr#3Ss$40!1AQ"2Baq#Rb ?4lx~],2ڰ: •A&R 0V6ݜs?\ lYƑM/qХT_AF##Rt#21 1F0.;FK^|ˬx* ύcg$1I$4HFx$5]^4Q@ 5HxjxF]cď@䈚ΧsYS zi42 Q,#ǣF#E!0Դx4I5*sC3&p U'pATZ- #;Ȫ5RRIIF))I#O;:Dm(0zFJe*"se%BABs"cvy0}Ѳq&:RvhJvȰf_ޝR 9#+HRq,,L:%3\&E5R<0Цc$!NB$6xt^"ZϗL;D5i'>P*:[ P/KRf(xC˺D%O(O3Irb%qה3!u#PʰؤMpXu&biK^Z=y`+&)7`KH>#䯁*fE鈛G \@AGan9bcfu'/ R$$HMsʑٹ 5;y|U-착ݫ+v mOcU'&jU عDȪ#إ rR)fËڔ4l B~l6ku?10iZD6.dt[(LR;$1sr+1ZBEt<٬0KA{-:h*%v(a=f%.^xdt>c_* &+~ -IJzU0k G Z).Jд2:[c,+ֻB[1 WkȜhοLJ?N cێ28YZaK5h`>qē,H16jG1mA;4ZNB,(A 2OV 9tOB;ҕ'B 97ؾe߳lGDrNv(Sl T.DŽsE97mV0t^ L]#xVF8Ȗ{}[eD$SJ\\,I(V^[QI!ˬ' E 0w3Va =ir/,ܐ-`esag(x›)_H)ڔx9F'E \8K&*NRxCggK3%1tkӿM+Mru-1r$+ } t&Y͚!H>h&g i¦!̊TH=tt}QSH $k4ӰN@6M\ ˢS#L.FC#+ڙӌ`YfW^O@ ("_j¬*wo]n50P&lOO2H2C#fb4O%pemRܝy3Ϧk&Ư .MRx읱YDA! $w\R?*1r5Zqx*CA+ҮfNzsVZ)LTF} JAVա|*y}Sz hasL IZ]iYJE@S L(>ÅzAteD 5XlC€AL0P$Q$9%FyXL Q- @pwNjjd悒 FOH]XK}H% JHm:¬!dF\OGVL@/B8%nwg'Jx7x>W2|B QY<ƓyCh<&5##W}P+Jϵ25 B7iT`RI vc6b$[Vi]e%/:T_KR=ї`89UƵd%LxE>7%%S᪬ɠMM3w KvE[[ @U!!VS @N3^Kt4"+沛PR+V*b$bW>C]SYʀ QHisw;_EryoP\ %gKN%FB/JUU RWeR\(d,dC)#[$鑡Gf셳zC-_4CW@EhX` ֡1cH:sRF|\(4VSJJpYA)S2><nFq ͋E*Y ʼn$…a+i& ; |cR, #71. >2\wu-:TɥQ3MMDկڔ ^8{v["Ђ䖳h  6{shRx7KI+XIQlv-$1ʺ֧ĢhԈ !Rfˣ X\l֚p5 F+ 2+  ;g$Ks0J%lA՜E~).PuWl'MQM^,2YƢ@tja%8!)%K5RlG6b(U0qUAto"+%kS4A"",?ǑV|+F춖586q] J1dCRIܟ*728svh XD&ji%oEIC.";2I:1=h Id$ХwHAR'z'w:/l mu#nA߮|F_x8r' Kg7Y0qhƽ8"BtSؖf YgZʋW+Iؾ\jŜrJJ{\>lVXs?Z$@Hb o`oUgcܜ3%ogzҪK  U޲}O[s({sXIo"`v2!(9#s82%io}oÜ b.Xi}2(8 iKOH =8ן'+QuQ)y2Gg@͗A{1͘Xd<8_|[H,|‡t*>l8ispE.pM.Z0-\X = +Zb"X&$s@. գis;%xM*RXDa- ZBаi-S]k61*JW,6+k[6(NK+mU\-#@"r؇@ 2,jsӜYlsHh^I%2K )F:sxl,++N] R΃?|.OKbJEF-cxW?g I^8alKQq6FJe;e8 4Xϟ0gn,Ļ'`2=uR BKi$7ZpXLȱ<- Sa) mjB%3ɹ=TE/'%)RIHXWo-X)g~=:ô]hG =[_J"¼[JTis\:s:"_taWvT'kdDx".vYLR˶͖J1U(NTəܧHgkŬ'O馹\/h,ZF ƇXoMȏ:ƙAIS)]O= Q2P< m)aCy1Tt0,h9zo\P[*{S0݀ӛe`9l2Hqc as94Y G16<.9A؆dvv eQ Iy)SwK!7$!ڬTU6Yӌs q$FN68l1*Nf%|($ |c˼'P(,DHݶ+Zh~M"U?#ywW6x*DXԹrӤfWC90TYґ4\ ۝R&V0 hF&E@Fp*qË@v+)A ]thg+V%1=(?/wtnzi(H``)S G0>LG2zHa*~XZll'6iy5T{bqj@J JFxRajB׀< DĿ( *#3$18 dDg&"EMBc of[,鞆b?CC8bPS&lh;헪 ΔkKC#Áюfx_ש%Re7xx `K0rPHMI5t}c,*Ij/8}aH4ź¡#B A~%?x]=#? őHE|= f0wC˫OwZ)Cez\viiJCa_RIIr5\vd+`k]T#Ed H4dKRfb'\yDK9@)'Z^K-S`6U~Ť<AڞqeQN$@,g45A 7ȁWb֙BrX,9BɬO8Y ŕePsb)JH[`Dkt&`Z_b"2y&F++-b埛]sa"Ȕ2%;XAx0K4\,f̼nc2}ؽRv>q)ĦH|V^ e;K2ΕIQyXj-ۑ y@E~'5jgZU3߯}pvm-1 .Z˂(5A煮Q$XԠRYh)LZ~$n0j/ 1m¢N&r wN'i,UN"ȋH#*>v&4' *cH xkc6LR]M ȏ1]UTgb~JG,D♖d"XOGʱROm~f6D(%¹xo0aTe0m,\Z)jlJ\:411 1cКG&ۈ?/ɴTB=H1H*9 ~ތ/kĦ<AOlG1`$e] IOv5e* ߴ G/ '9vԩ؃J $ R{K{ =^9 UQ#a{ȶZiL0% TK:mmQ'dFpJp'fnS,J(bX){|rނ+ IwJiAd91 +6ڑ<")@8^\B g#JKnq| ԅZ-I,G"` iF͜mRA(5mpwPg)#Q;-r@ͧQΣm#HZ&.R1%$|ȉTc6-eȜekIf'K4#d>\8Wۀ-r% C'*dL^Y-C6(pUS]6pq۹" >tIl*V2SvX)%%J*П(&x!!)b)yC b!%OVgej9D)`1>|"B MD>.W-Mď!$ ⾫KO#ԐB v /g#MTz DMvV2R !#Y#Np37O1P/[uIU0ME(xERch:yȕl1u*BQ 5P'QVfNZYEZla,JVJ>|\<  **Ti"죫f?4U̔EX#h@c,]idݙI˜$ b %AFhTA&WVD(jxFF\C? IڅLE"S( j5mG6>0)vI`*ʥ>XFٱVF+糧t!2cBwK3)tR.om&~t4Ny84`[ b6O#q QcĀKT@wS_ƾHH(PD(uaMɘ1|GC)hq ,%CpswA)Ha57 b_ 0e(%i:E\hby) Cr"TĥGmR lfXiNQDeW`OL%'+x*B\zI!HBA|ܦF bIg\" M MK+TS, mJX6 :cRt $( ѷDNO^ W+,a!y##!J}"do RQȄ#,%--`KH+oddZ%ۏҟ0 e; 3c ڤW¿Grj~ԀI'22F%!*$ M,s#jrMRG## 5H+ķ_Ce?PР() =%%LJӰ]u Se P#妜[rq$ &du/C(=V9*$RL,x6FD!f2€ $iޔ6΢9K`